Tehnike skeniranja portova

Kako nisam previše vičan popravcima na automobilu, mogu potrošiti sate i sate samo da nađem odgovarajući alat (poput čekića, ljpljive trake, ključa isl.). Nakon što odustanem od smješnih pokušaja da nešto popravim i odvezem auto kod stvarnog mehaničara, začuđen sam kako jednostavno i nadasve uspješno izvadi iz velike kutije s alatatom baš onaj koji je potreban za uspješan popravak. Umjestnost skeniranja portova je slična. Stručnjak razumije mnoštvo tehnika skeniranja i odabere baš onu (ili kombinaciju više tehnika) koja je odgovarajuća za određeni posao. Neiskusni korisnisi i script kiddies (osobe koje koriste skripte koje je napisao netko drugi ne razumijevajući što i kako te skripte rade), pokušavaju sve riješiti defaultnim SYN skanom. Kako je Nmap besplatan program, jedina prepreka između Vas i masteriranja port skeninga je znanje. To je definitivno suprotno od automehaničarskog posla, u kojem recimo mož ete znati da Vam treba zračni kompresor, ali to ne umanjuje činjenicu da ga trebate i kupiti.

Većina tipova skeniranja koje nmap podržava dostupni su privilegiranim korisnicima (morate biti ulogirani kao administrator). To je zbog toga jer šalju sirove (RAW) pakete koji zahtjevaju root pristup u UNIX svijetu. Korištenje administratorskog korisničkog accounta je preporučeno na windows operativnim sustavima, mada Nmap ponekad radi i s neprivilegiranim korisnicima, ako je WinPCap prethodno instaliran na sustav i aktivan. Zahtjev za root privilegijama je bila ozbiljna prepreka kad je Nmap prvi put pušten u javnost 1997. godine, jer je većina korisnika imala pristup dijeljenim shell accountima. Sada je svijet drugačiji. Kompjutori su jeftiniji, veći broj ljudi ima stalni pristup internetu, a desktop UNIX sustavi su dominantni (uključujući linux i MAC OS X). Windows verzija Nmap-a je također dostupna, te je samim tim i Nmap dostupniji većem broju korisnika. Zbog svih tih razloga, sve je manja potreba korisnika da pokreću Nmap logirani sa dijeljenim shell accountima. To je naravno super stvarm jer je Nmap pokrenut pod accountom privilegiranog korisnika mnogo moćniji i fleksibilniji.

Iako Nmap pokušava reproducirati ispravan rezultat svojih skenova, imajte na umu da su sve unutrašnje komponente Nmap-a bazirane na paketima vraćenim od ciljanih računala (ili firewall uređaja ispred njih). Neki hostovi mogu biti nepouzdani i podešeni na način da vrate pakete koji će zavarati Nmap i dati krivi rezultat. Još češći su hostovi koji ne podržavaju RFC standard, te ne odgovaraju onako kako Nmap očekuje od njih. FIN, Null i Xmas skenovi su pogotovo podložni tim problemima. Problemi poput gore navedenih su specifični za pojedine tipove skeniranja i o tome se raspravlja u svakoj od tih tehnika skeniranja.

Ovo poglavlje dokumentira hrpu tehnika skeniranja portova koje podržava Nmap. Samo jedna od spomenutih metoda može biti korištena u jednom trenutku, osim UDP skena (-sU) koji može biti kombiniran s bilo kojom od TCP sken matoda. Radi lakšeg pamćenja, opcije skeniranja portova su u obliku -s<C>, gdje je <C> vidljiv iz samog naziva sken tipa i obično je to prvo slovo. Jedini izuzetak je FTP bounce scan (-b). Defaultno, Nmap radi SYN scan iako će ga zamijeniti s Connect() skenom, ako korisnik nema odgovarajuće ovlasti slanja raw paketa (root pristup na UNIX sustavima) ili ako je specificirana IPv6 kao ciljana IP adresa. Od svih navedenih tipova skenova u ovom poglavlju, neprivilegirani korisnik može pokrenuti samo Connect() i FTP bounce scan.

-sS (TCP SYN scan)

