:: OpenBSD i (anty) OS fingerprinting
Wszystkie systemy operacyjne mają specyficzne cechy, dzięki którym możemy odróznić je od innych.
Utrudnienie rozpozania systemu może być jedną z metod obrony (a raczej mającej zmylić) przed intruzami.
Najczęściej używanymi programami do identyfikowania systemu operacyjnego są
nmap,
Xprobe2,
p0f.
Jak to działa? - czyli klika słów na temat poszczególnych programów.
Nmap
Jest to chyba najbardziej znanym programem do skanowania sieci.
Rozpoznaje on system operacyjny analizując odpowiedzi na źle zbudowane
pakiety TCP. Przeprowadza on 9 testów:
- pakiet z flagami SYN i ECE
- pakiet NULL (wyzerowane flagi)
- pakiet TCP z flagami SYN, FIN, URG, PSH na jakiś otwarty port TCP
- pakiet TCP z flaga ACK na jakiś otwarty port
- pakiet TCP z flaga SYN na jakiś zamkniety port
- pakiet TCP z flaga ACK do zamkniętego portu
- pakiet TCP z flagami FIN, PSH, URG na zamknięty port TCP
- pakiet UDP na zamknięty port UDP
- 6 kolejnych pakietów TCP z flaga SYN na jeden otwarty port
Główna różnica w porównaniu do Nmap'a polega na tym, że pakiety wysyłane przez Xprobe2 maja prawidłową budowę. Do rozpoznawania systemu operacyjnego używa on komunikatów ICMP wysyłając sześć różnych testów:
- ping - echo request [ICMP]
- żądanie znacznika czasowego - timestamp [ICMP]
- żądanie maski adresu - address mask request [ICMP]
- żądanie informacji - information request [ICMP]
- pakiet UDP do zamkniętego portu
- pakiet TCP do otwartego portu
p0f
Program ten różni się tym od pozostałych, że nie rozpoznaje systemu w sposób aktywny. Oznacza to mniej więcej tyle,
że przechwytuje pakiety przychodzące i wyszukuje w nich cech charakterystycznych poszczególnych systemów operacyjnych.
Co sprawdza p0f:
- rozmiar okna TCP
- wartość TTL
- obecność flagi DF
- wartość i kolejność opcji TCP
- różne "anomalie" - złe flagi, złe opcje, niezerowe wartości ACK
Do dzieła !- czyli jak się ukrywać.
Duuuża większość filtrów pakietów nie rozpoznaje flagi ECE (jeśli np. iptables dostanie pakiet z ustawionymi SYN oraz ECE nie widzi flagi ECE i pakiet jest "puszczony".. a pf odrzuci go) wystarczy sprawdzać flagi na porty otwarte i puszczać tylko pakiety z flagą SYN.
-- pf.conf --
# przykladowo port 80pass in quick proto tcp from any to xxx.xxx.xxx.xxx port 80 flags S/FSRPAUE keep state
-- end pf.conf --
Po takiej operacji Nmap powinien się wyłożyć ;) ale są jeszcze Xprobe2, p0f je też wpuścimy w maliny.
Następnie możemy zmienić wielkość okna TCP (RFC 1323 dla zainteresowanych) na 65535 (domyślnie chyba jest 16384).
Po takiej operacji trzeba zrestartować wszystkie usługi (najlepiej # reboot).
Następną zmianą jaka powinna przynieść widoczne razultaty jest zmiana wartości pola TTL ze standardowego 64 na 128.
Następną zmianą jaką wprowadzimy w naszym systemie jest wyłączenie opcji TCP odpowiedzialną za skalowanie okna i znacznika czasowego (RFC 1323).
Dzięki zmianom, które zostały wprowadzone w systemie Twój system powinien być rozpoznawany jako zupełnie inny od jakiegoś FreeBSD 3.x do Win XP. Oczywiście powyższe zmiany to nie wszystko co możemy zmienic w naszym systemie aby był rozpoznawany jako zupełnie inny. Następną zmianą jaką wprowadzimy w naszym systemie jest włączenie odpowiedzi na pakiety ICMP z żądaniem maski adresów:
# sysctl -w net.inet.icmp.maskrepl=1Do reguł naszego filtra pakietów (pf oczywiście ;) ) powinniśmy dodać jeszcze:
-- pf.conf --
pass in quick proto icmp from any to xxx.xxx.xxx.xxx icmp-type maskregpass out quick proto icmp from xxx.xxx.xxx.xxx to any icmp-type maskrep
-- end pf.conf --
Możemy dodać jeszcze kilka opcji do naszego filtra pakietów co pozwoli zwiększyć jego skuteczność.
-- pf.conf --
# kilka regułek na nmap'a gdzie $ext_if to interfejs zewnętrznyblock in log quick on $ext_if inet proto tcp from any to any flags FUP/WEUAPRSF
block in log quick on $ext_if inet proto tcp from any to any flags WEUAPRSF/WEUAPRSF
block in log quick on $ext_if inet proto tcp from any to any flags SRAFU/WEUAPRSF
block in log quick on $ext_if inet proto tcp from any to any flags /WEUAPRSF
block in log quick on $ext_if inet proto tcp from any to any flags SR/SR
block in log quick on $ext_if inet proto tcp from any to any flags SF/SF
-- end pf.conf --
Jeśli ktoś używa pf'a jako filtra pakietów to konfigurację dla niego przedstawione są w podobnym artykule dla OpenBSD.Źródła:
http://www.insecure.org/nmap/nmap-fingerprinting-article-pl.html
http://www.insecure.org/nmap/index.html
http://www.sys-security.com/index.php?page=xprobe
http://lcamtuf.coredump.cx/p0f.shtml
Autor:
Kacper Różycki
qTi(at)bsd4u.org
(c) 2005















