Distincție între porturile UDP deschise și cele filtrate
În cazul scanării Felix, toate porturile, cu excepția celor treiopen|filtered
, erau closed
.Astfel, scanarea a reușit totuși să reducă numărul de porturi potențial deschise la câteva. Acesta nu este întotdeauna cazul. Exemplul 5.5 prezintă o scanare UDP împotriva site-ului puternic filtrat Scanme.
Exemplu 5.5. Exemplu de scanare UDP
krad# Starting Nmap ( http://nmap.org )All 1000 scanned ports on scanme.nmap.org (64.13.134.52) are open|filteredNmap done: 1 IP address (1 host up) scanned in 5.50 seconds
În acest caz, scanarea nu a restrâns deloc porturile deschise.Toate cele 1000 sunt open|filtered
. Se impune o nouă strategie.
Tabelul 5.3, „Cum interpretează Nmap răspunsurile la o sondă UDP” arată că starea open|filtered
apare atunci când Nmap nu reușește să primească nici un răspuns de la sondele sale UDP la un anumit port.Totuși, acesta arată, de asemenea, că, în rare ocazii, serviciul UDP care ascultă pe un port va răspunde la fel, dovedind că portul este deschis. Motivul pentru care aceste servicii nu răspund de multe ori este că pachetele goale pe care le trimite Nmap sunt considerate invalide. Din păcate, serviciile UDP își definesc în general propria structură a pachetelor, în loc să adere la un format general comun pe care Nmap l-ar putea trimite întotdeauna. Un pachet SNMP arată complet diferit de un pachet de solicitare SunRPC, DHCP sau DNS.
Pentru a trimite pachetul adecvat pentru fiecare serviciu UDP popular, Nmap ar avea nevoie de o bază de date mare care să definească formatele sondelor lor.Din fericire, Nmap dispune de aceasta sub forma luinmap-service-probes
,care face parte din subsistemul de detectare a serviciilor și a versiunilor descris în Capitolul 7, Detectarea versiunilor serviciilor și aplicațiilor.
Când scanarea versiunilor este activată cu -sV
(sau-A
), aceasta va trimite sonde UDP la fiecare portopen|filtered
(precum și la cele cunoscuteopen
). În cazul în care oricare dintre sonde obține un răspuns de la un port open|filtered
, starea este schimbată în open
. Rezultatele adăugării-sV
la scanarea Felix sunt prezentate în Exemplul 5.6.
Exemplu 5.6. Îmbunătățirea rezultatelor scanării UDP a lui Felix cu detectarea versiunii
krad# Starting Nmap ( http://nmap.org )Nmap scan report for felix.nmap.org (192.168.0.42)Not shown: 997 closed portsPORT STATE SERVICE VERSION53/udp open domain ISC BIND 9.2.167/udp open|filtered dhcpserver111/udp open rpcbind 2 (rpc #100000)MAC Address: 00:02:E3:14:11:02 (Lite-on Communications)Nmap done: 1 IP address (1 host up) scanned in 1037.57 seconds
Această nouă scanare arată că porturile 111 și 53 sunt cu siguranță deschise. totuși, sistemul nu este perfect – portul 67 este încăopen|filtered
. În acest caz particular, portul este deschis, dar Nmap nu are o versiune funcțională de sondă pentru DHCP.Un alt serviciu dificil este SNMP, care de obicei răspunde doar atunci când este dat șirul de comunitate corect. Multe dispozitive sunt configurate cu șirul de comunitate public
, dar nu toate sunt. în timp ce aceste rezultate nu sunt perfecte, învățarea adevăratei stări a două din cele trei porturi testate este totuși utilă.
După succesul în dezambiguizarea rezultatelor Felix, Ereett își îndreaptă din nou atenția către Scanme, care a listat toate porturile ca open|filtered
data trecută. El încearcă din nou cu detectarea versiunii, așa cum se arată în Exemplul 5.7.
Exemplul 5.7. Îmbunătățirea rezultatelor scanării UDP ale Scanme cu detectarea versiunii
krad# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 999 open|filtered portsPORT STATE SERVICE VERSION53/udp open domain ISC BIND 9.3.4Nmap done: 1 IP address (1 host up) scanned in 3691.89 seconds
În timp ce Ereet a găsit în cele din urmă portul deschis, a făcut o greșeală prin faptul că nu și-a actualizat mai întâi versiunea Nmap. Versiunea Nmap 5.10BETA1 și cele mai noi au un sistem de sarcină utilă care trimite solicitări de protocol de servicii adecvate la mai mult de trei duzini de porturi UDP bine cunoscute, dacă acestea sunt selectate pentru scanarea porturilor sau descoperirea gazdelor. Deși nu este la fel de cuprinzător ca și detectarea versiunilor, ar fi identificat rapid portul deschis 53 din exemplul 5.5.
Acest rezultat a durat o oră, față de cinci secunde pentru scanarea anterioarăScanme, dar aceste rezultate sunt de fapt utile. Zâmbetul lui Ereet se lărgește și ochii îi scânteiază la această dovadă a unui server de nume ISC BINDnames deschis pe o mașină pe care vrea să o compromită. Acest software are un istoric îndelungat de găuri de securitate, așa că poate că poate că poate găsi un defect în aceastăversiune recentă.
Ereet își va concentra atacurile UDP pe portul 53, deoarece esteconfirmat deschis, dar nu uită de celelalte 999 de porturi enumerate caopen|filtered
. Așa cum am văzut cu portul dhcpserver de pe Felix, anumite servicii UDP deschise se pot ascunde chiar și de detectarea versiunilor Nmap. De asemenea, el a scanat până acum doar porturile implicite, existând alte 64529 care ar putea fi deschise. Pentru a se înregistra, 53 este singurul port UDP deschis pe Scanme.
În timp ce această tehnică de detectare a versiunilor este singura modalitate ca Nmap să dezambiguizeze automat porturile open|filtered
, există câteva trucuri care pot fi încercate manual. Uneori, un traceroute specializat poate fi de ajutor. Ați putea face un traceroute față de un port TCP sau UDP cunoscut-deschis cu Nmap sau cu un instrument cum ar fi Nping.Apoi încercați același lucru față de portul UDP dubios. Diferențele în numărul de salturi pot face diferența între porturile deschise și cele filtrate. Ereet încearcă acest lucru împotrivaScanme în exemplul 5.8. Prima comandă face un traceroute UDP față de portul 53 cunoscut și deschis. A doua comandă face același lucru față de portul 54 presupus-închis. Primele câteva salturi au fost omise pentru a economisi spațiu.
Exemplu 5.8. Încercarea de dezambiguizare a porturilor UDP cu discrepanțe TTL
krad# Starting Nping ( http://nmap.org/nping )SENT (7.0370s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=8 id=4826 iplen=28RCVD (7.1010s) ICMP 4.69.134.222 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=248 id=38454 iplen=56SENT (8.0400s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=9 id=38166 iplen=28RCVD (8.1050s) ICMP 4.68.18.204 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=247 id=39583 iplen=56SENT (9.0420s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=10 id=6788 iplen=28RCVD (9.1080s) ICMP 4.59.4.78 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=246 id=59897 iplen=56SENT (10.0440s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=11 id=366 iplen=28RCVD (10.1100s) ICMP 69.36.239.221 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=243 id=42710 iplen=56SENT (11.0470s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=12 id=63478 iplen=28SENT (12.0490s) UDP 192.168.0.21:53 > 64.13.134.52:53 ttl=13 id=56653 iplen=28Max rtt: 73.003ms | Min rtt: 0.540ms | Avg rtt: 48.731msRaw packets sent: 13 (364B) | Rcvd: 10 (560B) | Lost: 3 (23.08%)Tx time: 12.02836s | Tx bytes/s: 30.26 | Tx pkts/s: 1.08Rx time: 13.02994s | Rx bytes/s: 42.98 | Rx pkts/s: 0.77Nping done: 1 IP address pinged in 13.05 secondskrad# Starting Nping ( http://nmap.org/nping )SENT (7.0370s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=8 id=56481 iplen=28RCVD (7.1130s) ICMP 4.69.134.214 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=248 id=22437 iplen=56SENT (8.0400s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=9 id=23264 iplen=28RCVD (8.1060s) ICMP 4.68.18.76 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=247 id=50214 iplen=56SENT (9.0430s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=10 id=9101 iplen=28RCVD (9.1070s) ICMP 4.59.4.78 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=246 id=880 iplen=56SENT (10.0450s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=11 id=35344 iplen=28RCVD (10.1110s) ICMP 69.36.239.221 > 192.168.0.21 TTL=0 during transit (type=11/code=0) ttl=243 id=44617 iplen=56SENT (11.0470s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=12 id=53857 iplen=28SENT (12.0490s) UDP 192.168.0.21:53 > 64.13.134.52:54 ttl=13 id=986 iplen=28Max rtt: 76.488ms | Min rtt: 0.546ms | Avg rtt: 48.480msRaw packets sent: 13 (364B) | Rcvd: 11 (616B) | Lost: 2 (15.38%)Tx time: 12.02908s | Tx bytes/s: 30.26 | Tx pkts/s: 1.08Rx time: 13.03165s | Rx bytes/s: 47.27 | Rx pkts/s: 0.84Nping done: 1 IP address pinged in 13.05 seconds
În acest exemplu, Ereet a reușit să ajungă doar la hopul unsprezece al ambelor porturi deschise și închise. Așadar, aceste rezultate nu pot fi folosite pentru a distinge stările porturilor față de această gazdă. A meritat o încercare și funcționează într-un număr semnificativ de cazuri. Este mai probabil să funcționeze în situațiile în care firewall-ul de screening este cu cel puțin un hop sau două înainte de gazda țintă. Scanme, pe de altă parte, rulează propriul său firewall bazat pe Linuxiptableshost. Deci nu există nicio diferență în numărul de salturiîntre porturile filtrate și cele deschise.
O altă tehnică este de a încerca instrumente specifice aplicațiilor împotriva porturilor comune. De exemplu, un brute force SNMP community stringcracker ar putea fi încercat împotriva portului 161. Pe măsură ce baza de date de sonde de detectare a versiunilor Nmap crește, se reduce necesitatea de a spori rezultatele sale cu instrumente externe-specializate. Acestea vor fi în continuare utile pentru cazuri speciale, cum ar fi dispozitivele SNMP cu un șir de comunitate personalizat.
.