Ukrywanie skanowania


Metody ukrywania skanowania portów
Michał Kozak
Skanowanie ([3], [2])
Skanowanie jest to sondowanie docelowego systemu (sieci komputerowej lub hosta) w celu
jego rozpoznania (poznania topologii sieci komputerowej) i zebrania informacji dotyczących
uruchomionych usług (skanowanie portów danego hosta).
Podstawowe techniki skanowania:
" Ping Sweeps (testowanie aktywności hostów)
" Port Scans (skanowanie w poszukiwaniu otwartych portów danego hosta)
" Fingerprinting (metody określania systemu operacyjnego)
Skanowanie sieci komputerowej polega po prostu na sprawdzaniu aktywności hostów o adresach IP
z pewnego zakresu. Najprostszą metodą, ale również najłatwiej wykrywaną i najczęściej blokowaną
jest wykorzystanie w tym celu protokołu ICMP (metoda znana również jako ICMP sweeps  jest to
wykorzystanie popularnego pinga). Zwykle jednak jesteśmy w stanie poznać topologię
niechronionej części sieci tzw. demilitarized zone. Bardziej zaawansowanie techniki dostarczają
również informacji o funkcjonujących w danej sieci firewallach, a nawet pozwalają poznać ich
zasady filtrowania pakietów. Podstawowe metody skanowania sieci to: ICMP sweeps (wspomniany
powyżej), Broadcast ICMP, TCP sweep, UDP sweep. W przypadku dwóch ostatnich skanowanie
polega na wysyłaniu pakietów odpowiednio TCP/UPD na dobrze znane porty m. in. 21 (FTP), 22
(SSH), 23 (Telnet), 25 (SMTP), 80 (HTTP) (więcej informacji [2]).
Skanowanie portów polega na przeglądaniu kolejnych portów sieciowych aktywnego hosta w celu
określenia jakie porty są otwarte oraz jakie usługi na tych portach realizuje system. Skanowanie
takie można w najprostszy sposób zrealizować poprzez badanie rezultatów funkcji connect(...).
Funkcja ta służy do inicjowania połączenia sieciowego między gniazdem (socket) programu klienta
i odległym gniazdem serwera. Metoda ta ma podstawową wadę  jest bardzo łatwa do wykrycia
przez skanowany system. Systemy IDS (Intrusion Detection System) bez problemu wykrywają
sekwencyjne próby połączeń na różne porty z tego samego adresu zródłowego. Dlatego też bardzo
często stosuje się metody mające na celu ukrywanie skanowania portów w  szumie zwyczajnych
połączeń .
Ukrywanie skanowania portów
Wcześniej wspomniałem już o najprostszej metodzie skanowania portów  TCP connect().
Oczywistą wadą jest łatwość jej wykrycia i zablokowania. Często też gateway uniemożliwia
nawiązywania połączeń TCP z zewnątrz sieci. Zaletą jednak jest szybkość i możliwość wykonania
jej w systemach UNIX z uprawnieniami każdego użytkownika. Ulepszeniem tej metody jest metoda
znana jako TCP SYN. Modyfikacją w stosunku do TCP connect() jest wysłanie pakietu z ustawioną
flagą RST zaraz po otrzymaniu w drugiej fazie nawiązywania połączenia pakietu z flagami
SYN/ACK (port otwarty) albo RST/ACK (port zamknięty). Zaletą w stosunku do TCP connect()
jest zmniejszona wykrywalność. Metoda ta może jednak przypominać atak DoS SYN Flood dlatego
też duża liczba systemów IDS (np. Snort) jest w stanie skuteczne ją powstrzymać. Istnieją jednak
skuteczne metody ukrywania procesu skanowania. Większość wykorzystuje podstawową zasadę
(RFC 793) mówiącą, że każdy zamknięty port powinien odpowiedzieć pakietem z flagą RST na
każdy pakiet niezgodny z kolejnością nawiązywania połączenia TCP (three-handshake). [4]
"If the state is CLOSED (i.e., TCB does not exist) then all data in the incoming segment is
discarded. An incoming segment containing a RST is discarded. An incoming segment not
containing a RST causes a RST to be sent in response." (RFC793, str. 65)
FIN ([5], [4], [2], [6])
W metodzie tej wysyłane są na dany port pakiety TCP z ustawioną flagą FIN, która w
 normalnym połączeniu rozpoczyna jego zakończenie. Jeśli jednak połączenie nigdy nie było
