¿Cómo fue (es?) el ataque de ping de la muerte posible con IPv4?

12

Mientras leía sobre el Protocolo de Internet, me encontré leyendo sobre los ataques de ping de la muerte: ¡lo que atrajo mi curiosidad fue el hecho de que estos ataques podrían funcionar alguna vez!

Quiero decir, ¿por qué no se implementó inmediatamente la eliminación de paquetes IPv4 (para paquetes de más de 56 bytes + encabezado) en los sistemas informáticos? ¿Hubo / hay una razón para que un host reciba un paquete de más de 84 bytes en total?

    
pregunta Nomerandom1 10.11.2015 - 22:53
fuente

4 respuestas

11

Hay muchas razones por las que no se implementa la eliminación de paquetes. Un ejemplo es que existe una tecnología conocida como tramas gigantes, que permite hasta 9000 bytes de carga útil. Estos se admiten principalmente en redes LAN donde se mueven grandes cantidades de datos y donde la naturaleza repetitiva de los encabezados es innecesaria.

También vale la pena señalar que la mayoría de los paquetes tienen más de 56 bytes de encabezado. El tamaño estándar de la trama de Ethernet es de 1500 bytes. Si se refiere únicamente a paquetes ICMP, sería posible implementar dicha restricción, pero ¿por qué? Hay casos de uso válidos para desear paquetes ICMP más grandes. Tener una pila de red que maneje adecuadamente paquetes no estándar es generalmente más deseable que tener una pila de red que limita arbitrariamente la funcionalidad.

    
respondido por el Jesse Keilson 10.11.2015 - 23:17
fuente
6
  

¿Hubo / hay una razón para que un host reciba un paquete de más de 84 bytes en total?

Hay varias capas involucradas aquí, y esa es la primera parte del problema. Los 84 bytes de ICMP para un encabezado de mensaje de ping (la carga útil puede ser mayor ... puede poner lo que quiera en el campo de carga útil) significa que el sistema debe recibir los paquetes en el protocolo de conexión, que debe volver a ensamblarse en el más grande paquete en el protocolo IP si hay fragmentación, se pasa a la capa ICMP que luego verificará el tipo de protocolo y solo después de todo eso se puede verificar en detalle.

Al escribir código para asignar memoria, hay muchos lugares donde puedes cometer errores en el camino. Por ejemplo, como no puede obtener más de 64k de datos en un paquete válido de IPv4, puede asignar un búfer de memoria de 64k. Luego, cuando ensambla los fragmentos, es posible que tenga problemas si no verifica que la suma de los fragmentos sea menor que el tamaño de memoria asignado. Una falla específica realizada fue confiar en el encabezado de longitud del último fragmento posible como siempre válido en todo el paquete reensamblado, aunque no se permitió que el paquete de compensación máxima fuera de tamaño completo sin romper las cosas.

Por lo tanto, no puede eliminar inmediatamente la mayoría de los paquetes sin volver a ensamblar. Podría agregar una verificación de coincidencia en el último tamaño del paquete ( if offset > x and offset * 8 + len(y) > 64k ), pero eso requeriría verificar los bits adicionales en el paquete, lo que en realidad solo es adecuado en los niveles del servidor de seguridad y del servidor.

    
respondido por el Jeff Ferland 10.11.2015 - 23:48
fuente
3

Internet solo funciona porque todos han aceptado seguir los estándares de TCP / IP. Los paquetes de ping con un tamaño mayor a 56 bytes + el encabezado están permitidos por TCP / IP, y simplemente soltarlos porque su implementación no puede manejarlos, estaría rompiendo TCP / IP.

El problema con el Ping Of Death no fue el diseño de TCP / IP, sino un problema de implementación. No cambia las reglas de los paquetes IP válidos porque un proveedor no escribió su código correctamente.

En cuanto a los usos válidos de paquetes de ping grandes, puede ser útil para solucionar otros problemas de red. Un ejemplo simple es determinar la MTU entre usted y otro host al establecer el tamaño del paquete más bajo y más bajo hasta que no está fragmentado.

    
respondido por el Steve Sether 10.11.2015 - 23:18
fuente
3

Ya hay un par de buenas respuestas aquí.

Quería agregar que los filtros de paquetes, los firewalls y los IPS puedan manejar este tipo de cosas. Este tipo de dispositivos se configuran con frecuencia para ignorar las reglas normales de TCP / IP para poder eliminar el tráfico correcto, pero malicioso. Los ejemplos incluyen paquetes ICMP grandes, paquetes TCP fragmentados, encabezados de paquetes diseñados y muchos otros que están formados correctamente, pero son problemáticos para todas las pilas de protocolos de aplicaciones / TCP / TCP con demasiada frecuencia.

Reglas como esta no se pueden incluir en todos los dispositivos, ya que en general TCP / IP no funcionaría por razones que las otras respuestas han descrito: 1) Necesidad de tamaños de paquetes especializados en diagnóstico. 2) necesidad de paquetes grandes / jumbo para mayor eficiencia (por ejemplo, rendimiento de SAN con menor sobrecarga)

    
respondido por el Alain O'Dea 10.11.2015 - 23:33
fuente

Lea otras preguntas en las etiquetas