Aprendendo com o nmap

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Foto del Autor]

TranslationInfo:[]

original in es Danilo Lujambio
es to en Iván Rojas Aguilar
es to en Javier Palacios

en to en:Lorne Bailey

en to pt:Bruno Sousa

AboutTheAuthor:[A small biography about the author]

Abstract:[Here you write a little summary]

ArticleIllustration:[This is the title picture for your article]

[nmap]

ArticleBody:[The article body]

Porque são os scanners tão importantes para a segurança das redes ? Basicamente, porque são utilitários essenciais para aqueles que querem atacar um sistema. A preparação de um ataque podia assemelhar-se a algo do género :



Para um administrador de sistema preocupado com a segurança do sistema é importante fazer um scan à sua própria rede, procurar vulnerabílidades antes que outros o façam e não com tão boas intenções.

Existem vários utilitários de scan para este fim, mas o artigo só focará o nmap. O nmap é entre todos o scanner e utilitário de segurança mais completo.

O Nmap permite ao administrador de sistema fazer um scan às redes para saber quais os servidores activos e os serviços que ofereçem. Para este fim, o nmap oferece várias técnicas de scan. O artigo focará um número limitado delas, revendo (talvez ensinando ?) alguns aspectos do protocolo TCP.

A estratégia deste artigo será a de mostrar como utilizar o nmap, como habitualmente é utilizado, para obter informação acerca de sistemas e em paralelo, como encontrar rastos de scan no lado do alvo.

O nmap pode ser obtido a partir de www.insecure.org. Após o download faça :

tar zxvf nmap-2.30BETA17.tgz
cd ...../nmap-2.30BETA17/
./configure
make
make install
e está instalado.

O output do nmap é, habitualmente, uma lista "interessante" de portos (activos) na máquina de destino, scanada. Estas portas fornecem o nome dos serviços, o seu estado e o protocolo.

Scanando o TCP, o aperto de mão do TCP (opção -sT)

A forma mais simples de fazer scan com o nmap é feia com a opção -sT. É baseada no método de estabelecimento de uma ligação no protocolo TCP, conhecida como o aperto de mão. A sequência [1] é descrita em baixo

  1. O servidor tem de estar preparado para receber uma conexão (utilizando, habitualmente as funções sockd, bind e listen)
  2. O cliente inicia uma ligação activa - uma chamada ao connect(). Isto envia um segmento SYN ao servidor para informar acerca do número de sequência inicial dos dados que o cliente enviará durante a ligação. O segmento SYN contém, usualmente um cabeçalho IP - um cabeçalho TCP e talvez algumas opções TCP.
  3. O servidor deve conhecer o SYN, enviando um ACK e um SYN com o seu número de sequência (com o mesmo pacote TCP).
  4. O cliente deve conhecer o SYN do servidor com um ACK


Este modo de scan tem duas vantagens:

mas tem uma grande desvantagem. É fácil de detectar e de filtrar.

Seguiremos o procedimento utilizado pela opção do nmap -sT, correndo o tcpdump na máquina de destino, o nmap é executado na máquina 192.168.255.50 e aponta na direcção da máquina house2.xxx.xxx.xxx através de uma rede Ethernet.

1) 08:24:18.393108 192.168.255.20.1024 house2.xxx.xxx.xxx.653: S 2632227152:2632227152(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF)
2) 08:24:18.393167 house2.xxx.xxx.xxx.653 192.168.255.20.1024: R 0:0(0) ack 2632227153 win 0
3) 08:24:18.393227 192.168.255.20.1025 house2.xxx.xxx.xxx.6141: S 2644226118:2644226118(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF)
4) 08:24:18.393258 house2.xxx.xxx.xxx.6141 192.168.255.20.1025: R 0:0(0) ack 2644226119 win 0
5) 08:24:18.453343 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: S 2640612362:2640612362(0) win 16060 < mss 1460,sackOK,timestamp 232608[|tcp] (DF)
6) 08:24:18.453542 house2.xxx.xxx.xxx.pop3 192.168.255.20.1298: S 1658259980:1658259980(0) ack 2640612363 win 16060 < mss 1460,sackOK,timestamp 243353[|tcp] (DF)
7) 08:24:18.458667 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3:. ack 1 win16060<nop,nop,timestamp 232609 243353 (DF)
8) 08:24:18.461280 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1 win 16060 < nop,nop,timestamp 232609 243353 (DF)

