Postupak Pronalaženja hostova

Jedan od prvih koraka kad je u pitanju sakupljanje informacija o mreži je smanjivanje (ponekad velike) količine IP adresnih područja u popis aktivnih i zanimljivih hostova. Skeniranje svih portova za svaku adresu je sporo i najčešće nepotrebno. Naravno, ono što nekog hosta čini zanimljivim uvelike ovisi o razlogu samog skena. Mrežni administratori će možda biti zainteresirani samo za hostove koji imaju pokrenut određeni servis, dok će sigurnosni auditori biti zainteresirani za svaki uređaj s IP adresom. Administratoru će možda biti dovoljno korištenje ICMP pinga kako bi pronašao hostove na mreži, dok će vanjski penetration tester koristiti široki spektar alata i nebrojene sonde u pokušaju da obiđe zabrane postavljene na vatrozidu.

Budući da su potrebe korisnika kod pronalaženja hostova tako različite, Nmap nudi široki spektar opcija za prilagođavanje korištenim tehnikama. Pronalaženje hostova (engl host discovery) se ponekad naziva Ping scan, ali ide daleko dalje od običnog ICMP echo paketa povezanog sa sveprisutnim ping alatom. Korisnici mogu preskočiti dio pinganja s list skenom (-sL) ili isključivanjem pinganja (-P0) ili da pristupe mreži s kombinacijama multi port TCP SYN/ACK, UDP i ICMP sondi. Namjena tih sondi je iznuđivanje odgovora koji dokazuje da je IP adresa u stvari aktivna (korištena je od strane hosta ili mrežnog uređaja). Na većini mreža je samo jedan mali postotak IP adresa aktivan. To je pogotovo točno za mreže blagoslovljene RFC1918 dokumentom (privatni adresni prostor poput 10.0.0.0/8). Navedena mreža ima 16 miliona IP adresa, ali imao sam prilike vidjeti da je koriste firme s manje od tisuću mašina. Postupak pronalaženja hostova može pronaći koja su to računala u tom moru neaktivnih IP adresa.

Ukoliko ne navedete nikakvu opciju Postupku pronalaženja hostova, Nmap šalje TCP ACK paket namjenjen portu 80 i ICMP echo zahtijev na ciljano računalo. Izuzetak od ovog pravila je taj da je ARP sken korišten za ciljana računala na lokalnoj ethernet mreži. Za neprivilegirane UNIX shell korisnike, Nmap šalje SYN paket umjesto ACK-a korištenjem connect() sistemskog poziva. To je jednako opcijama -PA -PE. Takav način pronalaženja hostova je obično dostatan kad su u pitanju lokalne mreže, ali preporučen je malo potpuniji set sondi za istraživanje kod sigurnosnog auditinga.

Opcija -P* (koja odabire ping tipove) može biti kombinirana. Možete povećati šanse provaljivanja vatrozida slanjem mnogo sondi koje koriste različite TCP portove/zastavice (engl. flags) i ICMP kodove. Također imajte na umu da se po defaultu na lokalnoj mreži za otkrivanje hostova koristi ARP discovery (-PR) čak i kad navedete druge -P* opcije zbog toga jer je gotovo uvijek brži i efikasniji.

Sljedeće opcije upravljaju postupkom otkrivanja hostova.

-sL (List Sken)

List sken nije skeniranje hosta, već saznavanje nekih javno dostupnih informacija o njemu bez slanja ijednog paketa prema tom hostu. List scan jednostavno ispiše svakog hosta kojeg smo specificirali i napravi reverse DNS rezoluciju da bi saznao njegovo ime. Iznenađujuće je koliko korisnih informacija možete dobiti ovim načinom "skeniranja". Npr. fw.chi.playboy.com je vatrozid Čikaškog (Chichago) ureda firme Playboy Enterprises. Nmap na kraju navede i ukupan broj IP adresa koje pripadaju tom hostu. List Sken je koristan u situacijama kada se želite uvjeriti da imate ispravne IP adrese koje želite skenirati. Ukoliko List sken izbaci nazive domena koje ne poznajete bilo bi dobro provjeriti prije nego pokrenete skeniranje, jer ne bi bilo dobro da počnete skenirati krive hostove ;-).

