Sposoby scanovania portov

Ako novacik pokusajuci sa opravit auto, mozem sa trapit dlhe hodiny, aby som nasiel vhodne zakladne naradie (kladivo, lepiaca paska, kluc, atd) na danu ulohu. Ked sa uz citim utrapene a odtiahnem svoj vrak ku naozajstnemu mechanikovi, ten stale obchadza auto s velkou debnou naradia, az kym nevylovi tu vecicku co z prace urobi hracku. Podobne je aj umenie scanovania. Experti ovladaju kopu metod scanovania a zvolia prislusnu (alebo kombinaciu) pre danu ulohu. Na druhej strane neskuseni pouzivatelia a rychlokvaseni majstri v praci so skriptom budu riesit kazdy problem predvolenym SYN scanom. Kedze Nmap je zadarmo, jedinou barierou pred majstrovstvom v scanovani portov je vedomost, co urcite poraza svet automobilov, kde zistenie potreby pruzinoveho kompresora stale vyzadujuce zaplatit zan tisice dolarov, moze vyzadovat velke zrucnosti.

Vacsina typov scanov je dostupna len pre privilegovanych pouzivatelov, z toho dovodu, ze posielaju a prijimaju neupravene pakety, co si na UNIXovych systemoch vyzaduje pristup roota. Na platforme Windows sa odporuca administratorsky ucet, hoci po nahrati kniznice WinPcap do OS funguje niekedy Nmap aj pre neprivilegovanych pouzivatelov. V roku 1997 po vydani Nmapu bola otazka privilegii roota dost vaznym obmedzenim, kedze mnohi pouzivatelia mali pristup len ku shared shell uctu. Svet sa vsak zmenil. Pocitace su lacnejsie, ovela viac ludi ma teraz neprestajny priamy pristup na internet a UNIXove systemy pre desktop (vratane Linuxu a MAC OS X) su rozsirene. Dostupna je aj verzia Nmapu pre Windows, co dovoluje spustit program na este viac desktopoch. Z tychto vsetkych dovodov nemaju pouzivatelia taku potrebu spustat Nmap z obmedzenych shared shell uctov. To je stastne, pretoze parametre vyzadajuce privilegia robia z Nmapu ovela mocnejsi a flexibilnejsi nastroj.

Nmap sa sice pokusa produkovat presne vysledky, ale je dolezite si uvedomovat, ze vsetko jeho chapania problemu su zalozene na paketoch odoslanych cielovymi pocitacmi alebo firewallmi pred nimi. Taketo hostitelske stanice mozu byt nedoveryhodne a posielat zamerne matuce odpovede a uviest Nmap do omylu. Ovela beznejsie su vsak hostitelske stanice nevyhovujuce standardu RFC, ktore neodpovedaju na testy Nmapom tak ako by mali. Specialne nachylne na tento problem su scany typu FIN, Null a Xmas. Taketo potiaze su specificke pre iste typy scanov a su rozobrate v zaznamoch o jednotlivych typoch scanov.

Tento cast dokumentuje asi tucet metod scanovania portov podporovanych Nmapom. Len jedna metoda moze byt pouzita sucasne, s vynimkou UDP scanu (-sU), ktory moze byt kombinovany s lubovolnym dalsim TCP scanom. Ako pomocka pre pamat, parametre typu scanovania portov su vo formate -s<C>, kde <C> predstavuje hlavny znak v nazve scanu, obycajne ten prvy. Vynimkou je uz odmietnuty FTP bounce scan (-b). V predvolenom nastaveni vykonava Nmap SYN scan, hoci ak pouzivatel nema dostatocne privilegia alebo ciele IPv6 neboli specifikovane, nahradzuje ho volanim Connect(), aby sa mohli odoslat neupravene pakety (to vyzaduje pristup roota na UNIXovych pocitacoch). Zo vsetkych spomenutych scanov mozu pouzivatelia bez privilegii spustit len scany connect() a ftp bounce.

-sS (Scan TCP SYN )

