
Tehnici de scanare de porturiCa 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 inapoi”In 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
http://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.
|
|