Descoperirea hosturilor

Nota: Vom imprumuta din limba engleza termenul de host. Acesta se refera la orice element din retea care comunica sau poate comunica. Aceste elemente pot fi statii de lucru, servere, routere, imprimante de retea, etc. Unul din primii pasi ai descoperirii elementelor din retea este reducerea numarului (adesea urias) de IP intr-o lista de hosturi active sau interesante. Scanarea fiecarui port de pe fiecare IP este un proces lent si de obicei inutil. Desigur, ce transforma un host intr-unul interesant depinde in mare parte de scopul scanarii. Administratorii de retea ar putea fi interesati doar de calculatoarele ce ruleaza anumite servicii, in timp ce auditorii de securitate pot fi interesati de toate elementele ce poseda o adresa IP. Unui administrator ii poate fi suficient un simplu pachet ping ICMP pentru localizarea calculatoarelor din reteaua interna, in timp ce un auditor extern poate folosi o multitudine de probe in incercarea de a scapa de restrictiile firewallului.

Deoarece necesitatile in vederea descoperirii hosturilor sunt atat de diverse , Nmap ofera o varietate mare de optiuni de personalizare a tehnicilor folosite. Descoperirea hosturilor este adesea numita scanare ping, dar trece cu mult de simplul stadiu al pachetelor ICMP care solicita un raspuns asociate omniprezentului instrument pingUtilizatorii pot sari de pasul care implica pingul cu o scanare de tip lista ( -sL) sau dezactivand pingul ( -P0), sau angrenand alte combinatii arbitrare de probe multiport TCP SYN/ACK, UDP si ICMP. Scopul acestor probe este sa solicite raspunsuri care sa demonstreze daca o adresa IP este cu adevarat activa (este folosita de un dispozitiv din retea). In multe retele, doar un mic procentaj de adrese IP sunt active la un moment dat. Acest lucru este in mod special adevarat intr-un spatiu de adrese rezervat conform binecuvantatului RFC1918 cum ar fi 10.0.0.0/8. Aceasta retea are 16 milioane de IPuri, dar am vazut ca sunt folosite de companii cu mai putin de o mie de calculatoare. Descoperirea hosturilor poate gasi acele masini risipite in marea de adrese IP.

Daca nu sunt furnizate optiuni de descoperire a hosturilor, Nmap trimite un pachet TCP ACK destinat portului 80 si un pachet de interogare ICMP cu solicitare de raspuns la fiecare masina tinta. O exceptie la acestea este ca scanarea ARP este folosita pentru orice tinta dintr-o retea locala. Pentru utilizatori neprivilegiati cu conturi shell pe sisteme UNIX, sunt trimise pachete SYN in locul celor ack folosind apelul de sistem connect(). Aceste optiuni implicite sunt echivalente cu -PA -PE. Descoperirea hosturilor este de obicei suficienta pentru scanarea retelelor locale, dar un set mult mai cuprinzator de probe pentru descoperire este recomandat in auditul de securitate.

Optiunea -P*(care selecteaza tipul pingului) poate fi combinata. Puteti mari sansele de penetrare a unor firewalluri stricte trimitand mai multe probe folosind diferite porturi/flaguri (indicatori din pachetele) TCP si coduri ICMP. Notati de asemenea ca descoperirea ARP ( -PR) este executata implicit impotriva tintelor dintr-o retea locala chiar daca specificati alta optiune -P*, deoarece este aproape intotdeauna mai rapida si mai eficienta.

Urmatoarele optiuni controleaza descoperirea hosturilor.

-sL(Scanarea de tip lista)

Scanarea de tip lista este o forma degenerata de descoperire a hosturilor care listeaza fiecare host al retelei specificate, fara a trimite nici un pachet tintelor. In mod implicit, Nmap realizeaza totusi o rezolutie inversa DNS pentru a afla si numele tintelor. Adesea este surprinzator cate informatii utile ne pot oferi simplele nume ale hosturilor. De exemplu, fw.chi.playboy.comeste firewallul biroului din Chicago al Playboy Enterprises. Nmap raporteaza numarul total de adrese IP la sfarsit. Scanarea de tip lista este o buna verificare a faptului ca aveti adresele IP corecte pentru tinte. Daca hosturile au nume pe care nu le recunoasteti, este bine sa investigati in profunzime pentru a nu scana reteaua unei alte companii.

