Onderscheid maken tussen open en gefilterde UDP-poorten
In het geval van de Felix-scan waren alle poorten, op de drieopen|filtered
na, closed
. De scan was dus nog steeds succesvol in het beperken van potentieel open poorten tot een handvol. Dat is niet altijd het geval. Voorbeeld 5.5 toont een UDP scan tegen de zwaar gefilterde site Scanme.
Voorbeeld 5.5. UDP scan voorbeeld
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
In dit geval heeft de scan de open poorten helemaal niet kunnen verkleinen. Alle 1000 zijn open|filtered
. Er is een nieuwe strategie nodig.
Tabel 5.3, “Hoe Nmap reacties op een UDP sonde interpreteert” laat zien dat de open|filtered
status optreedt wanneer Nmap geen reacties ontvangt van zijn UDP sondes op een bepaalde poort.Toch laat het ook zien dat, in zeldzame gevallen, de UDP dienst die luistert op een poort in natura zal antwoorden, wat bewijst dat de poort open is. De reden dat deze diensten niet vaak reageren is dat de lege pakketten die Nmap stuurt als ongeldig worden beschouwd. Helaas definiëren UDP-diensten over het algemeen hun eigen pakketstructuur in plaats van zich te houden aan een gemeenschappelijk algemeen formaat dat Nmap altijd zou kunnen sturen. Een SNMP pakket ziet er heel anders uit dan een SunRPC, DHCP, of DNS request pakket.
Om voor iedere populaire UDP dienst het juiste pakket te sturen, zou Nmap een grote database nodig hebben die hun probe formaten definieert.Gelukkig heeft Nmap die in de vorm vannmap-service-probes
, die deel uitmaakt van het service en versie detectie subsysteem beschreven in Hoofdstuk 7, Service en Applicatie Versie Detectie.
Wanneer versie scannen is ingeschakeld met -sV
(of-A
), zal het UDP probes sturen naar elkeopen|filtered
poort (evenals bekendeopen
poorten). Als een van de probes een antwoord ontlokt van een open|filtered
poort, wordt de status veranderd in open
. De resultaten van het toevoegen van -sV
aan de Felix scan worden getoond in Voorbeeld 5.6.
Voorbeeld 5.6. Verbetering van Felix’ UDP scan resultaten met versie detectie
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
Deze nieuwe scan laat zien dat poort 111 en 53 zeker open zijn. Het systeem is echter niet perfect- poort 67 is nog steedsopen|filtered
. In dit specifieke geval is de poort open, maar Nmap heeft geen werkende versie om DHCP te testen. Een andere lastige service is SNMP, die meestal alleen reageert als de juiste community string wordt gegeven. Veel apparaten zijn geconfigureerd met de community string public
, maar niet allemaal.Hoewel deze resultaten niet perfect zijn, is het leren van de ware status van twee van de drie geteste poorten nog steeds nuttig.
Na het succes in het disambigueren van Felix resultaten, richt Ereett zijn aandacht weer op Scanme, die de vorige keer alle poorten als open|filtered
vermeldde. Hij probeert het opnieuw met versie detectie, zoals te zien in Voorbeeld 5.7.
Voorbeeld 5.7. Het verbeteren van Scanme’s UDP scan resultaten met versie detectie
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
Hoewel Ereet uiteindelijk de open poort vond, maakte hij een fout door niet eerst zijn Nmap versie bij te werken. Nmap versie 5.10BETA1 en nieuwer hebben een payload systeem dat de juiste service protocol verzoeken stuurt naar meer dan drie dozijn bekende UDP poorten als deze zijn geselecteerd voor poortscannen of host discovery. Hoewel het niet zo uitgebreid is als versiedetectie, zou het snel de open poort 53 in Voorbeeld 5.5 hebben geïdentificeerd.
Dit resultaat duurde een uur, tegenover vijf seconden voor de vorige scan van Scanme, maar deze resultaten zijn echt nuttig. Ereet’s glimlach wordt breder en zijn ogen glinsteren bij dit bewijs van een open ISC BINDnameserver op een machine die hij wil compromitteren. Die software heeft een lange geschiedenis van beveiligingslekken, dus misschien kan hij een fout vinden in deze recente versie.
Ereet zal zijn UDP aanvallen richten op poort 53 omdat die open is bevonden, maar hij vergeet de andere 999 poorten niet die staan vermeld alsopen|filtered
. Zoals we hebben gezien met de dhcpserver poort op Felix, kunnen bepaalde open UDP services zich zelfs verbergen voor Nmap versie detectie. Hij heeft ook alleen de standaard poorten tot nu toe gescand, er zijn 64529 andere die mogelijk open staan. Voor therecord, 53 is de enige open UDP poort op Scanme.
Hoewel deze versie detectie techniek de enige manier is voor Nmapt om automatisch open|filtered
poorten te disambigueren, zijn er een paar trucs die handmatig kunnen worden geprobeerd. Soms kan een gespecialiseerde traceroute helpen. Je zou een traceroute kunnen doen tegen een bekende open TCP of UDP poort met Nmap of een tool zoals Nping. Probeer dan hetzelfde tegen de twijfelachtige UDP poort. Verschillen in hop-tellingen kunnen een onderscheid maken tussen open en gefilterde poorten. Ereet probeert dit tegenScanme in Voorbeeld 5.8. Het eerste commando doet een UDP traceroute tegen bekende-open poort 53. Het tweede commando doet hetzelfde tegen de verondersteld-gesloten poort 54. De eerste paar hops zijn weggelaten om ruimte te besparen.
Example 5.8. Poging om UDP-poorten met TTL-discrepanties te disambigueren
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
In dit voorbeeld was Ereet alleen in staat om hop elf van zowel de open als gesloten poorten te bereiken. Dus deze resultaten kunnen niet worden gebruikt om poort toestanden te onderscheiden tegen deze host. Het was het proberen waard, en het werkt in een significant aantal gevallen. Het is waarschijnlijker dat het werkt in situaties waar de screenende firewall minstens een hop of twee voor de doelhost staat. Scanme, aan de andere kant, draait zijn eigen Linuxiptableshost-gebaseerde firewall. Er is dus geen verschil in hop-telling tussen gefilterde en open poorten.
Een andere techniek is om applicatie-specifieke tools uit te proberen tegen gangbare poorten. Bijvoorbeeld, een brute force SNMP community string kraker kan worden uitgeprobeerd op poort 161. Naarmate Nmap’s database met versie-detectieprobe’s groeit, wordt de noodzaak om de resultaten te vergroten met externe gespecialiseerde gereedschappen kleiner. Ze zullen nog steeds nuttig zijn voor speciale gevallen, zoals SNMP apparaten met een aangepaste community string.