Un ping de la muerte es un tipo de ataque a un sistema informático que implica enviar un ping malintencionado o malicioso a una computadora. [1] En este ataque, un host envía cientos de solicitudes de ping con un tamaño de paquete grande o ilegal a otro host para intentar desconectarlo o mantenerlo ocupado respondiendo con respuestas de eco ICMP . [2]
Un paquete de ping correctamente formado tiene normalmente un tamaño de 56 bytes , o 64 bytes si se tiene en cuenta el encabezado del Protocolo de mensajes de control de Internet (ICMP), y 84 bytes si se incluye el encabezado del Protocolo de Internet (IP) versión 4. Sin embargo, cualquier paquete IPv4 (incluidos los pings) puede tener un tamaño de hasta 65.535 bytes. Algunos sistemas informáticos nunca fueron diseñados para manejar adecuadamente un paquete de ping más grande que el tamaño máximo de paquete porque viola el Protocolo de Internet . [3] [4] Al igual que otros paquetes grandes pero bien formados, un ping de la muerte se fragmenta en grupos de 8 octetos antes de la transmisión. Sin embargo, cuando el equipo de destino vuelve a ensamblar el paquete mal formado, puede producirse un desbordamiento de búfer , lo que provoca un bloqueo del sistema y potencialmente permite la inyección de código malicioso . El tamaño excesivo de bytes impide que la máquina lo procese de manera efectiva, lo que afecta al entorno de la nube y provoca interrupciones en los procesos del sistema operativo que provocan reinicios o bloqueos . [5]
En las primeras implementaciones de TCP/IP , este error era fácil de explotar y podía afectar a una amplia variedad de sistemas, incluidos Unix , Linux , Mac , Windows y dispositivos periféricos. A medida que los sistemas comenzaron a filtrar los pings de la muerte a través de cortafuegos y otros métodos de detección, apareció más tarde un tipo diferente de ataque de ping conocido como inundación de ping , que inunda a la víctima con tantas solicitudes de ping que el tráfico normal no logra llegar al sistema (un ataque básico de denegación de servicio ).
Los avances tecnológicos han neutralizado en gran medida el ataque ping of death. Los dispositivos fabricados después de 1998 incluyen defensas contra este tipo de ataques, lo que los hace resistentes a esta amenaza específica. Sin embargo, en un avance notable, se identificó una variante que atacaba los paquetes IPv6 en sistemas Windows, lo que llevó a Microsoft a lanzar un parche a mediados de 2013. [6]
La longitud máxima de un paquete IPv4, incluido el encabezado IP, es de 65 535 (2 16 − 1) bytes, [3] una limitación presentada por el uso de un campo de encabezado IP de 16 bits de ancho que describe la longitud total del paquete.
La capa de enlace de datos subyacente casi siempre impone límites al tamaño máximo de trama (consulte MTU ). En Ethernet , este suele ser de 1500 bytes. En tal caso, un paquete IP grande se divide en varios paquetes IP (también conocidos como fragmentos IP), de modo que cada fragmento IP coincida con el límite impuesto. El receptor de los fragmentos IP los volverá a ensamblar en el paquete IP completo y continuará procesándolo como de costumbre.
Cuando se realiza la fragmentación , cada fragmento de IP debe llevar información sobre qué parte del paquete IP original contiene. Esta información se guarda en el campo Fragment Offset, en el encabezado IP. El campo tiene 13 bits de longitud y contiene el desplazamiento de los datos en el fragmento IP actual, en el paquete IP original. El desplazamiento se da en unidades de 8 bytes. Esto permite un desplazamiento máximo de 65.528 ((2 13 -1)*8). Luego, al agregar 20 bytes de encabezado IP, el máximo será 65.548 bytes, lo que excede el tamaño máximo de trama. Esto significa que un fragmento IP con el desplazamiento máximo no debe tener datos mayores a 7 bytes, o de lo contrario excedería el límite de la longitud máxima del paquete. Un usuario malintencionado puede enviar un fragmento IP con el desplazamiento máximo y con muchos más datos que 8 bytes (tan grande como lo permita la capa física).
Cuando el receptor reúne todos los fragmentos de IP, obtendrá un paquete IP de más de 65.535 bytes. Esto puede provocar que se desborden los búferes de memoria que el receptor asignó al paquete y causar diversos problemas.
Como se desprende de la descripción anterior, el problema no tiene nada que ver con ICMP , que se utiliza únicamente como payload, lo suficientemente grande como para explotar el problema. Se trata de un problema en el proceso de reensamblado de fragmentos de IP, que pueden contener cualquier tipo de protocolo ( TCP , UDP , IGMP , etc.).
La corrección del problema consiste en añadir comprobaciones en el proceso de reensamblado. La comprobación de cada fragmento de IP entrante garantiza que la suma de los campos "Desplazamiento de fragmento" y "Longitud total" en el encabezado IP de cada fragmento de IP sea menor o igual a 65.535. Si la suma es mayor, el paquete no es válido y se ignora el fragmento de IP. Esta comprobación la realizan algunos cortafuegos para proteger a los hosts que no tienen el error corregido. Otra solución para el problema es utilizar un búfer de memoria mayor a 65.535 bytes para el reensamblado del paquete. (Esto es esencialmente una violación de la especificación, ya que añade compatibilidad con paquetes más grandes que los permitidos).
En 2013, se descubrió una versión IPv6 de la vulnerabilidad ping of death en Microsoft Windows . La pila TCP/IP de Windows no manejaba correctamente la asignación de memoria al procesar paquetes ICMPv6 malformados entrantes , lo que podría causar una denegación de servicio remota. Esta vulnerabilidad se corrigió en MS13-065 en agosto de 2013. [7] [8] El CVE-ID para esta vulnerabilidad es CVE - 2013-3183. [9] En 2020, se encontró otro error ( CVE - 2020-16898) en ICMPv6 en torno a Router Advertisement , que incluso podría provocar la ejecución remota de código . [10]