skanowanie i fingerprinting XPKF6BA5XZMBVYEJ7SZ6ODKG3OBI2DG5W2DYQ2Y


Skanowanie i Fingerprinting  

0x01 graphic

Skanowanie i Fingerprinting

Tomasz Wendlandt juggler@cp.pl
lipiec/sierpień 2000
v1.0

Dokument ten powstał na potrzeby wykładu prowadzonego przeze mnie dla PLUG Poznań.

[web]:: http://plug.poznan.mtl.pl/ [email]:: plug@poznan.mtl.pl

User Datagram Protocol (UDP)

UDP jest protokołem zapewniającym procedury, które umożliwiają wysyłanie wiadomości z minimalnym nakładem mechanizmów do tego potrzebnych.UDP daje aplikacją bezpośredni dostęp do usług rozsyłania datagramów, podobnych do usług oferowanych przez IP. UDP nie posiada żadnych mechanizmów umożliwiających kontrole czy wysyłane dane dotarły poprawnie do miejsca przeznaczenia czy też nie zostały powtórnie wysłane.UDP do określenia aplikacji nadającej i odbierającej dane wykorzystuje pierwsze słowo nagłówka wiadomości, zawierające numery portu źródłowego i portu przeznaczenia transmisji.

bity -----> 0 8 16 24 32

+--------+--------+--------+--------+

| Port | Port |

| źródłowy | przeznaczenia |

+--------+--------+--------+--------+

| | |

| Długość | Suma kontrolna |

+--------+--------+--------+--------+

| |

| początek danych |

+-----------------------------------+

format nagłówka UDP

Wszystkie pola mają 16 bitów.

Transmission Control Protocol (TCP)

TCP jest protokołem połączeniowym, działającym na strumieniach bajtów. Posiada on mechanizm PAR (Positive Acknowledgment with Retransmission), czyli mechanizm potwierdzenia z retransmisją.PAR polega na wysyłaniu danych dopóki nie otrzyma wiadomości, że wysłane dane przeszły bezbłędnie.Blok danych, który wymieniają między sobą współpracujące moduły TCP nazywa się segmentem.

bity --> 0 1 2 3

--> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Port źródłowy | Port docelowy |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Numer sekwencji |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Numer potwierdzenia |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Offset| |U|A|P|R|S|F| |

| danych|Zarezerwo- |R|C|S|S|Y|I| Okno |

| | wane |G|K|H|T|N|N| |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Suma kontrolna | Pilny wskaźnik |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Opcje | Puste |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| dane |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

formatu nagłówka segmentu TCP

handshake

TCP jest protokołem połączeniowym.Ustanawia logiczne połaczenie pomiędzy komunikującymi się hostami.Przed właściwą transmisją hosty wymieniają komunikaty kontrolne - handshake.TCP stosuje potwierdzenie trójpoziomowe (three-way handshake), ponieważ podczas ustalania połączenia wymieniane są trzy segmenty kontrolne.

host A host B

+------------+ +------------+

| SYN ----|------------|-----> |

| | | | |

| | | SYN,ACK |

| | | | |

| <------|------------|------ |

| | | | |

| ACK,dane | | |

| |------|------------|-----> |

| | | początek |

| | | transmisji |

+------------+ +------------+

tree-way handshake

Nawiązujący połączenie host A wysyła do hosta B segment z ustawionym bitem SYN ("numer sekwencji synchronizującej").Segment ten informuje host B o tym, iż host A chce nawiązać połączenie z tym pierwszym oraz informuje jaki będzie początkowy numer sekwencji przesyłanych danych.(Numer sekwencji to liczba kolejnego wysłanego segmentu, pozwala ona ustawić przychodzące dane w odpowiedniej kolejności) Host B odpowiada hostowi A segmentem z ustawionymi bitem potwierdzenia ACK i synchronizacji SYN, potwierdzając odbiór segmentu od A i informując go od jakiego numeru sekwencyjnego będzie odliczał wysłane przez siebie dane.Na koniec host A wysyła do hosta B segment potwierdzający odbiór pakietu od hosta B (ACK), zawierający pierwsze przesyłane dane. Po takiej wymianie segmentów TCP w systemie wie, że zdalny TCP działa i jest gotów do odbioru danych.Dane mogą zostać przesłane zaraz po nawiązaniu połaczenia.Po zakończeniu transmisji hosty wymieniają trzy segmenty potwierdzające z ustawionym bitem FIN (koniec danych), co powoduje zerwanie połaczenia pomiędzy nimi.