SYN scan je predvolenym a najoblubenejsim typom scanu a to z dobrych dovodov. Dokaze byt vykonany rychlo, scanujuc tisicky portov za sekundu tam, kde je rychla siet bez obmedzeni dotieravych firewallov. SYN scan je relativne nenapadny a tajny, pretoze nikdy nedokonci fazu nadvazovania TCP spojeni. Funguje aj proti akymkolvek TCP stackom a nezavisi teda na svojraznostiach konkretnych platform ako dalsie Nmapovske scany Fin, Null, Xmas, Maimon a Idle. Umoznuje takisto ciste a spolahlive rozlisenie medzi otvorenymi, zatvorenymi a filtrovanymi stavmi.

Na tuto metodu sa casto odkazuje ako na polootvorene scanovanie,pretoze nie je potrebne otvarat plne TCP spojenie. Odosle sa SYN paket ako keby sa nadvazovalo skutocne spojenie a potom sa caka na spojenie. Prichodzi SYN/ACK paket indikuje, ze port nacuva (je otvoreny), kym RST (reset) naznacuje, ze port nenacuva. Ak sa neodosle ziadna odpoved ani po niekolkych retransmisiach, port sa oznaci ako filtrovany. Taketo oznacenie sa pouzije, aj ked pride chybova sprava ICMP unreachable error (typ 3, kody 1,2, 3, 9, 10, alebo 13).

-sT (Scan TCP connect())

Scan TCP Connect() je predvolenym typom TCP scanu, ak SYN scan nepatri medzi moznosti. K tomu dochadza, ak pouzivatel nema privilegia na odosielanie neupravenych paketov, alebo pri scanovani sieti s protokolom IPv6. Nmap namiesto vytvorenia neupravenych paketov, ako pri vacsine dalsich scanov, poziada operacny system o vytvorenie spojenia s cielovou stanicou a portom pomocou systemoveho volania connect(). Je to presne to iste volanie na vyssej urovni k vytvoreniu spojenia, ktore vyuzivaju webove prehliadace, klienti P2P a vacsina dalsich aplikacii vyuzivajucich siet a tvori cast programoveho rozhrania znameneho pod menom Berkeley Sockets API. Namiesto prijimania a spracovavania neupravenych odpovedi po sieti, Nmap pri kazdom pokuse o spojenie pouziva toto rozhranie API na ziskanie informacii o stave.

Ak je dostupny SYN scan, je obycajne lepsou volbou. Nmap ma mensiu kontrolu nad vysokourovnovym volanim connect() ako nad neupravenymi paketmi, co sposobuje horsiu efektivnost.Systemove volanie dokoncuje nadvazovanie spojeni k otvorenym portom cieloveho hostitela namiesto vykonania polootvoreneho resetu, ktory vykonava SYN scan. Tento postup nielenze trva dlhsie, ale takisto vyzaduje viac paketov na ziskanie tych istych informacii a cielove pocitace budu spojenie pravdepodobne zaznamenavat do logu. Poriadny IDS to sice tiez zachyti, ale vacsina pocitacov nema takyto system. Ked sa Nmap pripoji a potom zavrie spojenia bez odoslania dat, vacsina sluzieb na priemernom UNIXovom system prida poznamku do syslogu. Niektore fakt ubohe sluzby mozu pritom spadnut, ale to je nezvycajne. Administrator, ktory vidi v logu niekolko pokusov o spojenie od jedneho systemu by mal vediet, ze bol scannovany s ohladom na nadviazanie spojenia.

-sU (UDP scany)

Zatial co vacsina oblubenych sluzieb na internete funguje na TCP protokole, UDP sluzby su tiez siroko nasadzovane. Tri najbeznejsie z nich su DNS, SNMP a DHCP (registrovane porty 53, 161/162 a 67/68). Pretoze scanovanie UDP je vseobecne pomalsie a narocnejsie ako TCP, niektori spravcovia bezpecnosti si nevsimaju tieto porty a to je chyba, lebo zneuzitelne UDP sluzby su celkom bezne a utocnici iste nebudu ignorovat cely protokol. Nastastie, Nmap dokaze pomoct urobit supis tychto UDP portov.

UDP scan je mozne spustit parametrom -sU. Moze sa kombinovat s TCP scanom ako napr. SYN scan (-sS) a tak sa mozu skontrolovat oba protokoly pocas jedneho spustenia.

