Scanning de portas com Nmap
17/06/2015Continuando a saga sobre testes de invasão, neste post veremos detalhes sobre scanning de portas com o objetivo de coletar mais informações para a etapa de análise de vulnerabilidades. Porém o foco agora é na identificação dos softwares que estão sendo utilizados como serviços.
Em um teste de invasão, o escopo é praticamente ilimitado. O alvo pode estar usando uma quantidade grande de aplicações com problemas de segurança, os softwares em questão podem ter sido configurados de forma incorreta na infraestrutura, ou podem ainda estar desatualizados.
O uso do melhor exploit para a vulnerabilidade mais recente não é útil se o alvo não estiver usando o software vulnerável. Para evitar esse desperdício, devemos descobrir quais serviços estão ativos e mapear os softwares que podemos estabelecer comunicação no servidor alvo.
Scanning manual de portas
Podemos consultar os sistemas em busca de portas que estejam ouvindo, isso pode ser feito de forma manual ao nos conectarmos às portas com o uso de ferramentas como o Netcat:
$ nc -vv 123.456.789.1 22
li31-114.members.linode.com [123.456.789.1] 22 (ssh) open
SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
Protocol mismatch.
sent 1, rcvd 58
Note que com este simples teste verificamos que o serviço de SSH
está
ativo na porta 22
e depois de estabelecida a conexão, o serviço
retornou se anunciando como SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
.
Banners como este podem ser alterados por administradores para que contenham qualquer tipo de informação, é um meio de enganar invasores. Mas na maioria dos casos, as versões exibidas serão bastante precisas e somente esse tipo de informação vai proporcionar um ponto de partida durante as pesquisas por vulnerabilidades.
Imagine conectar-se em todas as portas TCP
e UDP
possíveis no alvo
para analisar os resultados, isso levaria muito tempo. Para nossa alegria
podemos usar ferramentas específicas para scanning de portas como é o caso
do Nmap.
O Nmap
Quando se trata de scanning de portas o Nmap acaba sendo um padrão no mercado, possui uma vasta documentação e até um livro. Além da capacidade de determinar não apenas as máquinas ativas, a ferramenta consegue informações sobre o sistema operacional, as portas em uso, identificar serviços e possivelmente as respectivas versões.
Aproveitando o exemplo anterior onde verificamos a porta do serviço de
SSH
de forma manual, no Nmap a porta pode ser especificada com o
parâmetro -p
o comando ficaria assim:
$ nmap -p 22 123.456.789.1
Nmap scan report for (123.456.789.1)
Host is up (0.10s latency).
PORT STATE SERVICE
22/tcp open ssh
Atualmente firewalls com sistemas de prevenção e IDS(Intrusion detection system), são bem avançados na detecção e bloqueio de tráfego gerado por scanners, então pode ser que ao executar um scan com Nmap, nada seja obtido como resultado. Porém veremos algumas formas de burlar isso evitando a detecção por parte dos mecanismos de defesa.
As opções de scanning
Para especificar o tipo de scan que queremos utilizar, o prefixo -s
deve ser informado à ferramenta. O parâmetro -s
minúsculo é seguido de
uma letra maiúscula que determina o tipo de scan. Veremos agora as opções
mais utilizadas:
Scan stealth -sS
, esta é a opção padrão usada pelo Nmap quando
nenhuma opção for definida. Esta opção inicia uma conexão TCP
com o
alvo, mas não chega a concluir o handshake de três vias:
$ nmap -sS 123.456.789.1
Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-17 13:20 BRT
Nmap scan report for li15-134.members.linode.com (123.456.789.1)
Host is up (0.11s latency).
Not shown: 990 closed ports
PORT STATE SERVICE
21/tcp open ftp
25/tcp filtered smtp
80/tcp open http
554/tcp open rtsp
646/tcp filtered ldp
3306/tcp open mysql
7070/tcp open realserver
8009/tcp open ajp13
8010/tcp open xmpp
9080/tcp open glrpc
Nmap done: 1 IP address (1 host up) scanned in 4.94 seconds
O Nmap inicia o handshake ao enviar um pacote SYN
para o alvo e tem
como resposta um pacote SYN-ACK
que não será confirmado, com isso a
conexão ficará aberta pois o canal de comunicação não será estabelecido
por completo. Por padrão, a maioria dos sistemas fecha essa conexão
automaticamente depois de um tempo. Esta opção geralmente é mais difícil
de ser detectada em casos onde o alvo está configurado de forma incorreta.
Scan TCP connect -sT
, geralmente esta opção é utilizada para coletar
mais informações sobre o alvo do que o stealth
, pois é capaz de
estabelecer uma conexão TCP
completa. Neste caso as atividades desta
opção serão registradas em log na maioria dos sistemas.
Scan UDP -sU
, com esta opção o scan faz uma avaliação das portas
UDP
no alvo, esperando receber respostas dos sistemas cujas portas que
forem testadas estejam fechadas.
Scan ACK -sA
, faz a verificação para determinar se uma porta TCP
está filtrada por um firewall ou não. Basicamente esse scan estabelece
uma comunicação com o alvo passando a flag de confirmação ACK
ligada,
com isso, às vezes, esse tipo de scan consegue passar por firewalls
fingindo ser uma resposta ACK
a uma solicitação interna do alvo.
Como resposta ele lista as portas que não estão sendo filtradas por um
firewall:
$ nmap -sA 123.456.789.1
Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-17 13:56 BRT
Nmap scan report for li15-134.members.linode.com (123.456.789.1)
Host is up (0.040s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
554/tcp unfiltered rtsp
7070/tcp unfiltered realserver
Nmap done: 1 IP address (1 host up) scanned in 14.18 seconds
Até agora as opções que vimos não nos dão muitos detalhes sobre os
softwares que estão em uso nas portas, com a opção -sV
teremos um Scan
de versões onde o Nmap realizará uma conexão completa com o alvo para
tentar determinar os softwares em uso e, se possível, as versões:
$ nmap -sV 123.456.789.1
Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-17 14:09 BRT
Nmap scan report for li15-134.members.linode.com (123.456.789.1)
Host is up (0.11s latency).
Not shown: 990 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
25/tcp filtered smtp
80/tcp open http nginx
554/tcp open tcpwrapped
646/tcp filtered ldp
3306/tcp open mysql MySQL 5.1.73-log
7070/tcp open tcpwrapped
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8010/tcp open xmpp?
9080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Service detection performed.
Nmap done: 1 IP address (1 host up) scanned in 175.19 seconds
A coleta de informações nesta etapa começa a fazer sentido, já conseguimos identificar portas abertas de serviços, o nome dos softwares e o principal, as respectivas versões.
Mas e o sistema operacional? Bem, o Nmap conta com a opção -O
que pode
tentar coletar informações e identificar o sistema operacional do alvo:
$ nmap -sV -O 123.456.789.1
Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-17 14:09 BRT
Nmap scan report for li15-134.members.linode.com (123.456.789.1)
Host is up (0.11s latency).
Not shown: 990 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
25/tcp filtered smtp
80/tcp open http nginx
554/tcp open tcpwrapped
646/tcp filtered ldp
3306/tcp open mysql MySQL 5.1.73-log
7070/tcp open tcpwrapped
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8010/tcp open xmpp?
9080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Nmap done: 1 IP address (1 host up) scanned in 175.19 seconds
Bingo! O Nmap informa que a versão do Kernel Linux está entre 2.6.9
e
2.6.33
, além disso indica que pode ser vulnerável.
Existe ainda a opção -A
que faz o mesmo que -O
porém de forma mais
agressiva e tenta coletar mais informações.
Templates de tempo
O Nmap conta com uma funcionalidade de controle de tempo que permite ao usuário determinar a velocidade de um scan, para que seja mais rápido ou mais lento que o normal. Este controle serve para aumentar as chances de sucesso durante um scan, reduzindo o risco de ser detectado.
Cada template de tempo faz uso de vários parâmetros diferentes que podem
ser ajustados, porém as configurações mais significativas: scan_delay
,
max_scan_delay
e max_parallelism
correspondem aos intervalos entre
as sondagens (probes) do scan.
O scan_delay
determina o intervalo de tempo mínimo entre as sondagens
enviadas ao alvo, já max_scan_delay
determina o tempo máximo permitido
entre as sondagens e para instruir o sistema a enviar um probe por vez
ou vários ao mesmo tempo, usamos max_parallelism
. A seguir veremos os
templates e suas características.
Paranoid -T0
, usado principalmente em situações em que os riscos
de detecção devem ser mínimos. O intervalor entre cada verificação desse
scan é de cinco minutos, isso significa que que ele pode levar dias para
concluir, dependendo do número de portas.
Sneaky -T1
, um pouco mais rápido que o paranoid, reduz o tempo
necessário para realizar o scan e ao mesmo tempo ainda consegue ser
discreto. O scan_delay
é reduzido para 15 segundos e pode levar algumas
horas para finalizar.
Polite -T2
, tem o seu scan_delay
configurado para 400
milissegundos e faz com que seja mais rápido que os outros dois
anteriores. Pode levar alguns minutos para concluir.
Normal -T3
, este é o default do Nmap se nenhum template de tempo
for definido. Diferente dos outros três anteriores, este template não
faz uso de envio serial, em vez disso ele utiliza a técnica de
processamento paralelo e envia várias sondagens ao mesmo tempo. O
scan_delay
deste template está configurado para zero e o
max_scan_delay
pode chegar a 1 segundo por isso o tempo total de
varredura pode ser mais curto.
Aggressive -T4
, assim como o Normal esse template possui o seu
scan_delay
igual a zero e o seu max_scan_delay
inferior a 1 segundo
com um valor de apenas 10 milissegundos. O tempo total é inferior ao
seu antecessor.
Insane -T5
, este é o template que provê a maior velocidade, possui
o seu max_scan_delay
com um valor igual a 5 milissegundos.
Dependendo das configurações do alvo e do tipo de scan escolhido, o resultado da varredura pode trazer informações inconsistentes.
Em boa parte dos casos eu gosto de usar a seguinte combinação:
nmap -sS -sV -O -Pn host
desta forma tento tirar o máximo de proveito
em um curto tempo. A opção -Pn
não mencionada antes, desativa o envio
de pacotes ICMP
e isso faz com que o scan ganhe mais alguns pontos de
discrição.
Finalizando
Explore a ferramenta e não deixe de conferir a documentação, o que foi visto aqui é só uma breve introdução. Em outros posts tentarei abordar mais opções de uso como os tipos de output para armazenar os resultados do scan e ainda o uso do Nmap Scripting Engine para coletar informações detalhadas sobre vulnerabilidades nos sistemas do alvo.
Happy Hacking ;)