Ejercicio de fragmentación de tráfico con Hping3
Ejercicio de fragmentación de tráfico con Hping3
Esta vez, usando una herramienta nueva que se llama "hping3". Siempre a través de "Kali" para hacer este ejercicio, vamos a abrir una línea de comandos. Dentro de esta línea de comandos, vamos a ver cuál es la IP que tenemos. Vemos que en este caso tenemos asignada una IP que es la 10.02.15. Desde esta IP, vamos a abrir también Wireshark para poder hacer captura de tráfico.
Nuevamente, nos da el mensaje de que ejecutarlo como administradores. Tened cuidado con este tipo de funciones, una vez nos iniciamos en esta podemos tener serios problemas si no lo sabemos tratar. Os guiaremos paso a paso para evitar peligros. Vamos a elegir la interfaz "eth0", que es la que vamos a capturar tráfico.
Creación de varios paquetes de tráfico
Desde aquí vamos a operar con este comando que se llama "hping3". Esta herramienta es muy útil desde seguridad en redes para poder generar tráfico y analizar la respuesta de la red. Vamos a empezar a usarla en este ejercicio. En este caso, vamos a usar el parámetro "set" que me dice la cantidad de paquetes que quiere utilizar. Le vamos a decir que sólo genere un paquete. En la opción "D", le decimos el tamaño de datos que queremos que emplee. Debemos detallar también para este primer ejercicio que genere un paquete con 1600 bytes. Y como dirección destino, vamos a elegir, en este caso, la IP 10.50.240.832, que es la IP real que tengo en mi portátil. Entonces, generamos esto e inmediatamente vemos cómo se han realizado dos tramas, dos paquetes a nivel IP o datagramas, como deberíamos llamarlo.
Creación de un paquetes de tráfico
Vamos a probar otro ejemplo más. En este caso, lo mismo. Le vamos a decir que genere un solo paquete, pero esta vez de tamaño 5000 bytes. Entonces, le decimos a "hping3" que ejecute un paquete a esta dirección IP destino de tamaño 5000 bytes y que sólo sea cantidad 1.
Vamos a ejecutarlo nuevamente y vemos qué Wireshark ha capturado de estos paquetes. Vamos a agrandar ahora Wireshark para analizar bien qué es lo que ha sucedido. Y empecemos por nuestro primer paquete.
Análisis de los resultados obtenidos
Vamos a analizar qué es lo que ha sucedido en este paquete, desde la IP fuente 215 (que es la mía) hacia la IP destino. Ampliamos el campo "data" y lo primero que vemos es que en este primer paquete, el protocolo IP le está diciendo que él, en este protocolo, tiene un flag que informa que hay "more fragments". Entonces, le está diciendo que ha usado la función de fragmentación. Ha colocado este "ID" y que se la idea, en este caso, 187, que hay "more fragments" y que el fragmento offset ocupa la posición 0. Es decir, ha generado una trama de longitud total de 1514 bytes que se corresponde al identificador 187 y que vienen más fragmentos dentro de este datagrama.
Si analizamos el segundo, me está diciendo que sigue siendo el ID 187, que ya no tiene más fragmentos ("no more fragments") y que ocupa la posición 1480 (porque es este valor, 1480).
Un poco más en detalle, fíjense que el primer paquete (estos son los dos paquetes que generamos con "hping3" cuando le dijimos que ocupe una posición de 1600 bytes) entonces, IP, como no puede meter 1600 bytes en una red Ethernet, lo partió como un primer paquete con la máxima longitud que soporta una red Ethernet, que son 1514 bytes. Y estos 1514 bytes están divididos en 14 bytes del encabezado Ethernet (que es lo que estamos viendo en azul aquí abajo). Toda esta línea en hexadecimal ocupa 16 bytes completos. El primer encabezado, que es Ethernet (que es lo que estoy marcando aquí), ocupa 14 bytes. Y el segundo encabezado, que se le degrada, es el de IP.
Si contamos lo que figura acá abajo en esa decimal, tenemos dos objetos. Siempre el valor 45 es el que identifica el inicio de un encabezado. Y 14 bytes están en la segunda línea, y 2 bytes están abajo.
216 son 18 más 2, entonces son 20. Estos son los 20 bytes del encabezado IP más 14 bytes del encabezado Ethernet, son 34. 34 más 1480, que es la posición que ocupa este dato, se suman los 1514 del que aparece en la longitud total del primer datagrama. Es decir, cuando le dijimos a "hping3" que genere un datagrama de 1600 bytes, él generó primero 1514.
Entonces, en este primer, me dice el ID es 187, tengo "more fragments" y ocupó la posición 0. En el segundo, me dice "sigo siendo el ID 187", ya no tengo más fragmentos, y este lo empiezo a contar a partir de la posición 1480 porque 1480 más los 20 del encabezado IP más los 14 del encabezado de Ethernet, suman los 1514 bytes que son los que realmente puso en el canal de comunicación.
Vamos a analizar el segundo comando que nosotros ejecutamos, "hping3". Le dijimos que era 5000 bytes. En este caso, vamos a ver que lo partió en cuatro paquetes. El primer paquete, al igual que el anterior, dice que tiene "more fragments". En este caso, le dio el ID 189 y ocupa la posición 0. El primer paquete.
El segundo paquete, vemos que igual que antes, ocupa la posición 1480. En este caso, si me dice que tengo "more fragments" y sigue siendo de 1514.
El tercer paquete sigue siendo el ID 189, sigue teniendo "more fragments", y ocupa la posición 2960.
Y el último paquete ya no tiene "more fragments", se acabó. Ocupa la posición 4440 y sigue siendo el ID 180.
Conclusiones
Es decir, para meter en la red una información de 5000 bytes, que es lo que le hemos ordenado con "hping3", lo partió en cuatro paquetes sin excederse del máximo tamaño que permite la red Ethernet, que recuerdo es 1514.
En un primer paquete lo llamó 189, "more fragments", y ocupa la posición cero. Un segundo paquete, también 189, también "more fragments", ocupa 1480. En un tercer paquete, también 189, "more fragments", ocupa 2960 (que es 1480 por 2). Y en un último paquete, que también es 180, ya no hay más fragmentos, este es el último y ocupa la posición 4440 (que es 1480 por 3). Y el último fragmento tiene una longitud de 6014.
Entonces, así es como IP fragmenta un volumen grande que puede recibir de los niveles de transporte o de aplicación. Así es como cuando nosotros queremos enviar una película a través de internet de un gigabyte, pues lo va a partir en tantos paquetitos como necesite para que esta información llegue desde el origen en que enviamos hasta el destino que queremos llegar con la tele.
Así es como trabaja IP en fragmentación. Y retomando lo que sería en el otro extremo, así es como trabaja "hping3". Es que en nuestro primer ejemplo lo hemos visto para generar datagramas IP de distintos tipos de longitudes y obligarlos a que haga uso de la función de fragmentación.