UDP scan funguje tak, ze odosle kazdemu cielovemu portu prazdnu hlavicku UDP header bez dat. Ak sa vrati chybova sprava ICMP port unreachable error (typ 3, kod 3) port je zatvoreny. Ostatne chybove spravy ICMP (typ 3, kody 1, 2, 9, 10 alebo 13) oznacuju port ako filtrovany. Prilezitostne moze sluzba odpovedat UDP paketom a tym dokaze, ze port je otvoreny. Ak sa po opakovanych retransmisiach neobjavi ziadna odpoved, port je oznaceny ako otvoreny|filtrovany. To znamena, ze port by mohol byt otvoreny alebo mozno paketove filtre blokuju komunikaciu. Na pomoc pri odliseni otvorenych a filtrovanych portov sa moze pouzit parameter (-sV).

Velkou vyzvou pre scanovanie UDP je rychlost. Otvorene a filtrovane porty malokedy posielaju odpoved a tak pre vyprsi casovy limit, co vyusti v dalsie retransmisie pre pripad, ze sa test alebo odpoved mohli v sieti stratit. Zatvorene porty su casto vacsim problemom. Obycajne odosielaju spat chybovu spravu ICMP port unreachable error, no na rozdiel od RST paketov odosielanych zatvorenymi TCP portmi ako odpoved na SYN alebo Connect scan, , mnoho hostitelskych stanic standardne pouziva limit takychto odoslanych chybovych sprav. Specialne prisne na tento fakt su Linux a Solaris. Napriklad linuxove jadro 2.4.20 dava obmedzenie na spravy typu destination unreachable v pocte jedna sprava za sekundu (v subore net/ipv4/icmp.c).

Nmap detekuje obmedzenie v pocte a podla toho sa spomali, aby sa vyhol zaplaveniu siete nepotrebnymi paketmi, ktore by cielova stanica zahodila. Linuxovske obmedzenie 1 paket za sekundu nanestastie sposobuje, ze by scan 65536 portov trval 18 hodin. Napady ako tento proces urychlit su napr.scanovanie viacerych hostov sucasne , vykonat najprv rychly scan popularnych portov, scanovat spoza firewallu alebo pouzitie parametru --host-timeout na preskocenie pomalych hostitelskych stanic.

-sN; -sF; -sX (TCP Null, FIN a Xmas scany)

Tieto tri typy scanov (dalsie sa daju vykonat pouzitim parametra --scanflags su opisane v dalsej casti) vyuzivaju malu dieru v standarde TCP RFC, aby rozlisili medziotvorenymi a zatvorenymi portmi. Na strane sa 65 hovori, ze ak je [cielovy] port zatvoreny.... prichadzajuci segment, ktory neobsahuje flag RST sposobi, ze sa ako odpoved odosle RST segment. Dalsia strana potom rozobera pakety odosielane na otvorene porty bez nastavenych bitov SYN, RST ani ACK a tvrdi: je nepravdepodobne, ze sa dostanete do tejto situacie, ale ak k nej dojde, zahodte segment a vratte sa.

Ak sa scanuju systemy zodpovedajuce tomuto textu RFC, lubovolny paket neobsahujuci nastavene bity SYN, RST ani ACK vyvola odpoved s RST bitom, ak bol port zatvoreny a ziadnu odpoved, ak je port zatvoreny. Pokial nie su zahrnute ziadne z tychto troch bitov, je v poriadku lubovolna kombinacia flagov (FIN, PSH a URG). Nmap ich vyuziva pomocou tychto troch typov scanov:

Null scan (-sN)

Nenastavuje ziadne bity(tcp flag header je nastaveny na 0)

FIN scan (-sF)

Nastavi len bit TCP FIN.

Xmas scan (-sX)

Nastavi flagy FIN, PSH a URG, cim sa paket "rozsvieti" ako Vianocny stromcek.

Tieto tri typy scanov maju rovnake spravanie az na to nastavenie TCP flagov. Ak dojde ako odpoved RST paket, port sa povazuje za zatvoreny, kym ziadna odpoved znaci otvoreny|filtrovany. Port sa oznaci ako filtrovany ak dorazi chybova sprava ICMP unreachable (typ 3, kod 1, 2, 3, 9, 10 alebo 13).