Podsumowanie

TCP interpretuje wysłane dane jako ciągły strumień bajtów, a nie jako niezależne pakiety.Z tego powodu ważne jest zachowanie kolejności w jakiej bajty zostaną wysłane i odebrane.Do tego celu służą umieszczone w nagłówku pola numer sekwencyjny i numer potwierdzenia.Dla standardu TCP nie jest istotne, od jakiej liczby system rozpocznie numerację bajtów, ponieważ każdy system wybiera sobie sam liczbę początkową.Żeby kolejność bajtów u nadawcy i odbiorcy była identyczna, muszą znać wybrane przez siebie numery początkowe.Numery te wymieniane są w segmentach potwierdzenia z ustawionym bitem SYN.Pole numer sekwencji w segmencie SYN zawiera ISN (Initial Sequence Number), czyli początkowy numer sekwencji, od którego numerowane są przychodzące bajty danych.Ze względów bezpieczeństwa ISN powinien być wybrany losowo, często jednak nadaje mu się wartość 0.

Bajtom danych nadane są numery kolejne począwszy od ISN, a pierwszy bajt danych ma numer ISN + 1.Numer sekwencji w nagłówku segmentu danych określa pozycję w strumieniu danych pierwszego bajtu w przesyłanym segmencie.Jeżeli na przykład pierwszy bajt w strumieniu danych miał numer 1 (ISN = 0) i przeszło już 4000 bajtów danych to pierwszy bajt w kolejnym segmencie będzie bajtem 4001, a numer sekwencji wyniesie 4001.

Segment z ustawionym bitem potwierdzenia (ACK) pełni dwie funkcje. Potwierdza otrzymanie danych i steruje ich przepływem.Informuje on nadawcę w jakim stanie doszły dane oraz ile odbiorca może ich jeszcze przyjąć.Liczba w polu numer potwierdzenia zawiadamia nadawcę jaki numer sekwencyjny odbiorcy spodziewa się znaleźć w kolejnym segmencie danych. Standard nie wymaga potwierdzenia każdego segmentu danych.Segment potwierdzający poświadcza odbiór wszystkich danych od początku transmisji. Jeżeli na przykład pierwszy wysłany bajt danych miał numer 1 a do tej pory prawidłowo odebrano 2000 bajtów to liczba w polu numer potwierdzenia będzie wynosiła 2001.

Pole okno zawiera liczbę bajtów, które może przyjąć odbiorca (wielkość ta nazywa się również oknem).Jeżeli odbiorca jest w stanie przyjąć jeszcze 6000 bajtów, okno będzie miało wartość 6000.Nadawca może wysyłać segment tak długo, dopóki sumaryczna liczba wysyłanych bajtów nie przekroczy wartości okna.Za pomocą okna odbiorca steruje przepływem danych pomiędzy nim i nadawcą.Okno o wartości 0 nakazuje nadawcy wstrzymanie transmisji do momentu, dopóki odbiorca nie prześle segmentu z oknem o niezerowej wartości.

|-------------okno długości 6000 bajtów--------------------|

| |

| | |

|-dane odebrane--| |sb | |

| | | | |

|1_____|1001_____|2001_____|3001_____|4001_____|5001_____|6001_____|7001____|

| | |

| | |

| | |

poczatkowy numer numer potwierdzenia numer sekwencyjny

sekwencyjny 0 2001 4001

strumień danych TCP

sb - segment bieżący

