Tehnici de scanare de porturi

Ca un incepator care incearca sa repare un motor, ma pot stradui ore intregi sa gasesc ustensile rudimentare (ciocan, banda adeziva, etc.) potrivite pentru operatia propusa. Cand esuez lamentabil si imi las rabla pe mana unui mecanic adevarat, invariabil el gaseste in marea de unelte ustensila potrivita care face treaba sa para una fara efort. Arta scanarii de porturi este similara. Expertii inteleg multitudinea de tehnici de scanare si o aleg pe cea potrivita (sau combinatia potrivita) pentru o anumita misiune. Pe de alta parte, utilizatorii neexperimentati si script kiddies incearca sa rezolve problema prin scanarea SYN implicita. Din moment ce Nmap este gratuit, singura bariera in arta scanarii de porturi o reprezinta cunostintele. Acest fapt bate lucrurile din viata reala, unde cu multa pricepere poti determina ca ai nevoie de un arc nou pentru compresor, dar totusi esti nevoit sa platesti si bani buni pe el.

Multe dintre tipurile de scanare sunt disponibile doar utilizatorilor privilegiati. Aceasta datorita faptului ca trimit si primesc pachete brute, care necesita acces root pe sistemele UNIX. Folosirea unui cont de administrator sub Windows este recomandata, cu toate ca Nmap functioneaza cateodata si pentru utilizatorii neprivilegiati pe platformele pe care WinPcap a fost deja incarcat de sistemul de operare. Necesitatea privilegiilor root au reprezentat o problema serioasa la lansarea Nmapului in 1997, deoarece multi utilizatori beneficiau doar de conturi limitate. Acum lumea e diferita. Calculatoarele sunt ieftine, multi oameni au acces direct si permanent la Internet iar sistemele UNIX (incluzand Linux si MAC OS X) sunt raspandite. O versiune de Windows a Nmap este acum disponibila, permitand rularea acestuia pe si mai multe calculatoare. Oricare ar fi motivul, utilizatorii au o nevoie mai mica de a rula Nmap de pe conturi limitate. Acesta este un lucru bun, deoarece optiunile privilegiate sunt mult mai puternice si mai flexibile.

Chiar daca Nmap incearca sa produca cele mai precise rezultate, tineti minte intotdeauna ca el se bazeaza pe pachetele returnate de masina tinta (sau firewallul din fata lui). Asemenea hosturi pot sa nu fie de incredere iar raspunsurile trimise pot fi menite sa incurce sau sa duca pe o pista gresita Nmapul. Comune sunt hosturile neconcordante cu standardele RFC care nu raspund cum ar trebui probelor Nmap. Scanarile Fin, Null si Xmas sunt in mod particular susceptibile de asa ceva. Astfele de probleme sunt specifice anumitor tipuri de scanari si sunt discutate individual la fiecare tip de scanare in parte.

Aceasta sectiune documenteaza multitudinea de tehnici de scanare de porturi suportate de Nmap. O singura metoda poate fi folosita la o scanare (nu pot fi combinate mai multe tipuri), cu exceptia scanarii UDP ( -sU) care poate fi combinata cu unul din tipurile de scanare TCP. Cu un ajutor la memorare, tipurile de scanare de porturi sunt de forma -s <C>, unde <C>este caracterul principal al numelui scanarii, in general primul. Singura exceptie o reprezinta scanarea sarita FTP (metoda depasita moral) ( -b). Implicit, Nmap executa o scanare SYN, cu toate ca o poate inlocui cu una Connect() daca utilizatorul nu are privilegii pentru a trimite pachete brute (acces root pe sisteme UNIX) sau daca tinte IPv6 au fost specificate. Dintre scanarile mentionate in aceasta sectiune, utilizatorii neprivilegiati le pot executa doar pe cele de tipul connect() si ftp sarit.

-sS(Scanare TCP SYN)

