Detecção de Serviço e Versão

Aponte o Nmap para uma máquina remota e ele poderá lhe dizer que as portas 25/tcp, 80/tcp e 53/udp estão abertas. Utilizar o banco de dados nmap-services, com cerca de 2.200 serviços bastante conhecidos, do Nmap iria relatar que aquelas portas provavelmente correspondem a um servidor de correio eletrônico (SMTP), a um servidor de páginas web (HTTP) e a um servidor de nomes (DNS) respectivamente. Essa pesquisa normalmente é precisa -- a grande maioria de daemons escutando na porta TCP 25 é, de fato, de servidores de correio eletrônico. Entretanto, você não deveria apostar a sua segurança nesta informação! As pessoas podem e executam serviços em portas estranhas.

Mesmo que o Nmap esteja certo, e o servidor hipotético acima esteja executando os serviços SMTP, HTTP e DNS, isso não é informação o bastante. Quando fizer uma avaliação de vulnerabilidades (ou mesmo um simples inventário da rede) de sua empresa ou clientes, você realmente deseja saber qual o programa-servidor de correio eletrônico ou de nomes e as versões que estão rodando. Ter um número de versão exato ajuda substancialmente na determinação de quais explorações (exploits) o servidor está vulnerável. A detecção de versão ajuda a obter esta informação.

Depois que as portas TCP e/ou UDP forem descobertas usando qualquer um dos outros métodos de scan, a detecção de versão interroga essas portas para determinar mais informações sobre o que realmente está sendo executado nessas portas. O banco de dados nmap-service-probes do Nmap contém sondagens para pesquisar diversos serviços e expressões de acerto (match expressions) para reconhecer e destrinchar as respostas. O Nmap tenta determinar os protocolos de serviços (p.ex.: ftp, ssh, telnet, http), o nome da aplicação (p.ex.: ISC Bind, Apache httpd, Solaris telnetd), o número da versão, o nome do host, tipo de dispositivo (p.ex.: impressora, roteador), a família do SO (p.ex.: Windows, Linux) e às vezes detalhes diversos do tipo, se um servidor X está aberto para conexões, a versão do protocolo SSH ou o nome do usuário do KaZaA. É claro que a maioria dos serviços não fornece todas essas informações. Se o Nmap foi compilado com o suporte ao OpenSSL, ele irá se conectar aos servidores SSL para deduzir qual o serviço que está escutando por trás da camada criptografada. Quando os serviços RPC são descobertos, o "amolador" de RPC (RPC grinder) do Nmap (-sR) é automaticamente utilizado para determinar o nome do programa RPC e o número da versão. Algumas portas UDP são deixadas no estado aberta|filtrada depois que scan de porta UDP não consegue determinar se a porta está aberta ou filtrada. A detecção de versão irá tentar provocar uma resposta dessas portas (do mesmo jeito que faz com as portas abertas), e alterar o estado para aberta se conseguir. Portas TCP do tipo aberta|filtrada são tratadas da mesma forma. Note que a opção -A do Nmap habilita a detecção de versão, entre outras coisas. Um trabalho documentando o funcionamento, uso e customização da detecção de versão está disponível em https://nmap.org/vscan/.

Quando o Nmap recebe uma resposta de um serviço mas não consegue encontrá-la em seu banco de dados, ele mostra uma identificação (fingerprint) especial e uma URL para que você envie informações se souber com certeza o que está rodando nessa porta. Por favor, considere dispor de alguns minutos para mandar essa informação de forma que sua descoberta possa beneficiar a todos. Graças a esses envios, o Nmap tem cerca de 3.000 padrões de acerto para mais de 350 protocolos, tais como o smtp, ftp, http, etc.

A detecção de versão é habilitada e controlada com as seguintes opções:

-sV (detecção de versão)

Habilita a detecção de versão, conforme discutido acima. Alternativamente, você pode usar a opção -A para habilitar tanto a detecção de SO como a detecção de versão.

--allports (Não exclui nenhuma porta da detecção de versão)

Por padrão, a detecção de versão do Nmap pula a porta TCP 9100 por causa de algumas impressoras que imprimem qualquer coisa que seja enviada para essa porta, levando a dezenas de páginas com requisições HTTP, requisições de sessões SSL binárias, etc. Esse comportamento pode ser alterado modificando-se ou removendo a diretiva Exclude no nmap-service-probes, ou você pode especificar --allports para escanear todas as portas independente de qualquer diretiva Exclude.

--version-intensity <intensidade> (Estabelece a intensidade do scan de versão)

Quando está executando um scan de versão (-sV), o nmap envia uma série de sondagens, cada qual com um valor atribuído de raridade, entre 1 e 9. As sondagens com números baixos são efetivas contra uma ampla variedade de serviços comuns, enquanto as com números altos são raramente úteis. O nível de intensidade especifica quais sondagens devem ser utilizadas. Quando mais alto o número, maiores as chances de o serviço ser corretamente identificado. Entretanto, scans de alta intensidade levam mais tempo. A intensidade deve estar entre 0 e 9. O padrão é 7. Quando uma sondagem é registrada na porta-alvo através da diretiva nmap-service-probes ports, essa sondagem é tentada independentemente do nível de intensidade. Isso assegura que as sondagens DNS sempre serão tentadas contra qualquer porta 53 aberta, e a sondagem SSL será realizada contra a 443, etc.

--version-light (Habilita o modo leve (light))

Esse é um apelido conveniente para --version-intensity 2. Esse modo leve torna o escaneamento de versão muito mais rápido, mas é ligeiramente menos provável que identifique os serviços.

--version-all (Tenta simplesmente todas as sondagens)

Um apelido para --version-intensity 9, assegurando que todas as sondagens sejam tentadas contra cada porta.

--version-trace (Monitora as atividades do scan de versão)

Isto faz com que o Nmap mostre informações de depuração extensivas sobre o que o escaneamento de versão está fazendo. É um sub-conjunto do que você obteria com --packet-trace.

-sR (Scan RPC)

Este método trabalha em conjunto com os vários métodos de escaneamento de portas do Nmap. Ele pega todas as portas TCP/UDP descobertas no estado aberta e inunda-as com comandos NULL do programa SunRPC, em uma tentativa de determinar se elas são portas RPC e, se forem, quais programas e números de versão elas mostram. Dessa forma você pode obter efetivamente a mesma informação que o rpcinfo -p mesmo se o portmapper do alvo estiver atrás de um firewall (ou protegido por TCP wrappers). Chamarizes não funcionam ainda com o scan RPC. Isso é habilitado automaticamente como parte do scan de versão (-sV) se você o solicitar. Como a detecção de versão inclui isso e é muito mais abrangente, o -sR raramente é necessário.