Reklama:

opera
firefox
Stop IE!
Too Cool For IE!
No Software Patents
Olej GG!
gg to jabber
Get Psi
Spam Pioson
AntySpam!!
Strefa chroniona, czyli notatki przeciwnika spamu.
akk@da - simple network monitoring system
zlosnik.net
Valid xhtml 1.0!S
Valid CSS!

hosting:

PDAClub



:: 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
Xprobe2
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 80
pass 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=65535

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.

# sysctl -w net.inet.ip.ttl=128

Następną zmianą jaką wprowadzimy w naszym systemie jest wyłączenie opcji TCP odpowiedzialną za skalowanie okna i znacznika czasowego (RFC 1323).

# sysctl -w net.inet.tcp.rfc1323=0

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=1

Do 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 maskreg
pass 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ętrzny
block 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

Copyright (c) 2003 - 2009