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
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 installe 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.
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
Este modo de scan tem duas vantagens:
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) |
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
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 |
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 |
Este scan na máquina host2 não deixou nenhum rasto no ficheiro /var/log/messages, como mencionado anteriormente.
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 |
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 |
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.
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].
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].
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.
[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] ver documentação do nmap