Ataque de fragmentación de IP

El ataque de fragmentación de IP se refiere a una vulnerabilidad de reorganización de programas informáticos.

 

1. ¿Por qué hay fragmentación de la propiedad intelectual?

La capa de enlace tiene la característica de unidad de transmisión máxima MTU, que limita la longitud máxima de las tramas de datos, y los diferentes tipos de red tienen un límite superior. La MTU de Ethernet es 1500, puede usar el comando netstat -i para verificar este valor. Si hay paquetes de datos para transmitir en la capa IP y la longitud del paquete de datos excede la MTU, la capa IP fragmentará el paquete de datos de modo que la longitud de cada fragmento sea menor o igual que la MTU.

Suponemos que se va a transmitir un paquete de datos UDP, la MTU de Ethernet es de 1500 bytes, el encabezado IP general es de 20 bytes y el encabezado de UDP es de 8 bytes. La parte de carga útil de los datos está reservada para 1500-20-8 = 1472 bytes. Si la parte de datos tiene más de 1472 bytes, se producirá una fragmentación.

El encabezado IP contiene la información necesaria para la fragmentación y la reorganización:

Identificación R DF Desplazamiento del fragmento MF

Identificación: el campo de identificación del paquete IP enviado por el remitente es un valor único, que se copia en cada segmento durante la fragmentación.

R: Manténgalo sin usar.

DF: No fragmentar, bit "No fragmentar" Si este bit se establece en 1, la capa IP no fragmentará el datagrama.

MF: Más Fragmento, "más fragmentos", excepto por el último fragmento, este bit debe establecerse en 1 para cada otro fragmento que compone el datagrama.

Desplazamiento del fragmento: la posición del desplazamiento del fragmento desde el comienzo del paquete de datos original. El número de bytes del desplazamiento es este valor multiplicado por 8.

Además, cuando el datagrama está fragmentado, la longitud total de cada fragmento debe cambiarse por la longitud del fragmento.

Cada fragmento de IP tiene su propia ruta y se reorganiza en la capa de IP después de llegar al host de destino. Tenga la seguridad de que los datos del encabezado pueden completar correctamente la reorganización del fragmento. No puede dejar de preguntar, dado que la fragmentación se puede reorganizar, ¿cómo ocurrió el llamado ataque de fragmentación?

 

2. Ataque de fragmentación de la propiedad intelectual

Hay dos bytes en el encabezado IP para indicar la longitud de todo el paquete de datos IP, por lo que el paquete de datos IP más largo solo puede ser 0xFFFF, que es 65535 bytes. Si envía intencionalmente fragmentos de IP con una longitud total de más de 65535, algunos núcleos de sistemas antiguos tendrán problemas de procesamiento, lo que provocará bloqueos o denegación de servicio. Además, si el desplazamiento entre los fragmentos se construye con cuidado, algunos sistemas no pueden manejarlo, lo que provoca un bloqueo. Por lo tanto, la causa de la laguna es el algoritmo de reorganización.

A continuación, analizamos uno por uno algunos programas de ataque de fragmentos conocidos para comprender cómo crear fragmentos de IP de forma artificial para atacar el sistema.

 

3. ping o 'muerte

Ping o'death es un ataque de fragmentos que utiliza el protocolo ICMP. El atacante envía un paquete de solicitud de eco con una longitud superior a 65535. Cuando el host de destino vuelve a ensamblar los fragmentos, el búfer de 65535 bytes preasignado se desbordará y el sistema normalmente se bloqueará o colgará. ¿No es el ping solo el envío de paquetes de datos de solicitud de eco ICMP? ¡Intentemos atacarlo! Independientemente de la longitud de los encabezados IP e ICMP, la longitud de los datos es cuanto más, mejor, solo 65535. Envíe un paquete:

# ping -c 1 -s 65535 192.168.0.1

Error: el tamaño del paquete 65535 es demasiado grande. El máximo es 65507

