:: 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
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.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=65535Teraz dokonamy zmiany wartoÂści pola TTL ze standardowego 64 na 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.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 80pass 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