SYN scan je defaultni i najpopularniji način skeniranja i to zbog opravdanih razloga. Može ga se izvesti brzo, može skenirati tisuće portova u sekundi na brzim mrežama koje nisu opterećene firewall uređajima koji utječu na kretanje paketa. SYN scan je relativno neagresivan i nevidljiv, jer nikad ne završi TCP konekciju (ne uspostavi trostruko rukovanje do kraja). Također je jednako efikasan na svim implementacijama TCP stacka, jer ne ovisi o specifičnim platformama kao što je to slučaj kod Nmap-ovog Fin/Null/Xmas, Maimon i Idle skena. Također je u mogućnosti čisto i pouzdano razlučiti između otvorenog, zatvorenog i filtriranog stanja porta.

Tehnika SYN scana se najčešće naziva poluotvoreno skeniranje, jer nikad ne uspostavite potpunu TCP konekciju. Naime, pošaljete SYN paket, kao što bi ga poslali u slučaju da želite uspostaviti stvarnu TCP konekciju i čekate na odgovor. Ako kao odgovor dobijete SYN/ACK, znači da postoji aplikacija koja sluša na tom portu (port je otvoren), dok RST (reset) znači da ne postoji aplikacija koja sluša na tom portu (port je zatvoren). Ukoliko i nakon nekoliko ponovnih slanja upita nema nikakvog odgovorar, port je okarakteriziran kao filtriran. Port je također označen kao filtriran ako kao odgovor dođe ICMP unreachable error (ICMP nedostupan - tip 3, kodovi 1, 2, 3, 9, 10 ili 13).

-sT (TCP connect() scan)

TCP Connect() scan je defaultni TCP tip skeniranja ukoliko je SYN scan nedostupan. To se događa u slučajevima kad korisnik nema privilegiju slanja raw paketa ili kad je skenirani host na IPv6 mreži. Umjesto da šalje raw pakete, kao što to radi većina drugih tipova skeniranja, Nmap zatraži operativni sustav da uspostavi konekciju s ciljanim računalom na poru kojiželimo skenirati, na način da pošalje connect() sistemski poziv. To je isti sistemski poziv koji koriste web preglednici, P2P klijenti i većina drugih mrežnih aplikacija kad ž ele uspostaviti konekciju. Dio je programskog unosa poznatog kao Berkeley Sockets API. Umjesto da iščitava raw pakete Nmap koristi navedeni API kako bi dobio statusne informacije svake pokušane konekcije.

Ukoliko je SYN scan dostupan, obično je i bolji odabir. Naime, Nmap ima puno manje kontrole nad connect() API pozivom, nego nad raw paketima, te je samim tim Nap manje efikasan. Sistemski poziv napravi potpunu konekciju na otvorene portove ciljanog računala umjesto da napravi reset kao što je slučaj kod SYN skena. Tim postupkom ne samo da gubimo više vremena kako bi saznali da li su portovi otvoreni ili ne, nego postoji i veća vjerovatnost dsa će host zapisati u log pokušaj spajanja. Činjenica je da će svaki IDS sustav logirati i SYN i Connect scan, ali isto tako je činjenica da većina računala nema IDS sustav. Većina servisa na UNIX-oidima će dodati zapis u syslog i (ponekad) kriptičnu poruku o grešci, kad se Nmap spoji i odmah odspoji bez slanja podataka. Jadno napisani servisi se skrše kad se to dogodi, mada je to stvarno rijetkost. Administrator koji vidi hrpu pokušaja spajanja u logovima koji su svi inicirani s jednog hosta, odmah će znati da je netko skenirao portove Connect() metodom.

-sU (UDP skenovi)

Iako većina popularnih servisa na internetu korisiti TCP protokol, UDP servisi su isto tako široko zastupljeni. DNS, SNMP i DHCP (registrirani portovi 53, 161/162 i 67/68) su tri najpoznatija. Zbog toga što je UDP skeniranje mnogo sporije i teže za izvesti nego TCP, neki sigurnosni auditori, ignoriraju UDP portove. To je velika pogreška, jer su exploitabilni UDP servisi česta pojava i napadači ih sigurno neće ignorirati. Srećom, Nmap može pomoći u istraživanju UDP portova.

