Hlavní navigace

Sbíráme otisky: aktivní Nmap a Xprobe2

16. 3. 2006
Doba čtení: 6 minut

Sdílet

V předchozích dílech jsme se zabývali teoretickou stránkou sbírání otisků a skenování vzdálených strojů. Dnes se podíváme na praktickou ukázku využití aktivního fingerprintingu. Povíme si o velmi známém Nmapu a velmi dobrém Xprobe2.

Nmap

Nmap je maximálně „profláknutá” aplikace a asi nemá smysl ji tady probírat nějak extra podrobně. Věřím, že i když třeba víte o portscannerech úplné minimum a znáte jen jeden z nich, bude to právě Nmap. Každopádně pro úplnost je potřeba se o něm alespoň zmínit.

Nmap je velmi silný a komplexní scanovací nástroj speciálně vyvinutý pro agresivní prohledávání extrémně rozsáhlých sítí. Zvládá desítky různých technik a obsahuje velmi rozsáhlou databázi služeb i operačních systémů. Ta v současné době obsahuje 1500 (!) položek.

Kromě klasického skenování portů zvládá s parametrem -O také detekci vzdáleného operačního systému. Používá k tomu mnoho metod, včetně většiny těch, které jsme si popsali ve druhém díle našeho seriálu.

Najít jej můžeme na mnoha operačních systémech včetně Linux, MS Windows, FreeBSD, OpenBSD, Solaris, IRIX, Mac OS X, HP-UX, NetBSD, Sun OS, Amiga a mnoha dalších.

Jeho základní použití je poměrně snadné, stačí se přihlásit jako root a spustit

$ nmap -O nějakýstroj.doména 

