Ir ao contido

nmap

Descrición: Network Mapper - ferramenta de escaneo de redes e auditoría de seguridade.

Sintaxe básica:

nmap [opcións] <obxectivo>

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:

sudo nmap -sS 192.168.1.100

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:

  1. 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.

  2. 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.

  3. 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:

nmap -sT 192.168.1.100

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:

sudo nmap -sA 192.168.1.100


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:

sudo nmap -sF 192.168.1.100


5. TCP Xmas Scan (-sX)

Nmap                             Porto
   |                                 |
   |  FIN+PSH+URG                    |
   |-------------------------------->|

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:

sudo nmap -sX 192.168.1.100


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:

sudo nmap -sN 192.168.1.100


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

sudo nmap -sS -p 80,443 192.168.1.100
- Escanea portos 80 e 443
- Usa SYN scan (stealth)
- Require root

Exemplo 2: TCP Connect sen Privilexios

nmap -sT -p- 192.168.1.100
- 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

sudo nmap -sA -p 1-1000 192.168.1.100
- Escanea portos 1-1000
- Detecta regras de firewall
- Non determina se portos están abertos

Exemplo 4: Evitar Detección con FIN Scan

sudo nmap -sF -T2 192.168.1.100
- 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:

  1. "Nmap Network Scanning" de Gordon Lyon (Fyodor) - Creador de Nmap

  2. RFC 793 - Transmission Control Protocol