En el marco del evento LACNIC 43, que tuvo lugar en el Distrito de Anhembi, San Pablo, Brasil, del 5 al 9 de mayo, Henri Alves de Godoy y Ernesto Sánchez presentaron en el Foro Técnico el trabajo de investigación titulado “Consideraciones para el filtrado del protocolo ICMPv6”. A continuación, compartimos un resumen conjunto de esta presentación como una contribución para el Blog de LACNIC.
El protocolo ICMP (Internet Control Message Protocol) se definió en la RFC 792 (1981) como un mecanismo fundamental para que los dispositivos de red pudieran comunicar errores, anunciar problemas de conectividad y permitir el diagnóstico de la red. Fue creado junto con IPv4 para dar soporte durante la transmisión de los paquetes, los cuales viajan sin garantía de entrega en la capa de red. Se utiliza, por ejemplo, para notificar cuando un host no está disponible, para informar cuando se ha excedido un TTL y para indicar problemas de fragmentación.
Una de las herramientas más usadas y de fácil manejo incluso para usuarios no expertos son los comandos ping (Echo Request/Reply) y traceroute (Time Exceeded), que utilizan directamente el protocolo ICMP. Estas herramientas son muy usadas en nuestra vida cotidiana y son indispensables para verificar la conectividad de forma rápida y sencilla.
Con el crecimiento de Internet y la posibilidad de navegar por la Web (antes limitada a las universidades y los centros de investigación) y el surgimiento de los pequeños proveedores de acceso a Internet (ISP) regionales a mediados de los 90, cada usuario recibía una dirección IPv4 pública en su hogar. Los usuarios residenciales todavía no conocían NAT y tenían una conexión directa de extremo a extremo, sin traducción de direcciones y sin que una misma IP fuera compartida por muchas personas, como sucede hoy.
Otro incidente importante y con repercusión histórica fue el “ping de la muerte”, que explotaba fallas en la implementación del protocolo IP en diversos sistemas operativos, especialmente Windows 95, y el atacante creaba un paquete ICMP Echo Request de un tamaño mayor al permitido por el estándar IP (65.535 bytes).
Con el tiempo, se creó un movimiento que sostenía que “hacer ping es peligroso”. En este contexto, muchos comenzaron a aplicar un bloqueo generalizado de ICMP, algo que durante muchos años se consideró una buena práctica de seguridad.
Sin embargo, esta decisión se basó más en el pánico que en un análisis técnico. Como consecuencia de ello, ahora es difícil distinguir entre una falla de conectividad y el filtrado del tráfico ICMP, creándose así redes invisibles para dificultar el mapeo de la red interna, donde el diagnóstico se ha vuelto ineficiente.
Muchos scripts de firewall (iptables, ipchains) y tutoriales empezaron a promover la práctica de bloquear por completo el protocolo ICMP, sin explicar las consecuencias técnicas. La influencia de esta cultura fue tan grande que hasta el día de hoy, 30 años después, todavía hay muchos que bloquean completamente ICMP en sus redes, creando así una falsa sensación de seguridad.
ICMPv6: más que un simple reemplazo para el ICMP de IPv4
En IPv4, el descubrimiento de vecinos en una red local se realizaba mediante el protocolo ARP (Address Resolution Protocol) definido en la RFC 826. Este protocolo funciona con mensajes broadcast, es decir, mensajes que se envían a todos los dispositivos de la red.
Contrariamente a la creencia popular, IPv6 no es solo una versión ampliada de IPv4. Por el contrario, reestructura muchos de los principios de la comunicación en red, y ahora incluye el protocolo ICMPv6, al que se le han agregado nuevas funciones, es más robusto, y ya no es solo un reemplazo de su predecesor, ICMP. ICMPv6 ahora incluye:
- El descubrimiento de vecinos y enrutadores: a través de NDP (RFC 4861).
- Autoconfiguración de direcciones: a través de SLAAC (RFC 4862).
- Descubrimiento de MTU: esencial ya que IPv6 no permite la fragmentación intermedia.
Con IPv6 se eliminó por completo el uso de broadcast, que se sustituyó por un modelo mucho más controlado y eficiente basado en multicast.
El Neighbor Discovery Protocol (NDP), definido en la RFC 4861, reemplaza las funciones de ARP y va más allá, ya que ofrece descubrimiento de vecinos y enrutadores, así como detección de direcciones duplicadas (DAD).
Los mensajes de NDP se transportan dentro de ICMPv6 y utilizan direcciones multicast específicas (prefijo FF02::/16), optimizando el tráfico de descubrimiento en la red. Esto evita los problemas de transmisión al segmentar la comunicación solamente entre los dispositivos interesados.
Estos enfoques reducen drásticamente la carga de la red y permiten implementaciones más escalables y seguras, algo que beneficia a los dispositivos con recursos limitados (como los sensores de IoT) y a entornos como centros de datos y redes empresariales.
Impactos del bloqueo de ICMPv6
En IPv4, incluso sabiendo que no era una práctica correcta, el impacto del bloqueo de ICMP no era tan alto. Por el contrario, bloquear completamente ICMPv6 puede provocar una serie de fallas y problemas en la red, como por ejemplo:
- Interrupción de SLAAC: los hosts no reciben automáticamente el prefijo de red
- Falla de NDP: sin esto, no hay resolución de direcciones MAC
- Imposibilidad de detectar la MTU adecuada
- Error en la detección de direcciones duplicadas (DAD)
En entornos corporativos o académicos con redes de doble pila, las fallas intermitentes y difíciles de diagnosticar pueden deberse únicamente al bloqueo inadecuado de ICMPv6.
Laboratorio de pruebas de filtrado de ICMPv6 con Containerlab
Con el propósito de analizar el comportamiento de ataques basados en mensajes ICMPv6, se creó una topología de red basada en la herramienta Containerlab y considerando las siguientes RFCs:
La RFC 3756, “IPv6 Neighbor Discovery (ND) Trust Models and Threats“, donde se describen tres entornos de red a considerar en función de tres niveles de confianza.
La RFC 4890 proporciona una base sólida para un filtrado seguro y funcional de ICMPv6. En lugar de bloquear todo ICMPv6, recomienda un enfoque basado en el conocimiento de los tipos y códigos de los mensajes. Por ejemplo:
- Type 133: Router Solicitation
- Type 134: Router Advertisement
- Type 135/136: Neighbor Solicitation/Advertisement
- Type 2: Packet Too Big
- Type 1: Destination Unreachable
El laboratorio de pruebas propuesto simula un entorno de red corporativa, integrando las herramientas THC IPv6 del kit de herramientas IPv6 para simular escenarios de ataque y dispositivos de red que funcionan con Nokia SRL Linux y Aruba-CX OS, lo que permitió configurar los mecanismos de protección que se enumeran a continuación.
Uso de mecanismos de protección especializados:
- RA Guard: bloquea mensajes RA maliciosos en puertos no autorizados
- ND Snooping: inspecciona mensajes NS/NA para prevenir spoofing
- DHCPv6 Guard: detecta y bloquea servidores DHCPv6 falsos
- ACL basadas en tipo/código/puerto de VLAN
- Rate-limiting inteligente: evita los ataques por inundación sin bloquear la funcionalidad
Las pruebas realizadas permitieron analizar diferentes vectores de ataque y determinar una combinación eficiente de los mecanismos antes descritos para un correcto filtrado de los mensajes ICMPv6.
La presentación realizada en el Foro de LACNIC 43 está disponible en YouTube: https://youtu.be/jRLBx-2Layw
Consideraciones finales
El bloqueo de ICMPv4 fue una reacción histórica para proporcionar seguridad de forma provisoria en un momento en que Internet empezaba a llegar a los hogares. Con el paso del tiempo y los hábitos adquiridos, mantener la misma lógica con ICMPv6 es un error tanto técnico como operativo. Más que nunca, debemos basar la seguridad en el conocimiento de buenas prácticas con fundamento técnico, no en el miedo.
En base a los resultados obtenidos, Containerlab demostró ser una herramienta versátil y 100% funcional para la creación de laboratorios de pruebas controlados donde simular ataques sin comprometer entornos reales. Además, la captura y el análisis del tráfico de red es fundamental para la inspección de campos de encabezado y la posterior definición de reglas de filtrado seguras sin entorpecer el normal funcionamiento de ICMPv6.
En este artículo se resume lo presentado en el Foro Técnico de LACNIC 43. Observamos que hoy en día ICMPv6 es fundamental y que está presente en las redes de computadoras, donde la seguridad ya no se basa en el concepto de bloqueos, sino en el monitoreo y el filtrado inteligente.
Referencias
- [RFC 792] – Internet Control Message Protocol
- [RFC 4443] – ICMPv6
- [RFC 4861] – Neighbor Discovery for IPv6
- [RFC 4890] – Filtering Recommendations.
- [RFC 3756] – IPv6 Neighbor Discovery (ND) Trust Models and Threats
- [RFC 8200] – IPv6 Specification
- [RFC 4862] – IPv6 Stateless Address Autoconfiguration
- Documentos y mejores prácticas operativas del Grupo de Trabajo sobre v6ops
- ContainerLab – https://containerlab.dev/
- Tutorial y laboratorios – https://github.com/ernestosanchezv/icmpv6filter