-sS
(TCP SYN scan)
SYN scan je z dobrých důvodů výchozí a nejoblíbenější možností skenování. Lze ji provádět rychle a skenovat tisíce portů za sekundu v rychlé síti, která není omezována restriktivními firewally. Je takérelativně nenápadný a skrytý, protože nikdy nedokončuje spojení TCP. Skenování SYN funguje proti jakémukoli kompatibilnímu zásobníku TCP a není závislé na zvláštnostech konkrétních platforem, jak to dělají skeny NmapFIN/NULL/Xmas, Maimon a nečinné skeny. Umožňuje také jasné,spolehlivé rozlišení mezi stavy open
,closed
a filtered
.
Tato technika se často označuje jako skenování s polovičním otevřením,protože se neotevře celé spojení TCP. Odesíláte paket SYN,jako byste se chystali otevřít skutečné spojení a pak čekáte na odpověď. SYN/ACK znamená, že port naslouchá (je otevřený), zatímco RST (reset) znamená, že port nenaslouchá. Pokud po několika opakovaných odesláních není přijata žádná odpověď, je port označen jako filtrovaný. Port je také označen jako filtrovaný, pokud je přijata chyba ICMP unreachable (typ 3, kód 0, 1, 2, 3, 9, 10 nebo 13). Port je také považován za otevřený, pokud je jako odpověď přijat paket SYN (bez příznaku ACK). To může být způsobeno extrémně vzácnou funkcí TCP známou jako simultánní otevřené nebo rozdělené handshake spojení (viz https://nmap.org/misc/split-handshake.pdf).
-sT
(TCP connect scan)
TCP connect scan je výchozí typ TCP scan, pokud SYN scan není volbou. To je případ, kdy uživatel nemá oprávnění raw packetprivileges. Namísto zápisu surových paketů, jak to dělá většina ostatních typů skenování, požádá Nmap základníoperační systém o navázání spojení s cílovým počítačem aportem vydáním systémového volání connect
. Jedná se o stejné vysokoúrovňové systémové volání, které k navázání spojení používají webové prohlížeče, klienti P2P a většina dalších aplikací využívajících síť.Je součástí programovacího rozhraní známého jako Berkeley SocketsAPI. Namísto čtení nezpracovaných odpovědí paketů z drátu používá Nmap toto rozhraní API k získání informací o stavu každého pokusu o připojení.
Pokud je k dispozici skenování SYN, je to obvykle lepší volba. Nmapmá menší kontrolu nad voláním na vysoké úrovni connect
než při použití surových paketů, takže je méně efektivní. Systémové volání spíše dokončuje spojení na otevřené cílové porty, než aby provedlo obnovení polootevřených portů, které provádí SYN scan. Nejenže to trvá déle a k získání stejných informací je zapotřebí více paketů, ale je pravděpodobnější, že cílové stroje budou spojení logovat. Slušný IDS zachytí obojí, ale většina strojů žádný takový poplašný systém nemá. Mnohé služby na průměrném unixovém systému přidají poznámku do syslogu a někdy i záhadnou chybovou zprávu, když se Nmap připojí a pak spojení uzavře bez odeslání dat. Skutečně žalostné služby se zhroutí, když se to stane, i když je to neobvyklé. Správce, který ve svých protokolech vidí několik pokusů o připojení z jednoho systému, by měl vědět, že byl skenován pro připojení.
-sU
(skenování UDP)
Přestože většina populárních služeb na internetu běží přes protokol TCP, služby UDPjsou široce rozšířené. DNS, SNMP a DHCP(registrované porty 53, 161/162 a 67/68) jsou tři nejběžnější. Protože skenování protokolu UDP je obecně pomalejší a obtížnější než skenování protokolu TCP, někteří bezpečnostní auditoři tyto porty ignorují. To je chyba, protože zneužitelné služby UDP jsou poměrně běžné a útočníci rozhodně neignorují celý protokol. Naštěstí vám s inventarizací portůUDP pomůže program Nmap.
SkenováníUDP se aktivuje pomocí volby -sU
. Lze jej kombinovat s typem skenování TCP, například se skenováním SYN(-sS
), a kontrolovat tak oba protokoly během stejného běhu.
Skenování UDP funguje tak, že se na každý cílový port odešle paket UDP. Pro některé běžné porty, jako jsou 53 a 161, je odeslán náklad specifický pro daný protokol, aby se zvýšila rychlost odezvy, ale pro většinu portů je paket prázdný, pokud nejsou zadány volby --data
,--data-string
nebo --data-length
. pokud je vrácena chyba ICMP port unreachable (typ 3, kód 3), je port closed
. Ostatní chyby ICMP unreachable (typ 3, kódy 0, 1, 2, 9, 10 nebo 13) označují port jako filtered
. Příležitostně služba odpoví paketem UDP, který prokáže, že se jedná o open
. Pokud po opakovaném odeslání nepřijde žádná odpověď, je port klasifikován jako open|filtered
. To znamená, že port může být otevřený, nebo že snad paketové filtry blokují komunikaci. K rozlišení skutečně otevřených portů od těch filtrovaných lze použít detekci verzí(-sV
).
Velkým problémem při skenování UDP je jeho rychlost. otevřené a filtrované porty zřídkakdy odešlou nějakou odpověď, takže Nmap musí vyčerpat časový limit a poté provést opakované přenosy pro případ, že by došlo ke ztrátě sondy nebo odpovědi. Uzavřené porty jsou často ještě větším problémem. obvykle posílají zpět chybu ICMP port unreachable. Na rozdíl od paketůRST, které uzavřené porty TCP posílají jako odpověď na SYN nebo connectscan, však mnoho hostitelů ve výchozím nastavení omezuje rychlost zprávICMP port unreachable.Linux a Solaris jsou v tomto ohledu obzvláště přísné. Například jádroLinuxu 2.4.20 omezuje cílové nedosažitelné zprávy na jednu za sekundu (v net/ipv4/icmp.c
).
Nmap rozpozná omezení rychlosti a podle toho zpomalí, aby nezaplavil síť zbytečnými pakety, které cílový stroj zahodí. Bohužel omezení ve stylu Linuxu na jeden paket za sekunduzpůsobí, že skenování 65 536 portů trvá více než 18 hodin. Mezi nápady, jak urychlit skenování UDP, patří paralelní skenování více hostitelů, rychlé skenování pouze populárních portů, skenování zpoza firewallu a použití --host-timeout
pro přeskočení pomalých hostitelů.
-sY
(SCTP INIT scan)
SCTPje relativně nová alternativa protokolů TCP a UDP, která kombinuje většinu vlastností protokolů TCP a UDP a přidává také nové funkce, jako je multi-homing a multi-streaming. Většinou se používá pro služby související s SS7/SIGTRAN, ale má potenciál být použit i pro jiné aplikace.SCTP INIT scan je SCTP ekvivalentem TCP SYN scanu.Může být proveden rychle, skenuje tisíce portů za sekundu v rychlé síti, která není omezována restriktivními firewally.Stejně jako SYN scan je INIT scan relativně nenápadný a skrytý, protože nikdy nedokončuje SCTP asociace. Umožňuje také jasné,spolehlivé rozlišení mezi stavy open
,closed
a filtered
.
Tato technika se často označuje jako skenování s polovičním otevřením,protože neotevíráte úplnou asociaci SCTP. Odesíláte INITchunk, jako byste se chystali otevřít skutečnou asociaci, a pak čekáte na odpověď. Chunk INIT-ACK znamená, že port naslouchá (je otevřený), zatímco chunk ABORT znamená, že port nenaslouchá. Pokud po několika opakovaných vysíláních nepřijde žádná odpověď, je port označen jako filtrovaný. Port je také označen jako filtrovaný, pokud je přijata chyba ICMPunreachable (typ 3, kód 0, 1, 2, 3, 9, 10 nebo 13).
-sN
;-sF
;-sX
(skenování TCP NULL, FIN a Xmas)
Tyto tři typy skenování (pomocí volby--scanflags
popsané v následující části jich lze provést ještě více) využívají jemné mezery v TCP RFC k rozlišení mezi porty open
aclosed
. Strana 65 RFC 793 říká, že „pokud je stav portu CLOSED …., příchozí segment neobsahující RST způsobí, že v odpovědi bude odeslán RST“. Dalšístránka pak pojednává o paketech odesílaných na otevřené porty bez nastavených bitů SYN, RST nebo ACK a uvádí, že: „je nepravděpodobné, že se sem dostanete, ale pokud ano, zahoďte segment a vraťte se zpět.“
Při skenování systémů vyhovujících tomuto textu RFC bude mít jakýkoli paketneobsahující bity SYN, RST nebo ACK za následek vrácení RST, pokud je port uzavřen, a žádnou odpověď, pokud je port otevřen. Pokud žádný z těchto tří bitů není obsažen, je v pořádku jakákoli kombinace ostatních tří bitů (FIN, PSH a URG). Nmap toho využívá pomocí tří typů skenování:
-sN
)
Nenastavuje žádné bity (TCP flag header je 0)
FIN scan (-sF
)
Nastavuje pouze TCP FIN bit.
Xmas scan (-sX
)
Nastaví příznaky FIN, PSH a URG a rozsvítí paket jako vánoční stromeček.
Tyto tři typy skenování se chovají naprosto stejně s výjimkou příznaků TCP nastavených v sondovacích paketech. Pokud je přijat paket RST,je port považován za closed
, zatímco žádná odpověďznamená, že je open|filtered
. Port je označen jako filtered
, pokud je přijata chyba ICMP unreachable (typ 3, kód0, 1, 2, 3, 9, 10 nebo 13).
Klíčovou výhodou těchto typů skenování je, že mohou proklouznout přes některé nestatečné firewally a směrovače filtrující pakety. Další výhodou je, že tyto typy skenování jsou o něco skrytější než i skenování SYN. S tím však nepočítejte – většinu moderních produktů IDS lze nakonfigurovat tak, aby je detekovaly. Velkou nevýhodou je, že ne všechny systémy dodržují RFC 793 do písmene. Řada systémů posílá na sondy odpovědi RST bez ohledu na to, zda je port otevřený, nebo ne. To způsobuje, že všechny porty jsou označeny closed
. Mezi hlavní operační systémy, které takto postupují, patří Microsoft Windows, mnoho zařízení Cisco, BSDI a IBM OS/400. Tento sken však funguje proti většině systémů založených na Unixu. Další nevýhodou těchto skenů je, že nedokážou rozlišit porty open
od některých portů filtered
, takže vám odpoví open|filtered
.
-sA
(TCP ACK scan)
Tento sken se od ostatních dosud probíraných liší tím, že nikdy neurčuje porty open
(nebo dokonceopen|filtered
). Používá se k mapování sad pravidelfirewallu, určuje, zda jsou stavová nebo ne a které porty jsou filtrovány.
Paket ACK scan probe má nastaven pouze příznak ACK (pokud nepoužijete --scanflags
). Při skenování nefiltrovaných systémů,open
a closed
porty oba vrátí paket RST. Nmap je pak označí jakounfiltered
, což znamená, že jsou dosažitelné pomocí paketuACK, ale není určeno, zda se jedná o open
neboclosed
. Porty, které neodpovídají,nebo posílají zpět určité chybové zprávy ICMP (typ 3, kód 0, 1, 2, 3, 9, 10 nebo 13), jsou označeny filtered
.
-sW
(TCP Window scan)
Window scan je přesně stejný jako ACK scan s tím rozdílem, že využívá implementační detail některých systémů k rozlišení otevřených portů od uzavřených, místo aby vždy vypsalunfiltered
, když je vrácen RST. Dělá to tak, že zkoumá pole TCP Window ve vrácených paketech RST. Na některých systémech používají otevřené porty kladnou velikost okna (i pro pakety RST), zatímco uzavřené porty mají nulové okno. Takže místo toho, aby vždy vypsal port jako unfiltered
, když obdrží zpět RST,Window scan vypisuje port jako open
neboclosed
, pokud je hodnota TCP Window v tomto resetu kladná, resp. nulová.
Tento scan se spoléhá na implementační detail menšiny systémů na Internetu, takže mu nelze vždy věřit. Systémy, které ji nepodporují, obvykle vrátí všechny portyclosed
. Samozřejmě je možné, že strojve skutečnosti nemá žádné otevřené porty. Pokud je většina skenovaných portůclosed
, ale několik běžných čísel portů (například 22,25, 53) je filtered
, je systém s největší pravděpodobností náchylný. Příležitostně budou systémy vykazovat i přesně opačné chování. Pokud skenování ukáže 1 000 otevřených portů a tři uzavřené nebo filtrované porty, pak tyto tři porty mohou být velmi dobře skutečně otevřené.
-sM
(TCP Maimon scan)
Maimonův sken je pojmenován po svém objeviteli Urielovi Maimonovi, který tuto techniku popsal v čísle 49 časopisu Phrack (listopad 1996).Nmap, který tuto techniku obsahuje, vyšel o dvě čísla později.tato technika je úplně stejná jako skenování NULL, FIN a Xmas, s tím rozdílem, že sonda je FIN/ACK. Podle RFC 793 (TCP) by měl být v reakci na takovou sondu vygenerován paket RST, ať už je port otevřený nebo zavřený. Uriel si však všiml, že mnoho systémů odvozených od BSDpaket jednoduše zahodí, pokud je port otevřený.
--scanflags
(Vlastní skenování TCP)
Skutečně pokročilí uživatelé Nmapu se nemusí omezovat na nabízené typy skenování. Volba --scanflags
umožňuje navrhnout vlastní skenování zadáním libovolných příznakůTCP.Dejte průchod své kreativitě a vyhněte se přitom systémům pro detekci průniku, jejichž dodavatelé jednoduše prolistovali manuálovou stránku Nmap a přidali specifická pravidla!
Argument --scanflags
může být číselná hodnota příznaku, například 9 (PSH a FIN), ale použití symbolických jmen je jednodušší. Stačí zkombinovat libovolnou kombinaci URG
,ACK
, PSH
,RST
, SYN
aFIN
. Například --scanflagsURGACKPSHRSTSYNFIN
nastaví vše, i když pro skenování to není příliš užitečné. Pořadí, v jakém jsou tyto příznaky zadány, není důležité.
Kromě zadání požadovaných příznaků můžete zadat typ skenováníTCP (například -sA
nebo -sF
). tento základní typ říká Nmapu, jak má interpretovat odpovědi. Například sken SYN považuje žádnou odpověď za označení portufiltered
, zatímco sken FIN považuje totéž za portopen|filtered
. Nmap se bude chovat stejně jako v případě základního typu skenování s tím rozdílem, že místo toho použije vámi zadané příznaky TCP. Pokud nezadáte základní typ, použije se skenování SYN.
-sZ
(SCTP COOKIE ECHO scan)
SCTP COOKIE ECHO scan je pokročilejší skenování SCTP. Využívá skutečnosti, že implementace SCTP by měly na otevřených portech tiše odhazovat pakety obsahující kousky COOKIE ECHO, ale pokud je port uzavřen, pošlou ABORT.Výhodou tohoto typu skenování je, že není tak zřejmý jako skenování portu INIT. Mohou také existovat nestatefulfirewallové sady pravidel, které blokují INIT chunky, ale ne COOKIE ECHOchunky. Nenechte se zmást tím, že díky tomu bude skenování portu neviditelné; dobrý IDS bude schopen odhalit i skenování SCTPCOOKIE ECHO. nevýhodou je, že skenování SCTP COOKIE ECHO nedokáže rozlišit mezi porty open
a filtered
, takže v obou případech zůstane stav open|filtered
.
-sI
(nečinné skenování)<zombie host>
Tato pokročilá metoda skenování umožňuje skutečně slepé skenování TCP portů cíle (což znamená, že z vaší skutečné IP adresy nejsou na cíl odesílány žádné pakety). Místo toho unikátní útok postranním kanálem využívá předvídatelné generování sekvence ID fragmentace IP na zombie hostiteli k získání informací o otevřených portech na cíli. Systémy IDS zobrazí skenování jako pocházející z vámi určeného zombie počítače (který musí být v provozu a splňovat určitá kritéria). Úplné podrobnosti o tomto fascinujícím typu skenování jsou uvedeny v části nazvané „TCP Idle Scan (-sI
)“.
Kromě toho, že je tento typ skenování mimořádně skrytý (díky své slepé povaze), umožňuje mapovat vztahy důvěry mezi stroji na základě IP. Výpis portů zobrazuje otevřené porty z pohledu zombie hostitele. Můžete tedy vyzkoušet skenování cíle pomocí různých zombie, o kterých si myslíte, že by mohly být důvěryhodné (pomocí pravidel směrovače/paketového filtru).
Můžete přidat dvojtečku následovanou číslem portu zombie hostitele, pokud chcete prozkoumat konkrétní port na zombie kvůli změnám IP ID. Jinak Nmap použije port, který používá ve výchozím nastavení pro pingy TCP (80).
-sO
(skenování protokolu IP)
Skenování protokolu IP umožňuje zjistit, které protokoly IP(TCP, ICMP, IGMP atd.) jsou podporovány cílovými počítači. Technicky se nejedná o skenování portů, protože cyklicky prochází čísla protokolů IPa nikoli čísla portů TCP nebo UDP. Přesto stále používá možnost-p
pro výběr čísel skenovaných protokolů, hlásí výsledky v běžném formátu tabulky portů a dokonce používá stejný základní skenovací motor jako skutečné metody skenování portů. Je tedy natolik blízký skenování portů, že sem patří.
Kromě toho, že je užitečný sám o sobě, ukazuje skenování protokolů sílu softwaru s otevřeným zdrojovým kódem. I když je základní myšlenka docela jednoduchá, nenapadlo mě ji přidat, ani jsem nedostal žádnéžádosti o takovou funkci. Pak v létě roku 2000 přišel na tuto myšlenku Gerhard Rieger, napsal vynikající záplatu, která ji implementovala, a poslal ji do poštovní konferenceannounce (tehdy nazývané nmap-hackers).Tuto záplatu jsem začlenil do stromu Nmap a následující den jsem vydal novou verzi. Jen málokterý komerční software má natolik nadšené uživatele, aby navrhovali a přispívali vlastními vylepšeními!
Protokolové skenování funguje podobně jako skenování UDP. Namísto iterace přes pole s číslem portu paketu UDP odesílá hlavičky paketůIP a iteruje přes osmibitové pole protokolu IP. hlavičky jsou obvykle prázdné, neobsahují žádná data a ani správnou hlavičku pro deklarovaný protokol. Výjimkou jsou protokoly TCP,UDP, ICMP, SCTP a IGMP. Pro tyto protokoly je správná hlavička obsažena, protože některé systémy je jinak neodesílají a protože Nmap již má funkce pro jejich vytvoření. Namísto sledování zpráv ICMP portunreachable hledá skenování protokolů zprávy ICMPprotocol unreachable. Pokud Nmap obdrží od cílového hostitele odpověď v jakémkoli protokolu, označí tento protokol jako open
. Chybová zpráva ICMP protocol unreachable (typ 3, kód 2) způsobí označení protokolu jako closed
, zatímco port unreachable (typ 3, kód 3)označí protokol jako open
. Ostatní chyby ICMP unreachable (typ 3, kód0, 1, 9, 10 nebo 13) způsobují označení protokolu jakofiltered
(ačkoli zároveň dokazují, že ICMP jeopen
). Pokud po opakovaném odeslání není přijata žádná odpověď, je protokol označenopen|filtered
-b
(FTP bounce scan)<FTP relay host>
Zajímavou vlastností protokolu FTP (RFC 959) je podpora tzv. proxy FTP spojení. To umožňuje uživatelipřipojit se k jednomu serveru FTP a poté požádat o odeslání souborů na server třetí strany. Taková funkce je zralá na zneužití na mnoha úrovních,takže ji většina serverů přestala podporovat. Jedním ze zneužití, které tato funkce umožňuje, je přimět server FTP ke skenování portů jiných hostitelů.Stačí požádat server FTP, aby postupně odeslal soubor na každý zajímavý port cílového hostitele. Chybové hlášení popíše, zda je port otevřený, nebo ne. Jedná se o dobrý způsob, jak obejít firewally, protože organizační FTP servery jsou často umístěny tam, kde mají větší přístup k jiným interním hostitelům než jakýkoli starý internetový hostitel. Nmap podporuje skenování FTPbounce pomocí volby -b
. Přijímá argumentve tvaru<username>
:<password>
@<server>
:<port>
.<Server>
je název nebo IP adresa zranitelného FTP serveru. Stejně jako u normální adresy URL můžete vynechat<username>
:<password>
,v takovém případě se použijí anonymní přihlašovací údaje (uživatel:anonymous
heslo:-wwwuser@
). Číslo portu (a předcházející dvojtečku) lze rovněž vynechat, v takovém případě se použije výchozí port FTP (21) na<server>
.
Tato zranitelnost byla rozšířená v roce 1997, kdy byl Nmap vydán, ale z velké části byla opravena. Zranitelné servery jsou stále v okolí, takže stojí za to to vyzkoušet, když všechno ostatní selže. Pokud je vaším cílem obejít afirewall, proskenujte cílovou síť pro port 21 (nebo i pro všechny služby FTP, pokud skenujete všechny porty pomocí detekce verzí) a použijte skriptftp-bounce
NSE. Nmap vám řekne, zda je hostitel zranitelný, nebo ne. Pokud se pouze snažíte zahladit stopy, nemusíte (a vlastně byste ani neměli) se omezovat na hostitele v cílové síti. Než se pustíte do prohledávání náhodných internetových adres a hledání zranitelných serverů FTP, zvažte, že správci systému nemusí ocenit, že takto zneužíváte jejich servery.