Klucovou vyhodou tychto typov scanov je, ze sa dokazu pretlacit cez iste bezstavove firewally a routre s filtrovanim paketov. Okrem toho su este viac tajnejsie ako SYN scan, no neda sa na to spoliehat -- vacsina modernych IDS sa da nastavit tak, aby ich detekovala. Velkou nevyhodou je, ze cely rad systemov sa nedrzi do pismena standardu RFC 793, posielaju odpovede RST bez ohladu na to, ci je port otvoreny alebo zatvoreny. Preto su vsetky taketo porty oznacovane ako closed. Hlavne operacne systemy s takymto spravanim su Microsoft Windows, mnohe zariadenia Cisco , BSDI a IBM OS/400. Tento scan vsak funguje na mnohe UNIXovske systemy. Dalsim hacikom tychto scanov je, ze nedokazu rozlisit otvorene porty od istychfiltrovanych, takze vyvolaju odpoved otvoreny|filtrovany.

-sA (Scan TCP ACK)

Tento scan sa lisi od ostatnych doposial rozoberanych v tom, ze nikdy neurcuje porty v stave otvoreny (dokonca ani otvoreny|filtrovany). Pouziva sa na zmapovanie sad pravidiel firewallu, ci su stavove alebo bezstavove a ktore porty su filtrovane.

Testovaci ACK Paket ma nastaveny len ACK flag (ak nie je pouzity parameter --scanflags). Ak sa scanuju nefiltrovane systemy, stavy portov otvoreny a zatvoreny vratia zhodny RST paket. Nmap ich potom oznaci ako nefiltrovane, co znamena, ze su dostupne pomocou ACK paketu , ale nie je rozpoznane, ci su otvorene alebo zatvorene. Porty, ktore neodpovedia ci odoslu spat nejaku chybovu spravu ICMP (typ 3, kod 1,2,3,9,10 alebo 13) su oznacene ako filtrovane.

-sW (Scan TCP Window)

Window scan je presne taky isty ako ACK scan az na to, ze vyuziva implementacne detaily istych systemov na rozlisenie otvorenych a zatvorenych portov, namiesto prosteho vypisu nefiltrovany po navrate RST paketu. Realizuje sa to preskumanim polozky RST paketu s nazvom TCP Window. Na niektorych systemoch pouzivaju otvorene porty kladnu velkost okienka, dokonca aj pre RST pakety, kym, zatvorene porty maju nulovu velkost okienka, takze namiesto vypisu stavu portu ako nefiltrovany Window scan zobrazi port v staveotvoreny alebo zatvoreny podla velkosti okienka (kladna resp. nulova).

Tento typ scanu sa spolieha na implementacny detail mensiny systemov na internete, takze mu nie je mozne vzdy doverovat. Systemy ktore to nepodporuju obycajne vratia vsetky porty v stave zatvoreny. Je samozrejme mozne, ze pocitac nema ziadne otvorene porty. Ak je vacsina scanovanych portov zatvorena, ale niekolko beznych portov (napr. 22, 25, 53) je v stave filtrovany system je pravdepodobne nachylny na tento scan. Zriedkavo mozu systemy vykazat presne opacne spravanie. Ak je scan ukaze, ze je 1000 otvorenych portov a 3 zatvorene alebo filtrovane , tieto tri porty mozu byt pokojne tie otvorene.

-sM (Scan TCP Maimon)

Maimon scan je pomenovany po svojom objavitelovi, Urielovi Maimonovi. Tuto techniku opisal v casopise Phrack, vydanie #49 (November 1996) Nmap s touto metodou bol vydany o dve vydania neskor. Metoda funguje presne ako scany Null, FIN a Xmas, ale test je typu FIN/ACK. Podla standardu RFC 793 (TCP), RST paket by mal byt generovany ako odpoved na tento test bez ohladu na otvoreny alebo zatvoreny port. Uriel vsak spozoroval, ze mnohe systemy odvodene od BSD jednoducho zahodia paket, ak je port otvoreny.

--scanflags (Vlastny TCP scan)