Sin suerte, parece que el propio ping de Linux no nos permite hacer cosas malas. :(

65507 es calculado por él: 65535-20-8 = 65507. Hacer ping en Win2K es más complicado y los datos solo permiten un tamaño de 65500. Así que tienes que buscar otro programa para enviar el paquete, pero la nueva versión del sistema operativo ha solucionado este defecto, por lo que debes seguir leyendo este artículo.

Por cierto, recuerdo que en 1999, un "pirata informático patriótico" (un predecesor de "Hongke") movilizó a los internautas de todo el país para que comenzaran a hacer ping a un determinado sitio de EE. UU. En un momento determinado, intentando hacer ping a un servidor remoto. En realidad, se trata de un ataque Pingflood. Se utiliza una gran cantidad de paquetes de solicitud de eco para ralentizar la velocidad de respuesta del host y bloquear la red de destino. El principio es diferente al de ping o'death. Este punto debe distinguirse claramente.

 

4. sacudida2

jolt2.c envía continuamente un fragmento de IP ICMP / UDP en un bucle sin fin, que puede bloquear el sistema Windows. Probé Windows 2000 sin SP, la utilización de la CPU aumentará inmediatamente al 100% y el mouse no se puede mover.

Usamos Snort para capturar paquetes de datos enviados usando protocolos ICMP y UDP.

Paquete ICMP enviado:

01 / 07-15: 33: 26.974096 192.168.0.9 -> 192.168.0.1

ICMP TTL: 255 TOS: 0x0 ID: 1109 IpLen: 20 DgmLen: 29

Desplazamiento de fragmentación: 0x1FFE Tamaño de fragmentación: 0x9

08 00 00 00 00 00 00 00 00 .........

Paquete UDP enviado:

01 / 10-14: 21: 00.298282 192.168.0.9 -> 192.168.0.1

UDP TTL: 255 TOS: 0x0 ID: 1109 IpLen: 20 DgmLen: 29

Desplazamiento de fragmentación: 0x1FFE Tamaño de fragmentación: 0x9

04 D3 04 D2 00 09 00 00 61 ........ a

Como se puede ver en los resultados anteriores:

* Bandera de fragmentación MF = 0, indicando que es el último fragmento.

* El desplazamiento es 0x1FFE y la longitud reorganizada se calcula como (0x1FFE * 8) + 29 = 65549> 65535, desbordamiento.

* El ID del paquete IP es 1109, que se puede utilizar como función de detección de IDS.

* Paquete ICMP:

El tipo es 8, el código es 0, es Echo Request;

La suma de comprobación es 0x0000, el programa no calculó la comprobación, por lo que, para ser precisos, este paquete ICMP es ilegal.

* Paquete UDP:

El puerto de destino lo especifica el usuario en el parámetro de comando;

El puerto de origen es el resultado del OR del puerto de destino y 1235;

La suma de comprobación es 0x0000, que es lo mismo que ICMP, sin cálculo, UDP ilegal.

La parte de carga útil tiene solo un carácter 'a'.

jolt2.c debería poder falsificar la dirección IP de origen, pero el programa de origen no asigna la dirección IP que el usuario intenta falsificar a src_addr. No sé si el autor fue intencional.

El impacto de jolt2 es bastante grande: al enviar continuamente paquetes de datos con un gran desplazamiento, no solo bloquea el sistema Windows sin parchear, sino que también aumenta considerablemente el tráfico de red. Alguien usó una vez jolt2 para simular el tráfico de red y probar la eficiencia de detección de ataques de IDS bajo tráfico de alta carga.

 

5. lágrima

Teardrop también es relativamente simple, enviar dos paquetes UDP de forma predeterminada puede hacer que algunos kernels de Linux se bloqueen

Colapso. Los resultados capturados por Snort son los siguientes:

Primero:

01 / 08-11: 42: 21.985853 192.168.0.9 -> 192.168.0.1

UDP TTL: 64 TOS: 0x0 ID: 242 IpLen: 20 DgmLen: 56 MF

Desplazamiento de fragmentación: 0x0 Tamaño de fragmentación: 0x24

A0 A8 86 C7 00 24 00 00 00 00 00 00 00 00 00 00 00 00

PS

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

................

00 00 00 00 ....

* MF = 1, offset = 0, el primero del paquete IP fragmentado.

* Dibujo de estructura:

Datos IP UDP

el segundo:

01 / 08-11: 42: 21.985853 192.168.0.9 -> 192.168.0.1

UDP TTL: 64 TOS: 0x0 ID: 242 IpLen: 20 DgmLen: 24

Desplazamiento de fragmentación: 0x3 Tamaño de fragmentación: 0x4

A0 A8 86 C7 ....

* MF = 0, offset = 0x3, el número de bytes de offset es 0x3 * 8 = 24, el último fragmento.

* Dibujo de estructura:

Datos de IP

Si modifica el código fuente, el desplazamiento de la segunda parte del paquete IP también puede ser 0x4 y el número de bytes de desplazamiento es

0x4 * 8 = 32。

El siguiente diagrama de estructura muestra el proceso de reagrupamiento en partes en el extremo receptor, correspondientes respectivamente al número de bytes de desplazamiento de 24

Y 32 dos casos:

Datos IP UDP

Datos

Datos

Se puede ver que el desplazamiento de la segunda parte del paquete IP es menor que el desplazamiento al final de la primera parte, y los datos de la segunda parte del paquete IP no exceden el final de la primera parte, que es un fenómeno de superposición. El antiguo kernel de Linux (1.x-2.0.x) tiene un problema al tratar con esos fragmentos superpuestos. WinNT / 95 también se bloqueará al recibir de 10 a 50 fragmentos en forma de lágrima. Puede leer el código fuente de teardrop.c para comprender cómo construir y enviar este tipo de paquete.

 

6. Cómo prevenir ataques de fragmentación de IP

* Aplica el último paquete de servicio para el sistema Windows, el kernel de Linux actual ya no se ve afectado

anillo.

* Si es posible, prohíba que los paquetes fragmentados pasen por el límite de la red o use IPTABLES para limitar la cantidad de paquetes por segundo

El número de paquetes fragmentados.

* Si el firewall tiene la función de reorganizar fragmentos, asegúrese de que no haya ningún problema con su propio algoritmo, de lo contrario será

DoS afectará a toda la red.

* En el sistema Win2K, personalice la política de seguridad IP y configure la "verificación de fragmentos".

Supongo que te gusta

Origin blog.csdn.net/AIwenIPgeolocation/article/details/107954172
Recomendado
Clasificación