Na rysunku przedstawiony jest strumień danych TCP.Rozpoczyna się on od ISN = 0.Odbiorca otrzymał i potwierdził odbiór 2000 bajtów.Co oznacza, że wartość numeru potwierdzenia jest równa 2001.Wielkość bufora odbiorcy zezwala na przyjęcie jeszcze 6000 bajtów.Co oznacza, że wielkość okna jest równa 6000. Następnie odbiorca przesyła blok danych długośći 1000 bajtów, rozpoczynający się numerem sekwencyjnym 4001.Nie otrzymał on potwierdzenia odebrania danych od 2001 do 4000, pomimo to kontynuuje nadawanie, aż nie przekroczy limitu określonego wartością okna.Jeżeli nadawca zapełni okno i nie otrzyma w określonym czasie potwierdzenia od odbiorcy, ponowi transmisję danych od pierwszego bajtu, dla którego nie otrzymał potwierdzenia.Czyli w naszym przypadku będzie to bajt 2001.

Techniki skanowania

- Ping scanning

ping za pomocą protokołu ICMP wysyła pakiet z zapytaniem o echo.Host, który jest odpytywany nie musi mieć otwartych portów, ponieważ stos TCP/IP wymaga aby odpowiedział na takie zapytanie nawet, gdy nie dostarcza żadnych usług.Wydawać się może, że wszystkie hosty, które mają poprawnie skonfigurowany routing odpowiedzą na ping i w ten sposób dowiemy się czy w ogóle istnieją.Jednak tak nie jest można ukryć się przed pingiem, a jak to zrobić pokarzę później.

- TCP connect() scan

Jest to podstawowa i najprostsza metoda skaningu.Używa ona funkcji systemowej connect() do nawiazania pełnego połączenia z interesującymi nas portami. Jeżeli skanowany port jest otwary, wówczas dochodzi do połączenia.W przeciwnym razie oznacza to, że dany port nie jest osiągalny czyli żadna usługa nie pracuje na nim.Zaletą TCP connect() jest to, iż nie potrzebujesz uprawnień administratora, aby z niej korzystać oraz jest to w miarę szybkie rozwiązanie Natomiast wadą jest łatwe wykrycie takiego skanu.W logach pozostaje wyraźny ślad.

- TCP SYN scan

Często nazywa się również tą technikę half-open, ponieważ korzystając z niej nie dochodzi do pełnego połączenia TCP.Osoba wykonująca skaning wysyła segment z ustawionym bitem SYN do skanowanej maszyny, tak jak ma to miejsce podczas próby nawiązania normalnego połączenia.Jeżeli skanowany host odpowie segmentem z ustawionym bitem SYN/ACK oznacza to, że dany port na tej maszynie jest otwarty.Jeżeli otrzymamy segment z ustawionym bitem RST oznacza to, że port jest niedostępny.Nie chcąc nawiązać połączenia tak jak ma to miejsce w TCP connect(), do skanowanej maszyny wysyłany jest segment z ustawionym bitem RST, który nakazuje kernelowi zerwać połączenie.Ta technika jest lepsza od TCP connect(), ale również małym nakładem pracy możemy ją wykryć, poza tym chcąc z niej korzystać potrzebne są uprawnienia roota.

- TCP FIN scan

Inaczej stealth scanning, polegający na wysyłaniu segmentów z ustawionym bitem FIN.Zgodnie z RFC 793 otwarte porty nie odpowiedzą na FIN, natomiast te porty które są zamknięte muszą odpowiedzieć bitem RST.Technika ta jednak nie sprawdzi się w przypadku Windows 95/NT jak i Cisco, BSDI, HP/UX, MVS oraz IRIX.Dlaczego tak jest ? Zapewne ktoś postanowił nie brać pod uwagę RFC i samemu "lepiej" to zrobić.Plusem w takiej sytuacji jest sposób odróżnienia Windows od innego OSa.Na przykład FIN scanning maszyny pokazuje, że wszystkie porty na niej są zamknięte, a SYN scanning pokazał, iż pewne porty są otwarte. Jest to wówczas prawdopodobnie Windows.W innym przypadku, gdy skanujemy maszynę techniką FIN i pewne porty są otware mamy pewność, iż nie jest to Windows.Tak jak w poprzednim przypadku musimy mieć uprawnienia administratora, by korzytać z FIN scanningu.

- FTP bounce attack

