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 facto de servidores de correio eletrónico. Entretanto 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, 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 exacto 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 rastreio(scan), a detecção de versão interroga essas portas para determinar mais informações sobre o que realmente 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 anfitrião(host), tipo de dispositivo (p.ex.: impressora, router), 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 rastreio(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/versionscan.html.

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 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 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 default a detecção de versão do Nmap salta 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 directiva Exclude no nmap-service-probes ou pode especificar --allports para rastrear(scan) todas as portas independente de qualquer directiva Exclude.

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

Quando está executando um rastreio(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 efectivas 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 rastreios(scans) de alta intensidade levam mais tempo. A intensidade deve estar entre 0 e 9. O default é 7. Quando uma sondagem é registrada na porta-alvo através da directiva 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 rastreio(scan) 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 rastreio(scan) de versão)

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

-sR (Scan RPC)

Este método trabalha em conjunto com os vários métodos de rastreio(scan) 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 pode obter efectivamente 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 rastreio(scan) RPC. Isso é habilitado automaticamente como parte do rastreio(scan) de versão (-sV) se o solicitar. Como a detecção de versão inclui isso e é muito mais abrangente, o -sR raramente é necessário.