Naozaj pokrocili pouzivatelia Nmapu sa nemusia obmedzovat len na vopred ponuknute type scanov. Parameter --scanflags vzdy umozni zadanim lubovolnych TCP flagov vytvorit vlastny scan. Neobmedzujte svoju kreativitu pri vyhybani sa systemom IDS, ktorych vyrobcovia jednoducho prelisovali manual k Nmapu a pridali specificke pravidla.

Argumentom parametru--scanflags moze byt hodnota cisla flagu ako napr. 9 (PSH a FIN), no je jednoduchsie pouzivat nazvy, staci zlepit dokopy lubovolnu kombinaciu flagov URG, ACK, PSH, RST, SYN a FIN. Napriklad --scanflags URGACKPSHRSTSYNFIN nastavi vsetko, hoci to nie je prilis uzitocne pre scanovanie. Poradie nazvov nie je dolezite.

Okrem specifikovanie ziadanych flagov je mozne zadat typ TCP scanu (napriklad-sA alebo -sF), co Nmapu napovie ako interpretovat odpovede. Napriklad SYN scan povazuje absenciu odpovede za port so stavom filtrovany, kym FIN scan odpovie na rovnaku situaciu otvoreny|filtrovany. Nmap bude postupovat presne tak ako pri zakladnych typoch scanu, no pouzije TCP flagy, ktore budu zadane. Ak nie je zadany zakladny typ scanu, pouzije sa SYN scan.

-sI <zombie host[:probeport]> (Scan naprazdno - Idlescan)

Tato pokrocila metoda umoznuje naozaj slepy scan portov cielovej stanice s tym, ze z lokalnej skutocnej IP adresy nie su odosielane ziadne pakety. Namiesto toho sa pouzije utok po bocnom kanale, ktory vyuziva delenie na IP fragmenty a predpovedatelne tvorenie sekvencie ID cisel na zombie hostitelovi. Tym sa zhromazduju informacie o otvorenych portoch na cielovom pocitaci. IDS systemy zobrazia, ze scan pochadza z pocitaca zombie, ktory bol specifikovany, musi byt samozrejme aktivny a splnat urcite kriteria. Tento fascinujuci typ scanu je prilis zlozity na plny popis v tejto prirucke, takze som uplne detaily popisal neformalnym sposobom a ulozil na adresu https://nmap.org/book/idlescan.html.

Okrem toho, ze tento scan je vynimocne nenapadny (kvoli svojej slepej povahe), umoznuje zmapovat doveryhodne vztahy medzi pocitacmi zalozene na IP adrese. Zoznam portov zobrazuje otvorene porty z pohladu zombie hostitela. Takze je mozne pokusit sa o scan cielovej stanice pouzitim roznych zombie pocitacov, o ktorych si myslite, ze su doveryhodne (pomocou pravidiel routra alebo paketoveho filtra).

Ak sa ma na strane zombie pocitaca testovat specificky port kvoli zmenam hodnoty IPID, pridajte dvojbodku nasledovanu cislom portu. Inak Nmap pouzije povodny port urceny na tcp pingovanie - 80.

-sO (Scan protokolu IP)

Scan protokolu IP umoznuje urcite, ktore protokoly IP (TCP, ICMP, IGMP, atd.) su podporovane cielovymi pocitacmi. Technicky to nie je scan portov, pretoze prebieha roznymi cislami protokolov IP a nie cislami portov protokolov TCP a UDP. Aj napriek tomu pouziva parameter -p na vyber scanovanych cisel protokolov, oznamuje vysledky v normalnom formate tabulky portov a dokonca pouziva ten isty mechanizmus scanu ako prave metody scanovania portov, takze je dost blizko scanovaniu portov, a preto patri sem.

Okrem toho, ze je uzitocny vo vlastnom zmysle, scan protokolov demonstruje silu open-source softwaru. Zatial co zakladna myslienka je dost jednoducha, nerozmyslal som nad jej pridanim ani som nedostal poziadavky o takuto funkcionalitu. Potom vsak v lete roku 2000 dostal Gerhard Rieger tento napad, napisal excelentny patch, ktory to implementoval a poslal ho do mailing listu skupiny hackerov nmapu. Tento patch som vlozil do stromu Nmapu a na dalsi den vydal novu verziu. Len malo zastupcov komercneho softwaru ma nadsenych uzivatelov, ktori vytvaraju a prispievaju svojimi vylepseniami.

