Distinguindo Portas Abertas de Portas UDP Filtradas
No caso do Felix scan, todas as portas com exceção das três open|filtered
foram closed
.Assim, o scan ainda foi bem sucedido no estreitamento de portas potencialmente abertas para um punhado. Nem sempre é esse o caso. Exemplo 5.5 mostra um scan UDP contra o site fortemente filtrado Scanme.
Exemplo 5.5. Exemplo de scan 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
Neste caso, o scan não reduziu de todo as portas abertas.Todos os 1000 são open|filtered
. Uma nova estratégia é chamada para.
Tabela 5.3, “Como o Nmap interpreta as respostas a uma sonda UDP” mostra que o estado open|filtered
ocorre quando o Nmap falha em receber quaisquer respostas de suas sondas UDP para uma determinada porta. A razão pela qual estes serviços não respondem com frequência é que os pacotes vazios que o Nmap envia são considerados inválidos. Infelizmente, os serviços UDP definem de forma genérica sua própria estrutura de pacotes ao invés de aderir a um formato geral comum que o Nmap sempre poderia enviar. Um pacote SNMP parece completamente diferente de um requestpacket SunRPC, DHCP ou DNS.
Para enviar o pacote apropriado para cada serviço UDP popular, o Nmap precisaria de uma grande base de dados definindo seus formatos de sonda.Felizmente, o Nmap tem isso na forma denmap-service-probes
,que é parte do subsistema de detecção de serviço e versão descrito no Capítulo 7, Service and Application Version Detection.
Quando o scan de versão é habilitado com -sV
(ou -A
), ele enviará sondas UDP para cada open|filtered
porta (como também conhecidasopen
). Se alguma das sondas obtiver uma resposta de uma porta open|filtered
, o estado é alterado para open
. Os resultados da adição de-sV
à varredura Felix são mostrados no Exemplo 5.6.
Exemplo 5.6. Melhorando os resultados da varredura Felix UDP com detecção de versão
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
Esta nova varredura mostra que as portas 111 e 53 estão definitivamente abertas. Neste caso em particular, o portis está aberto, mas o Nmap não tem uma sonda de versão funcional para DHCP. Outro serviço difícil é o SNMP, que normalmente só responde quando é dada a string da comunidade correta. Muitos dispositivos são configurados com a string da comunidade public
, mas nem todos são. Embora estes resultados não sejam perfeitos, aprender o verdadeiro estado de duas ou três portas testadas ainda é útil.
Após o sucesso em desambiguar os resultados de Felix,Ereetturna sua atenção de volta para Scanme, que listou todas as portas como open|filtered
da última vez. Ele tenta novamente com a detecção de versão, como mostrado no Exemplo 5.7.
Exemplo 5.7. Melhorando os resultados de scan do Scanme UDP com detecção de versão
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
Embora o Ereet tenha eventualmente encontrado a porta aberta, ele cometeu um erro ao não actualizar primeiro a sua versão do Nmap. A versão 5.10BETA1 do Nmap e a mais recente possuem um sistema de carga útil que envia pedidos de protocolo de serviço apropriados para mais de três dúzias de portas UDP bem conhecidas, se elas forem selecionadas para escaneamento de portas ou descoberta de hosts. Embora não seja tão abrangente quanto a detecção de versão, ele teria rapidamente identificado a porta 53 aberta no Exemplo 5.5.
Este resultado levou uma hora, contra cinco segundos para a varredura anterior doScanme, mas estes resultados são realmente úteis. Os smilewidens e os olhos da Ereet brilham com esta evidência de um servidor ISC BINDnameserver aberto em uma máquina que ele quer comprometer. Esse software tem uma longa história de falhas de segurança, então talvez ele possa encontrar uma falha nessa versão.
Ereet irá focar seus ataques UDP na porta 53 uma vez que ela estáconfirmada aberta, mas ele não esquece das outras 999 portas listadas comoopen|filtered
. Como testemunhamos com a porta dhcpserver no Felix, certos serviços UDP abertos podem esconder até mesmo da detecção da versão do Nmap. Ele também escaneou apenas o sofar padrão de portas, existem 64529 outras que poderiam estar abertas. Para isso, 53 é a única porta UDP aberta em Scanme.
Embora essa técnica de detecção de versão seja a única forma de o Nmapto desambiguar automaticamente open|filtered
portas, há alguns truques que podem ser tentados manualmente. Algumas vezes um traceroute tão especializado pode ajudar. Você pode fazer um traceroute contra uma porta TCP ou UDP aberta com o Nmap ou uma ferramenta comoNping.Então tente o mesmo contra a porta UDP questionável. Diferenças na contagem de lúpulo candiferenciam portas abertas de portas filtradas. Ereet tenta isto contraScanme no Exemplo 5.8. O primeiro comando faz um traceroute UDP contra a porta 53 aberta conhecida. O segundo comando faz a mesma coisa contra a porta 54 fechada-presumed-closed. Os primeiros lúpulos foram omitidos para salvar espaço.
Exemplo 5.8. Tentando desambiguar as portas UDP com discrepâncias 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
Neste exemplo, a Ereet só foi capaz de alcançar onze das portas abertas e fechadas do lúpulo. Portanto, estes resultados não podem ser usados para distinguir os estados das portas contra este host. Valeu a pena tentar, e funciona em um número significativo de casos. É mais provável que funcione em situações em que o screeningfirewallis é pelo menos um ou dois saltos antes do anfitrião alvo. Scanme, por outro lado, está rodando seu próprio firewall baseado em Linuxiptableshost-. Portanto, não há diferença na contagem de hop entre portas filtradas e abertas.
Outra técnica é tentar ferramentas específicas da aplicação contra portas comuns. Por exemplo, um quebra- strings da comunidade SNMP de força bruta poderia ser tentado contra a porta 161. Conforme a base de dados de detecção de versão do Nmap cresce, a necessidade de aumentar seus resultados com ferramentas especializadas externas é reduzida. Elas ainda serão úteis para casos especiais, tais como dispositivos SNMP com uma comunidade personalizada de strings.