Los ataques de fragmentación IP son un tipo de ataque a la seguridad informática basado en la forma en que el Protocolo de Internet (IP) requiere que se transmitan y procesen los datos. Específicamente, invocan la fragmentación IP , un proceso utilizado para particionar 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 puedan 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, llamado unidad de transmisión máxima (MTU). Si la SDU más los metadatos agregados en la capa de enlace exceden la MTU, la SDU debe fragmentarse. Los ataques de fragmentación IP explotan este proceso como vector de ataque .
El Protocolo de Internet (IP), que forma parte del conjunto de protocolos TCP/IP, se ubica en la capa de Internet . IP se encarga de la transmisión de paquetes entre los puntos finales de la red. Incluye funciones 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 soporte para la fragmentación de paquetes grandes en múltiples paquetes más pequeños (campo ID, desplazamiento de fragmento). El soporte para la fragmentación de paquetes 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 las tramas de enlace de datos. Los exploits (ataques) de fragmentación de IP utilizan el protocolo de fragmentación como vector de ataque.
Según [Kurose 2013], en un tipo de ataque de fragmentación IP, "el atacante envía una secuencia de pequeños fragmentos al host objetivo, ninguno de los cuales tiene un desplazamiento de cero. El objetivo puede colapsar al intentar 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 provocar que los sistemas operativos vulnerables no sepan qué hacer, causando que algunos fallen. [ 1 ]
Proceso

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 fragmentos iguales o más pequeños que el tamaño de la MTU.
Esto se puede lograr mediante varios enfoques:
- Para que el tamaño del paquete IP sea igual o menor que el del medio de transmisión directo, se delega toda la fragmentación posterior de los paquetes a los enrutadores, lo que significa que estos deciden si el paquete actual debe fragmentarse de nuevo o no. Esto descarga una gran cantidad de trabajo en los enrutadores y también puede provocar que varios enrutadores IP segmenten los paquetes uno tras otro, dando lugar a una fragmentación muy peculiar.
- Para previsualizar todos los enlaces entre origen y destino y seleccionar la MTU más pequeña en esta ruta, suponiendo que existe una ruta única. De esta forma, nos aseguramos de que la fragmentación la realice el remitente, utilizando un tamaño de paquete menor que la MTU seleccionada, y que no haya más fragmentación en ruta. Esta solución, denominada Descubrimiento de MTU de Ruta , permite al remitente fragmentar/segmentar un paquete de Internet largo , en lugar de depender de los enrutadores para realizar la fragmentación a nivel IP. Esto es más eficiente y escalable. Por lo tanto, es el método recomendado en la Internet actual. El problema con este enfoque es que cada paquete se enruta de forma independiente; normalmente pueden seguir la misma ruta, pero no necesariamente, por lo que un paquete de sondeo para determinar la fragmentación puede seguir una ruta diferente a las rutas tomadas por paquetes posteriores.
En la cabecera IP se utilizan tres campos para implementar la fragmentación y el reensamblaje: los campos "Identificación", "Indicadores" y "Desplazamiento de fragmento".
Banderas:
- Un campo de 3 bits que indica si el paquete forma parte de una trama de datos fragmentada o no.
- Bit 0: reservado, debe ser cero (a menos que el paquete cumpla con la RFC 3514).
- Bit 1: (AF) 0 = Puede fragmentarse, 1 = No fragmentarse.
- Bit 2: (AF) 0 = Último fragmento, 1 = Más fragmentos.
El desplazamiento del fragmento especifica la posición del fragmento dentro del paquete original, medida en unidades de 8 bytes.
Por lo tanto, cada fragmento, excepto el último, debe contener un múltiplo de 8 bytes de datos. Es evidente que el desplazamiento del fragmento puede contener 8192 (2^13) unidades, pero el paquete no puede tener 8192 * 8 = 65 536 bytes de datos, ya que el campo "Longitud total" del encabezado IP registra el tamaño total, incluyendo el encabezado y los datos. Un encabezado IP tiene una longitud mínima de 20 bytes, por lo que el valor máximo para el desplazamiento del fragmento está restringido a 8189, lo que deja espacio para 3 bytes en el último fragmento.
Debido a que una conexión IP a Internet puede ser sin 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 asigna un valor único al campo "Identificación" de cada paquete , siempre que este utilice la misma dirección IP de origen, dirección IP de destino y protocolo, durante toda la vida útil del paquete en internet. De esta forma, el destino puede distinguir qué fragmentos entrantes pertenecen a un paquete único y almacenarlos en búfer hasta recibir el último. El último fragmento establece el bit "Más fragmentos" en 0, lo que indica a la estación receptora que comience a reconstruir los datos una vez recibidos todos los fragmentos.
El siguiente es un ejemplo real de fragmentación:
Lo siguiente se obtuvo utilizando el analizador de protocolos Ethereal para capturar paquetes de solicitud de eco ICMP . Para simular esto, abra una terminal y escriba ping ip_dest -n 1 -l 65000.
Los resultados son los siguientes:
No. Hora Origen Destino Información del protocolo 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 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 Fragmented IP protocol (proto=ICMP 0x01, off=54760) 39 7.090820 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=56240) 40 7.130859 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=57720) 41 7.151367 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=59200) 42 7.174804 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=60680) 43 7.199218 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=62160) 44 7.214843 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=63640) 45 7.258789 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=65120) The first packet details: No.Time Source Destination Protocol Info 1 0.000000 87.247.163.96 66.94.234.13 ICMP Echo (ping) request Frame 1 (1514 bytes on wire, 1514 bytes captured) Ethernet II, Src: OmronTat_00:00:00 (00:00:0a:00:00:00), Dst: 40:0f:20:00:0c:00 (40:0f:20:00:0c:00) Internet Protocol, Src: 87.247.163.96 (87.247.163.96), Dst: 66.94.234.13 (66.94.234.13) Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0x6b7d Identifier: 0x0600 Sequence number: 0x0200 Data (1472 bytes) The second packet details: No. Time Source Destination Protocol Info 2 0.000000 87.247.163.96 66.94.234.13 IP Fragmented IP protocol (proto=ICMP 0x01, off=1480) Frame 2 (1514 bytes on wire, 1514 bytes captured) Ethernet II, Src: OmronTat_00:00:00 (00:00:0a:00:00:00), Dst: 40:0f:20:00:0c:00 (40:0f:20:00:0c:00) Internet Protocol, Src: 87.247.163.96 (87.247.163.96), Dst: 66.94.234.13 (66.94.234.13) Data (1480 bytes) Note that only the first fragment contains the ICMP header and all remaining fragments are generated without the ICMP header.
Two important points here:
- In some datalink protocols such as Ethernet, only the first fragment contains the full upper layer header, meaning that other fragments look like beheaded packets.
- Additional overhead imposed over network because all fragments contains their own IP header. Additional overhead = (number_of_fragments - 1) * (ip_header_len);
Exploits
- IP fragment overlapped
- El exploit de superposición de fragmentos IP ocurre cuando dos fragmentos contenidos en el mismo paquete IP tienen desplazamientos que indican que se superponen en su posición dentro del paquete . Esto podría significar que el fragmento A está siendo completamente sobrescrito por el fragmento B, o que el fragmento A está siendo parcialmente sobrescrito por el fragmento B. Algunos sistemas operativos no manejan correctamente los fragmentos que se superponen de esta manera y pueden generar excepciones o comportarse de otras maneras indeseables al recibir fragmentos superpuestos. Esta es la base del ataque teardrop . Los fragmentos superpuestos también pueden usarse para intentar eludir los sistemas de detección de intrusiones (IDS). En este exploit, parte de un ataque se envía en fragmentos junto con datos aleatorios adicionales; los fragmentos posteriores pueden sobrescribir los datos aleatorios con el resto del ataque. Si el paquete completo no se reensambla correctamente en el IDS, el ataque pasará desapercibido.
- El búfer de fragmentación IP está lleno.
- La vulnerabilidad de saturación del búfer de fragmentación IP se produce cuando se detecta una cantidad excesiva de tráfico fragmentado incompleto en la red protegida. Esto puede deberse a un número excesivo de paquetes fragmentados incompletos , a una gran cantidad de fragmentos en paquetes individuales o a una combinación de la cantidad de paquetes incompletos y el tamaño/número de fragmentos en cada paquete . Este tipo de tráfico suele ser un intento de eludir las medidas de seguridad o los sistemas de detección de intrusiones mediante la fragmentación intencionada de la actividad de ataque.
- Desbordamiento de fragmentos IP
- La vulnerabilidad de desbordamiento de fragmentos IP se produce cuando un paquete fragmentado reensamblado excede la longitud de datos IP declarada o la longitud máxima del paquete . Por definición, ningún paquete IP debería ser mayor de 65 535 bytes. Los sistemas que intentan procesar estos paquetes de gran tamaño pueden fallar, lo que puede indicar un intento de denegación de servicio.
- Fragmentación IP de demasiados paquetes
- La vulnerabilidad "Demasiados paquetes" se identifica por la detección de un número excesivo de paquetes incompletos y fragmentados en la red. Generalmente se trata de un ataque de denegación de servicio o un intento de eludir las medidas de seguridad. Un ejemplo de "Demasiados paquetes", "Paquete incompleto" y "Fragmento demasiado pequeño" es el ataque Rose. [ 2 ]
- Paquete incompleto de fragmento IP
- Esta vulnerabilidad se produce cuando un paquete no puede reconstruirse por completo debido a la falta de datos. Esto puede indicar un ataque de denegación de servicio o un intento de eludir las políticas de seguridad del filtro de paquetes.
- Fragmento de IP demasiado pequeño
- If an IP fragment is too small it indicates that the fragment is likely intentionally crafted. Any fragment other than the final fragment that is less than 400 bytes could be considered too small. Small fragments may be used in denial of service attacks or in an attempt to bypass security measures or detection.
Fragmentation for evasion
Network infrastructure equipment such as routers, load-balancers, firewalls and IDS have inconsistent visibility into fragmented packets. For example, a device may subject the initial fragment to rigorous inspection and auditing, but might allow all additional fragments to pass unchecked. Some attacks may use this fact to evade detection by placing incriminating payload data in fragments. Devices operating in "full" proxy mode are generally not susceptible to this subterfuge.
References
External links
- W. Richard Stevens' Home Page
- RFC 1858
- RFC 791
- Internet security