UDP scan aktivirate naredbom -sU. Može biti kombinirana s TCP skenom poput SYN skena ( -sS), kako bi oba protokola bili provjereni "jednim udarcem".

UDP scan radi na način da pošalje prazan UDP header (bez podataka) na svaki ciljani port. Ukoliko je vraćen ICMP port unreachable (ICMP nedostupan port) i to tip 3 kod 3, onda je port zatvoren. Druge ICMP greške (tip 3, kodovi 1, 2, 9, 10 ili 13) označavaju port kao filtriran.Povremeno će servis odgovriti s UDP paketom, dokazujući da je port otvoren. Ukoliko nakon nekoliko retransmisija nema nikakvog odgovora, port je okarakteriziran kao otvoren|filtriran. To znači da bi port mogao biti otvoren ili možda paket filteri blokiraju promet prema njemu. Version scan (-sV) može pomoći da se ustanovi koji portovi su stvarno otvoreni, a koji su filtrirani.

Veliki izaziv kod skeniranja UDP portova je napraviti ti brzo. Otvoreni i filtrirani portovi rijetko pošalju ikakav odgovor, ostavljajući Nmap da napravi time out, te nakon toga ponovno pošalje paket u slučaju da je prethodni iz bilo kojeg razloga bio izgubljen. Zatvoreni portovi su često još veći problem. Oni najčešće pošalju kao odgovor ICMP port unreacheble grešku. No, za razliku od RST paketa koje pošalju zatvoreni portovi na TCP protokolu kao odgovr na SYN ili Connect() scan, mnogi hostovi ograničavaju ICMP port urnreachable poruku po defaultu. Linnux i Solaris su jako striktni vezano za to. Tako npr. Linux 2.4.20 kernel ograničava destination unreachable poruku na jednu po sekundi (u net/ipv4/icmp.c biblioteci)..

Nmap pokušava ustanoviti da li je to slučaj i smanjuje brzinu skeniranja veano uz to, kako bi spriječio zaguš ivanje nekorisnim paketima koje će ciljano računalo tako i tako tiho odbaciti. Nažalost, spomenuti limit koji je postavljen kod linuxa, znači da će skeniranje svih 65536 portova trajati više od 18 sati. Ideja ubrzavanja UDP skena je da se paralelno skenira više hostova, na način da se najprije skleniraju najpopularniji portovi na brz način, skenirajući iza firewall-a i koristeći --host-timeout kako bi se izbjegli spori hostovi.

-sN; -sF; -sX (TCP Null, FIN i Xmas skenovi)

Ova tri tipa skenova (moguće ih je postići i više korištenjem --scanflags opcije opisane u sljedećoj sekciji) iskorištavaju rupu u standardu TCP RFC , kako bi razlučili koji port je otvoren, a koji zatvoren. Na strani 65 piše: Ukoliko je stanje odredišnog porta ZATVORENO ... dolazeći segment koji ne sadrži RST prouzročuje da RST bude poslan kao odgovor. Na idućoj stranici se raspravlja o paketima poslanim na otovorene portove bez upaljenih SYN, RST ili ACK bitova i kaže da: najvjerovatnije se nećete naći u takovoj situaciji, ali ako se nađete, jednostavno odbacite paket.

Kod skeniranja sistema koji su kompatibilni s tim RFC tekstom, svaki paket koji u sebi ima upaljene bitove SYN, RST ili ACK rezzultirat će vraćenim RST paketom ako je port zatvoren, a neće dati nikakav odgovor, ako je port otvoren. Dok god nije upaljen niti jedan od tih bitova, bilo koja kombinacija druga tri bita (FIN, PSH i URG) je u redu. Nmap to iskorištava s tri dolje navedena tipa skeniranja:

Null scan (-sN)

Ne uključuje niti jedan od bitova (TCP oznaka zaglavlja je 0)

FIN scan (-sF)

Uključuje samo TCP FIN bit

Xmas scan (-sX)