Kako je ideja samo ispisati popis ciljanih hostova, ne možete kombinirati opcije za funkcionalnosti višeg nivoa, poput skeniranja portova, detekcije OS-a, ping skeniranja isl. Ukoliko želite isključiti ping skeniranje, a ipak koristiti funkcionalnosti višeg nivoa, pročitajte opis -P0 opcije.

-sP (Ping Sken)

Ova opcija kaže Nmap-u da napravi samo ping sken (otkrivanje hostova) i da ispiše hostove koji su odgovorili na skeniranje. Ne radi se nikakvo dodatno testiranje (poput port skeniranja ili detekcije OS-a). To je način skeniranja koji je stupanj intruzivniji od list skena ali se može koristiti u istu svrhu. Dozvoljava lagano "pretraživanje neprijateljskog teritorija" (engl. reconnaissance), bez pretjeranog privlačenja pažnje, jer znati koliko hostova je stvarno "živo" na mreži je važnija informacija za napadača ili sigurnosnog auditora, nego lista koju je izbacio list scans popisom svih IP adresa i hostova koji postoje.

Sistemski administratori također nalaze ovu opciju poprilično korisnom. Može se koristiti za pronalaženje dostupnih računala na mreži ili koristiti kao alat za nadgledanje dostupnosti servera. Taj način primjene se naziva ping sweep i mnogo je pouzdaniji od pinganja broadcast adrese zato jer mnogi hostovi ne odgovaraju na broadcast upite. (Konkretno windows mašine ne odgovaraju na broadcast ping, ali odgovaraju na druge tipove broadcast paketa).

Po defaultu -sP opcija šalje ICMP echo i TCP paket na port 80. Kad je pokrenuta od strane neprivilegiranog korisnika (korisnika koji nije lokalni administrator), poslan je SYN paket na port 80 (korištenjem API poziva connect() ). Kad privilegirani korisnik pokušava skenirati hostve na lokalnoj mreži, koriste se ARP zahtjevi (-PR) osim ako nije specificirana opcija --send-ip. Opciju -sP možete kombinirati s bilo kojim tipom otkrivajućih (discovery) tipova skeniranja (sve -P* opcije osim -P0 opcije) kako bi postigli veću fleksibilnost. Ukoliko se koristi bilo koji od tih tipova skeniranja i port broj, automatski su defaultne postavke skeniranja premošćene (ACK i echo zahtjevi). Ukoliko su između hosta na kojem je pokrenut Nmap i ciljanog hosta nalaze vatrozidi, preporuka je koristiti upravo te tehnike kako vatrozid ne bi filtrirao upite ili odgovore na njih.

-P0 (Bez pinganja)

Ova opcija preskače fazu otkrivanja hostova. Ukliko ne koristite ovu opciju, Nmap pokušava ping skeniranjem saznati koja računala su dostupna kako bi SAMO njih i skenirao. Ukoliko koristite ovu opciju Nmap će skenirati svakog navedenog hosta bez obzira da li je dostupan ili ne, jer neće raditi provjeru. Ukoliko odaberete kompletnu klasu B (/16 po CIDR notaciji) Nmap će skenirati svih 65536 hostova, bez obzira da li su "živi" ili ne. Napomena: drugi karakter u ovoj opciji je NULA, a ne veliko slovo O. Ukoliko je na hostu zatvoren ICMP protokol (što je slučaj kod 90% računala na internetu), a niste stavili -P0 opciju, Nmap neće skenirati ta računala, dakle, ukoliko želite skenirati računala koja ne odgovaraju na ICMP echo upit, a znate da postoje i da su "živi" stavite ovu opciju.

-PS [lista_portova] (TCP SYN Ping)

