nmap
Descrición: Network Mapper - ferramenta de escaneo de redes e auditoría de seguridade.
Sintaxe básica:
Fundamentos do Protocolo TCP (Three-Way Handshake)
Escaneos de rede
Antes de empezar a disparar escaneos, é imprescindible comprender o handshake TCP de tres vías. Ese proceso
—SYN → SYN-ACK → ACK—
non só determina se un porto está ‘aberto’ ou ‘pechado’, senón que tamén condiciona a elección da técnica de escaneo, o posible impacto sobre o host (conexións pendentes, consumo de recursos) e a visibilidade ante IDS/IPS. En palabras sinxelas: coñecer como funciona TCP permítelle ao pentester (ou ao administrador) escanear con criterio, interpretar mellor falsos positivos/negativos e minimizar o risco de interromper servizos ou de ser detectado innecesariamente.
Conexión TCP Normal (Three-Way Handshake)
Cliente Servidor
| |
| 1. SYN (seq=x) |
|-------------------------------->|
| |
| 2. SYN-ACK (seq=y, ack=x+1) |
|<--------------------------------|
| |
| 3. ACK (ack=y+1) |
|-------------------------------->|
| |
| *** CONEXIÓN ESTABLECIDA *** |
Fases:
1. SYN (Synchronize): O cliente envía un paquete coa flag SYN activada
2. SYN-ACK: Se o porto está aberto, o servidor responde con SYN-ACK
3. ACK (Acknowledge): O cliente confirma cun ACK, completando a conexión
Flags TCP (Recordatorio)
As flags TCP máis importantes:
| Flag | Nome | Función |
|---|---|---|
| SYN | Synchronize | Iniciar conexión |
| ACK | Acknowledge | Confirmar recepción |
| FIN | Finish | Pechar conexión |
| RST | Reset | Abortar conexión |
| PSH | Push | Enviar datos inmediatamente |
| URG | Urgent | Datos urxentes |
Tipos de Escaneo en Nmap
1. TCP SYN Scan (-sS) - "Stealth Scan" ou "Half-Open Scan"
Como funciona
Para porto aberto:
Nmap Porto Aberto
| |
| 1. SYN |
|-------------------------------->|
| |
| 2. SYN-ACK |
|<--------------------------------|
| |
| 3. RST (RESET) |
|-------------------------------->|
| |
| *** NON SE COMPLETA CONEXIÓN ***|
Para porto pechado:
Nmap Porto Pechado
| |
| 1. SYN |
|-------------------------------->|
| |
| 2. RST |
|<--------------------------------|
Características:
- Non completa o handshake TCP: O equipo atacante envía RST despois de recibir SYN-ACK
- Sigiloso: Non queda rexistrado en moitos logs de aplicación (só en logs de firewall/IDS)
- Rápido: Non establece conexións completas
- Require privilexios root: Necesita crear paquetes raw (personalizados)
- Detección de portos:
- Aberto: O equipo obxectivo responde con SYN-ACK
- Pechado: O equipo obxectivo responde con RST
- Filtrado: Non hai resposta do equipo obxectivo ou ICMP unreachable
Comando:
Por que é "stealth"?
- Antigos sistemas só rexistraban conexións completas (3-way handshake)
- Ao non completar o handshake, evitaba logs de aplicacións
- NOTA: Os IDS/IPS modernos detectan este tipo de escaneo
Paquetes raw (paquetes en bruto)
Son paquetes de rede construídos directamente polo programa sen pasar polas capas de abstracción do sistema operativo. Mentres que as aplicacións normais usan funcións de alto nivel do SO (como connect(), send(), recv()) que xestionan automaticamente os detalles do protocolo TCP/IP, os raw sockets permiten crear e enviar paquetes personalizados onde o programa controla cada byte do paquete, incluíndo as cabeceiras de transporte (TCP/UDP) e rede (IP).
Crear paquetes raw require privilexios de administrador (root) porque:
-
Seguridade: Calquera usuario podería falsificar enderezos IP de orixe (IP spoofing), crear ataques de denegación de servizo (DoS), ou enviar paquetes maliciosos sen restricións.
-
Control total: Os raw sockets permiten manipular campos críticos das cabeceiras IP e TCP que normalmente están protexidos polo kernel do sistema operativo.
-
Bypass de filtros: Permitiría evadir mecanismos de seguridade implementados polo SO.
Cando executas nmap -sS (SYN scan), nmap necesita:
- Crear un paquete TCP personalizado con só a flag SYN activada
- Establecer campos específicos da cabeceira TCP (porto orixe aleatorio, número de secuencia, opcións TCP)
- Enviar o paquete directamente sen completar o handshake de 3 vías
- Capturar a resposta e analizar se é SYN-ACK (porto aberto) ou RST (porto pechado)
Todo isto require construír o paquete "desde cero" en lugar de usar a función estándar connect() do sistema operativo, polo que require raw sockets e, por tanto, privilexios root.
En resumo: Os paquetes raw son como "construír un sobre manualmente escribindo cada detalle (remitente, destinatario, selo)" en lugar de usar o servizo estándar de correos que fai todo automaticamente. Este control total require privilexios especiais para evitar abusos.
2. TCP Connect Scan (-sT) - "Full Connection Scan"
Como funciona:
Nmap Porto Aberto
| |
| 1. SYN |
|-------------------------------->|
| |
| 2. SYN-ACK |
|<--------------------------------|
| |
| 3. ACK |
|-------------------------------->|
| |
| *** CONEXIÓN COMPLETA *** |
| |
| 4. RST (pechar) |
|-------------------------------->|
Características:
- Completa o handshake TCP: Utiliza a chamada connect() do sistema operativo
- Non require privilexios root: Usa funcións estándar do SO
- Máis visible: Queda rexistrado nos logs de aplicación
- Máis lento: Establece conexións completas
- Método por defecto: Cando nmap non se executa como root
- Detección de portos:
- Aberto: Conexión exitosa
- Pechado: Conexión rexeitada (RST)
- Filtrado: Timeout ou ICMP unreachable
Comando:
Cando usalo?
- Non tes privilexios root
- A través de proxies ou SOCKS
- Escaneo de sistemas locais onde a velocidade non é crítica
Comparativa SYN Scan (-sS) vs TCP Connect Scan (-sT)
| Característica | SYN Scan (-sS) | TCP Connect (-sT) |
|---|---|---|
| Privilexios | Require root | Non require root |
| Handshake | Incompleto (SYN → SYN-ACK → RST) | Completo (SYN → SYN-ACK → ACK) |
| Velocidade | Máis rápido | Máis lento |
| Sigiloso | Máis sigiloso (historicamente) | Máis visible |
| Logs | Pode evitar logs de aplicación | Rexístrase en logs de aplicación |
| Detección IDS | Detectable por IDS modernos | Sempre detectable |
| Uso | Escaneo por defecto con root | Escaneo por defecto sen root |
| Paquetes raw | Si, crea paquetes personalizados | Non, usa API do SO |
Outros Tipos de Escaneo TCP
3. TCP ACK Scan (-sA)
Nmap Firewall/Host
| |
| ACK |
|-------------------------------->|
| |
| RST (non filtrado) |
|<--------------------------------|
| |
| ou |
| |
| (sen resposta = filtrado) |
Características:
- Non determina se o porto está aberto/pechado
- Detecta firewalls: Diferencia entre portos filtrados e non filtrados
- Útil para mapear regras de firewall
Comando:
4. TCP FIN Scan (-sF)
Nmap Porto Pechado
| |
| FIN |
|-------------------------------->|
| |
| RST |
|<--------------------------------|
Nmap Porto Aberto
| |
| FIN |
|-------------------------------->|
| |
| (sen resposta) |
Características:
- Envía paquete con flag FIN (fin de conexión)
- Porto pechado: Responde con RST
- Porto aberto: Non responde (segundo RFC 793)
- Pode evitar algúns firewalls simples
Comando:
5. TCP Xmas Scan (-sX)
Características:
- Activa flags FIN, PSH e URG simultaneamente
- O nome "Xmas" vén de que o paquete está "iluminado" como unha árbore de Nadal
- Comportamento similar a FIN scan
Comando:
6. TCP NULL Scan (-sN)
Nmap Porto Pechado
| |
| (sen flags activadas) |
|-------------------------------->|
| |
| RST |
|<--------------------------------|
Nmap Porto Aberto
| |
| (sen flags activadas) |
|-------------------------------->|
| |
| (sen resposta) |
Características:
- Non activa ningunha flag TCP (URG=0, ACK=0, PSH=0, RST=0, SYN=0, FIN=0)
- Porto pechado responde con RST
- Porto aberto non responde (segundo RFC 793)
- Nota: Algúns sistemas (especialmente Windows) non seguen RFC 793 e responden con RST tanto para portos abertos como pechados, facendo este escaneo inefectivo
Comando:
Detección de Estado dos Portos
Posibles Estados
| Estado | Descrición |
|---|---|
| open | Aplicación aceptando conexións TCP |
| closed | Porto accesible pero sen aplicación escoitando |
| filtered | Firewall bloqueando o acceso, nmap non pode determinar se está aberto |
| unfiltered | Porto accesible pero nmap non pode determinar se está aberto ou pechado |
| open|filtered | Nmap non pode determinar entre aberto ou filtrado |
| closed|filtered | Nmap non pode determinar entre pechado ou filtrado |
Exemples Prácticos Comentados
Exemplo 1: SYN Scan Básico
- Escanea portos 80 e 443- Usa SYN scan (stealth)
- Require root
Exemplo 2: TCP Connect sen Privilexios
- Escanea todos os portos (1-65535)- Usa TCP Connect (non require root)
- Máis lento pero funcional sen privilexios
Exemplo 3: Detectar Firewall con ACK Scan
- Escanea portos 1-1000- Detecta regras de firewall
- Non determina se portos están abertos
Exemplo 4: Evitar Detección con FIN Scan
- FIN scan (pode evitar algúns firewalls)- Timing lento (-T2) para ser máis sigiloso
Opcións principais
| Opción | Descrición |
|---|---|
| Tipos de escaneo | |
-sS |
TCP SYN scan (stealth scan, require root) |
-sT |
TCP connect scan (non require root) |
-sU |
UDP scan |
-sV |
Detección de versións de servizos |
-sC |
Executa scripts por defecto (equivalente a --script=default) |
-sCV |
Combinación de -sC e -sV |
| Control de portos | |
-p <portos> |
Portos específicos (ex: -p22,80,443) |
-p- |
Todos os portos (1-65535) |
--top-ports <n> |
Escanea os n portos máis comúns |
| Temporización e rendemento | |
-T<0-5> |
Velocidade (0=paranoid, 5=insane, 4=aggressive) |
--min-rate <n> |
Enviar polo menos n paquetes por segundo |
--max-rate <n> |
Enviar como máximo n paquetes por segundo |
| Descubrimento de hosts | |
-Pn |
Non facer ping (trata todos os hosts como activos) |
-PS <portos> |
TCP SYN discovery en portos específicos |
-PA <portos> |
TCP ACK discovery |
| Saída e verbosidade | |
-v |
Verbose (aumenta información) |
-vv ou -vvv |
Máis verbose |
-oN <ficheiro> |
Saída normal a ficheiro |
-oX <ficheiro> |
Saída XML a ficheiro |
-oA <basename> |
Saída en todos os formatos |
Exemplos de uso
## Escaneo estándar TCP SYN, todos os portos
sudo nmap -sS -Pn -T4 -p- -vvv --min-rate 5000 192.168.56.100
## Escaneo UDP (exemplo: TFTP porto 69)
sudo nmap -sU -Pn -T4 --top-ports 100 192.168.56.100
## Escaneo TCP connect (sen privilexios root)
nmap -sT -Pn -T4 -p- -vvv --min-rate 5000 192.168.56.100
## Escaneo con detección de versións e scripts
sudo nmap -sCV -p22,80,443 192.168.56.100
## Escaneo rápido dos 1000 portos máis comúns
nmap -T4 --top-ports 1000 192.168.56.100
## Escaneo completo gardando resultados
sudo nmap -sS -sV -Pn -T4 -p- -oA escaneo_completo 192.168.56.100
## Escaneo específico de porto con scripts NSE
nmap -p 445 --script smb-enum-shares 192.168.56.100
## Escaneo para identificar sistema operativo
sudo nmap -O 192.168.56.100
Saída típica:
Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for 192.168.56.100
Host is up (0.00023s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.23 seconds
Recursos Adicionais
Libros e PDFs Recomendados:
-
"Nmap Network Scanning" de Gordon Lyon (Fyodor) - Creador de Nmap
- Descarga gratuíta: https://nmap.org/book/
-
RFC 793 - Transmission Control Protocol
- Especificación oficial do protocolo TCP: https://tools.ietf.org/html/rfc793