Saltearse al contenido

Evasión de firewalls e IDS

Entre tú y el objetivo suele haber controles de red: firewalls (filtran por IP/puerto/protocolo), IDS/IPS (detectan/bloquean patrones de ataque) y proxies. La evasión consiste en que tu tráfico llegue al objetivo sin ser bloqueado ni reconocido: ocultando el escaneo, fragmentando paquetes, usando puertos y protocolos permitidos, o cifrando/ofuscando el contenido. No rompes el control; pasas por donde no mira.

  • Firewall de red: decide qué IPs/puertos/protocolos pasan. Evasión = usar lo permitido o parecerlo.
  • IDS/IPS (Snort, Suricata): detecta firmas de ataque en el tráfico. Evasión = que el payload no case la firma.
  • Firewall de aplicación (WAF): para HTTP (ver Evasión de WAF).
  • Egress filtering: limita el tráfico saliente (clave para C2/reverse shells).
-T1/-T2 lento = por debajo del umbral de detección
-f / --mtu 16 fragmentar paquetes (dividir la firma)
-D RND:10 decoys: mezclar tu IP con señuelos
-S <ip falsa> spoofear origen (si puedes recibir o no te importa la respuesta)
--source-port 53 / 88 salir desde un puerto "de confianza" que el FW deja pasar
--data-length 25 añadir bytes aleatorios
--scan-delay espaciar los paquetes
# mapear reglas del FW
nmap -sA target # ACK scan: distingue puerto filtrado de no filtrado

Casi siempre 80/443 y 53 (DNS) están abiertos de salida:

# reverse shell / C2 por 443 (se confunde con HTTPS)
# tunelar sobre protocolos permitidos
DNS tunneling (iodine/dnscat2) si DNS saliente pasa (ver net-dnsattacks)
HTTP/HTTPS tunneling C2 sobre 443, domain fronting
ICMP tunneling (ptunnel) si ICMP sale
# encontrar qué sale: probar puertos de salida
for p in 21 22 53 80 443 8080; do curl -s ...; done
# fragmentación y reensamblado ambiguo (el IDS y el host reensamblan distinto)
# ofuscación/codificación del payload (que no case la firma — ver web-wafbypass)
# cifrado: un payload en TLS no es inspeccionable sin interceptación
# timing: espaciar para no superar umbrales de "N eventos en T tiempo"
# polimorfismo: variar el payload en cada intento

El principio es el mismo que en WAF: el IDS reconoce patrones; cambia el patrón manteniendo la semántica (ver Evasión de WAF para el caso HTTP).

Una reverse shell necesita salir. Si el egress está filtrado:

# usar el puerto que sí sale (normalmente 443)
# tunelar sobre DNS/HTTP (ver net-pivot, net-dnsattacks)
# domain fronting / CDN para disfrazar el destino
  • Default-deny en entrada y salida (egress filtering estricto): corta C2/reverse shells.
  • IDS/IPS actualizado con reensamblado normalizado (evita evasión por fragmentación); TLS inspection donde sea viable.
  • Rate-limiting y detección de escaneo; correlación en SIEM.
  • Segmentación y allowlist de destinos salientes; Protective DNS (corta tunneling).
  • Asumir que un atacante intentará 443/DNS: inspeccionar también esos canales.
  • Mapear reglas del firewall (ACK scan, qué puertos pasan)
  • Escaneo evasivo (timing, fragmentación, decoys, source-port)
  • Identificar puertos de salida permitidos (egress)
  • C2/reverse shell por 443 u otro puerto permitido
  • Tunneling sobre DNS/HTTP/ICMP si el filtrado es estricto
  • Evasión de IDS por fragmentación/ofuscación/cifrado
  • Blue: ¿egress default-deny, IDS normalizado, Protective DNS?
  • Documentar qué controles se evadieron y cómo