Escaneo de puertos
Técnica de reconocimiento que identifica qué puertos están abiertos en un host y qué servicios podrían estar escuchando (p.ej., SSH/22, HTTP/80). Es una base para enumeración y evaluación…
Definición
Técnica de reconocimiento que identifica qué puertos están abiertos en un host y qué servicios podrían estar escuchando (p.ej., SSH/22, HTTP/80). Es una base para enumeración y evaluación de superficie de ataque.
Contexto
- Un puerto “abierto” sugiere un servicio accesible; “cerrado” suele indicar que el host responde pero no hay servicio; “filtrado” sugiere que un firewall/ACL bloquea o no responde.
- Se usa en inventario defensivo (blue team) y en recon ofensivo (red team) siempre con autorización.
Desarrollo (MIT-style)
Qué se escanea realmente
- TCP: estado de puertos (SYN/ACK, RST) y handshake.
- UDP: más difícil (muchos servicios no responden); se infiere por ICMP “port unreachable” o por respuestas específicas.
Estados de puertos (Nmap)
- open: servicio escuchando.
- closed: sin servicio, pero accesible (no bloqueado).
- filtered: no se puede determinar (firewall/ACL filtra).
- unfiltered: accesible, pero Nmap no puede concluir open/closed (típico en
-sA). - open|filtered: Nmap no distingue entre abierto o filtrado (común en UDP).
- closed|filtered: Nmap no distingue entre cerrado o filtrado.
Banderas TCP (contexto rápido)
- SYN inicia el handshake; ACK confirma; RST resetea; FIN finaliza.
- PSH solicita entrega rápida a la app; URG marca datos urgentes.
Tipos comunes
- TCP SYN scan (“half-open”): envía SYN, interpreta SYN/ACK vs RST; reduce logging en algunos casos, pero no es invisible.
- TCP connect scan: completa handshake; más ruidoso.
- UDP scan: más lento y propenso a falsos negativos/positivos.
- Service/version detection: tras detectar puerto abierto, intenta identificar versión (banner, probes).
Escaneos TCP avanzados (Nmap)
- Null (
-sN): sin flags; RST = cerrado, sin respuesta = open|filtered. - FIN (
-sF): FIN activado; RST = cerrado, sin respuesta = open|filtered. - Xmas (
-sX): FIN+PSH+URG; mismo criterio que null/FIN. - Maimon (
-sM): FIN+ACK; útil en algunos BSD antiguos. - ACK (
-sA): mapea reglas de firewall (unfiltered/filtered), no servicios. - Window (
-sW): similar a ACK, observa ventana TCP para inferir estado. - Custom (
--scanflags): combinación manual de flags.
Evasión / mapeo de defensas
- ACK/Window ayudan a inferir políticas de firewall, no puertos abiertos.
- Fragmentación (
-f/-ff/--mtu) intenta evadir inspección básica. - Spoofing (
-S,--spoof-mac) y decoys (-D) para ofuscar origen. - Idle scan (
-sI) usa un host “zombi” para ocultar el origen real. - No garantiza evasión frente a firewalls stateful o IDS modernos.
Escaneos Nmap básicos
-sTTCP connect (único posible sin privilegios).-sSTCP SYN (requiere root/sudo).-sUUDP (lento; suele devolver open|filtered).
Interpretación práctica (simplificada)
- Open: hay servicio escuchando y accesible.
- Closed: el host responde, pero no hay servicio en ese puerto.
- Filtered: no se puede determinar (bloqueo/ACL, sin respuesta).
OPSEC / ruido
- Más velocidad (
-T4) y rango grande = más ruido y más probabilidad de detección/bloqueo. - Escaneos a puertos “raros” suelen disparar alertas.
Ejemplos
- Descubrir hosts vivos en una subred (luego escanear puertos).
- Escanear todos los puertos TCP de un host crítico para inventario de exposición.
Pitfalls / Errores comunes
- Confundir “filtrado” con “cerrado”.
- Concluir “no hay servicio” en UDP por falta de respuesta (puede ser open|filtered).
- Escanear sin ventana/permiso y activar bloqueos o incidentes.
- No correlacionar con contexto (VPN, NAT, ACLs) y sacar conclusiones erróneas.
- Tomar “open|filtered” o “closed|filtered” como conclusiones definitivas sin más pruebas.
- Asumir que ACK/Window indican servicios (muestran reglas de firewall).
Diagrama
sequenceDiagram participant S as Scanner participant H as Host S->>H: TCP SYN (port X) alt Open H-->>S: SYN/ACK S->>H: RST (cierre) else Closed H-->>S: RST else Filtered H-->>S: (sin respuesta / ICMP) end
Integración con herramientas
- Ejemplos prácticos: Nmap