Podczas skanowania tą techniką skaner sprawdza czy serwer jest podatny na atak typu FTP bounce.Atak ten polega na wykorzystaniu pewnej ciekawej cechy protokołu FTP.Otóż podczas przesyłania danych FTP wykorzystuje dwa porty do różnych zadań.Port 21 jest wykorzystywany do przesyłania informacji między naszym hostem, a hostem odległym, czyli na tym porcie jest połączenie kontrolne.Natomiast port 20 jest wykorzystywany do przesyłania danych.Protokół FTP wykorzystuje polecenie PORT do kontrolowania połączenia, które informuje o porcie oraz IP klienta łączącego się z serwerem.Jeżeli za pomocą PORT wyślemy informację do serwera, że numerem portu oraz IP klienta to nasz obiekt skanu wówczas serwer, z którym się połączyliśmy wyśle dane na wskazany przez nas port ofiary.Następnie jeśli serwer, z którym się łączymy otrzyma odpowiedź informującą o błędzie od skanowanego hosta wiemy, iż ten port jest zamknięty.W przeciwnym razie przypuszczamy, że port jest otwarty.Ta technika sprawdza się tylko, gdy serwer FTP nie porównuje adresu IP przesłanego przez polecenie PORT z adresem IP połączenia kontrolnego.

- UDP scan

Ta technika skanowania polega na sprawdzeniu, które porty UDP są dostępne. Ponieważ w UDP nie ma handshake, tak jak to ma miejsce w TCP, trudniej określić, które porty są otwarte.W tej metodzie posyła się pakiet UDP do każdego portu badanej maszyny i czeka na odpowiedź.Jeżeli otrzymamy komunikat ICMP_PORT_UNREACH, wówczas wiemy, że sprawdzany port jest zamknięty.W przeciwym razie, gdy nie otrzymamy takiej wiadomości port jest otwarty lub jest to port za firewallem, ponieważ w takim przypadku również nie otrzymamy odpowiedzi.Ta technika może być wyjątkowo wolna jeżeli nasz obiekt starań posłuchał rady z RFC 1812 (sekcja 4.3.2.8) i ograniczył tempo wysyłania wiadomości ICMP oznajmujących bład.W kernelu 2.2.x jest to zdefiniowane w net/ipv4/icmp.c.Oczywiście Microsoft i jego asy nie wiedzą co to RFC i ich to ograniczenie nie dotyczy, dlatego Windowsa skanuje się znacznie szybciej. Uprawnienia roota są niezbędne do korzystania z UDP scanningu.

- ACK scan

Skanowanie tą metodą służy głównie do sprawdzania firewalli.Dzięki tej technice możemy określić czy firewall jest typu stateful, czy też zwykłym filtrem pakietów blokującym pakiety z ustwawionym bitem SYN.Pomysł polega na tym, iż wysyłane są pakiety z ustawionym bitem ACK wraz z losowo wyglądającym numerem potwierdzenia.Jeżeli wróci do nas pakiet z RST wówczas taki port uważa się za niefiltrowany, a jeżeli otrzymujemy ICMP unreachable, lub też żaden komunikat, port uznaje się za filtrowany.Zwykły użytkownik nie może korzystać z tej metody, potrzebne są uprawnienia admina.

- Window scan

Jest to technika bardzo podobna do ACK scanningu.Różnica polega na tym, iż czasami dzięki wielkości okna (w protokole TCP), a właściwie różnym ich wielkością można określić czy port jest otwarty.Oczywiście poza tym czy port jest filtrowany czy też nie.Jak podaje Fyodor w dokumentacji do nmap głównie systemy, które są na to podatne to: Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX, VxWorks oraz pewne AIXy.Linux 2.2.x nie jest podatny, nie wiem jak z innymi wersjami kernela. Oczywiście uprawnienia roota wymagane.

- Reverse ident

Ta technika działa podobnie jak TCP connect().Również nawiązuje pełne połączenie z hostem, a gdy już to zrobi stara się za pomocą protokołu ident sprawdzić kto jest właścicielem procesu słuchającego na danym porcie. Ta technika nie będzie działać jeżeli skanowany host nie ma uruchomionego demona ident.

- Fragmentacja

Istnieje też technika polegająca na fragmentacji pakietów i jest wykorzystywana w SYN i FIN scanningu.Polega ona na fragmentacji nagłówka TCP na kilka mniejszych pakietów, zmniejszając tym szanse na odrzucenie go przez firewall.Tak jak poprzednio nie można skanować tą metodą będąc userem.