nawiązywane to właśnie zgodnie z wcześniej wspomnianą zasadą (RFC 793) otwarty port powinien
zignorować taki pakiet, a port zamknięty odpowiedzieć pakietem RST. Jest to jednak metoda
zależna od implementacji stosu TCP. I tak, nie sprawdzi się w przypadku systemów Windows
95/NT, Cisco, BSDI, HP/UX, MVS oraz IRIX ([6], nawet przy otwartym porcie odpowiadają
pakietem RST), których stos TCP nie jest w pełni zgodny z RFC 973. Ma to jednak swoją zaletę.
Dostarcza nam to informacji o prawdopodobnym systemie operacyjnym (przykładowo jeśli
skanowanie TCP SYN wskaże jakieś porty otwarte a FIN wykaże, że wszystkie porty są zamknięte
to skanowany system to prawdopodobnie Windows). Metoda FIN jest stosunkowo trudna do
wykrycia i zablokowania.
System IDS aby wykrywać skanowanie FIN musi w jakiś sposób zapamiętywać prawidłowo
rozpoczęte połączenia TCP i na tej podstawie odrzucać pakiety FIN dla których połączenie nigdy
nie zostało nawiązane. Gromadzenie takich informacji na pewno powoduje spadek jego wydajności
oraz naraża go na ataki typu DoS. Urządzenia tego typu są również droższe.
Można zatem uznać że skanowanie FIN jest metodą stosunkowo dobrze ukrywającą
agresora. Jednak wykorzystana jako jedyna metoda skanowania nie zawsze da wiarygodne
informacje, ze względu na niezgodność implementacji stosu TCP niektórych systemów
operacyjnych z RFC 793.
Na rysunku pierwszym (od lewej) zobrazowana jest sytuacja gdy port jest zamknięty. Drugi
natomiast pokazuje sytuację kiedy skanowany host ma otwarty port 23.
Opcje uruchamiające skanowanie typu FIN w nmap [7]:
nmap -sF 192.168.1.10
NULL, XMAS, YMAS ([1], [4], [7], [8])
Działanie poniżej scharakteryzowanych metod jest bardzo podobne do metody FIN. Różnicą
są jedynie ustawione flagi w pakietach wykorzysty6wanych podczas skanowania hosta.
" XMAS (zwane również  choinką ) to skanowanie przy użyciu pakietów z ustawionymi
flagami: URG, ACK, PSH, RST, SYN i FIN. Na tak udziwniony pakiet port zamknięty
powinien odpowiedzieć pakietem RST, a otwarty zignorować taki pakiet. Metoda ta ma tą
samą przypadłość co FIN. Niektóre systemy operacyjne odpowiadają pakietem RST
również na otwartym porcie.
nmap -sX 192.168.1.10
Czasem spotykana jest odmiana tej metody wysyłająca segment z nieużywaną flagą 0x40.
Poniższy przykład pokazuje jak za pomocą hping2 wysłać taki pakiet XMAS na port 25. [8]
hping2 -X -p 25 192.168.1.10
" Metoda NULL do skanowania wykorzystuje pakiety, które nie mają ustawionej żadnej flagi.
Zachowanie portów powinno być dokładnie takie samo jak poprzednio.
nmap -sN 192.168.1.10
" Kolejną modyfikację pakietu wykorzystywanego podczas skanowania wprowadza metoda
YMAS. Wysyłany jest segment z ustawioną nieużywaną flagą 0x80.
hping2 -Y -p 25 192.168.1.10
Przedstawione już metody skanowania: FIN, XMAS, NULL, YMAS na pewno są trudniejsze
do wykrycia niż TCP connect() czy TCP SYN przez co skanowanie może stać się niezauważone,
niewykryte przez systemy IDS lub firewalle. Przy omawianiu metody FIN wspomniałem, że jednak
istnieje sposób na wykrywanie tego typu niewłaściwych pakietów. Możliwości odfiltrowywania
takich pakietów mają firewalle z inspekcją stanu (statefull inspection) niekiedy zwane też firewalle
obwodów. Posiada on możliwość całkowitego śledzenia sesji protokołów warstwy transportowej.
Dzięki temu  wie czy np. jakiś pakiet FIN należy do otwartego połączenia, czy należy go
odfiltrować i dokonać odpowiedniego wpisy w logach.
Testowałem przedstawione metody używając nmap. Skanowanie hosta z zainstalowanym
Windows XP Professional nie przyniosło żadnych interesujących wyników (w tym wypadku
implementacja stosu TCP niezgodnie ze standardem przyniosło korzyść  nie otrzymałem żadnych
konkretnych informacji o hoście docelowym), więc zastosowałem prostszą metodę, łatwą do
wykrycia TCP connect() i okazało się, że cztery porty są jednak otwarte. Natomiast po skanowaniu
systemu z rodziny Linux otrzymałem następujące wyniki (użyłem metody FIN):
nmap -sF 192.168.5.233
Starting Nmap 4.03 ( http://www.insecure.org/nmap )
Interesting ports on 192.168.5.233:
(The 1666 ports scanned but not shown below are in state:
closed)
PORT STATE SERVICE
22/tcp open|filtered ssh
53/tcp open|filtered domain
80/tcp open|filtered http
113/tcp filtered auth
135/tcp open|filtered msrpc
445/tcp open|filtered microsoft-ds
1080/tcp filtered socks
8080/tcp open|filtered http-proxy
MAC Address: 00:02:B3:8B:60:F9 (Intel)
Nmap finished: 1 IP address (1 host up) scanned in 8.422
seconds
Na powyższym listingu stan  open | filtered oznacza porostu, że nie otrzymano pakietu RST, co
może oznaczać, że port jest otwarty lub pakiet porostu został odfiltrowany. Ciekawostką jest, że
namp na podstawie adresu MAC podał producenta karty sieciowej (w tym wypadku jest to Intel).
W dalszej części omówię metody, których głównym celem jest uniemożliwienie
zidentyfikowania agresora nawet jeśli wykryliśmy skanowanie i dysponujemy odpowiednimi
danymi z przechwyconych pakietów.
FTP bounce ([1], [6])
Jest to bardzo ciekawa metoda ukrywania adresu nadawcy pakietów skanujących. Polega
ona na wykorzystaniu serwera FTP. Jak wiadomo podczas połączenia wykorzystuje on dwa porty
do różnych zadań: port 21 jako połączenie do kontrolowania, wysyłania komend, port 20 jako
połączenie do przesyłania danych. Protokół FTP wykorzystuje polecenie PORT do kontrolowania
połączenia, za jego pomocą ustawiany jest port oraz adres IP klienta łączącego się z serwerem.
Można zatem wykorzystać to polecenie i ustawić numer portu i adres IP hosta, którego chcemy
przeskanować (np. PORT 192,168,5,10,A,B gdzie port jest obliczany: A + 256*B). Jeśli
tylko serwer FTP nie porównuje adresu IP hosta wydającego mu polecenie PORT z adresem
ustawianym w tym poleceniu ta metoda zakończy się powodzeniem.
Jeśli już udało nam się ustawić pożądany adres hosta, oraz port który chcemy sprawdzić
wykonujemy jakąś operację, np. LIST co spowoduje próbę nawiązania połączenia przez serwer FTP
pod wskazany przez nas wcześniej adres i port w celu wysłania wyników polecenia. Jeśli zwrócony
zostanie komunikat o kodzie 150 lub 266, będzie to oznaczało, że interesujący nas port jest otwarty,
a jeśli komunikat będzie oznaczony kodem 426 to port jest zamknięty.
Nmap jest na tyle potężnym narzędziem, że może takie skanowanie przeprowadzić
automatycznie:
nmap -b user:haslo@ftp.domena.com:nr_portu host_docelowy
Poniższy rysunek w sposób poglądowy przedstawia przebieg całego procesu.
W 2004 roku przeprowadzono test na 2491 serwerach FTP. Okazało się, że 193 akceptowało
anonimowe połączenia wśród których 10 zezwalało na ustawienie poleceniem PORT nieswojego
adresu IP!!!
IP ID idle scan ([1], [4], [6])
Jest to następna metoda, która wykorzystuje inny, pośredniczący host do skanowania
naszego celu. Jej podstawą jest błąd, a raczej niedbałość producentów systemów operacyjnych o
odpowiednią losowość pola ID w nagłówku datagramu IP (Windows NT inkrementuje to pole
stopniowo o 256, Linux o 1, jedynie OpenBSD losuje tą wartość przez co nie może być
wykorzystany w tej metodzie). Agresor działając na komputerze A, najpierw musi odnalezć w sieci
host C nie przejawiający żadnej aktywności (tzw. host niemy  dumb host), nie wysyłający i nie
odbierający żadnych pakietów. Kolejnym krokiem jest wysłanie kilku pakietów ICMP ECHO
REQUEST (ping) do C i kontrola pola ID pakietów od niego otrzymanych. W przypadku np.
Linuxa wartości tego pola powinny rosnąć o 1. Od tej pory proces nadzorowania pola ID musi być
prowadzony ciągle. Następnie agresor (A) wysyła pakiet o adresie docelowym hosta do
przeskanowania (B), adresie zródłowym C i ustawionej fladze SYN. Host B może odpowiedzieć na
dwa sposoby (do hosta C):
" SYN/ACK jeśli port jest otwarty w trybie nasłuchu. Host C odebrawszy taki pakiet i nie
wiedząc nic o inicjowaniu połączenia z B odpowie segmentem z flagą RST, a więc podczas
kontroli pola ID w pewnym momencie zaobserwujemy jego zwiększenie o wartość większą
niż 1 (poniżej moment ten został wyróżniony).
60 bytes from C: seq=17 ttl=64 id=x time=96 ms
60 bytes from C: seq=18 ttl=64 id=x+1 time=80 ms
60 bytes from C: seq=19 ttl=64 id=x+3 time=83 ms
60 bytes from C: seq=20 ttl=64 id=x+4 time=94 ms
60 bytes from C: seq=21 ttl=64 id=x+5 time=92 ms
60 bytes from C: seq=22 ttl=64 id=x+6 time=82 ms
" RST jeśli port jest zamknięty. Wtedy host C zignoruje taki pakiet co nie spowoduje już
gwałtownego (większego niż 1) wzrostu pola ID w wysyłanych przez niego pakietach.
60 bytes from C: seq=80 ttl=64 id=x time=96 ms
60 bytes from C: seq=81 ttl=64 id=x+1 time=82 ms
60 bytes from C: seq=82 ttl=64 id=x+2 time=60 ms
60 bytes from C: seq=83 ttl=64 id=x+3 time=75 ms
60 bytes from C: seq=84 ttl=64 id=x+4 time=91 ms
60 bytes from C: seq=85 ttl=64 id=x+5 time=60 ms
Narzędzia jakie można do tego celu wykorzystać to nmap jak i również napisane do tego celu
narzędzie idlescan (http://www.securiteam.com/tools/3G5PWR5QAM.html). Poniżej krótki
przykład użycia nmap'a.
nmap -sI host_niemy_C host_docelowy_B
Poniższy rysunek przedstawia schematycznie przebieg całego procesu.
Decoy ([1])
Metoda ta polega na wysyłaniu pakietów skanujących z różnymi adresami zródłowymi.
Sprawia to wrażenie, jakbyśmy skanowali z większej liczby hostów równocześnie. Oczywiście
wśród wielu adresów zródłowych powinien się znajdować także nasz adres. Nie ma jednak prostej
metody odgadnięcia, który ze skanujących adresów jest akurat naszym adresem. Program nmap
wspomaga wykonywanie skanowania tą właśnie metodą:
nmap -sS -D 10.0.0.1,10.0.0.2,ME,10.2.3.1 192.168.5.11
Powyższe polecenie spowoduje skanowanie metodą TCP SYN (opcja -sS, oczywiście można
użyć innych wcześniej omówionych metod) komputera o adresie 192.168.5.11, przez komputery o
adresach znajdujących się na liście decoy (po opcji -D). ME zastępowane jest adresem naszej karty
sieciowej. Jeśli nie wpiszemy nigdzie ME nasz adres będzie losowo wplatany w listę.
Jeśli adresów będzie wystarczająco dużo to niektóre systemy wykrywające tego typu
działania nawet nie podadzą naszego adresu IP w raporcie. Jednak ważne jest to, aby podszywać się
pod istniejące hosty, ponieważ jeśli administrator skanowanego systemu (albo jakiś system
automatyczny) sprawdzi istnienie adresów z jakich dokonywane było skanowanie i okaże się, że
tylko jeden jest aktywny to na pewno będzie to nasz.
Slow scan ([1], [7])
Slow scan polega na skanowaniu hosta pakietami wysyłanymi odpowiednio rzadko, tak aby
nie budziły one podejrzeń. Pomaga to oszukać systemy IDS, które zaliczają takie pakiety jako
 zagubione w sieci (dopóki nie przekroczą one pewnej ilości na jednostkę czasu nie są uznawane
za podejrzane).
Jeśli na przykład będziemy wysyłać jeden pakiet na 15 min. to raczej nie zostaniemy
zauważeni przez system IDS. Jednak w tym przypadku skanowanie wszystkich 65535 portów
zajmie nam prawie dwa lata (683 dni). Właśnie z uwagi na to powinniśmy zawęzić nasze
skanowanie tylko do interesujących nas portów (opcja -p w nmap określa porty do skanowania).
W programie nmap możemy sterować szybkością wysyłanych pakietów za pomocą opcji -T,
po której podajemy sposób wysyłania pakietów:
" Paranoid (0)  5 min. pomiędzy wysyłanymi pakietami
" Sneaky (1)  15 sek. pomiędzy wysyłanymi pakietami
" Polite (2)  0,4 sek. pomiędzy wysyłanymi pakietami
" Normal (3)  pakiety wysyłane są tak szybko jak to możliwe, ale bez przeciążania sieci (jest
to ustawienie domyślne)
" Aggressive (4)  maksymalnie opóznienie pomiędzy pakietami to 10ms przy czym jeśli na
wysłany pakiet nie nadejdzie odpowiedz w ciągu 1.25s to następuje ponowienie próby 
wysłanie go ponownie (taka sytuacja może wystąpić co najwyżej 6 razy)
" Insane (5) - maksymalne opóznienie pomiędzy pakietami to 5ms przy czym jeśli host nie
odpowie na wysłany pakiet w ciągu 300ms to następuje ponowne jego wysłanie (taka
sytuacja może się powtórzyć co najwyżej 2 razy).
Przykłady:
nmap -sS -T 4 192.168.1.10
nmap -sS -T Polite 192.168.1.10
Distrybuted/coordinated scan ([1])
Kolejną metodą ukrywania się przed systemami IDS jest dokonywanie wysyłania pakietów
skanujących z wielu komputerów równocześnie. Oczywiście taki skanowanie musi być w jakiś
sposób zsynchronizowane pomiędzy tymi hostami. Przyjmując, że mielibyśmy do dyspozycji 256
takich komputerów skanowanie opisane w poprzednim przypadku (pojedynczy host wysyła jeden
pakiet na 15 min.) trwałoby juz tylko 64 godziny.
Fragmented packets ([1], [6], [7])
Technika ta polega na fragmentacji nagłówka TCP na kilka mniejszych pakietów i jest
głównie wykorzystywana w połączeniu z metodami FIN oraz SYN. Taka fragmentacja sprawia
niemały problem systemom IDS. Aby stwierdzić czy dany pofragmentowany pakiet zagraża
bezpieczeństwu sieci musi on zostać połączony (defragmentacja). Nie zawsze IDS może pozwolić
sobie na długotrwałe przechowywanie w pamięci kolejno otrzymywanych fragmentów, gdyż
znacznie może to obniżyć jego wydajność. W takiej sytuacji pakiety takie nie zostają wykryte,
pozostajemy w ukryciu.
Fragmentację pakietów można włączyć w nmap opcją -f (lub --mtu).
nmap -sS -f Polite 192.168.1.10
Bibliografia
[1] Karol Krysiak  Sieci komputerowe  Kompedium , Helion 2003
[2] Jakub Sorys, Dorota Szczpanik  Skanowanie portów
http://micek.no-ip.com/~sektorvx/download/044.pdf
[3] agresor, jimmy  Rodzaje i klasyfikacja włamań oraz ataków internetowych 
http://www.narf.shl.pl/content/view/56/26/
[4] Dominik Kruk  Lustracja przez Internet
http://www.pckurier.pl/archiwum/art0.asp?ID=5442
[5] http://www.auditmypc.com/freescan/readingroom/port_scanning.asp
[6] Tomasz Wendlandt  Skanowanie i Fingerprinting
http://www.linuxpub.pl/administracja/skanowanie_fingerprinting.html
[7] Nmap Reference Guide (Man Page)
http://www.insecure.org/nmap/man/
[8] hping2 man page
http://www.hping.org/manpage.html
http://hping.org
[9] James Messer  Secrets of Network Cartography: A Comprehensive Guide to nmap
http://www.networkuptime.com/nmap/index.shtml


Wyszukiwarka