Scanarea SYN este implicita si cea mai populara metoda pentru motive bine intemeiate. Poate fi executata rapid, scanand mii de porturi pe secunda intr-o retea rapida neobstructionata de un firewall deranjant. Scanarile SYN sunt relativ invizibile, din moment ce nu stabilesc niciodata o conexiune TCP. Functioneaza impotriva oricarei implementari conforma cu standardul de stiva TCP in loc sa depinda de platforma asa cum o fac scanarile Fin/Null/Xmas, Maimon si Idle. Ofera de asemenea o diferenta clara si precisa intre starile open (deschisa), closed (inchisa), si filtered (filtrata).

Aceasta tehnica este adesea denumita ca o scanare jumatate deschisa, deoarece nu deschideti o conexiune completa TCP. Trimiteti un pachet SYN, ca si cum ati deschide o conexiune si asteptati un raspuns. Un pachet SYN/ACK indica faptul ca portul este deschis, in timp ce un RST (reset) este indicatorul unui port inchis. Daca nici un raspuns nu este primit dupa mai multe retransmiteri, portul este marcat ca fiind filtrat. Portul este de asemena marcat filtrat daca un mesaj de eroare ICMP negasit (tipul 3, codurile 1,2,3,9,10 sau 13) este receptionat.

-sT(Scanare TCP connect())

Scanarea TCP Connect() este implicita cand SYN nu reprezinta o optiune viabila. Acesta este cazul in care utilizatorul nu beneficiaza de posibilitatea de trimitere a pachetelor brute sau scaneaza retele IPv6. In locul scrierii pachetelor brute asa cum o fac majoritatea tipurilor de scanare, Nmap cere nivelelor inferioare ale sistemului de operare sa stabileasca o conexiune cu masina tinta si portul dorit realizand un apel de sistem connect(). Acesta este acelasi apel de sistem prin care aplicatiile de nivel inalt cum ar fi browserele, clientii P2P si in general aplicatiile cu functii de retea le folosesc pentru stabilirea conexiunii. Este o parte a interfetei de programare cunoscuta ca Berkley Sockets API. In loc sa citeasca pachete brute ca raspuns, Nmap foloseste API pentru a obtine informatii despre starea fiecarei conexiuni incercate.

Cand scanarea SYN este disponibila, ea reprezinta in general alegerea mai buna. Nmap are un control mai restrans asupra nivelului inalt al apelului connect()cu pachete brute, facandu-l mai putin eficient. Apelul de sistem completeaza conexiunea pentru a deschide conexiunea in loc sa efectueze o jumatate de conexiune asa cum scanarea SYN o face. Nu numai ca acest lucru dureaza mai mult si necesita mai multe pachete pentru a obtine aceeasi informatie, dar exista sanse mai mari ca masinile tinta sa logheze conexiunea. Un IDS decent va prinde si el conexiunea, dar multe masinii nu au astfel de sisteme de alarma. Multe servicii ale unui sistem uzual UNIX vor adauga o nota la syslog si cateodata si un mesaj criptic de eroare cand Nmap se conecteaza si apoi inchide conexiunea fara a trimite date. Servicii patetice se pot bloca in acest caz, dar nu este un lucru comun. Un administrator care vede o multime de tentative de conexiune in loguri venind de la o singura sursa trebuie sa stie ca a fost scanat prin metoda connect.

-sU(Scanare UDP)

In tim ce multe servicii in Internet ruleaza prin protocolul TCP, serviciile UDPsunt si ele raspandite. DNS, SNMP si DHCP (porturile inregistrate 53, 161/162 si 67/68) sunt trei dintre cele mai comune. Deoarece scanarea UDP este in general lenta si mai dificila decat TCP, unii auditori de securitate ignora aceste porturi. Aceasta este o greseala, deoarece serviciile UDP exploatabile sunt destul de cunoscute si atacatorii cu siguranta nu vor ignora un intreg protocol. Din fericire, Nmap poate ajuta la inventarierea porturilor UDP.

Scanarea UDP este acivata cu optiunea -sU. Poate fi combinata cu o scanare TCP cum ar fi scanrea SYN ( -sS) pentru a verifica ambele protocoale in timpul aceleiasi scanari.

