O NMAP, sigla em inglês para Mapeador de Redes, é um software livre muito útil para "varrer" uma rede de computadores afim de descobrir portas abertas, serviços e versões utilizados na rede, sistemas operacionais, entre muitas outras aplicações. Obviamente, pode ser usado tanto por profissionais com o objetivo de proteger a rede contra invasores, como também pelos próprios invasores para reunir informações importantes para a invasão.

 

Instalação

Embora o NMAP possa ser instalado simplesmente usando o gerenciador de pacotes da maioria das distribuições Linux, como o apt-get (#apt-get install nmap) ou o yum (#yum install nmap), recomendo fortemente baixar diretamente do site oficial 
http://nmap.org/download.html, garantindo que será instalada a versão mais nova do programa, com um banco de dados atualizado de sistemas e serviços que o NMAP irá reconhecer. Basta fazer o download do código-fonte ou do pacote mais adequado à sua distribuição e instalar. Não irei entrar em detalhes sobre cada uma das diversas formas de instalar, já que esse artigo é voltado para pessoas com um certo conhecimento de Linux e redes. Além disso, há no site arquivos para instalação em vários sistemas, incluindo Windows e Mac OS.

Como exemplo, vamos ver como instalar diretamente a partir do código-fonte, o que funcionará satisfatoriamente em qualquer distribuição Linux moderna, com todas as funcionalidades do software, incluindo suporte ao OpenSSL.

Depois de baixado o arquivo .bz2, cujo nome varia conforme a versão, basta executar os seguintes comandos, sempre como usuário root:

#tar xjvf nmap-<versão>.tar.bz2 (descompacta os arquivos de instalação)
#cd nmap.<versão> (entra na pasta criada)
#./configure (configura o sistema de construção)
#make (constrói o Nmap)
#make install (finalmente, instala o Nmap)

 Se tudo correu bem, o Nmap está instalado!


Usando o Nmap

Vamos começar por um comando simples, informando ao Nmap apenas o IP da máquina alvo:

#nmap 192.168.1.102Starting Nmap 5.21 ( http://nmap.org ) at 2012-07-08 17:24 BRT
Nmap scan report for 192.168.1.102
Host is up (0.0000090s latency).
Not shown: 996 closed ports
PORT     STATE     SERVICE
22/tcp     open         ssh
25/tcp     filtred        smtp
53/tcp     open         domain
80/tcp     open         http
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

A saída do comando começa informando a versão do Nmap, site oficial, além da data e hora em que o comando foi executado. A parte mais importante consiste na tabela que mostra as portas encontradas, seu estado e o serviço que está "escutando" nelas. No exemplo, conseguimos descobrir que o dispositivo alvo roda ssh, dns, http e smtp, sendo que este último serviço está sendo filtrado pelo firewall. Acima da tabela, vemos que há 996 portas que não foram mostradas, cujo estado é "closed". Note que sem paramêtros avançados, o Nmap só mostra 1000 portas, sendo estas as mais populares conhecidas pelo programa.

Mas quais são e o que significam os estados de portas mostrados pelo nmap?

  • open - Algum serviço ou aplicação está aceitando conexões nessa porta. São as mais facéis de serem exploradas por atacantes.

  • closed - A porta está acessível, mas não há nenhum serviço aceitando conexões.

  • filtered - A porta está sendo filtrada por alguma regra de firewall, fazendo com que o Nmap não consiga determinar se ela está aberta ou fechada.

  • unfiltered - A porta está acessível, mas mesmo assim o Nmap não foi capaz de saber se ela está aberta ou fechada. Muitas vezes isso acontece porque há um firewall tentando enganar os atacantes ou auditores de redes. Há paramêtros mais avançados do Nmap que ajudam a saber mais sobre essas portas.

  • open|filtered - Quando a porta está nesse estado, o Nmap não foi capaz de determinar se ela está aberta ou filtrada. Esse estado é mostrado quando as portas abertas não dão nenhuma resposta.

  • closed|filtered - O Nmap não conseguiu determinar se a porta está fechada ou filtrada. É bastante raro encontrar alguma porta nessa condição.

 Ao invés de especificarmos um único endereço IP para o alvo, poderiamos ter dado um nome (ex. fernandotagliari.com.br), uma rede (ex. 192.168.1.0/24) e até mesmo faixas de endereços (ex. 192.168.2.1-50).  E ainda, podemos juntar tudo isso em apenas um comando (ex. nmap fernandotagliari.com.br 192.168.1.0/24 192.168.2.1-50). E se você tem um arquivo com uns 200 endereços, gerado pelo seu servidor DHCP por exemplo, e quer informações apenas sobre eles? Basta passar essa informação com a opção -iL (ex. nmap -iL endereços.txt).

O Nmap também permite especificar de quais portas queremos informações, usando a opção -p, como nos exemplos:

#nmap -p 22 192.168.1.0
#nmap -p ssh 192.168.1.0
#nmap -p 22,80,100-150 192.168.1.0

 A partir disso, já podemos ter uma boa noção de como usar o Nmap, mas só isso nem sempre é o suficiente.

Uma informação extremamente importante para a invasão de uma rede é saber os serviços e versões que estão rodando, para então atacar através das vulnerabilidades conhecidas. Podemos usar o Nmap para descobrirmos serviços rodando em nossa rede com versões vulneráveis, afim de corrigir os erros:

#nmap -sV 192.168.1.6
Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-06 16:33 BRST
Nmap scan report for 192.168.1.6
Host is up (0.0018s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 5.5p1 Debian 6+squeeze2 (protocol 2.0)
80/tcp  open  http    Apache httpd 2.2.16 ((Debian))
111/tcp open  rpcbind
MAC Address: 08:00:27:AF:E4:C1 (Cadmus Computer Systems)
Service Info: OS: Linux
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.61 seconds

Na saída acima podemos ver claramente a versão do SSH e do Apache que está rodando no servidor alvo. Também descobrimos que o sistema operacional é o Linux. Nem sempre esses resultados são exatos, já que o Nmap "adivinha" as informações através de como o alvo responde a uma bateria de testes realizados. No caso, as versões mostradas estão corretas, assim como a informação de sistema operacional, que muitas vezes é mais completa, mostrando distribuição e até mesmo versão do mesmo.

O Nmap nós permite muito mais do que falo nesse artigo, mas são essas as opções que uso mais frequentemente. Para um próximo artigo posso detalhar mais sobre os tipos de exames e ensinar a criar scripts para o programa, por exemplo. Recomendo que periodicamente você faça um escaneamento com o Nmap na sua rede, afim de encontrar portas que não deveriam estar abertas. É muito comum esquecermos de fechar alguma porta não necessária que vem por padrão em algum sistema recém instalado em um servidor, ou até mesmo encontrar portas abertas por vírus, principalmente em sistemas Windows.

 

No site do Nmap (http://www.nmap.org) você poderá obter muitas informações detalhadas sobre o programa.