Výstup je následující:

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2006-03-15 10:03 CET
Interesting ports on localhost (127.0.0.1):
(The 1658 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
37/tcp   open  time
80/tcp   open  www
110/tcp  open  pop3
115/tcp  open  sftp

Device type: general purpose

Running: Linux 2.4.X|2.5.X
OS details: Linux Kernel 2.4.0 - 2.5.20
Uptime 14.111 days (since Wed Mar 1 07:23:23 2006)

Nmap run completed -- 1 IP address (1 host up) scanned in 6.217 seconds 

Ačkoliv je Nmap nejznámějším zástupcem ve své třídě aplikací, rozhodně není jediným.

Xprobe2

Projekt Xprobe2 nabízí v mnoha ohledech modernější jádro, které zvládá odhady pravděpodobnosti, fuzzy signature matching, sledování více cílů najednou a další moderní postupy.

Vznikl jako alternativa ke zmíněnému Nmapu, a to především proto, že se jeho autorům nelíbila přílišná agresivita Nmapu a jeho snadná vystopovatelnost. Jelikož Nmap používá velmi razantní metody a odesílá mnoho nestandardních paketů, je poměrně snadné jej odhalit.

Mnoho detekčních systémů (například LIDS, o kterém se na Root.cz psalo) je schopno pokusy Nmapu o skenování a detekci systému odhalit a zasáhnout proti nim. Proto vznikl Xprobe2, který velkou část těchto problémů řeší.

Xprobe2 není monolitický kus kódu, jakým je Nmap. Skládá se z jádra a detekčních modulů. Jádro zajišťuje komunikaci s uživatelem a řízení celé činnosti aplikace a moduly pak zpracovávají jednotlivé požadavky na skenování.

Fuzzy logika

Každý modul provede vlastní sérii nezávislých testů a výsledky odešle jádru, které provádí jejich statistické vyhodnocení. Používá při tom vlastní implementaci fuzzy logiky. Ta pracuje tak, že se systém na základě vstupních dat rozhodne, který výsledek je nejpravděpodob­nější. Xprobe2 je prvním nástrojem pro práci s fingerprinty, který fuzzy logiku takto implementoval.

Funkce je poměrně zajímavá a pokusím se ji zhruba vysvětlit: Na cílový počítač je provedena sada testů, které ověřují přítomnost jednotlivých operačních systémů. Testy neodpovidají na otázku: „Jaký operační systém je na počítači XY?”, ale na mnohem jednodušší konkrétní zadání typu „Je na počítači XY systém Z?”

Každý z nezávislých testů může pochopitelně skončit s několika výsledky. Je exaktně určeno, že je vždy vrácen právě jeden ze čtyř možných stavů:

  • Ano (hodnota 3)
  • Pravděpodobně ano (hodnota 2)
  • Pravděpodobně ne (hodnota 1)
  • Ne (hodnota 0)

Pro každý známý operační systém se tedy provede řada nezávislých testů a vyhodnotí se jejich výsledky. Na konci procesu nám vznikne množina čísel, ze kterých je vypočítána pravděpodobnost výskytu testovaného systému.

Jádro samotného Xprobe2 vlastně ani nemusí vědět, jaké testy byly prováděny, stačí mu výsledky. Ty vloží do matice, která vypadá asi takto:

Matice výsledků
Systém 1 Systém 2 Systém 3 Systém n
Test 1 výsledek výsledek výsledek výsledek
Test 2 výsledek výsledek výsledek výsledek
Test 3 výsledek výsledek výsledek výsledek
Test m výsledek výsledek výsledek výsledek
Celkem celkem celkem celkem celkem

Po vyplnění celé tabulky jsou vyhodnoceny jednotlivé sloupce a podle výsledků je vypočítána pravděpodobnost výskytu pro jednotlivé systémy (příklad: Windows na 5 %, BSD 8 %, Linux 94 %, …). Pak je vyhlášen verdikt a systém, který získal nejvíce „bodů”, je prohlášen tím, který je na druhé straně. V případě, že se na prvním místě sejde více systémů, jsou vypsány všechny možnosti.

To má několik pozitivních důsledků: Jednak je přesně známo, s jakou pravděpodobností se na druhé straně skutečně nachází určený systém. A především je takto získaný výsledek mnohem přesnější. Xprobe2 se nenechá zmást několika nepovedenými testy nebo pozměněným nastavením cílového systému. Pravděpodobnosti se sice posunou, ale výsledek je stejný. Z toho důvodu je Xprobe2 často v určení systému přesnější než Nmap.

Jemnější přístup

Už jsem nakousl, že autorům Xprobe2 vadila agresivita Nmapu. Proto se rozhodli jít při sestavování metodiky jinou cestou. Záměrně vybírají jen takové testy, které neporušují RFC a neodesílají žádné nestandardní nebo poškozené pakety. Proto je jeho běh velmi nenápadný a naprosto bez problémů se ztratí v běžném provozu. Navíc je díky tomu jeho běh mnohem rychlejší než v případě Nmapu a nebývá problém s žádným filtrováním ani jinými překážkami.

Použití

Je poměrně snadné. Musíte mít práva roota (nebo nastavit setuid bit, ale to nedoporučuji). Lokální sken vypadá následovně:

$ xprobe2 localhost

Xprobe2 v.0.2.2 Copyright (c) 2002-2005 fyodor@o0o.nu, ofir@sys-security.com, meder@o0o.nu

[+] Target is localhost
[+] Loading modules.
[+] Following modules are loaded:
[x] [1] ping:icmp_ping  -  ICMP echo discovery module
[x] [2] ping:tcp_ping  -  TCP-based ping discovery module
[x] [3] ping:udp_ping  -  UDP-based ping discovery module
[x] [4] infogather:ttl_calc  -  TCP and UDP based TTL distance calculation
[x] [5] infogather:portscan  -  TCP and UDP PortScanner
[x] [6] fingerprint:icmp_echo  -  ICMP Echo request fingerprinting module
[x] [7] fingerprint:icmp_tstamp  -  ICMP Timestamp request fingerprinting module
[x] [8] fingerprint:icmp_amask  -  ICMP Address mask request fingerprinting module
[x] [9] fingerprint:icmp_port_unreach  -  ICMP port unreachable fingerprinting module
[x] [10] fingerprint:tcp_hshake  -  TCP Handshake fingerprinting module
[x] [11] fingerprint:tcp_rst  -  TCP RST fingerprinting module
[+] 11 modules registered
[+] Initializing scan engine
[+] Running scan engine
[-] ping:tcp_ping module: no closed/open TCP ports known on 127.0.0.1. Module test failed
[-] ping:udp_ping module: no closed/open UDP ports known on 127.0.0.1. Module test failed
[-] No distance calculation. 127.0.0.1 appears to be dead or no ports known
[+] Host: 127.0.0.1 is up (Guess probability: 25%)
[+] Target: 127.0.0.1 is alive. Round-Trip Time: 0.00019 sec
[+] Selected safe Round-Trip Time value is: 0.00038 sec
[-] fingerprint:tcp_hshake Module execution aborted (no open TCP ports known)
[+] Primary guess:
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.19" (Guess probability: 74%)
[+] Other guesses:
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.20" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.21" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.22" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.23" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.24" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.25" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.26" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.27" (Guess probability: 74%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.28" (Guess probability: 74%)
[+] Cleaning up scan engine
[+] Modules deinitialized
[+] Execution completed. 

V případě Windows XP jsem se například dozvěděl (už zkráceno):

CS24_early

[+] Primary guess:
[+] Host 192.168.1.151 Running OS: "Microsoft Windows XP SP1" (Guess probability: 100%)
[+] Other guesses:
[+] Host 192.168.1.151 Running OS: "Microsoft Windows XP" (Guess probability: 100%)
[+] Host 192.168.1.151 Running OS: "Microsoft Windows 2000 Server Service Pack 4" (Guess probability: 100%)
[+] Host 192.168.1.151 Running OS: "Microsoft Windows 2000 Server Service Pack 3" (Guess probability: 100%) 

Občas se hodí přidat parametr -T a nechat najít nebo přímo zvolit nějaké otevřené porty. Xprobe2 pak dává lepší výsledky, protože má větší možnosti a může lépe komunikovat s druhou stranou.

Závěr

Nmap i Xprobe2 jsou špičkové nástroje pro aktivní fingerprinting. Kvůli nižší náročnosti, většímu pohodlí a vyšší rychlosti doporučuji používat Xprobe2. Oba vám ale velmi přesně dokáží odpovědět na otázku „Kdo tam?”

Použili jste někdy aktivní fingerprinting?

Seriál: Sbíráme otisky

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.