- ip.id

Autorem tej techniki jest antirezer.Największą zaletą ip.id dla skanującego jest możliwość sfałszowania pola source address, dzięki czemu w logach skanowanego hosta nie pojawi się nasz adres.Niestety, aby móc z tej techniki korzystać potrzebny nam będzie jeszcze jedne host nie wysyłający pakietów, czyli poprosu maszyna stojąca sobie cicho w Sieci :-).Jak sprawdzić czy host nie wysyła w danej chwili pakietów ? Można to zrobić za pomocą programu hping2 [1], również autorstwa antirezera.W dokumentacji tego programu jest dokładnie opisane jak to zrobić, a najważniejszą rzeczą jest pole id, które zwiększając swoją wartość o +1 (id=+1) inforuje, że dana maszyna pomiędzy zapytaniami od naszego hosta nie wysłała żadnych innych pakietów.

# hping B -r

HPING B (eth0 xxx.yyy.zzz.jjj): no flags are set, 40 data bytes

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=0 ttl=64 id=41660 win=0 time=1.2

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=1 ttl=64 id=+1 win=0 time=75 ms

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=3 ttl=64 id=+1 win=0 time=90 ms

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=4 ttl=64 id=+1 win=0 time=91 ms

60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=5 ttl=64 id=+1 win=0 time=87 ms

Następnie z naszego hosta podszywając się pod host stojący w Sieci "cicho", wysyłamy pakiet z ustawionym bitem SYN na port maszyny, która jest naszym celem.Znów można to zrobić za pomocą hping2 [1].Następnie cel naszego skanowania odpowie maszynie pod którą się podszywamy pakietem z ustawionymi bitami SYN/ACK jeżeli port jest otwarty lub pakietem z ustawionym bitem RST, jeżeli sprawdzany port jest zamknięty.Co to znaczy dla nas ? Otóż jeżeli host pod który się podszywamy otrzyma pakiet z SYN/ACK wyśle pakiet z ustawionym bitem ACK, a jeżeli otrzyma pakiet z RST nic nie wyśle.Oznacza to tyle, że jeżeli port na skanowanym hoscie jest otwarty, to wtedy host pod który się podszywamy wyśle o jeden pakiet więcej.Co możemy sprawdzić przy pomocy hping2 [1].(pole id zwiększy się o 2, id=+2).

Próby zabezpieczenia się przed skanowaniem

Wszystkie techniki opisane wyżej, poza ip.id, są zaimplementowane w skanerze nmap [2].Skanerem, który wykorzystuje technikę ip.id jest na przykład idlescan [3].Dobra teraz trochę o tym jak możemy się zabezpieczyć przed skanowaniem.Jeżeli chodzi o program ping, możemy uciszyć naszą maszynę tak, aby nie odpowiadała na ICMP echo request na przykład za pomocą filtra pakietów.

Linux 2.0: # ipfwadm -I -a deny -P icmp -S 0.0.0.0/0 8

Linux 2.2: # ipchains -I input -p ICMP --icmp-type echo-request -j DENY

Linux 2.4: # iptables -I INPUT -p ICMP --icmp-type echo-request -j DROP

Skan TCP connect() zostanie wykryty i pozostawi wyraźny ślad w logach nawet, gdy nic nie zmieniałeś w swojej dystrybucji.Natomiast jeżeli chcemy wykryć próby skanowania innymi technikami musimy zastanowić się nad instalacją dodatkowego softu.Bardzo populary jest program scanlogd [4] autorstwa Solar Designera, który wykrywa i loguje skany, ale im nie zapobiega.Potrafi to natomiast PortSentry [5] rozwijany w ramach projektu Abacus.Jest to program, który warto zainstalować.Posiada takie opcje jak: logowanie połączeń na wybrane porty (w tym na nieistniejące), odcinanie skanujących nas hostów z routingu, dopisywanie hostów do /etc/hosts.deny (z którego korzysta tcpd). Niestety żaden z tych programów nie uchroni nas przed ip.id.Rozwiązaniem może być łata antirezera, dostępna między innymi na SecurityPortalu [6]. (pod nazwą 01-ip.patch) Jest to patch przeznaczony dla kernela 2.2.13, dlatego trzeba wprowadzić drobne poprawki dla innych wersji jądra.Istnieje również łata pod nazwą Silenzio, która potrafi uczynić naszego Linuksa "niewidzialnym".Nie znalazłem strony domowej Silenzio, ale autorem jest Łukasz Komsta , autor minidystrybucji LIAP.Na koniec warto pamiętać, że w momencie wyłączenia takiej usługi jak inentd możemy otrzymać kilka komunikatów, które wcale nie muszą oznaczać, iż ktoś nas skanuje.

