:: FreeBSD 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ć.

Wprowadzanie zmian zaczniemy od modyfikacji kilku opcji dostępnych w jądrze FreeBSD. Pierwszą opcją, którą zmienimy jest włączenie "czarnej dziury" dzięku której bedą blokowane pakiety, które jako swój cel będą miały zamknięte porty TCP i UDP. Dla TCP opcja 1 blokuje pakiety z flagą SYN a 2 blokuje wszystkie pakiety, które jako swój cel mają zamknięty port TCP.

# sysctl net.inet.tcp.blackhole=2
# sysctl net.inet.udp.blackhole=1

Następną opcją jaką możemy zmienić jest domyślna wielkość okna TCP na maksymalny nie wymagający skalowania czyli 65535.

# sysctl net.inet.tcp.recvspace=65535

Teraz dokonamy zmiany wartoÂści pola TTL ze standardowego 64 na 128.

# sysctl net.inet.ip.ttl=128

Aby nasze prace, mające na celu wyprowadzenie programów nmap, Xprobe2 i p0f w maliny, odniosły skutek zmienimy jeszcze dwie opcje. Pierwsza to włączenie skalowania okna i znacznika czasowego, a druga to włączenie odpowiedzi na pakiety ICMP z żądaniem maski adresów.

# sysctl net.inet.tcp.rfc1323=0
# sysctl net.inet.icmp.maskrepl=1

Plik konfiguracyjny naszego filtra pakietów (w przykładzie jest to ipf) powinnien zawierać reguły postaci (przykład dla portu 80 i ping):

-- fw.rules --

# przykładowo port 80
pass in quick proto tcp from any to xxx.xxx.xxx.xxx port=www flags S keep state

# ping
pass in quick proto icmp from any to xxx.xxx.xxx.xxx icmp-type echo keep state

-- end fw.rules --



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 'qTi' Różycki
qTi(at)bsd4u.org