Los ataques de fragmentación de IP son un tipo de ataque de seguridad informática basado en cómo el Protocolo de Internet (IP) requiere que se transmitan y procesen los datos. En concreto, invoca la fragmentación de IP , un proceso utilizado para dividir los mensajes (la unidad de datos de servicio (SDU); normalmente un paquete ) de una capa de una red en múltiples cargas útiles más pequeñas que pueden caber dentro de la unidad de datos de protocolo (PDU) de la capa inferior. Cada enlace de red tiene un tamaño máximo de mensajes que se pueden transmitir, denominado unidad máxima de transmisión (MTU). Si la SDU más los metadatos añadidos en la capa de enlace superan la MTU, la SDU debe fragmentarse. Los ataques de fragmentación de IP explotan este proceso como un vector de ataque .
Parte del conjunto TCP/IP es el Protocolo de Internet (IP), que reside en la capa de Internet de este modelo. IP es responsable de la transmisión de paquetes entre los puntos finales de la red. IP incluye algunas características que proporcionan medidas básicas de tolerancia a fallos (tiempo de vida, suma de comprobación), priorización del tráfico (tipo de servicio) y compatibilidad con la fragmentación de paquetes más grandes en varios paquetes más pequeños (campo de identificación, desplazamiento de fragmentos). La compatibilidad con la fragmentación de paquetes más grandes proporciona un protocolo que permite a los enrutadores fragmentar un paquete en paquetes más pequeños cuando el paquete original es demasiado grande para los marcos de enlace de datos que lo respaldan. Los ataques de fragmentación de IP utilizan el protocolo de fragmentación dentro de IP como un vector de ataque.
Según [Kurose 2013], en un tipo de ataque de fragmentación de IP, "el atacante envía un flujo de pequeños fragmentos al host de destino, ninguno de los cuales tiene un desplazamiento de cero. El objetivo puede colapsar mientras intenta reconstruir datagramas a partir de los paquetes degenerados". [1] Otro ataque implica el envío de fragmentos superpuestos con desplazamientos no alineados, lo que puede hacer que los sistemas operativos vulnerables no sepan qué hacer, lo que provoca que algunos se bloqueen. [1]
Los paquetes IP se encapsulan en tramas de enlace de datos y, por lo tanto, la MTU del enlace afecta a los paquetes IP más grandes y los obliga a dividirse en partes iguales o más pequeñas que el tamaño de la MTU.
Esto se puede lograr mediante varios enfoques:
En el encabezado IP se utilizan tres campos para implementar la fragmentación y el reensamblado: los campos "Identificación", "Indicadores" y "Desplazamiento de fragmentos".
Banderas:
El desplazamiento del fragmento especifica la posición del fragmento dentro del paquete original, medida en unidades de 8 bytes.
En consecuencia, cada fragmento, excepto el último, debe contener un múltiplo de 8 bytes de datos. Es obvio que el desplazamiento de fragmento puede contener 8192 (2^13) unidades, pero el paquete no puede tener 8192 * 8 = 65.536 bytes de datos porque el campo "Longitud total" del encabezado IP registra el tamaño total, incluidos el encabezado y los datos. Un encabezado IP tiene una longitud de al menos 20 bytes, por lo que el valor máximo de "Desplazamiento de fragmento" está restringido a 8189, lo que deja espacio para 3 bytes en el último fragmento.
Debido a que una red IP puede no tener conexión, los fragmentos de un paquete pueden intercalarse con los de otro en el destino. El "campo de identificación" identifica de forma única los fragmentos de un paquete en particular .
El sistema de origen establece el campo "Identificación" en cada paquete con un valor único para todos los paquetes que utilizan la misma dirección IP de origen, la misma dirección IP de destino y los mismos valores de "Protocolo" durante la vida útil del paquete en Internet. De esta manera, el destino puede distinguir qué fragmentos entrantes pertenecen a un paquete único y almacenarlos en búfer hasta que se reciba el último fragmento. El último fragmento establece el bit "Más fragmentos" en 0 y esto le indica a la estación receptora que comience a reensamblar los datos si se han recibido todos los fragmentos.
El siguiente es un ejemplo de fragmentación de la vida real:
Lo siguiente se obtuvo utilizando el analizador de protocolos Ethereal para capturar paquetes de solicitud de eco ICMP . Para simularlo, abra una terminal y escriba ping ip_dest -n 1 -l 65000.
Los resultados son los siguientes:
No. Hora Origen Destino Protocolo Información 1 0.000000 87.247.163.96 66.94.234.13 Solicitud de eco ICMP (ping) 2 0.000000 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=1480) 3 0.002929 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=2960) 4 6.111328 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=4440) 5 6.123046 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=5920) 6 6.130859 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=7400) 7 6.170898 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=8880) 8 6.214843 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=10360) 9 6.239257 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=11840) 10 6.287109 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=13320) 11 6.302734 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=14800) 12 6.327148 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=16280) 13 6.371093 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=17760) 14 6.395507 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=19240) 15 6.434570 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=20720) 16 6.455078 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=22200) 17 6.531250 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=23680) 18 6.550781 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=25160) 19 6.575195 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=26640) 20 6.615234 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=28120) 21 6.634765 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=29600) 22 6.659179 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=31080) 23 6.682617 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=32560) 24 6.699218 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=34040) 25 6.743164 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=35520) 26 6.766601 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=37000) 27 6.783203 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=38480) 28 6.806640 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=39960) 29 6.831054 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=41440) 30 6.850586 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=42920) 31 6.899414 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=44400) 32 6.915039 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=45880) 33 6.939453 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=47360) 34 6.958984 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=48840) 35 6.983398 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=50320) 36 7.023437 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=51800) 37 7.046875 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=53280) 38 7.067382 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=54760) 39 7.090820 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=56240) 40 7.130859 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=57720) 41 7.151367 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=59200) 42 7.174804 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=60680) 43 7.199218 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=62160) 44 7.214843 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=63640) 45 7.258789 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=65120)Los detalles del primer paquete: No. Hora Origen Destino Protocolo Información 1 0.000000 87.247.163.96 66.94.234.13 Solicitud de eco ICMP (ping)Cuadro 1 (1514 bytes en el cable, 1514 bytes capturados)Ethernet II, Origen: OmronTat_00:00:00 (00:00:0a:00:00:00), Horario de verano: 40:0f:20:00:0c:00 (40:0f:20:00:0c:00)Protocolo de Internet, origen: 87.247.163.96 (87.247.163.96), horario de verano: 66.94.234.13 (66.94.234.13)Protocolo de mensajes de control de Internet Tipo: 8 (solicitud de eco (ping)) Código: 0 Suma de comprobación: 0x6b7d Identificador: 0x0600 Número de secuencia: 0x0200 Datos (1472 bytes)Los detalles del segundo paquete: No. Hora Origen Destino Protocolo Información 2 0.000000 87.247.163.96 66.94.234.13 IP Protocolo IP fragmentado (proto=ICMP 0x01, off=1480)Cuadro 2 (1514 bytes en el cable, 1514 bytes capturados)Ethernet II, Origen: OmronTat_00:00:00 (00:00:0a:00:00:00), Horario de verano: 40:0f:20:00:0c:00 (40:0f:20:00:0c:00)Protocolo de Internet, origen: 87.247.163.96 (87.247.163.96), horario de verano: 66.94.234.13 (66.94.234.13)Datos (1480 bytes)
Tenga en cuenta que solo el primer fragmento contiene el encabezado ICMP y todos los fragmentos restantes se generan sin el encabezado ICMP.
Dos puntos importantes aquí:
Los equipos de infraestructura de red, como enrutadores , balanceadores de carga , cortafuegos e IDS, tienen una visibilidad inconsistente de los paquetes fragmentados. Por ejemplo, un dispositivo puede someter el fragmento inicial a una inspección y auditoría rigurosas, pero podría permitir que todos los fragmentos adicionales pasen sin control. Algunos ataques pueden usar este hecho para evadir la detección colocando datos incriminatorios de carga útil en fragmentos. Los dispositivos que funcionan en modo proxy "completo" generalmente no son susceptibles a este subterfugio.