Scanarea UDP functioneaza prin trimiterea de headere UDP goale (fara date) la fiecare port specificat al masinii tinta. Daca un mesaj ICMP de port inaccesibil (tipul 3, codul 3) este returnat, portul este closed (inchis). Alte mesaje ICMP de port care nu poate fi atins (tipul 3, codurile 1, 2, 9, 10 sau 13) marcheaza portul ca filtered (filtrat). Ocazional, un serviciu poate raspunde cu un pachet UDP, demonstrand faptul ca este open (deschis). Daca nici un raspuns nu este primit dupa mai multe retransmisii atunci portul este catalogat ca open|filtered (deschis|filtrat). Asta inseamna ca portul poate fi deschis sau poate un filtru de pachete blocheaza comunicatia. Scanarile de versiune ( -sV) pot fi folosite pentru a ne ajuta sa diferentiem porturile cu adevarat deschise de cele filtrate.

O mare incercare in scanarea UDP o reprezinta realizarea acesteia rapid. Porturile deschise si filtrate rareori trimit raspuns, lasand Nmapul sa astepte si apoi sa retrimita pachetul pentru situatia in care proba sau raspunsul s-au pierdut. Porturile inchise reprezinta adesea o problema si mai mare. In mod uzual trimit inapoi un mesaj de eroare ICMP inaccesibil. Dar spre deosebire de de pachetele RST trimise de porturile TCP inchise ca raspuns la scanarile SYN sau connect, multe hosturi limiteaza rata de mesaje ICMP port inaccesibil. Linux si Solaris sunt foarte stricte in aceasta privinta. De exemplu, kernelul Linux 2.4.20 limiteaza aceste mesaje la unul pe secunda (din net/ipv4/icmp.c).

Nmap detecteaza rata de limitare si incetineste scanarea in conformitate cu aceasta pentru a preveni inundarea retelei cu pachete inutile pe care masina tinta le va ignora. Din pacate, o limitare de genul Linuxului de un pachet la o secunda face ca o scanare de 65.536 de porturi sa dureze mai mult de 18 ore. Ideile de accelerare a scanarii UDP includ scanarea in paralel a mai multor hosturi, scanarea doar a porturilor cunoscute, scanarea din spatele firewallului si folosind optiunea --host-timeoutpentru a sari peste hosturile lente.

-sN; -sF; -sX(Scanari TCP Null, FIN, si Xmas)

Aceste trei tipuri de scanare (chiar si mai multe posibile folosind optiunea --scanflagsdescrisa in aceasta sectiune) exploateaza o portita din TCP RFCpentru a diferentia intre porturile deschise (open)si cele inchise (closed). Pagina 65 spune ca daca starea portului [destinatie] este INCHIS ... un segment de intrare care nu contine un RST face ca un raspuns RST sa fie trimis inapoiIn urmatoarea pagina se discuta pachetele trimise catre porturile deschise fara bitii SYN, RST sau ACK setati, specificand ca: este putin probabil sa ajungeti intr-o asemenea situatie, dar daca o faceti, ignorati segmentul si reveniti

Cand scanam un sistem compatibil cu textul RFC, orice pachet care nu contine bitii SYN, RST sau ACK va genera un raspuns RST daca portul este inchis si nici un raspuns daca portul este deschis. De vreme ce nici unul dintre acesti biti nu este inclus, orice combinatie a celorlalti trei (FIN, PSH si URG) este buna. Nmap exploateaza aceasta problema cu trei tipuri de scanari:

Scanare Null ( -sN)

Nu seteaza nici un bit (flagul header tcp este 0)

Scanare FIN ( -sF)

Seteaza doar bitul TCP FIN.

Scanare Xmas ( -sX)

Seteaza flagurile FIN, PSH si URG, luminand pachetul ca pe un pom de Craciun.

Aceste trei tipuri de scanare sunt identice in comportament exceptand flagurile TCP setate in pachetele de proba. Daca un pachet RST este primit, portul este considerat closed (inchis), in vreme ce nici un raspuns inseamna un port open|filtered (deschis|filtrat). Portul este marcat ca filtered (filtrat)daca un mesaj de eroare ICMP de port indisponibil (tipul 3, codurile 1, 2, 3, 9, 10 sau 13) este receptionat.

