NMAP je silný nástroj, který překročil stín běžného síťového skeneru a jeho funkcionality se běžně používají při bezpečnostních auditech. V dnešním příspěvku se budeme věnovat volbám, které nesouvisí s vlastním skenováním, ale mohou se vám v praxi hodit.
Interaktivní příkazy
Jistě jste si všimli, že NMAP během skenu při stisku některých kláves, např. enter, vypisuje statistiky o stavu skenu.
1 2 3 4 5 6 7 8 |
nmap 10.0.0.1 .. stiskneme enter .. Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 19:06 CET Stats: 0:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan SYN Stealth Scan Timing: About 0.55% done Stats: 0:00:05 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan |
Stiskneme-li během skenu otazník (?), dostaneme nápovědu o interaktivních příkazech, které ovlivňují další výpisy.
1 2 3 4 5 6 7 8 |
Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 19:11 CET Interactive keyboard commands: ? Display this information v/V Increase/decrease verbosity d/D Increase/decrease debugging p/P Enable/disable packet tracing anything else Print status More help: http://nmap.org/book/man-runtime-interaction.html |
Například stiskem klávesy „p“ se aktivuje volba sledování paketů (packet trace). NMAP následně začne vypisovat informace o vyslaných a přijmutých paketech. Chceme-li tento výpis deaktivovat, stiskneme velké „P“.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
nmap example.com -p0-123 Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 19:23 CET stiskneme p Packet Tracing enabled. NSOCK INFO [1.3020s] nsi_new2(): nsi_new (IOD #1) NSOCK INFO [1.3020s] nsock_connect_udp(): UDP connection requested to 127.0.1.1:53 (IOD #1) EID 8 NSOCK INFO [1.3020s] nsock_read(): Read request from IOD #1 [127.0.1.1:53] (timeout: -1ms) EID 18 NSOCK INFO [1.3020s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [127.0.1.1:53] NSOCK INFO [1.3020s] nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 27 [127.0.1.1:53] NSOCK INFO [1.3750s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 18 [127.0.1.1:53] (115 bytes) NSOCK INFO [1.3750s] nsock_read(): Read request from IOD #1 [127.0.1.1:53] (timeout: -1ms) EID 34 NSOCK INFO [1.3750s] nsi_delete(): nsi_delete (IOD #1) NSOCK INFO [1.3750s] msevent_cancel(): msevent_cancel on event #34 (type READ) SENT (1.3944s) TCP 172.16.0.104:45592 > 93.184.216.34:23 S ttl=43 id=13626 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3944s) TCP 172.16.0.104:45592 > 93.184.216.34:110 S ttl=59 id=29997 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3944s) TCP 172.16.0.104:45592 > 93.184.216.34:80 S ttl=54 id=64660 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:111 S ttl=40 id=27668 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:21 S ttl=38 id=62202 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:22 S ttl=51 id=18669 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:113 S ttl=53 id=50426 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:53 S ttl=49 id=32655 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:25 S ttl=44 id=28659 iplen=44 seq=3081160835 win=1024 <mss 1460> SENT (1.3945s) TCP 172.16.0.104:45592 > 93.184.216.34:60 S ttl=46 id=40924 iplen=44 seq=3081160835 win=1024 <mss 1460> RCVD (1.7134s) TCP 93.184.216.34:80 > 172.16.0.104:45592 SA ttl=47 id=0 iplen=44 seq=2899851441 win=65535 <mss 1460> Stats: 0:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan SYN Stealth Scan Timing: About 4.44% done; ETC: 19:24 (0:00:43 remaining) stiskneme SHIFT+p Packet Tracing disabled. |
Obdobně fungují interaktivní příkazy pro debugging a upovídanost výpisů (d/D a v/V).
Ohodnocení stavů portů
Stav portu je ohodnocení z pohledu nástroje NMAP a to na základě analýzy odpovědí zaslaných paketů na port. Někdy nemusí být jasné, jak NMAP k určitému ohodnocení stavu portu došel. Pro tyto případy se nám bude hodit volba --reason
, která do výsledků skenu zařadí nový popisný sloupec REASON.
Příklad – ohodnocení stavu portů
1 2 3 4 5 6 7 8 9 10 11 12 |
nmap example.com -F --reason Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 19:31 CET Nmap scan report for example.com (93.184.216.34) Host is up, received echo-reply (0.21s latency). Not shown: 98 filtered ports Reason: 98 no-responses PORT STATE SERVICE REASON 80/tcp open http syn-ack 443/tcp open https syn-ack Nmap done: 1 IP address (1 host up) scanned in 7.22 seconds |
Z výpisu vidíme, že NMAP na základě zachycené odpovědí TCP SYN/ACK došel k závěru, že TCP porty 80 a 443 jsou otevřené.
Přerušený sken
Přerušení skenu je nepříjemná věc, zvláště pokud jsme skenovali několik hodin či dní. NMAP umožňuje pokračovat v přerušeném skenu pomocí volby --resume
, ale tato funkce nefunguje tak, jak byste očekávali.
Máte šanci jen v případě, že jste zapnuli logování výstupu ve standardním textovém (.nmap) nebo grep (.gnmap) formátu a doběhl alespoň sken jednoho stroje. Jinak řečeno, NMAP si na základě textového výstupu neporadí s rozdělaným skenem pro jeden stroj a opakuje jej znovu.
V situaci, kdy skenujeme dlouho jeden stroj UDP skenem, je nám tato funkcionalita k ničemu. Naopak skenujeme-li celou síť, pak tato možnost přijde vhod. Navazující sken pak přirozeně pokračuje a doplňuje zápisy v daném výstupním souboru.
Příklad – Přerušený sken
Ukážeme si toto chování na příkladě skenu segmentu sítě, kde doběhl sken pro jeden stroj. Následně jsme sken přerušili. Všiměte si, že přidáváme také volbu -oA pro zápis výsledků ve všech základních výstupních formátech. Jednotlivé soubory pak budou mít prefix „aborted-scan“.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
nmap 172.16.0.0/24 -F -oA aborted-scan Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 21:03 CET Nmap scan report for 172.16.0.69 Host is up (0.087s latency). Not shown: 96 closed ports PORT STATE SERVICE 80/tcp open http 1900/tcp open upnp 49152/tcp open unknown 49153/tcp open unknown MAC Address: 00:00:00:00:00:00 -- zde byl sken prerusen |
V pracovním adresáři nalezneme pozůstatky aktivity skeneru.
1 2 3 |
-rw-r--r-- 1 root root 621 bře 26 21:03 aborted-scan.nmap -rw-r--r-- 1 root root 458 bře 26 21:03 aborted-scan.gnmap -rw-r--r-- 1 root root 3715 bře 26 21:04 aborted-scan.xml |
Nyní se pokusíme navázat na přerušený sken pomocí volby --resume
, hodnotou tohoto parametru je cesta k výstupnímu souboru přerušeného skenu „aborted-scan.nmap“.
1 2 3 4 5 |
nmap --resume aborted-scan.nmap Starting Nmap 6.40 ( http://nmap.org ) at 2016-03-26 21:03 CET Stats: 0:00:03 elapsed; 0 hosts completed (0 up), 154 undergoing ARP Ping Scan ... |
Pokud by se nám nepodařilo na předchozí sken navázat, uvidíme následující hlášení.
1 2 |
nmap --resume aborted-scan.nmap Unable to parse supposed log file aborted-scan.nmap. Perhaps the Nmap execution had not finished at least one host? In that case there is no use "resuming" |
Závěr
V příspěvku jsme prošli nepříliš známé funkce nástroje NMAP: interaktivní příkazy, volbu „reason“ vysvětlující ohodnocení stavu portů a volbu „resume“ pro pokračování přerušeného skenu. Z posledního příkladu je také vidět, že logování výstupů skeneru se vyplatí a má smysl generovat základní výstupní formáty. Nikdy nevíte, jak budete chtít s výstupy pracovat.
Pokud Vás láká představa vyzkoušet si nástroj NMAP u nás v labech na hacking kurzech.