Prezentacja autorskiego skanera portów

Chciałbym Wam przybliżyć UNIX'owy skaner portów autorstwa Adama Zabrockiego. Jego poprawne wykorzystanie nie jest logowane przez systemy operacyjne tudzież systemy wykrywania włamań (IDS). Zostało zastosowane w nim parę ciekawych rozwiązań, ale zanim do nich przejdziemy krótkie przypomnienie na temat standardowych metod skanowania portów.

* Skanowanie TCP connect()

Metoda ta prosi system operacyjny o zestawienie połączenia z docelowym hostem za pomocą wywołania funkcji systemowej connect(). Funkcja ta służy do inicjowania połączenia sieciowego między gniazdem (socket) programu klienta i odległym gniazdem serwera, jest bardzo łatwa do wykrycia przez skanowany host. Systemy IDS bez problemu wykrywają sekwencyjne próby połączeń na różne porty z tego samego adresu źródłowego. Zaletą tej metody jest duża szybkość i niezawodność.

* Skanowanie TCP SYN

Technika tego skanowania cechuje się tym, że inicjacja połączenia nie jest do końca wykonana, czyli można to nazwać połowicznym otworzeniem połączeń TCP. Wygląda to tak, host źródłowy wysyła pakiet SYN (synchronize - ustanowienie połączenia TCP) tak jak by miało być otwarte prawdziwe połączenie i oczekuje na odpowiedź. Następnie serwer odpowiada przez SYN/ACK (acknowledge - potwierdzenie wymiany danych), odpowiedź pozytywna, pozwala na nawiązanie połączenia lub natychmiastowe jednostronne zamknięcie połączenia przez wysłanie pakietu z ustawiona flaga RST, co oznacza odpowiedź negatywną. Nawiązanie połączenia kończy się potwierdzeniem odebrania potwierdzenia, czyli wysłaniem przez stronę inicjującą połączenie pakietu ACK, my jednak wysyłamy FIN by nie nawiązać połączenia. Częściowe połączenie przeważnie nie jest rejestrowane przez systemy operacyjne, co jest niewątpliwie zaletą tej metody. Jest ona szybsza od TCP connect(). Do jej wad zalicza się to, że większość zapór ogniowych odnotowuje je, a także istnieje możliwość zablokowania w zależności od konfiguracji.

* Skanowanie TCP FIN

Metoda jest podobna do poprzedniej i zależna od implementacji stosu TCP, z tą różnicą, że na badany port wysyłany jest pakiet z flagą FIN - kończącą połączenie. Otwarty port zignoruje pakiet, a zamknięty odpowie RST. Jest to metoda trudna do wykrycia jak i do zablokowania.

* Skanowanie TCP XMAS

Sposób 'choinkowy' jest praktycznie taki sam jak poprzedni, różnicą są tylko ustawione bity kontrolne:

URG - (urgent) - pilny pakiet (z prawem piewrszeństwa)
PSH - (push) - żądanie natychmiastowego dostarczenia pakietu wyższej warstwy
FIN - (finalize) - koniec połączenia

Odpowiedź powinna być identyczna jak w przypadku FIN. Windows nie udziela prawidłowej odpowiedzi, nie trzyma się standardów więc nie reaguje tak jak mówią dokumenty RFC.

* Skanowanie TCP NULL

Nie ustawia żadnych flag (pole flag w nagłówku tcp zawiera 0). Zachowanie portów powinno być dokładnie takie samo jak poprzednio.

Wracając do udostępnionego programu, chciałbym przybliżyć Wam innowacje, które zostały w nim zaimplementowane:

1. RANDOMIZE PORTS

Większość IDS'ów podczas wykrywania skanowania porównuje czy wysyłane pakiety z jednego adresu IP nie są przypadkiem w rosnącej zależności, czyli np. skanowanie nie rozpoczyna się od portu 1, 2, 3 itd., jeśli tak - jest to ewidentnie skan. Aby rozróżnić czy to zagubiony pakiet SYN/ACK i po nim FIN, czy też jest to skanowanie typu SYN, sprawdzana jest liniowość. Jeśli IDS uzna, że to liniowość to jest to scan, jednak jeśli random to uznaje za zagubione pakiety i nie wykryje tego. (Tak robią słabe detektory.)

2. DECOY SCAN

Decoy scan obrał inną technikę, Adam używa do skanowania 46 adresów IP z klasy B z czego jeden jest naszym prawdziwym. W efekcie skanowana maszyna odbiera pakiety 46 różnych adresów IP, przez co albo zaloguje 46 adresów jednocześnie, czyli tak naprawdę nie wiadomo za którym IP schował się atakujący, bo jest ich 46, albo zaloguje kilka pierwszych, a resztę porzuci i nie będzie logować tylko doda informacje, że jest ich więcej.

3. SLOW SCAN

Czyli wysyłanie pakietów w zwiększonym odstępie czasowym. Z uwagi na to, że informacje na temat ruchu w sieci trzymane przez IDS'y mają swój czas ważności, a czas ważności pakietu w jądrze zazwyczaj jest o wiele większy niż ten w systemach wykrywania włamań możemy zmusić IDS'y do zapominania co było wcześniej 'na kablu'. Wygląda to tak, że pakiet jest wysyłany co 5 sekund i IDS'y uznają to jako samotne pakiety, które zagubiły się w medium, i nie powinny logować tego.

Przed tą techniką nie ma obrony, tylko firewalle - PIX'y można skonfigurować tak, aby pośrednio wykryły to na podstawie tego, że jak leci samotny pakiet SYN i odpowie jak powinien to spróbuje w czasie zregenerować połączenie zanim dostanie drugi pakiet, a że one nigdy nie istniało dostanie błąd, ale to już zaawansowana konfiguracja i wymaga bardzo dobrej znajomości. Jak sam Adam mówi to też da się oszukać np. nie łącząc ze sobą techniki SLOW z SYN, tylko SLOW z FIN.

Wszystkie techniki można ze sobą łączyć, czyli np.

SYN + DECOY + RANDOMIZE PORT + SLOW scan lub można jeden wyrzucić i będzie:
SYN + DECOY + SLOW

Podziękowania za możliwość publikacji swojego skanera oraz za wszelkie informacje dla Adama 'pi3' Zabrockiego.

Skaner jest dostępny pod tym adresem.