Principalul avantaj al acestor tipuri de scanare este acela ca se pot strecura prin anumite firewalluri non-statefull si routere cu filtrare de pachete. Alt avantaj al acestor tipuri de scanare este ca sunt si mai discrete decat o scanare SYN. Nu va bazati pe asta – multe IDSuri moderne pot fi configurate sa le detecteze. Marea problema este ca nu toate sistemele urmeaza RFC 793 litera cu litera. Un numar de sisteme trimit un raspuns RST la probe indiferent daca portul este deschis sau nu. Acest lucru face ca porturile sa fie marcate ca fiind inchise (closed). Majoritatea sistemelor care fac acest lucru sunt Microsoft Windows, multe dispozitive Cisco, BSDI si IBM OS/400. Acest tip de scanare functioneaza impotriva celor mai multe sisteme bazate pe UNIX. Alta problema este ca aceste tipuri de scanari nu pot face diferenta intre porturile deschise (open)de cele filtrate (filtered), lasand un raspuns de tipul deschis|filtrat (open|filtered).

-sA(Scanare TCP ACK)

Aceasta scanare e diferita de celelalte discutate pana acum in sensul in care nu poate determina niciodata un port deschis (open)(sau chiar deschis|filtrat (open|filtered)). Este folosita pentru a mapa regulile firewallului, determinand daca acestea sunt statefull sau nu si ce porturi sunt filtrate.

Packetul de proba la scanrea ACK are doar bitul ACK setat (doar daca nu se specifica altceva cu --scanflags). Cand scanam sisteme nefiltrate porturile, deschise (open)si inchise (closed)vor returna un pachet RST. Nmap le eticheteaza ca nefiltrate (unfiltered), ceea ce inseamna ca sunt disponibile pentru pachetul ACK dar nu se poate determina daca sunt deschise (open)sau inchise (closed). Porturile care nu raspuns, sau trimit inapoi anumite mesaje de eroare ICMP (tipul 3, codurile 1, 2, 3, 9, 10 sau 13) sunt etichetate ca filtrate (filtered).

-sW(Scanare TCP Window)

Scanarea Window (fereastra) este asemanatoare cu scanarea ACK, cu exceptia ca exploateaza un detaliu de implementare a anumitor sisteme pentru a diferentia porturile deschise de cele inchise, in loc sa aiseze nefiltrat (unfiltered)cand un RST este returnat. Realizeaza acest lucru prin examinarea campului TCP Window din pachetul RST returnat. Pe unele sisteme, porturile deschise folosesc o valoare pozitiva in timp ce porturile inchise au valoarea 0. Astfel ca in loc sa afiseze o lista de porturi nefiltrate (unfiltered)cand primeste un RST, scanrea TCP Window marcheaza porturile ca deschise (open)sau inchise (closed)daca valoarea TCP Window este pozitiva sau 0, dupa caz.

Scanarea se bazeaza pe detalii de implementare a unei minoritati de sisteme din Internet, deci nu va bazati intotdeauna pe ea. Sistemele care nu suporta aceasta implementare returneaza de obicei toate porturile inchise (closed). Desigur, este posibil ca respectiva masina sa nu aiba porturi deschise. Daca majoritatea porturilor sunt inchise (closed)dar cateva numere comune cum ar fi (22, 25, 53) sunt filtrate (filtered), sistemul este unul compatibil cu scanarea. Ocazional, sistemul va raporta un comportament inversat. Daca scanarea returneaza 1000 de porturi deschise si 3 inchise sau filtrate, atunci acele trei pot fi adevaratele porturi deschise.

-sM(Scanarea TCP Maimon)

Scanarea TCP Maimon este denumita astfel dupa descoperitorul ei, Uriel Maimon. El descrie aceasta tehnica in Magazinul Phrak editia 49 (noiembrie 1996). Nmap, care include aceasta tehnica, a fost lansat doua editii mai tarziu. Tehnica este similara cu scanarile Null, FIN si Xmas cu exceptia ca proba este FIN/ACK. In conformitate cu RFC 793, un pachet RST trebuie generat ca raspuns la o astfel de proba indiferent daca portul este inchis sau deschis. Oricum, Uriel a remarcat faptul ca multe sisteme derivate din BSD ignora pachetul daca portul este deschis.