Ova opcija šalje prazan TCP paket s upaljenim SYN flagom. Defaultni odredišni port je 80 (možete se konfigurirati kod kompajliranja programa na način da promijenite DEFAULT_TCP_PROBE_PORT u nmap.h biblioteci), no, možete navesti i neki drugi port kao parametar. Isto tako je moguće poslati zarezom odvojenu listu portova kao parametar ovoj opciji (npr. -PS22, 23,25,80,113,1050,35000). U tom će slučaju nmap poslati paket na svaki od navedenih portova paralelno.

SYN flag u paketu kaže ciljanom hostu da se želite spojiti na navedeni port/portove. Ukoliko je port zatvoren, odgovor koji će Nmap dobiti od ciljanog hosta je RST (reset). Ukoliko je port otvoren, ciljano računalo će poslati SYN/ACK paket, što je drugi korak u trostrukom rukovanju TCP protokola. Računalo na kojem je pokrenut Nmap u tom trenutku prekida konekciju na način da pošalje RST paket (umjesto ACK paketa koji bi završio trostruko rukovanje i uspostavio konekciju sa ciljanim hostom). RST paket je poslao kernel računala na kojem je pokrenut Nmap, jer je dobio SYN/ACK paket koji nije očekivao.

Nmap ne zanima da li je port otvoren ili zatvoren, RST ili SYN/ACK odgovor koji je dobio dovoljan su odgovor da je računalo "živo". Bez obzira na to RST odgovor znači da je računalo tu i da je "živo", dok SYN/ACK odgovor uz to znači i da računalo "sluša" na navedenom portu.

Na UNIX mašinama samo privilegirani korisnik root može slati i primati sirove (RAW) TCP pakete. Za neprivilegirane korisnike napravljen je obilazni put u kojem Nmap automatski poziva connect() API na svaki navedeni port. To je postiglo efekt slanja SYN paketa na coljani host i iniciran je poušaj ostvarivanja konekcije. Ukoliko connect() API vrati brzi odgovor uspješnog spajanja ili ECONNREFUSED grešku, TCP stack na OS-u je dobio SYN/ACK ili RST od ciljanog hosta i host je označen kao dostupan. Ukoliko konekcija "visi" dok ne istekne timeout, ciljani host je označen kao nedostupan (ugašen). Navedeni obilazni put se koristi i kod IPv6 konekcija, je Nmap još nema implementiranu izradu sirovih (RAW) paketa za IPv6 protokol.

-PA [lista_portova] (TCP ACK Ping)

TCP ACK ping je sličan SYN pingu. Razlika je, što je lako zaključiti iz samog naziva, u tome što se umjsto SYN flaga upali ACK flag. Takav paket podrazumijeva da je konekcija već uspostavljena iako nije, samim tim bi ciljani hostovi uvijek trebali odgovoriti s RST paketom, te na taj način potvrditi svoje postojanje.

-PA opcija koristi isti defaultni port kao i SYN scan (port 80) i isto kao i SYN scan može primiti listu portova u istom formatu. Ukoliko neprivilegirani korisnik pokuša pokrenuti Nmap s ovom opcijom ili je u pitanju IPv6 TCP konekcija, koristi se obilazni put opisan u TCP SYN pingu. Ova opcija nije savršena, jer connect() u stvari šalje SYN pakete umjesto ACK paketa

Razlog zašto koristiti i SYN i ACK sonde je radi povećavanja šansi za obilaženje vatrozida. Mnogi administratori konfiguriraju rutere i ostale jednostavne vatrozide na način da zaustavljaju dolazeće SYN pakete osim ako nisu namijenjeni nekim javnim servisima, poput weba ili mail servera. Takav način podešavanja uređaja sprječava nedozovljene konekcije prema računalima tvrtke, ali omogućava neograničen izlazni promet prema internetu. Ovakav pristup konekcija bez stanja (engl. stateless) oduzima malo resursa na vatrozidima/ruterima i podržan je na gotovo svim hardverskim i softverskim filterima. Netfilter/ iptables, poznati vatrozid na Linux operativnom sustavu nudi opciju --syn kako bi mogli implementirati ovakav pristup konekcija bez stanja (engl. stateless). Kod tako konfiguriranih vatrozida, sonde SYN ping (-PS) će najvjerovatnije biti blokirane kad ih pošaljete na zatvorene portove. No međutim, ACK sonde će bez problema prolaziti kroz njih.