Scan protokolu funguje podobne ako UDP scan. Namiesto iterovania cez cisla portov v policku UDP paketu vysiela Nmap hlavicky IP paketu a iteruje cez 8-bitove policko IP protokolu. Hlavicky su zvycajne prazdne, neobsahuju data a ani patricnu hlavicku pre vyhlaseny protokol. Troma vynimkami su protokoly TCP, UDP a ICMP. Tu je patricna hlavicka protokolu zahrnuta, pretoze niektore systemy ich inak neodoslu a pretoze uz Nmap obsahuje funkcie na ich vytvorenie. Namiesto pozorovania sprav ICMP port unreachable protocol sa scan zaujima o spravy ICMP protocol unreachable. Ak Nmap prijme od cieloveho hostitela akukolvek odpoved akehokolvek protokolu, Nmap oznaci protokol ako otvoreny. Chybova sprava ICMP protocol unreachable(typ 3, kod 2) sposobi, ze sa protokol oznaci ako zatvoreny Dalsie chybove spravy ICMP unreachable (typ 3, kod 1, 3, 9, 10 alebo 13) sposobia stav protokolu ako filtrovany (hoci v rovnakom momente dokazuju, ze je otvoreny). Ak sa neobdrzi ziadna odpoved po retransmisiach, protokol sa oznaci ako otvoreny|filtrovany.

-b <ftp relay host> (FTP bounce scan)

Zaujimavou funkciou protokolu FTP (RFC 959) je podpora takzvanych proxy ftp spojeni, co umoznuje pouzivatelovi pripojit sa k jednemu FTP serveru a potom ziadat o to, aby sa subory posielali serveru tretej strany. Tato vlastnost je priam idealna pre zneuzitie na mnohych urovniach , takze mnohe servery ju prestali podporovat. Jednym z tychto zneuziti tejto funkcie je vyvolanie situacie, kde FTP server scanuje porty dalsich hostitelskych stanic. Je mozne zaradom jednoducho poziadat FTP server o zaslatie subor na kazdy zaujimavy port cieloveho hostitela. Chybova sprava opise, ci je port otvoreny alebo nie. To je dobry sposob ako obist firewally, pretoze FTP servery organizacii su casto umiestnovane tam, kde maju vacsi pristup k vnutornym hostitelskym staniciam ako kazda ina stanica na internete. Nmap podporuje ftp bounce scan pomocou parametra -b. Ako argumenty pouziva <pouzivatelske meno>:<heslo>@<server>:<port>. <Server> je nazvom IP adresy zranitelneho FTP servera. Tak ako aj pri normalnej URL adrese, aj tu sa moze vynechat <pouzivatelske meno>:<heslo>, pricom sa pouziju anonymne prihlasovacie udaje (pouzivatel: anonymous heslo:-wwwuser@). Cislo portu (a predchadzajuca dvojbodka ) mozu byt vynechane tiez, pricom sa vtedy pouzije povodny FTP port (21) na <serveri>.

Tato zranitelnost bola siroko rozsirena v roku 1997, ked bol Nmap vydany, no bola do velkej miery opravena. Zranitelne servery su stale naokolo, takze stoji to za to vyskusat ich. Ak je cielom obist firewall, je mozne scanovat cielovu siet s cielovym portom 21 (alebo aj akekolvek ftp sluzby ak sa scanuju vsetky porty s detekciou verzie) a potom vyskusat spustit scan bounce scan ftp. Nmap prezradi, ci je hostitelska stanica zranitelna alebo nie. Ak sa pokusate len zakryt svoje stopy, nie je nevyhnutne (a v skutocnosti by sa ani nemalo) obmedzovat sa na hostitelske stanice v cielovej sieti. Pred scanovanim nahodnych internetovych adries na zistenie zranitelnych FTP serverov zoberte do uvahy, ze systemovym administratorom sa nemusi pacit zneuzitie ich serverov takymto sposobom.