A numeração de linhas foi adicionada para facilitar a explicação. A linha 1 mostra a máquina "atacante" 192.168.255.50, a enviar um segmento SYN a partir do porto 1024 para a porta 653 da máquina de destino house2.xxx.xxx.xxx. Podemos reconhecê-lo como um segmento SYN graças ao S depois do número da porta (653). Isto cobre o ponto 2) do aperto de mão, explicado anteriormente.
Na linha 2 vemos a máquina de destino a responder com um pacote RESET (note no R depois do 1024) indicando que não há nenhum processo à escuta no porto 653.
As linhas 3 e 4 são semelhantes às primeiras, mas verificando se existe um processo no porto 6141 da máquina de destino. Como não há nada de novo, também responde com um RESET.
A linha 5 mostra como a máquina 192.168.255.20 envia um segmento SYN para a porta POP3 (número 110), da máquina de destino e esta responde com um ACK aceitando o SYN e o número de sequência ( A máquina envia o número de sequência da máquina de destino, neste caso o 1658259980, e o número de sequência enviada pela máquina 192.168.255.50 adicionando 1, formando o 2640612363). Note que o pacote enviado a partir da house2 tem o bit de controlo SYN e ACK activado. Isto vê-se na linha 6 e corresponde ao ponto 3) do aperto de mão acima.
A linha 7 mostra o reconhecimento do último pacote recebido nas máquinas 192.168.255.50, com um segmento ACK, alcançando-se o ponto 4) do aperto de mão.
A linha 8 é o fim de ligação da máquina 192.168.255.50, que é feito através do envio de um segmento FIN (note o F após o POP3).

Esta execução permitiu ao nmap detectar o porto 110(pop3) da máquina house2 está activo naquela máquina.

Como referido anteriormente, este modo de scan é fácil de detectar, usando as impressões deixadas no ficheiro /var/log/messages (contudo isto depende do modo como o syslog.conf foi configurado) a ligação vista nas linhas 5 e 8 produziu:

May 6 08:24:01 house2 in.pop3d[205]: connect
from root@192.168.255.20


Fazendo Scan usando segmentos SYN (meio abertos, opção -sS)

Este tipo de scan é feito pelo nmap através da opção -sS. A técnica é utilizada para abrir uma "meia ligação": enviamos um segmento SYN e se é recebido um ACK então detectámos uma porta activa na máquina de destino e enviamos um RESET para fechar a ligação devidamente. Se recebermos um RST em vez de um ACK, então a porta scanada não está activa. Este modo de scan tem o senão que são requeridos privilégios root para ser executado. Mas a vantagem é que é difícil de detectar na máquina à qual se faz o scan.

Façamos uma análise das acções feitas pelo nmap com esta opção, analisando-o com o tcpdump (com numeração de linhas, para facilitar a descrição).

1) 22:25:45.856936 192.168.255.20.40175 house2.tau.org.ar.946: S 1292785825:1292785825(0) win 3072
2) 22:25:45.857078 house2.tau.org.ar.946 192.168.255.20.40175: R 0:0(0) ack 1292785826 win 0


As linhas 1 e 2 são, quase semelhantes às linhas 1 e 2 da secção anteriror, excepto que um segmento SYN é visto, enviado pela máquina 192.168.255.50 para o porto 946 da máquina house2 e obtivemos uma resposta com um RESET porque não é uma porta activa.

3) 22:25:45.970365 192.168.255.20.40175 house2.tau.org.ar.pop3: S 1292785825:1292785825(0) win 3072
4) 22:25:45.976022 house2.tau.org.ar.pop3 192.168.255.20.40175: S 185944428:185944428(0) ack 1292785826 win 16080 < mss 536 (DF)
5) 22:25:45.979578 192.168.255.20.40175 house2.tau.org.ar.pop3: R 1292785826:1292785826(0) win 0

As linhas 3,4 e 5 são produzidas pela descoberta bem sucedida do serviço (pop3) no porto 110 da máquina house2. Como mencionado, o aperto de mão não é completado mas quando o nmap recebe o reconhecimento de um segmento SYN (como significado do segmento ACK enviado pela house2 na linha 4), envia um segmento RESET que força a interrupção da comunicação.