Drugi tip vatrozida podržava konekcije sa stanjem (engl. stateful) koji odbacuju sve neočekivane pakete. Ova opcija se u početku koristila samo kod naprednijih vatrozid rješenja, ali je vremenom postala rasprostranjenija. Linux vatrozid Netfilter/iptables podržava ovu opciju korištenjem opcije --state, koja kategorizira pakete vezano uz stanje konekcije. Skeniranjem takvih sustava veća je vjerovatnost da ćemo od SYN sonde dobiti nekakvu informaciju, nego od ACK, jer se ACK sonde koje nemaju uspostavljenu konekciju tretiraju kao lažne i odbačeni su bez ikakvog odgovora. U slučaju dvojbe, najbolje je poslati i SYN i ACK sonde naviođenjem opcija -PS i -PA.

-PU [lista_portova] (UDP Ping)

Još jedna metoda detekcije hostova je i UDP ping. UDP ping šalje prazne UDP pakete (osim ako nije definirana opcija --data-length) na navedene portove. Portlist opcija ima isti format kao i prije obrađene opcije -PS i -PA. Ukoliko nije naveden niti jedan port, defaultni je 31338. To se može promijeniti kod kompajliranja promjenom DEFAULT_UDP_PROBE_PORT u nmap.h biblioteci. Namjerno je odabran visoki nestandardni port, jer bi slanje paketa na otvorene UDP portove dalo neželjene rezultate za ovu vrstu skena.

Nakon što je ciljano računalo dobilo paket na zatvoreni port, trebalo bi odgovoriti ICMP paketom " nedostupan port" (engl. port unreachable). Na osnovu toga Nmap može zaključiti da je ciljani host "živ". Drugi tipovi ICMP grešaka, poput nedostupan host/mreža ili premašen TTL (engl. TTL exceeded) nagovještavaju da je host ugašen ili nedostupan. Ukoliko nema nikakvog odgovora, Nmap također zaključi da je host ugašen/ nedostupan. Ukoliko je paket stigao na otvoreni UDP port, većina servisa će jednostavno ignorirati prazan UDP paket i Nmap neće dobiti nikakav odgovor. Zbog toga je defaultni port 32338, jer je mala mogućnost da će neki servis koristiti taj port. Postoje i neki servisi, poput chargen-a, koji će odgovoriti na prazan UDP paket i na taj način otkriti Nmapu da je host "živ".

Glavna prednost ovog tipa skeniranja je da obilazi vatrozide i paket filtere koji skeniraju samo TCP promet. Npr. Linksys BEFW11S4 bežični (wireless) ruter na vanjskom mrežnom adapteru filtrira samo TCP portove, a na UDP skenove odgovara s ICMP port nedostupan.

-PE; -PP; -PM (ICMP tipovi pinganja)

Uz do sad navedene tipove skeniranja i otkrivanja hostova, Nmap može slati i standardne ICMP pakete korištenjem klasičnog ping programa. Nmap šalje ICMP paket tipa 8 (echo request) na ciljanu IP adresu očekujući odgovor tipa 0 (echo reply), ukoliko je host "živ". Na štetu mrežnih istraživača, većina hostova i vatrozida na internetu blokira te pakete umjesto da na njih odgovara kako je opisano u RFC 1122 dokumentu. Zbog toga su ICMP skenovi rijetko ili gotovo nikad pouzdani kad se ciljani host nalazi na internetu, ali za sistem administratore koji nadgledaju unutrašnje mreže, ovo je praktičan i najjednostavniji pristup za skeniranje hostova. Opisani način skeniranja možete upaliti korištenjem -PE opcije.

