Konrad Madej
5 czerwca 2002
Z drugiej strony ukrywanie rodzaju SO nie jest samo w sobie zabezpieczeniem systemu, nie łata furtek jakimi można skompromitować system. Dlatego zabezpieczanie się przed możliwością rozpoznania SO powinno następować dopiero po załataniu i zabezpieczeniu systemu.
$ telnet lew.elka.pw.edu.pl Trying 194.29.160.129... Connected to lew.elka.pw.edu.pl. Escape character is '^]'. SunOS 5.7 login:Widzimy że zdalny system pracuje pod kontrolą Solaris 7 najprawdopodniej na platformie Sparc.
,,Bezpieczny zastępca'' programu telnet - Secure Shell (ssh), a dokładnie jego darmowa implemetacja OpenSSH, przy domyślnej kompilacji również podaje dokładne informacje zarówno o sobie jak i systemie podczas nawiązywania połączenia:
$ ssh -v 172.16.0.1 [...] debug1: Remote protocol version 1.99, remote software version OpenSSH_3.0.2p1 Debian 1:3.0.2p1-6 [...]
Równie łatwo uzyskać informacje o systemie od serwerów WWW:
$ echo -e "GET / HTTP/1.0\\n" | nc www.pw.edu.pl 80 HTTP/1.1 200 OK Date: Sun, 02 Jun 2002 18:21:54 GMT Server: Apache/1.3.22 (Unix) (Red-Hat/Linux) mod_ssl/2.8.5 OpenSSL/0.9.6 PHP/4. 0.6 mod_perl/1.24 Last-Modified: Tue, 02 Oct 2001 07:47:15 GMT ETag: "4301a-31a-3bb97103" Accept-Ranges: bytes Content-Length: 794 Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> [...]
Sprawa się komplikuje gdy na danym serwerze nie są udostępnione żadne usługi bądź gdy używane są filtry pakietów do ograniczenia dostępu tylko z zaufanych miejsc (sieci) do serwisów. System może być jednak używany przez użytkowników np. do wysyłania poczty elektronicznej bądź czytania grup dyskusyjnych. Programy ,,klienckie'' do obsługi tekstowych wiadomości internetowych (zgodnych z RFC 822) często zaszywają w nich interesujące nas informacje. Poniżej nagłowek Message-ID ustawiany przez popularny program pine:
Message-ID: <Pine.SOL.4.30.0205272332250.4474-100000@mion.elka.pw.edu.pl>Możemy z niego wyczytać że komputer z którego została wysłana wiadomość z tym nagłówkiem, pracuje pod kontrolą systemu Solaris (najprawdopodniej platforma Sparc) i użyty został program pine w wersji 4.30.
Krótko opisane powyżej techniki są tylko przykładami na to jak w łatwy sposób można uzyskać informacje o zdalnym systemie. Jest wiele innych metod opartych również na wykorzystaniu różnych protokołów, które niejako podają nam szukane informacje np. SNMP albo rekordy DNS.
Udostępnione serwisy jak i programy ,,klienckie'', które komunikują się ze ,,światem zewnętrznym'', używane w danym systemie są często źródłem bardzo wielu informacji. Mogą one pomóc potencjalnemu atakującemu w skompromitowaniu systemu. Ukrywanie informacji o programach udostępniających usługi jak i rodzaju systemu operacyjnego nie chroni przed atakiem a jedynie utrudnia w jego przygotowaniu i przeprowadzeniu. Dlatego ta forma bezpieczeństwa (ang. security by obscurity) powinna być stosowana dopiero w ostatniej fazie fortyfikowania systemu.
Metodą bardziej zaawansowaną i trudną do oszukania jest badanie pól nagłówków protokołów warstw niższych czyli przede wszystkim IP i TCP. Zgodnie z dokumentami RFC pewne pola tych nagłówków mogą być ustawiane z pewną dowolnością przez systemy operacyjne. Dodatkowo mogą występować pewne rozszerzenia protokołów, które nie muszą być obsługiwane przez wszystkie implementacje stosów TCP/IP. Różnice w implementacjach przenoszą się na ,,wygląd'' pakietów i zachowanie stosu w określonych sytuacjach dając jednocześnie możliwość identyfikacji.
Metody badania nagłówków TCP/IP w celu ustalenia systemu operacyjnego (a dokładniej implementacji stosu TCP/IP) są dwie: aktywna i pasywna. W pierwszej wysyłamy specjalnie skonstruowany pakiet bądź pakiety do zdalnego systemu a następnie badamy otrzymaną odpowiedź. Wygląd otrzymanego pakietu i/lub zachowanie zdalnego systemu porównujemy z danymi z wcześniej stworzonej bazy ,,sygnatur i zachowań''. W metodzie pasywnej nie komunikujemy się bezpośrednio z interesującym nas zdalnym systemem ale musimy zdobyć specyficzne pakiety wysłane przez niego. Mogą one pochodzić z dowolnego połączenia. Przykładowo możena wykorzystać pakiety które służyły do nawiązania połączenia z naszym serwerem WWW.
Metoda ,,aktywna'' ze względu na swoją ,,dynamikę'' ma dużo większy wachlarz możliwości badania zdalnego systemu, jednak wymaga interakcji zapoczątkowanej przez nas ze zdalnym systemem. Taka interakcja z jednej strony może być utrudniona przez zdalne filtry pakietów a z drugiej może nas zdemaskować. W przypadku metody pasywnej mamy mniejsze możliwości ale niejako pozostajemy przezroczyści.
Poniżej zostały opisane niektóre z możliwych technik:
Generacja ISN ma duże znaczenie dla bezpieczeństwa. Przewidzenie jaka wartość zostanie wybrana dla danego połączenia daje możliwość przejęcia sesji, dlatego ISN powinien być wartością całkowicie przypadkową.
Opcje TCP ze względu na swoją opcjonalność oraz mnogość są świetnym narzędziem do rozpoznowania różnych implementacji.
Wymienione wyżej techniki to tylko kilka najpopularniejszych. Różnią się one ,,mocą'' działania, trudnością implementacji oraz możliwością im zapobiegania.
Ochrona przed rozpoznaniem naszego systemu operacyjnego metodą badania stosu TCP/IP jest trudna gdyż zmiana zachowania implementacji jest często praktycznie niemożliwa. W przypadku np. TTL administrator ma często możliwość ustawienia tej wartości, dzięki czemu może ,,zrównać się'' z innym systemem operacyjnych. W innych przypadkach jest to jednak niemożliwe bez zmian w implementacji. Tutaj z pewną pomocą mogą przyjść filtry pakietów, które mogą w ograniczony sposób zmieniać obserwowane zachowanie stosu TCP/IP oraz przede wszystkim ograniczyć wysyłanie pakietów przez system na różne podejrzane ,,zapytania'' z nieznanych źródeł.
sendip,
który pozwala budować i wysyłać dowolne pakiety.
# sendip -p ipv4 -is 172.16.0.1 -p tcp -ts 20000 -td 222 -tfs 0 -tff 1 darkZachowanie systemu zostało zarejestrowane programem
tcpdump.
21:59:52.388556 172.16.0.1.20000 > 172.16.0.2.222: F [tcp sum ok] 218449933:218449953(20) win 65535 (ttl 255, id 26919, len 40) 21:59:52.389056 172.16.0.2.222 > 172.16.0.1.20000: R [tcp sum ok] 0:0(0) ack 218449954 win 0 (ttl 128, id 16896, len 40)
22:40:23.203118 172.16.0.1.0 > 172.16.0.2.1026: S 2412794997:2412795017(20) win 65535 22:40:23.203853 172.16.0.2.1026 > 172.16.0.1.0: S 2637924:2637924(0) ack 2412794998 win 8760 <mss 1460,nop,nop,sackOK> (DF) 22:40:28.237680 172.16.0.1.0 > 172.16.0.2.1026: S 239167826:239167846(20) win 65535 22:40:28.238230 172.16.0.2.1026 > 172.16.0.1.0: S 2642959:2642959(0) ack 239167827 win 8760 <mss 1460,nop,nop,sackOK> (DF) 22:40:33.265479 172.16.0.1.0 > 172.16.0.2.1026: S 3557021046:3557021066(20) win 65535 22:40:33.266189 172.16.0.2.1026 > 172.16.0.1.0: S 2647987:2647987(0) ack 3557021047 win 8760 <mss 1460,nop,nop,sackOK> (DF)Różnica ISN pomiędzy drugą i pierwszą próbą wynosi
W technice aktywnej konstruowaliśmy specjalny pakiet bądź pakiety i wysyłaliśmy do interesującego nas systemu następnie badaliśmy odpowiedź. Metoda pasywna powinna bazować tylko na informacji jaką możemy znaleźć w typowej komunikacji. Jednym z bardziej charakterystycznych pakietów, który niesie maksymalnie dużo informacji o stosie TCP/IP nadawcy jest segment SYN nawiązujący sesję TCP. Poniżej zostały przedstawione elementy jakie można wykorzystać do identyfikacji systemu operacyjnego na podstawie pakietu SYN. Część z nich pokrywa się z technikami zaprezentowanymi już dla metody aktywnej.
tcpdump.
10:38:39.590583 172.16.0.1.32772 > 172.16.0.2.22: S [tcp sum ok] 231104793:231104793(0) win 5840 <mss 1460,sackOK,timestamp 260958 0, nop,wscale 0> (DF) (ttl 64, id 39495, len 60)Możemy wyczytać następujące informacje:
10:51:58.570649 172.16.0.2.1028 > 172.16.0.1.22: S [tcp sum ok] 134682:134682(0) win 8192 <mss 1460,nop,nop,sackOK> (DF) (ttl 128, id 13312, len 48)Dla Windows 98 mamy:
11:11:08.129665 194.29.160.35.1010 > 194.29.168.3.22: S [tcp sum ok] 2789939954:2789939954(0) win 8760 <mss 1460> (DF) (ttl 255, id 46647, len 44)Solaris 7 ma zupełnie inny ,,odcisk'':
W tabeli
zestawiono ze sobą te trzy systemy operacyjne i
ich ,,parametry'' stosu TCP/IP.
|
Technologia ,,niewidzialnego'' rozpoznawania systemów operacyjnych może mieć wiele zastosowań. Możemy analizować kto łączy się z naszym serwisem WWW. Metoda ta jest skuteczna gdy na drodze do interesującego nas systemu stoi filtr pakietów, który nie pozwala użyć żadnej z technik aktywnych. Jedyne co potrzebujemy to zdobyć charakterystyczny pakiet wysłany przez niego czyli np. nawiązał połączenie z jakimś serwisem udostępnianym przez nas.
Metoda ta może mieć duże zastosowanie w monitorowaniu sieci lokalnych firm, i w żaden sposób niezakłucający jej pracy, wykrywać podejrzane systemy np. Windows ;)
This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -verbosity 0 -no_navigation -dir /home/konrad/public_html/elektron/mydocs/fingerprint fingerprint.tex
The translation was initiated by Konrad Madej on 2002-06-12