Din moment ce ideea este de afisa o lista cu tinte, optiunile pentru un nivel mai inalt de functionalitate cum ar fi scanare de porturi, detectia sistemului de operare sau scanarea ping nu pot fi combinate cu aceasta. Daca doriti dezactivarea scanarea ping si in acelasi timp sa executati tehnicile corespunzatoare nivelului inalt de functionalitate, cititi paragraful destinat optiunii -P0.

-sP(Scanare ping)

Aceasta optiune spune Nmapului sa realizeze numaio scanare ping (descoperirea hosturilor) si apoi sa afiseze hosturile disponibile care raspund la scanare. Nici un alt fel de test (cum ar fi scanarea de porturi sau detectia sistemului de operare) nu va fi realizat. Acest pas este mai intruziv decat scanarea de tip lista si poate fi folosita adesea in acelasi scop. Permite o descoperire a tintelor din retea fara a atrage prea mult atentia. Cunoscand cate hosturi sunt active este o informatie mult mai valoroasa unui atacator decat simpla lista furizata de scanarea de tip lista a fiecarei adrese IP si a numelor hosturilor.

Administratorii de sistem gasesc adesea aceasta optiune pretioasa ca atare. Poate fi usor utilizat pentru numararea masinilor disponibile intr-o retea sau pentru monitorizarea disponibilitatii serverelor. Adesea este denumita maturare ping si este mai de incredere decat pingul asupra adresei de broadcast deoarece multe hosturi nu raspund la solicitarile de broadcast.

Optiunea -sPtrimite un pachet ICMP cu solicitare de raspuns si un pachet TCP la portul 80 in mod implicit. Cand se executa de catre un utilizator neprivilegiat, un pachet SYN este trimis (folosin apelul connect()) la portul 80 al tintei. Cand un utilizator privilegiat incearca sa scaneze tinte dintr-o retea locala, solicitari ARP ( -PR) sunt utilizate, doar daca --send-ip(adresa IP de expediere) a fost specificat. Optiunea -sPpoate fi combinata cu oricare dintre tipurile de probe de descoperire (optiunile -P*, exluzand -P0) pentru o mai mare flexibilitate. Daca oricare dintre tipurile de probe si optiuni de porturi sunt utilizate, se renunta la probele implicite (ACK si ICMP cu solicitare de raspuns). Cand firewalluri stricte sunt plasate intre calculatorul sursa care ruleaza Nmap si reteaua tinta, folosirea acelor tehnici avansate este recomandata. Altfel, hosturi pot ramane nedescoperite cand firewallul executa comanda drop (pur si simplu ignora pachetele) la probe sau la raspunsuri.

-P0(Fara ping)

Aceasta optiune sare complet peste faza de descoperire. In mod normal, Nmap foloseste aceasta faza pentru a determina masinile active pentru scanarea avansata. Implicit, Nmap realizeaza scanarea avansata cum ar fi scanarea de porturi, detectia versiunii si a sistemului de operare doar pentru hosturile gasite active. Dezactivarea descoperirii hosturilor cu -P0face ca Nmap sa incerce tehnicile avansate de scanare pentru fiecareadresa IP specificata ca tinta. Asadar, daca spatiul unei clase B (/16) este specificata in linia de comanda, toate cele 65,536 de IP vor fi scanate cu tehnicile avansate. Cel de-al doilea caracter din optiunea -P0este un zero si nu litera O. Descoperirea obisnuita a hosturilor este sarita execucandu-se o scanare de tip lista, dar in loc sa se opreasca si sa afiseze lista de tinte, Nmap continua sa realizeze cererile din linia de comanda ca si cum fiecare adresa IP ar fi activa.

