:: FreeBSD i (anty) OS fingerprinting
Jak powszechnie wiadomo, każdy system operacyjny ma specyficzne cechy, dzięki którym możemy go odróznić od innych.
Po przeczytaniu tego artykułu będziesz wiedział/a jak w prosty sposób unimożliwić (lub znacznie ograniczyć) rozpoznanie Twojego systemu operacyjnego.
Najczęściej używanymi programami do identyfikowania systemu operacyjnego są to
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 --
# przykładowo 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).
# sysctl -w net.inet.tcp.recvspace=65535Po takiej operacji trzeba zrestartować wszystkie usługi. 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 --
# ICMPpass in quick proto icmp from any to xxx.xxx.xxx.xxx icmp-type maskreg
pass out quick proto icmp from xxx.xxx.xxx.xxx to any icmp-type maskrep
-- end pf.conf --
Możemy oczywiście dodać jeszcze więcej opcji do naszej ścianki (tu już bez opisu konkretnych opcji/flag ;) ).
-- pf.conf --
# kilka regułek na nmap'a (takich dodatkowo ;) ) $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 --
Ź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 'qTi' Różycki
qTi(at)bsd4u.org