--scanflags(Scanare TCP personalizata)

Utilizatorii avansati de Nmap nu trebuie sa se limiteze la tipurile de scanare generale oferite Optiunea --scanflagsva permite sa creati propriile tipuri de scanare prin specificarea flagurilor TCP. Lasati spiritul creativ sa lucreze, penetrand IDSurile ale caror producatori se multumesc sa adauge reguli specifice doar pentru tipurile clasice de scanare.

Argumentul pentru --scanflagspoate fi o valoare numerica cum ar fi 9 (PSH si FIN), dar folosirea numelor simbolice este mult mai comoda. Puneti alaturi orice combinatie dintre URG, ACK, PSH, RST, SYN, and FIN. De exemplu, --scanflagsURGACKPSHRSTSYNFINsetaza toti bitii, desi nu este foarte folositor pentru scanare. Ordinea in care se fac specificarile este irelevanta.

In plus fata de specificarea flagurilor, puteti specifica si tipul de scanare TCP (cum ar fi -sAsau -sF). Aceasta spune Nmapului cum sa interpreteze raspunsurile. De exemplu, o scanare SYN considera ca lipsa unui raspuns indica un port filtrat (filtered), in timp ce o scanare FIN trateaza acelasi raspuns ca deschis|filtrat (open|filtered). Nmap se va comporta in acelasi fel in care o face pentru scanarile de baza, cu exceptia faptului ca va folosi flagurile TCP specificate. Daca nu specificati o scanare de baza, SYN va fi utilizata.

-sI <host zombie [:port_de_proba]>(Scanare Idle)

Aceasta metoda avansata de scanare permite o scanare TCP complet oarba a tintei (insemnand ca nici un pachet nu este trimis tintei de la adresa IP reala). In loc, un canal derivat de atac exploateaza o secventa de fragmentare IPID predictibila a hostului zombie pentru a culege informatii despre porturile deschise pe masina tinta. Sistemele IDS vor indica scanarea ca venind de la hostul zombie specificat (care trebuie sa fie functional si sa indeplineasca anumite criterii). Acest tip fascinant de scanare este prea complex pentru a fi descris in acest ghid de referinta, astfel ca am scris un document informativ cu detalii complete disponibil la https://nmap.org/book/idlescan.html.

In afara faptului ca este extrem de discreta (datorita naturii oarbe), acest tip de scanare permite maparea relatiilor de incredere bazate pe IP intre masini. Lista de porturi arata porturile deschise din perspectiva hostului zombie.Asa ca puteti incerca scanarea tintei folosind diferiti zombie despre care credeti ca ar putea avea relatii de incredere cu tinta (prin router/filtru de pachete).

Puteti adauga doua puncte (“:”) urmate de numarul portului de pe calculatorul zombie daca vreti sa probati un port particular al zombieului pentru modificari IPID. Altfel Nmap va folosi portul utilizat implicit pentru pinguri tcp (80).

-sO(Scanarea protocolului IP)

Scanarea protocolului IP permite determinarea protocoalelor (TCP, ICMP, IGMP, etc.) suportate de masina tinta. Aceasta nu reprezinta din punct de vedere tehnic o scanare de porturi, din moment ce trece prin numarul protocoalelor IP in loc de numarul porturilor TCP sau UDP. Totusi foloseste optiunea -ppentru selectarea numerelor de protocol, raporteaza rezultatele in formatul de tabel specific scanriif de porturi, si chiar foloseste acelasi motor de scanare ca la scanarea de porturi. Este strans legata asadar de scanarea de porturi asa ca apartine acestei categorii.

