Masscan Internet-Scale Scanning
Definición
Masscan es un scanner de puertos TCP/IP asíncrono y stateless con su propio stack de red en espacio de usuario, diseñado para enumerar puertos abiertos en espacios de direcciones muy grandes (prefijos BGP AS enteros, bloques /8, o el internet IPv4 completo) a tasas de paquetes que el stack TCP del kernel no puede sostener.
Por qué importa
El modelo mental de Nmap — estado de conexión por objetivo, reintentos, probing de versión — se rompe pasado ~/16 de espacio de direcciones porque el estado por conexión domina la RAM y el CPU. Masscan responde una pregunta diferente: "dado una lista enorme de direcciones y un conjunto fijo de puertos, ¿dónde están las puertas?". Es la herramienta correcta cuando la pregunta es amplitud, y la incorrecta cuando la pregunta es profundidad.
El framing senior es el pipeline de dos fases: Masscan encuentra las puertas, Nmap (o herramientas específicas de servicio) las atraviesa. Tratar Masscan como un "Nmap rápido" produce tanto resultados incorrectos como accidentes operacionales — la historia de seguridad (tasa, listas de exclusión, IP fuente) es completamente diferente a la de Nmap.
Cómo funciona
La arquitectura de Masscan son 4 decisiones de diseño:
- TX/RX asíncrono stateless. Dos threads. El thread TX emite SYNs tan rápido como
--ratepermite. El thread RX escucha SYN-ACKs y los registra. No hay estado por objetivo; ambos threads solo ven el wire. - Stack TCP/IP en espacio de usuario. Masscan emite frames Ethernet raw y lee responses raw, saltando el kernel. Esto es lo que le permite escalar; también es por qué
--adapter-ipdebe setearse en hosts multi-homed o de ruta no predeterminada. - Recorrido aleatorio del espacio de direcciones. La randomización por defecto distribuye los probes por el rango objetivo para que ningún router intermedio o rate limiter vea una ráfaga secuencial.
- Tasa como único dial.
--ratecontrola directamente la carga del link. No hay plantilla de timing al estilo Nmap — paquetes-por-segundo es el contrato.
Ejemplo:
# A scoped, polite, full-port scan of one /24.
sudo masscan 10.0.0.0/24 -p0-65535 \
--rate 1000 \
--excludefile /etc/masscan/exclude.conf \
-oJ scan.json
Interpretación:
--rate 1000= 1000 paquetes por segundo. Seguro en un link simple.--excludefilese honra antes de la lista de inclusión. No anulable. Esta es la propiedad de seguridad que hace a Masscan operacionalmente responsable.-oJJSON delimitado por líneas va al disco — sobrevive Ctrl-C conpaused.conf.
Técnicas / patrones
- Disciplina de
--excludefileantes que cualquier otra cosa. Construí la lista de exclusión (datos IRR, asignaciones gubernamentales, rangos de documentación RFC 5737, partners sensibles, tu propia infraestructura de monitoreo) y--echola config mergeada para inspeccionar antes de escanear. - Empezar en
--rate 1000en links compartidos. Medí RTT y tasa de ICMP-type-3 desde tu upstream. Aumentá solo después de que el path esté verificado. --shard X/Ypara dividir trabajo entre Y boxes de scan particionando el espacio de direcciones deterministamente.- Siempre guardar en binario (
-oB) para trabajos sobre ~/16.--readscanvuelve a parsear el binario en JSON/XML/grepable después. - Pipeline de dos fases. Masscan produce tuplas
host:port→ alimentarlas en Nmap con-iLy-ppara detección de versión, NSE, detección de OS. - Usá
--source-ipy--source-portpara anclar tu huella de scan en logs de auditoría.
Variantes y bypasses
1. Bounded enumeration
masscan 10.0.0.0/8 -p443 --rate 5000. Un puerto, espacio grande. Actualización estándar de superficie de ataque externa contra el AS de una organización.
2. AS-targeted scan
Pre-resolver un AS a sus prefijos con whois -h whois.radb.net -- "-i origin AS123" y alimentar la lista como -iL. La forma correcta de mapear la huella de IPs públicas de una organización.
3. Port-set discovery
masscan 192.0.2.0/24 -p21,22,23,80,443,3389,5900,8080,8443 --rate 1000. Sweep de puertos comunes a través de una subred — precursor rápido de Nmap enfocado.
4. Banner snapshot mode
--banners --rate 100 abre sesiones TCP completas en puertos encontrados y captura el primer paquete del servidor. Útil para distinguir versiones SSH o HTTP vs. HTTPS sin invocar Nmap. Reduce la tasa efectiva ~10× — no es gratis.
5. UDP scanning
-pU:53,123,161,1900 --rate 1000. Biblioteca de probes más pequeña que Nmap, pero adecuada para los servicios UDP bien conocidos.
6. Resume after pause
masscan --resume paused.conf. Se escribe automáticamente en Ctrl-C o kill. La forma correcta de ejecutar scans de varios días a través de ventanas de mantenimiento programadas.
Impacto
- Amplitud. Scans de un solo host de /8 en minutos; IPv4 completo en aproximadamente una hora en hardware dedicado.
- Fragilidad operacional. Un
--ratemal configurado en un link compartido es un denial-of-service contra todos en ese link. Siempre empezar pequeño. - Detección. Masscan es altamente detectable — floods de puerto fuente aleatorio a muchos destinos desde una IP son firmas de scan de libro de texto.
- Atribución de fuente. Trivial.
--adapter-ipsiempre se registra. - Saturación del path. Incluso a
--rateseguro, los routers intermedios cerca de tu box de scan pueden sufrir CPU-bottleneck en el flood de paquetes pequeños.
Detección y defensa
- Alerta de tasa SYN por fuente en el perímetro.
La firma de Masscan es N destinos distintos por IP fuente por minuto. - Allowlisting equivalente a
--excludefiledel lado defensor.
Los objetivos que nunca deberían ver tráfico de scan (gestión fuera de banda, ICS/SCADA, integraciones de partners) pertenecen en una lista tarpit/drop. - TCP fingerprinting.
El stack en espacio de usuario de Masscan emite un fingerprint TCP reconocible. Las herramientas tipo p0f identifican el tráfico de Masscan sin importar la IP fuente. - Correlación de anomalías NetFlow/IPFIX.
Masscan crea un patrón fan-out visible en registros de flujo mucho por debajo de la visibilidad a nivel de paquetes del SIEM.
Qué no funciona como defensa primaria
- Bloquear IPs fuente de scan individuales a posteriori — Masscan termina su trabajo en segundos; el bloqueo es post-mortem.
- Confiar en el output de
--bannerscomo inventario de servicios — el banner es un paquete, frecuentemente engañoso en TLS, HTTP/2 o servicios con load balancing.
Labs prácticos
# Lab 1 — safe scan of an owned /24 with explicit exclusion.
cat > exclude.conf <<EOF
10.0.0.1
10.0.0.254
EOF
sudo masscan 10.0.0.0/24 -p22,80,443 --rate 200 --excludefile exclude.conf -oJ lab.json
jq '.[].ports[] | "\(.port)/\(.proto)"' lab.json | sort -u
# What ports appear is the door list; feed those into Nmap next.
# Lab 2 — two-phase Masscan -> Nmap pipeline.
sudo masscan 10.0.0.0/24 -p1-65535 --rate 1000 -oG lab.gnmap
awk '/Host:/ {print $2}' lab.gnmap | sort -u > hosts.txt
awk '/Ports:/ {for(i=1;i<=NF;i++) if($i~/\/open\//) print $i}' lab.gnmap |
cut -d/ -f1 | sort -un | paste -sd, - > ports.txt
nmap -Pn -sV -iL hosts.txt -p "$(cat ports.txt)" -oA lab.nmap
# Masscan finds doors, Nmap walks through them. This is the standard pipeline.
# Lab 3 — rate calibration on a lab link.
for R in 100 500 1000 5000 10000; do
echo "===== rate=$R"
sudo masscan 10.0.0.0/24 -p80 --rate $R -oG /dev/null 2>&1 | tail -3
done
# Watch ICMP destination-unreachable / packet loss as rate rises.
# The right --rate is the highest with no loss on the path, halved.
Ejemplos prácticos
- Actualización de superficie de ataque externa en bug bounty. Masscan semanal sobre el AS completo de una organización a
--rate 1000, output binario, diff contra el binario de la semana anterior. Los puertos nuevos aparecen inmediatamente para seguimiento con Nmap. - Recon interno durante red team. Desde un foothold dentro de un /16, Masscan a
--rate 200encuentra servicios internos alcanzables en minutos. - Port-sweep dirigido a ASes adquiridos. El mapeo de exposición post-adquisición usa Masscan por AS con
--shard X/Ya través de boxes de scan cloud para paralelismo.
Notas relacionadas
- Nmap Scanning
- Puertos y Servicios
- Firewalls y Límites de Red
- Service Enumeration
- Descubrimiento de Hosts y Puertos
- Active Recon
- Validación de Scope
- Superficie de Ataque Externa
- Nmap Timing and Evasion
- RustScan and NSE Pipeline
- Packet Fragmentation and Decoy Scans
Referencias
- Docs Oficiales: Masscan README and man page — https://github.com/robertdavidgraham/masscan
- Investigación / Deep Dive: Erratasec — Masscan: the entire internet in 3 minutes — https://blog.erratasec.com/2013/09/masscan-entire-internet-in-3-minutes.html
- Investigación / Deep Dive: Durumeric et al. — ZMap: Fast Internet-wide Scanning (USENIX Security 2013) — https://zmap.io/paper.pdf