Bez obzira na to što je echo zahtijev standardni ICMP ping upit, Nmap se nije zaustavio na tome. Ako pogledate ICMP standard (RFC 792) vidjet ćete da je u njemu naveden i timestamp zahtijev, information zahtijev i zahtijev za adresnom maskom i to pod kodovima 13,15 i 17. Iako je namjena tih upita saznati informacije poput adresne maske i trenutnog vremena, vrlo ih je lako iskoristiti za otkrivanje hostova. Host koji odgovori je "živ". Nmap u trenutnoj verziji ne podržava information zahtijev, jer se ne koristi često. RFC 1122 inzistira na tome da host NE BI TREBAO implementirati taj ICMP tip poruka. Upite za timestamp i adresnu masku možete poslati s -PP i -PM opcijama. Timestamp odgovor (ICMP kod 14) ili odgovor adresne maske (kod 18) otkrivaju da je ciljani host "živ". Ta dva upita su korisni u slučajevima kad administratori blokiraju echo zahtijev pakete, ali zaborave blokirati ostale ICMP pakete.

-PR (ARP Ping)

Jedan od najčešćih scenarija korištenja Nmap-a je skeniranje ethernet LAN-a. Na većini LAN-ova, posebno na onima koji koriste privatne ip adrese definirane u RFC 1918 dokumentu je većina IP adresa u stvari neiskorištena. Kad Nmap pokuša poslati sirovi IP paket poput ICMP echo zahtjeva, operativni sustav mora ustanoviti MAC adresu računala koja pripada ciljanoj IP adresi, kako bi moglo adresirati ethernet frame. To je obično sporo i problematično jer operativni sustavi nisu napisani s pretpostavkom da će u vrlo kratkom vremenskom periodu morati poslati milione ARP zahtjeva prema nepostojećim hostovima.

ARP sken zadužuje Nmap i njegove optimizirane algoritme za ARP zahtjeve i ukoliko Nmap dobije odgovor ne mora uopće pokretati IP bazirani ping, jer već zna da je računalo dostupno. Ovo čini ARP scan mnogo bržim i pouzdanijim od IP baziranog skena, pa se defaultno koristi kod skeniranje hostova na ethernetu za koje Nmap zaključi da su na lokalnoj mreži. Čak ako ste i naveli neke druge tipove pinga, (poput -PE ili -PS), Nmap će koristiti ARP sken za sve hostove koji su na istoj mreži. Ukoliko ne želite koristiti ARP sken, navedite opciju --send-ip.

-n (Bez DNS rezolucije)

Ova opcija kaže Nmap-u da nikad ne radi obrnutu DNS rezoluciju (engl. reverse DNS lookup) na aktivnim IP adresama koje pronađe. Kako je obrnuta DNS rezolucija često spora, ova opcija ubrzava postupak.

-R (DNS rezolucija za sva ciljana računala)

Ova opcija kaže Nmap-u da uvijek radi obrnutu rezoluciju ciljanih IP adresa. U normalnim okolnostima to se radi samo kad je potvrđeno da računalo postoji.

--system-dns (Koristi sistemski DNS rezolver)

Defaultno Nmap radi rezolving adresa slanjem upita direktno imenskim serverima (engl. name servers) koji su podešeni na vašem računalu i čeka odgovore. Mnogo zahtjeva je poslano istovremeno (10 i više) kako bi brže radilo. Ovu opciju navedite ukoliko želite koristiti sistemski rezolver (jedna po jedna IP adresa pozivom sistemskog API poziva getnameinfo()). Ovo je sporije i rijetko je korisno osim ako u Nmap DNS kodu postoji greška -- molim kontaktirajte nas u tom slučaju. Sistemski rezolver se uvijek koristi za IPv6 skenove.

--dns-servers <server1[,server2],...> (Serveri koji će se koristiti za obrnute DNS upite)

U normalnim okolnostima, Nmap će pokušati pronaći vaše DNS servere iz resolv.conf datoteke (na UNIX-u) ili iz registry baze podataka (na Win32). Naravno, postoji mogućnost da navedete servere po želji korištenjem ove opcije. Ova opcija se ne koristi ako koristitite opciju --system-dns ili IPv6 sken. Korištenje više DNS servera je obično brže nego samo jednog.