Uključuje FIN, PSH i URG flagove, "osvjetljavajući" paket kao božićno drvce. (op. prev. Xmas=Božić

Sva tri tipa skeniranja su potpuno ista što se ponašanja tiče, samo što su im upaljene različite TCP oznake u paketima. Ukoliko je kao odgovor dobiven RST paket, port se smatra zatvorenim, dok situacija u kojoj nema odgovora, smatra da je port otvoren|filtriran. Port je označen kao filtriran, ako je odgovor na scan ICMP unreachable greška (tip 3, kodovi 1, 2, 3, 9, 10 ili 13).

Glavna prednost ovih tipova skeniranja je ta da mogu "proviriti" kroz neke ne stateful firewall uređaje i paket filtering rutere. Druga prednost im je ta da su još više nevidljivi od SYN skena. No, nemojte se u to pouzdavati, jer većina modernih IDS sustava može biti konfigurirana da ih prepozna. Veliki nedostatak je da ne podržavaju svi sistemi RFC 793 do zadnjeg slova, pa tako većina sustava odgovara RST paketom bez obzira na to da li je port otvoren ili nije. Kod takvih sustava su svi portovi koje Nmap skenira okarakterizirani kao zatvoreni . Većina operativnih sustava koji se tako ponašaju su Microsoft Windows, većina Cisco uređaja, BSDI i IBM OS/400. No, ovaj tip skeniranja radi na većini UNIX sustava. Dodatan nedostatak ovih tipova skenova je taj što ne mogu razlikovati otvorene portove od nekih filtriranih , te kao odgovor dobijete otvoren|filtriran, pa si vi mislite...

-sA (TCP ACK scan)

Ovaj tip skeniranja razlikuje se od ostalih do sad opisanih po tome što nikad ne otkrije otvorene ili čak otvorene|filtrirane portove. Namjena mu je mapirati pravila firewall-a, tj. da zaključi da li je firewall stateful, te koji su portovi filtrirani.

Kad je u pitanju ACK scan, onda je upaljena samo ACK zastavica (flag) (osim ako koristite --scanflags ). Kad skenirate nefiltrirane hostove, otvoreni i zatvoreni portovi će vratiti RST paket. Nmap ih u tom slučaju označi kao nefiltrirane, što znači da su dostupni ACK paketima, ali nije definirano da li su otvoreni ili zatvoreni. Portovi koji ne odgovaraju na upite ili pošalju određene ICMP greške (tip 3, kod 1, 2, 3, 9, 10 ili 13) su označeni kao filtrirani.

-sW (TCP Window scan)

Window scan je sličan ACK scanu, samo što exploatira implamentacijske detalje operativnih sustava kako bi razlučio otvorene portove od zatvorenih, umjesto da uvijek ispiše nefiltriran kad dobije RST kao odgovor. To radi na način da pregleda TCP Window polje RST paketa koji je dobio. Na nekim sustavima otovreni portovi koriste pozitivnu veličinu prozora (čak i za RST pakete), dok zatvoreni portovi imaju prozor veličine 0. Dakle, umjesto da uvijek označi port kao nefiltriran kad dobije RST kao odgovor, Window scan označi portove kao otvorene ili zatvorene, ovisno o tome da li je veličina prozora pozitivna ili 0.

Ovaj način skeniranja se pouzdaje u implementacijske detalje nekih operativnih sustava, tako da mu ne morate uvijek vjerovati. Sistemi koji su "otporni" na ovaj način skeniranja obično će vratiti sve portove kao zatvorene. Naravno isto tako je moguće da računal stvarno nema otovrenih portova. Ukoliko je većina portova zatvorena, ali ima onih koji su označeni kao filtrirani, (npr. češće korišteni portovi poput 22, 25, 53) , sustav je podložan ovom načinu skeniranja i rezultat je najvjerovatnije ispravan. Ukoliko pokrenete sken koji vam vrati 1000 zatvorenih portova i 3 otvorena ili filtrirana porta, najvjerovatnije su ta 3 porta uistinu i otvorena.

-sM (TCP Maimon scan)

Maimon scan je dobio naziv po osobi koja ga je otkrila - Uriel Maimon. Tehniku skeniranja je opisao u časopisu Phrack broj 49 (Studeni 1996). Nmap je izdan 2 godine kasnije i omogućavao je tu tehniku skeniranja. Tehnika je ista kao i Null, Xmas i FIN scan, osim što je paket koji se šalje FIN/ACK. Po RFC dokumentu 793 (TCP), treba odgovoriti RST paketom, bez obzira da li je port otvoren ili zatvoren. No, Uriel je primjetio da većina BSD sistema jednostavno odbaci paket ako je port otvoren.

--scanflags (Custom TCP scan)

Napredni Nmap korisnici nisu vezani uz poznate tipove skenova. --scanflags opcija dozvoljava da dizajnirate vlastiti tip skeniranja, navodeći bilo koju kombinaciju TCP zastavica (flagova). Neka važi kreativni sokovi teku, dok izbjegavate otkrivanje svojih radnji od strane IDS sustava čiji su autori samo prošli kroz Nmap opcije i dodali pravila koja prepoznaju navedene tipove skeniranja.

--scanflags argument može biti brojčana vrijednost poput 9 (PSH i FIN), ali korištenje simboličnih imena je jednostavnije. Jednostavno izmješajte zajedno bilo koju kombinaciju zastavica (flagova) URG, ACK, PSH, RST, SYN i FIN. Npr. --scanflags URGACKPSHRSTSYNFIN postavlja sve zastavice, ali nije pretjerano koristan za skeniranje. Redosljed navođenja zastavica je nebitan.

Uz navođenje željenih zastavica, možete navesti i bazni TCP tip skeniranja (poput -sA ili -sF), što će objasniti Nmap-u kako da interpretira odgovore. Npr. SYN scan tretira paket na koji nije dobio odgovor kao filtriran port, dok ga FIN scan tretira kao otvoren|filtriran. Nmap će se ponašati isto kao što se ponaša kod specificiranog baznog skena, osim što će koristiti zastavice koje ste naveli. Ukoliko ne navedete bazni tip skeniranja, koristit će se SYN scan.

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

Ova napredna metoda skeniranja omogućava slijepo skeniranje ciljanog računala (niti jedan paket nije poslan na ciljano računalo s vaše stvarne IP adrese).Umjesto toga koristite zombie host računalo i predvidljiv IP fragmentation ID na njemu kako bi dobili informaciju o tome koji su portovi otvoreni na ciljanom računalu. IDS sustavi će pokazati da scan dolazi sa zombie mašine kojju ste specificirali kod pokretanja ovog tipa skeniranja (zombie mora biti upaljen i mora zadovoljavati neke kriterije). Ovaj način skeniranja je prekompleksan da bi ga ovdje opisali u potpunosti, pa sam napisao i postao informativni članak sa svim detaljima na https://nmap.org/book/idlescan.html.

Osim što je nevjerovatno nevidljiv (zbog načina na koji radi) ovaj tip skeniranja omogućava mapiranje IP baziranih pravila između računala. Ispis portova pokazuje otvorene portove kako ih vidi zombi računalo. Dakle, možete koristiti više zombie računala za skeniranje ciljanog računala.

Možete staviti dvotočku i broj porta iza nje, kako bi na tom portu provjerili da li su IPID promjene predvidljive. Ukoliko to ne navedete, Nmap će koristiti standardni port za TCP pinganje (80).

-sO (IP protocol scan)

IP protokol scan Vam omogućava da provjerite koji IP protokoli (TCP, ICMP, IGMP isl.) su podržani na ciljanim mašinama. Tehnički gledano, to i nije port scan jer prolazi kroz brojeve IP protokola, a ne kroz brojeve TCP i UDP portova. No ipak koristi opciju -p, kako bi odabrao skenirane brojeve IP protokola, ispisuje rezultate u normalnoj tabeli kao i kod skeniranja portova, pa čak koristi i isti engine za skeniranje kao i kod skeniranja portova. Kad sve to uzmemo u obzir - ova metoda skeniranja je dovoljno slična skeniranju portova, pa je stoga i uključena u ovo poglavlje.

Osim što je koristan sam po sebi, protokol scan pokazuje i snagu open source softvera. Iako je temeljna metoda vrlo jednostavna, nisam je mislio uključiti u Nmap, niti sam dobio zahtjev za tom funkcionalnošću, sve dok u ljeto 2000, Gerhard Rieger nije razvio ideju, napisao izvanredan patch koji to implementira u Nmap i posalo na nmap-hakers listu. Uključio sam taj patch u Nmap i pustio novu verziju već drugi dan. Jako malo komercijalnog softvera ima korisnike koji su toliki entuzijasti da bi razvili vlastita poboljšanja za pojedine produkte!

Protokol scan radi vrlo slično kao i UDP scan. Umjesto da prolazi kroz brojeve portova UDP paketa, šalje IP pakete i prolazi kroz 8 bitnio polje samog IP protokola. Headeri (zaglavlja) su obično prazni i ne sadrže nikakve podatke, pa čak niti ispravni header za određeni protokol. Izuzeci od tog pravila su TCP, UDP i ICMP protokol. Za te protokole je uključen ispravan protokol header (zaglavlje), jer neki sustavi u suprotonom ne žele poslati paket, tako da Nmap već ima funkcije za kreiranje ispravnih headera. Umjesto da čeka ICMP unreachable poruku, protokol scan traži ICMP protoKol unreachable poruku. Ukoliko Nmap dobije bilo kakav odgovor u bilo kojem protokolu od ciljanog računala, Nmap označi taj protokol kao oOtvoren. ICMP protocol unreachable greška (tip 3, kod 2) označi protokol kao Zatvoren. Sve ostale ICMP poruke (tip 3, kod 1, 3, 9, 10 i 13) označe protokol kao filtriran (iako je to istovremeno dokaz da je ICMP protokol otvoren). Ukoliko ne dođe nikakav odgovor nakon ponovnih pokušaja slanja, protokol je označen kao otvoren|filtriran.

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

Zanimljiva funkcionalnost FTP protokola (RFC 959) je podrška za tzv. proxy ftp konekcije. To omogućuje korisniku da se spoji na jedan FTP server, te nakon toga zatraži da fileovi budu poslani na neki drugi FTP server. Ta funkcionalnost je sazrijela za napade na mnogo nivoa, tako da je većina servera prestala pružati podršku za to. Jedan od napada koji je izvediv je taj da omogućava napadaču natjerati FTP server da skenira druge FTP servera u potrazi za otvorenim portovima. Jednostavno zatražite od FTP servera da poš alje datoteku na svaki od portova koji vas zanima na ciljanom računalu. Poruka o grešci koju ćete dobiti će vam raći da li je port otvoren ili nije. To je ujedno i dobar način obilaženja firewall-a (vatrozida), jer su mnogi FTP serveri smješteni tamo gdje imaju veći pristup unutrašnjim računalima, nego bilo koje računalo s interneta. Nmap podržava FTP bounce scan s opcijom -b. Prima parametar u sljedećem obliku: <username>: <password>@<server>:<port>. <Server> je naziv ili IP adresa ranjivog FTP servera. Kao i kod normalnog URL-a, možete zanemariti <username>:<password>, te ćete se u tom slučaju spojiti kao anonymous user i koriste se sljedeći parametri anonymous password:-wwwuser@. Broj porta i dvotočka ispred njega također mogu biti zanemarini, a u tom slučaju ćete se spojiti na standardni FTP port (21).

1997., kad je Nmap lansiran, ova ranjivost je bila široko rasprostranjena, ali do sad je uglavnom "pokrpana" na većini računala. Ipak, još uvijek postoji ranjivi serveri, pa nije loše pokušati i ovu opciju kad sve oostale zataje. Ukoliko je obilaženje vatrozida vaš cilj, skenirajte ciljanu mrežu za otvorenim portom 21 (ili bilo koji ftp servis, ako skenirate sve portove s otkrivanjem verzije programa - version detection), te nakon toga pokušajte ftp bounce scan. Nmap će vam reći da li je host ranjiv ili nije. Ukoliko samo pokušavate sakriti tragove, ne biste trebali (u stvari ne biste smjeli) skenirati samo hostove na ciljanoj mreži. No, prije nego nasumično počnete skenirati za ranjivim ftp serverima na internetu, imajte na umu da većina sysadmina neće cijeniti što im "iskorištavate" servere na taj način