-PS [listadeporturi](Ping TCP SYN)

Aceasta optiune trimite un pachet TCP gol cu flagul SYN setat. Portul de destinatie implicit este 80 (configurabil la compilare prin schimbarea DEFAULT_TCP_PROBE_PORT in nmap.h), dar un alt port poate fi specificat ca parametru. Chiar o lista separata prin virgula de porturi poate fi specificata (de exemplu -PS22,23,25,80,113,1050,35000),caz in care probele vor fi trimise la fiecare port in paralel.

Flagul SYN sugereaza tintei ca dorim sa stabilim o conexiune. In mod normal portul destinatie va fi inchis si un pachet RST (de resetare) este trimis inapoi. Daca se intampla ca portul sa fie deschis, tinta va face cel de-al doilea pas dintr-un 3-way-handshake (stabilirea unei conexiuni in trei pasi) raspunzand cu un pachet TCP SYN/ACK. Masina care ruleaza nmap va inchide apoi conexiunea raspunzand cu un pachet RST in loc sa trimita pachetul ACK care ar completa 3-way-handshakeul si ar stabili o conexiune completa. Pachetul RST este trimis de kernelul sistemului de operare al masinii care ruleaza Nmap ca raspuns la pachetul SYN/ACK neasteptat, si nu de catre Nmap ca atare.

Nmapului nu ii pasa daca portul este deschis sau inchis. Fie ca este RST sau SYN/ACK dupa cum s-a vazut anterior, raspunsul anunta Nmapul ca hostul este activ si raspunde la probe

Pe masinile UNIX, numai utilizatorii privilegiati rootsunt capabili sa trimita si sa primeasca pachete TCP in forma bruta. Pentru utilizatorii neprivilegiati, un ocolis este automat pus in functiune si implica apelul de sistem connect() initiat impotriva fiecarui port tinta. Acesta are ca efect trimiterea unui pachet SYN catre tinta, intr-o incercare de a stabili conexiunea. Daca connect() returneaza o valoare care indica succesul operatiunii sau un raspuns ECONNREFUSED (conexiune refuzata), inseamna ca nivelele inferioare ale stivei TCP au primit un SYN/ACK sau RST iar hostul este marcat ca fiind disponibil. Daca tentativa de conexiune este lasata sa astepte un timp mai mare decat timeoutul (timpul maxim in care se asteapta un raspuns), hostul este marcat ca indisponibil. Acest ocolis este utilizat si pentru conexiunile IPv6, deoarece constructia pachetelor brute IPv6 nu este inca suportata de Nmap.

-PA [lista_de_porturi](Ping TCP ACK)

Pingul TCP ACK este similar cu proaspat discutatul ping SYN. Diferenta, dupa cum probabil ati ghicit, este ca flagul TCP ACK este setat in locul celui SYN. Un astfel de pachet ACK pretinde ca transporta date in cadrul unei conexiuni ACK deja stabilite, dar nu exista nici o astfel de conexiune. Asadar tintele trebuie sa raspunda intotdeauna cu un pachet RST, dezvaluindu-si existenta in cadrul acestui proces.

Optiunea -PAfoloseste acelasi port implicit ca probele SYN si de asemenea poate prelua o lista de porturi destinatie in acelasi format. Daca un utilizator neprivilegiat incearca aceasta optiune, sau o tinta IPv6 este specificata, ocolisul connect() discutat anterior este utilizat. Acest ocolis este imperfect deoarece connect() trimite de fapt un pachet SYN in locul unuia ACK.