Pe langa faptul ca este folositoare in sine, scanarea protocoalelor demonstreaza puterea softwareului open source. In vreme ce ideea fundamentala este destul de simpla, nu m-am gandit sa adaug sau sa primesc solicitari pentru o astfel de functionalitate. Apoi in vara lui 2000, Gerhard Rieger a intuit aceasta necesitate, a scris un patch excelent implementand-o si a trimis-o la lista de discutii nmap-hackers. Am incorporat patchul in distributia Nmap si am lansat o noua versiune in ziua urmatoare. Putine softwareuri comerciale au utilizatori suficient de entuziasti sa realizeze si sa contribuie cu propriile imbunatatiri.

Scanarea protocoalelor functioneaza intr-un mod similar cu scanarea UDP. In locul iterarii numerelor de porturi ale unui pachet UDP, se trimite un pachet IP si se itereaza cei 8 biti ai ai campului destinat protocolului din headerul pachetului IP. Headerele sunt de obicei goale, necontinand date si nici macar headerul potrivit pentru protocolul pretins. Cele trei exceptii sunt TCP, UDP si ICMP. Un header potrivit pentru acestea este inclus din moment ce unele sisteme nu le vor trimite altfel si pentru ca Nmap are deja functiile sa le creeze. In loc sa primeasca mesaje ICMP de port indisponibil, scanarea de protocoale cauta aceste mesaje de protocolICMP port indiponibil. Daca Nmap primeste orice raspuns de la tinta, Nmap marcheaza protocolul ca deschis (open). Un mesaj ICMP de protocol indisponibil (tip 2, cod 3) face ca protocolul sa fie marcat inchis (closed). Alte erori ICMP de indisponibilitate (tipul 3, codurile 1, 3, 9, 10 sau 13) duc la marcarea protocolului ca filtrat (filtered)(cu toate ca ele dovedesc ca ICMP este deschis (open)in acelasi timp). Daca nici un mesaj nu este primit dupa retransmisie, protocolul este marcat ca deschis|filtrat (open|filtered)

-b <host ftp de intermediere>(Scanare FTP sarita)

Un aspect interesant al protocolului FTP ( RFC 959) este suportul pentru asa numitele conexiuni proxy ftp. Acesta permite utilizatorului conectarea la un server FTP si apoi solicitarea ca anumite fisiere sa fie trimise pe un al alt server. O astfel de functionalitate poate fi folosita pentru abuzuri asa ca multe servere au incetat sa o mai suporte. Unul dintre aceste abuzuri face ca serverul FTP sa scaneze alte hosturi. Cereti serverului sa trimita un fisier la fiecare port al masinii tinta. Mesajul de eroare va descrie daca portul este inchis sau deschis. Este o buna modalitate de a sari un firewall deoarece FTPurile sunt adesea plasate in zone cu acces la reteaua interna. Nmap suporta scanarea ftp sarita prin optiunea -b. Preia un argument de forma <numeutilizator>: <parola>@ <server>: <port>. <Server>este numele sau adresa IP a serverului FTP vulnerabil. La fel ca la URLul normal puteti omite <numeutilizator>: <parola>, caz in care sunt folosite valorile implicite (numeutilizator: anonymousparola: -wwwuser@). Numarul portului (si caracterul doua puncte “:” care il precede) pot fi omise de asemenea, caz in care portul implicit FTP (21) al <serverului>este utilizat.

Aceasta vulnerabilitate era raspandita in 1997 cand Nmap a fost lansat, dar in mare parte a fost rezolvata. Servere vulnerabile exista inca, deci merita sa le cautati cand orice alta optiune a picat. Daca trecerea de un firewall reprezinta tinta dumneavoastra, scanati reteaua dupa portul 21 (sau orice alt serviciu ftp pe care il detectati cu ajutorul optiunii de identificare a versiunii), apoi incercati un atac sarit prin respectivul server. Nmap va va anunta daca serverul este vulnerabil sau nu. Daca incercati doar sa va acoperiti urmele, nu aveti nevoie (de fapt nici nu trebuie) sa va limitati la hosturile din reteaua tinta. Inainte sa scanati aleator prin Internet dupa servere FTP vulnerabile, luati in considerare faptul ca administratorii de sistem pot sa nu aprecieze faptul ca abuzati de serverele lor in acest mod.