fingerprinting

fingerprinting jest techniką umożliwiającą rozpoznanie systemu operacyjnego na wybranym hoscie.Jest to możliwe dzięki istniejącej różnicy w stosie TCP/IP poszczególnych OSów.Oczywiście, aby taki test w ogóle się udał potrzebyn jest przynajmniej jeden otwarty port TCP na sprawdzanej maszynie.Jednym z bardziej popularnych programów umożliwiających to jest queso [7].Niestety prawie wszystkie programy, w tym i queso, mają jedną wadę.Ich odpowiedzi dostarczają bardzo mało informacji o sprawdzanym systemie.Na przykład queso nie wskaże dokładnie czy sprawdzana maszyna to OpenBSD, FreeBSD czy też NetBSD.Udzieli nam tylko odpowiedzi w stylu:

127.0.0.1 * FreeBSD, NetBSD, OpenBSD

Tak samo będzie z BSDi i IRIX, nie dostaniemy dokładnej odpowiedzi. Możliwe, że nowsze wersje będą to robić, jednak do tego czasu z pomocą przychodzi nam nmap [2], który potrafi udzielić bardziej szczegółowej odpowiedzi.W jaki sposób program wie, jaki system sprawdza? Nie jest to tak skomplikowane jak się wydaje.Program wysyła kilka (różnych) pakietów do sprawdzanego systemu i uzyskuje odpowiedzi.Dzięki bazie danych programu, przygotowanej wcześniej, można porównać te odpowiedzi z odpowiedziami w bazie danych i w ten sposób stwierdzić jaki to system.Taka baza odcisków nmapa jest w pliku: /usr/share/nmap/nmap-os-fingerprints Oto jak może wyglądać taka próba sprawdzenia systemu operacyjnego:

# nmap -O -vv www.openbsd.org

[to co nas teraz nie interesuje wycinam]

Remote operating system guess: Solaris 2.6 - 2.7

OS Fingerprint:

TSeq(Class=RI%gcd=1%SI=7CFBF)

T1(Resp=Y%DF=Y%W=2297%ACK=S++%Flags=AS%Ops=NNTNWME)

T2(Resp=N)

T3(Resp=N)

T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)

T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)

T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)

T7(Resp=Y%DF=Y%W=0%ACK=S%Flags=AR%Ops=)

PU(Resp=N)

a takie odpowiedzi uzyskamy sprawdzając www.freebsd.org

# nmap -O -vv www.freebsd.org

Remote operating system guess: FreeBSD 2.2.1 - 4.0

OS Fingerprint:

TSeq(Class=RI%gcd=1%SI=42A2E)

T1(Resp=Y%DF=Y%W=402E%ACK=S++%Flags=AS%Ops=M)

T2(Resp=N)

T3(Resp=Y%DF=Y%W=402E%ACK=S++%Flags=AS%Ops=M)

T4(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)

T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)

T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)

T7(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)

PU(Resp=Y%DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=F%RIPCK=F%UCK=0%ULEN=134%DAT=E)

Różnice są łatwe do wykrycia, w szczególności test trzeci (T3).FreeBSD udzielił odpowiedzi:

T3(Resp=Y%DF=Y%W=402E%ACK=S++%Flags=AS%Ops=M)

Natomiast Solaris w ogóle nie odpowiedział na ten test. Z pewnością nie jest to idealna odpowiedź, ale lepsza niż samo "Solaris" czy "FreeBSD, NetBSD, OpenBSD".Jeżeli kogoś interesują znaczenia poszczególnych pól i testów to odsyłam do dokumentu napisanego przez Fyodora:

http://www.insecure.org/nmap/nmap-fingerprinting-article.html

Dokument ten opisuje także prawie wszystkie techniki fingerprintingu.

Mówiąc o fingerprintingu, warto wspomnieć o passive fingerprintingu.Jak już sama nazwa wskazuje nie jest to technika polegająca na odpytywaniu sprawdzanego hosta, tak jak ma to miejsce w tradycyjnym fingerprintingu, ale na przechwytywaniu pakietów, które zostały wysłane z hosta do nas.Czyli zyskujemy informacje o pewnym hoscie bez jego wiedzy i nie pozostawiamy śladu w jego logach.Dalsza filozofia jest taka sama jak w tradycyjnym (active) fingerprintingu.Sprawdzamy ten przechwycony pakiet i znajdujemy w nim wartości różnych pól, czy też opcje protokołu TCP lub IP charakterystyczne dla jakiegoś systemu.Cztery podstawowe pola wg których możemy zidentyfikować system to:

Window - rozmiar pola okno, dla Linuksa (2.2.x) jest równy 32120.
TTL (Time To Live) - czyli czas życia pakietu.
DF (Don't Fragment bit) - niektóre systemy nie ustawiają tego bitu
TOS (Type Of Service) - niektóre systemy nie ustawiają 'Type Of Service'

Po więcej informacji odsyłam do dokumentu Lance'a Spitzner'a "Passive Fingerprinting":

http://www.enteract.com/~lspitz/finger.html

Autor wspomina tam również o innych polach, które mogą pomóc w identyfikacji. (np. ISN)

Natomiast pod adresem:

http://dev.whitehats.com/papers/passive/index.html

znajdziesz linki i opisy do programów wykorzystujących fingerprinting.

Próby zabezpieczenia się przed fingerprintingiem

Chcąc oszukać takie programy jak nmap trzeba zmodyfikować źródła kernela. Początek poszukiwań rozpocznij od katalogu linux/net/ipv4.Jeżeli nie wiesz jak za to się zabrać możesz zainstalować pakiet o sympatycznej nazwie "The kernel OS faker" (kosf) [8].Potrafi on skutecznie nabrać nmapa i przykładowo udawać FreeBSD w wersji 2.1 :-).Niestety jest i wada takiego rozwiązania.Jak pisze autor kosf [8] nie tylko udaje inny system operacyjny, ale także zachowuje się jak on, a ponieważ niektóre systemy mają słabo zaimplementowany protokól TCP/IP nasz Linux może, stwarzać problemy po zainstalowaniu kosf [8].Natomiast jeżeli chcemy zmienić np. wartość pola TTL w naszych pakietach, tak aby za jego pomocą nie można było określić jaki system używamy, wystarczy zmienić watość w pliku:

/proc/sys/net/ipv4/ip_default_ttl

źródła

ASCII obrazki :-) zostały żywcem sciągnięte z RFC i książki "TCP/IP Administracja sieci".Poniżej są adresy do programów, o których wspomniałem oraz źródła, z których korzystałem tworząc ten dokument.



Wyszukiwarka

Podobne podstrony:
Nowe skanowanie 20080205102742 00021
Nowe skanowanie 20080205102631 00011
ephedra chemical fingerprinting
Nowe skanowanie 20080205102531 00003
skanowanie informatyka, Studia, informatyka
Zjawisko Fragmentacji Dysku, Informatyka, Skanownie dysku
giełdy toksykologia, skanowanie0001
Nowe skanowanie 20080205102243 00004
Around Her Finger
Nowe skanowanie 20080205102653 00014
opracowanie skanow, Biotechnologia, Semestr III, Biologia molekularna
krew skanowanie(16) QISKEKG5L5XN5MAHYF5BOMMP3TL223TKKOECR4A
rozdzielczosc przy skanowaniu, Szkoła
Nowe skanowanie 20080205102334 00011
Nowe skanowanie 20080205102554 00006
Nowe skanowanie 20080205102609 00008
Nowe skanowanie 20080205102356 00014
kopiowanie vs skanowanie 2003

więcej podobnych podstron