Motivul oferirii ambelor probe de ping SYN si ACK este de a maximiza sansele de trecere printr-un firewall. Multi administratori configureaza routerele si alte firewalluri simple pentru a bloca pachetele SYN cu exceptia acelora destinate serviciilor publice cum ar fi serverul web sau serverul de mail al companiei. Acest lucru previne realizarea altor conexiuni catre reteaua organizatiei, in timp ce permite utilizatorilor sa realizeze neobstructionati conexiuni catre Internet. Aceasta abordare non-statefull sau stateless (nu se analizeaza ACK) utilizeaza putine resurse ale firewallului sau routerului si este suportata intr-un procent mare de filtrele hardware sau software. Firewallul software din Linux Netfilter/iptables ofera o optiune convenabila --synpentru implementarea acestei abordari stateless. Cand firewalluri stateless ca acestea sunt in functiune, probele ping SYN ( -PS) vor fi mai mult ca sigur blocate in drumul lor catre porturi tinta inchise. In aceste cazuri, probele ACK stralucesc deoarece trec cu usurinta de aceste reguli.

Alt tip comun de firewalluri folosesc reguli statefull care ignora pachetele ce nu sunt asteptate. Aceasta optiune a fost initial gasita doar in firewallurile high-end, dar a devenit mult mai comuna de-a lungul timpului. In linux, sistemul Netfilter/iptables suporta aceasta abordare prin optiunea --state, care catalogheaza pachetele in functie de starea conexiunii. O proba SYN este mai probabil sa functioneze impotriva unui astfel de sistem din moment ce pachetele neasteptate sunt in general recunoscute ca fiind simulate si ignorate. O solutie la aceasta dilema este trimiterea ambelor probe, SYN si ACK, specificand -PSsi -PA.

-PU [lista_de_porturi](Ping UDP)

Alta optiune de descoperire a hosturilor este pingul UDP, care trimite un pachet gol (doar daca optiunea --data-lengthnu este specificata) UDP la portul specificat. Lista de porturi are acelasi format cu cel discutat anterior la optiunile -PSsi -PA. daca nici un port nu este specificat, implicit este utilizat 31338. Aceasta valoare implicita poate fi configurata la compilare schimband DEFAULT_PROBE_PORT in nmap.h. Un port necomun este folosit implicit deoarece trimiterea unui pachet la un port deschis nu este de dorit pentru acest tip de scanare.

Dupa trimiterea probei catre un port inchis al tintei, proba UDP trebuie sa obtina un pachet ICMP de port indisponibil. Acest lucru semnalizeaza Nmapul ca masina este activa si disponibila. Multe alte tipuri de erori ICMP, cum ar fi cele de host/retea ce nu pot fi contactate sau TTL (time to live = timp de viata; timpul maxim admis pentru asteptarea raspunsului) depasit sunt indicatori al unui host inactiv sau care nu poate fi contactat. Lipsa unui raspuns este interpretata la fel. Daca un port deschis este nimerit de pachetul de proba, multe servicii vor ignora pachetul si nu vor returna nici un raspuns. De aceea portul de proba este 31338, care are o probabilitate mare sa nu fie utilizat. Cateva servicii vor raspunde totusi la un pachet UDP gol, dezvaluind in acest fel Nmapului faptul ca masina este disponibila.

Principalul avantaj al acestui tip de scanare este ca poate trece de firewallurile si filtrele care monitorizeaza doar traficul TCP. De exemplu, am avut o data un router wireless Linksys BEFW11S4. Interfata externa a acestui dispozitiv filtra in mod implicit toate porturile TCP, dar probele UDP puteau totusi sa obtina mesajele de port indisponibil si in felul acesta sa arate starea hostului.

-PE; -PP; -PM(Tipuri de ping ICMP)

Pe langa tipurile de descoperire TCP si UDP uzuale discutate anterior, Nmap poate trimite pachete standard prin intermediul omniprezentului ping. Nmap un pachet ICMP de tipul 8 (solicitare de raspuns) catre adresa IP tinta, asteptand un pachet de tip 0 (raspuns) in schimb de la hosturile disponibile. Din pacate pentru exploratorii de retele, in zilele noastre multe hosturi si firewalluri blocheaza aceste pachete, in loc sa raspunda in conformitate cu RFC1122. Din acest motiv scanarile ICMP simple sau rareori de incredere impotriva unor tinte necunoscute din Internet. Dar pentru administratorii de sistem care monitorizeaza o retea interna, ea poate fi o abordare practica si eficienta. Folositi optiunea -PEpentru a activa acest comportament de solicitare a raspunsului.

