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ěpodobně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:
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):
[+] 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?”