Este scan na máquina host2 não deixou nenhum rasto no ficheiro /var/log/messages, como mencionado anteriormente.

Scanando utilizando segmentos FIN

Este tipo de scan é baseado no facto de que portas inactivas na máquina de destino respondem a um pacote FIN com um pacote RST. Por outro lado, portas activas, simplesmente, ignora este pacote. Assim, a lista de portas interessantes é obtida observando-se as quais não responderam. Máquinas correndo sistemas operativos Window$ não podem ser "scanadas" com este método, visto não terem implementações standard do protocolo TCP.

Existem três formas de operar com o nmap em situações semelhantes. com as opções -sF, -sX e -sN. Analisaremos depois o comportamento da opção -sF, efectuando uma análise semelhante às secções anteriores.

1) 06:50:45.643718 192.168.255.20.35600 casahouse.tau.org.ar.864: F 0:0(0) win 2048
2) 06:50:45.643865 house2.tau.org.ar.864 192.168.255.20.35600: R 0:0(0) ack 0 win 0

Nas linhas 1 e 2 os segmentos FIN entregues (note no F depois do 864 na linha 1) é observado na máquina de destino que responde com um pacote RST (note no R na linha 2 depois do 35600). O nmap conclui que a porta 864 na house2 não está activa.

3) 06:50:47.933227 192.168.255.20.35600 > house2.tau.org.ar.pop3: F 0:0(0) win 2048
4) 06:50:48.251147 192.168.255.20.35601 > house2.tau.org.ar.pop3: F 0:0(0) win 2048

As linhas 3 e 4 tomam o pop3 como exemplo. Na linha 3, vemos um segmento FIN enviado, o qual não obtém resposta da house2. A linha 4 foi uma surpresa, sendo provavelmente uma medida tomada pelo nmap para verificar o estado daquele porta, enviando outro segmento FIN, para assegurar que a porta não está a responder. Em ambos os casos, a house2 ignorou os pacotes, mostrando ao nmap que a porta pop3 está activa.

Funcionalidade do tcpdump que pode ajudar

Na secção acerca do "scan de aperto de mão", vimos que as rastos que um scan pode deixar atrás, e nas últimas secções vimos que as opções de scan -sS e -sF não deixam impressões digitais. Podemos utilizar o tcpdump para detectar este tipo de scan numa máquina conectada a uma rede susceptível a ataques. O contra do tcpdump é que gera um enorme monte de informação e levanta dificuldades com o seu arquivo e análise. Algumas expressões são mostradas aqui e reagem como filtros para que a informação seja mais pequena e simples de analisar.

Para tornar as expressões de fácil compreensão, mostramos em baixo o formato de um pacote TCP [2].

TCP (RFC 793)

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |        Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Sequence Number                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Acknowledgement Number                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset |  Reserver |U|A|P|R|S|F|             Window            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Options                      |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              Data                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Vimos que o 13.º byte é onde as flags que identificam o tipo de pacote (SYN, FIN, etc) residem. Com este conhecimento e com o operador (&) podem construir-se máscaras para detectar os bits activos, construindo expressões do tipo :
tcpdump ' tcp[13] & 7 != 0 and dst 192.168.255.20 ' > /tmp/out7

que filtram os pacotes de entrada com os bits R,S ou F activos a máscara (a máscara é 00000111) com 192.168.255.20 como máquina destino (obviamente que este endereço IP será pesquisado pela máquina).

Usando

tcpdump ' tcp[13] & 1 != 0 and dst 192.168.255.20 ' > /tmp/out1

Obteremos os pacotes com o bit activo F (a máscara é 00000001). Podia ser útil para detectar a opção de scan do nmap -sF e com

tcpdump ' tcp[13] & 2 != 0 and dst 192.168.255.20 ' > /tmp/out2

obteremos somente os pacotes com o bit SYN activo, sendo útil para detectar scan com a opção -sS.

Para o último tipo descrito (com a opção -sS) existem programas específicos para o detectar [3].

Conclusão

Programas como o nmap são muito úteis para melhorar a segurança do sistema ao olhar para as redes através dos olhos de um possível pirata. Mostramos as operações de uma pequena parte das opções, mas espero que o ajude a compreender um pouco mais a ideia de um scanner de rede.

Bibliografia

[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] ver documentação do nmap