Cu toate ca cererile de raspuns ICMP sunt standard, Nmap nu se opreste aici. Standardul ICMP ( RFC792) specifica de asemenea solicitarea amprentei de timp, a informatiilor si a mastii de retea corespunzatoare codurilor 13,15 si 17. Aceste solicitari au ca scop aflarea de informatii precum amprenta de timp sau masca de retea dar pot fi usor folosite si la descoperirea hosturilor. Un sistem care raspunde este disponibil. Nmap nu implementeaza inca solicitarea de informatii (15) deoarece acestea nu beneficiaza de o implementare la nivel larg. RFC 1122 insista ca un host NU TREBUIE sa implmenteze aceste mesaje. Solicitarile de amprenta de timp si masca de retea pot fi trimise cu ajutorul optiunilor -PP, respectiv -PM. Un raspuns amprenta de timp (ICMP cod 14) sau un raspuns masca de retea (cod 18) dezvaluie un host disponibil. Aceste doua interogari pot fi de folos cand administratorul de retea blocheaza pingul ICMP standard uitand faptul ca si celelalte solicitari ICMP pot fi folosite in acelasi scop.

-PR(Ping ARP)

Unul dintre cele mai comune scenarii de utilizare ale Nmapului o reprezinta scanarea unei intregi retele locale (LAN). In multe LANuri, in special in cele care folosesc spatiul privat de adrese specificat in RFC1918, mare majoritate a adreselor IP nu sunt utilizate la un moment dat. Cand Nmap incearca sa trimita un pachet ICMP solicitand un raspuns, sistemul de operare trebuie sa determine adresa de destinatie hardware (ARP) corespunzatoare adresei tinta IP astfel incat sa poata adresa in mod corect frameul ethernet. Este adesea un proces lent, din moment ce sistemele de operare nu au fost proiectate sa realizeze milioane de solicitari ARP catre hosturi indisponibile intr-o peioada foarte scurta de timp.

Scanarea ARP pune Nmapul si algoritmii lui optimizati in functiune pentru a realiza solicitarile ARP. Si daca primeste un raspuns, Nmap nici nu mai ia in in considerare pingurile bazate pe IP din moment ce stie deja ca hostul este activ. Acest lucru face scanarea ARP mult mai rapida si mai corecta decat scanarile bazate pe IP. Asadar este realizata implicit cand Nmapul detecteaza faptul ca adresele scanate fac parte dintr-un LAN. Chiar daca tipuri diferite de ping (cum ar fi optiunea -PEsau -PS) sunt specificate, Nmap foloseste ARP in locul lor pentru orice adresa din acelasi LAN cu masina care ruleaza Nmap. Daca sunteti sigur ca nu doriti scanare ARP, specificati --send-ip.

-n(Nu se realizeaza rezolutia DNS)

Transmite Nmapului ca niciodatasa nu realizeze rezolutia inversa DNS pentru IPurile active gasite. Din moment ce DNS este adesea lent, aceasta optiune poate mari viteza de scanare.

-R(Rezolutie DNS pentru toate tintele)

Transmite Nmapului ca intotdeaunasa realizeze rezolutia DNS pentru IPurile tinta. In mod normal acest lucru este realizat cand o masina este gasita activa.

--system-dns(Foloseste DNSul sistemului de operare)

Implicit, Nmap rezolva adresele IP prin trimiterea de cereri la DNSurile configurate pe sistem si asteapta apoi raspunsuri. Multe solicitari (adesea foarte multe) sunt realizate in paralel pentru o performanta crescuta. Specificati aceasta optiune daca doriti sa folositi DNSul sistemului de operare (cate un IP o data prin intermediul apelului getnameinfo()). Aceasta optiune este lenta si rareori folositoare. O putei folosi in cazul in care exista o problema in codul DNS al Nmapului – va rugam sa ne contactati in acest caz. DNSul sistemului este intotdeauna folosit pentru scanarile IPv6.