Cuando queremos comprobar la conectividad todos solemos utilizar el comando Ping, una herramienta que envía paquetes ICMP a un servidor específico para saber si la comunicación es correcta o hay algún problema. Sin embargo, esta herramienta es muy sencilla y no permite prácticamente ninguna modificación de los paquetes, ni utilizar otros protocolos para el envío de información. Hping3 es una aplicación más avanzada, que nos va a permitir modificar los paquetes que se envían a través del protocolo TCP/IP, de manera que podamos disponer de un control mucho mayor de estos paquetes, pudiendo adaptarlos en función de nuestras necesidades.
Hay herramientas que te pueden servir de ayuda en diferentes momentos, por ejemplo, a la hora de manipular paquetes TCP/IP y llevar a cabo distintos ataques. En esta ocasión, en RedesZone explicaremos cómo se puede instalar y cuáles son las funcionalidades que puedes aprovechar de Hping3. Para comprender mejor cómo se usa esta aplicación, veremos los comandos que se pueden usar y ejemplos de usos prácticos que podrás realizar por tu cuenta cuando te familiarices con este sfotware.
¿Qué son los paquetes TCP/IP?
Antes de aprender a manipular los paquetes TCP/IP, debes saber qué son los paquetes TCP/IP y cómo están compuestos:
Los paquetes TCP/IP son unidades de datos utilizadas para la transmisión de información a través de las redes que siguen el protocolo TCP/IP, que son las siglas de Transmission Control Protocol/Internet Protocol. Este modelo es fundamental para la comunicación en Internet y se divide en cuatro capas: Enlace de datos, red, transporte y aplicación.
Para comprender cómo funciona un paquete TCP/IP, debes saber que consta de dos partes principales:
- Cabecera: Es la parte que contiene la información esencial para el enrutamiento y la entrega del paquete. EN el caso del protocolo TCP, la cabecera suele incluir información como las direcciones IP de origen y destino, números de puerto, y otra información necesaria para garantizar la entrega ordenada y fiable de los datos.
En el protocolo IP, la cabecera incluye información de enrutamiento, como las direcciones IP de origen y destino, la longitud del paquete y otra información importante para el enrutamiento a través de la red.
- Datos: Es la información real que se está transmitiendo. Pueden ser segmentos de un archivo, solicitudes web, correos electrónicos o cualquier información que se haya enviado y que esté utilizando el protocolo TCP/IP.
Para que sea más sencillo de entender, imagina que el paquete TCP/IP es una carta que vas a enviar. La cabecera serían los datos de contacto como el remitente y los datos son la información que hay dentro del sobre.
Cuando un mensaje o cualquier tipo de dato se envía a través de una red, se divide en paquetes más pequeños para facilitar la transmisión eficiente. Cada paquete viaja a través de la red, siendo dirigido por los routers y switches y, finalmente se vuelve a recomponer en su forma original en el destino.
Principales características
Hping3 es una aplicación de terminal para Linux que nos va a permitir analizar y ensamblar fácilmente paquetes TCP/IP. A diferencia de un Ping convencional que se utiliza para enviar paquetes ICMP, esta aplicación permite el envío de paquetes TCP, UDP y RAW-IP.
Junto al análisis de los paquetes, esta aplicación puede ser utilizada también con otros fines de seguridad, por ejemplo, para probar la eficacia de un firewall a través de diferentes protocolos, la detección de paquetes sospechosos o modificados, e incluso la protección frente a ataques DoS de un sistema o de un Firewall.
Aplicaciones de esta herramienta
En el pasado, esta herramienta se utiliza para temas de ciberseguridad, pero también podemos usarla para probar redes y hosts. Algunas de las principales aplicaciones que podemos hacer con esta herramienta son las siguientes:
- Comprobar la seguridad y el funcionamiento de los firewalls.
- Usarla como un escaneo avanzado de puertos, aunque es mejor usar Nmap para esta tarea.
- Pruebas de red usando diferentes protocolos, ToS, fragmentación etc.
- Descubrir el MTU en la ruta de forma manual.
- Traceroute avanzado usando todos los protocolos admitidos
- Huella digital remota del sistema operativo
- Comprobar el tiempo de distancia
- Auditoría de pilas TCP/IP
Debido a la gran cantidad de posibilidades de esta herramienta, en RedesZone vamos a enseñaros los principales usos y cómo hacerlo. Esta herramienta, podría decirse que es un «ping» vitaminado, y es que podremos utilizar una gran cantidad de opciones avanzadas con el objetivo de atacar a un host, comprobar si tenemos un puerto abierto y mucho más.
Aunque el programa por excelencia para realizar un escaneo de puertos es Nmap, y también tenemos Nmap NSE para tener extensiones adicionales y aumentar funcionalidades, este programa Hping3 también tenemos la posibilidad de realizar un «escaneo de puertos», porque podremos enviar paquetes TCP y UDP a diferentes hosts, y comprobar si nos está o no contestando, de esta forma, con un pequeño script creado por nosotros y este programa Hping3, tendremos la posibilidad de hacer un escaneo de puertos rápido.
Este es posible darle uso en las distribuciones de Linux, como Debian, CentOS, Kali, entre otras, pero según su página oficial es posible ejecutarlo en Windows, MacOS, Solaris (Sun Microsystems de Oracle) y algunos sistemas operativos de BSD como puede ser OpenBSD.
Alternativas a Hping3
En Internet nos podemos encontrar con diferentes opciones para utilizar todos estos comandos y enviar los paquetes TCP/IP. Todas cumplen una función de diagnóstico para las redes, así como para realizar pruebas de penetración entre otras funcionalidades. En todo caso, entre todas las ventajas que nos podemos encontrar, es posible que existan pequeñas variaciones entre las diferentes opciones. Algunas de las alternativas más conocidas, nos podemos encontrar:
- Nmap: Se trata de una herramienta de escaneo de puertos muy popular, y como tal es muy utilizada en todo el mundo para realizar tareas de seguridad. Esta puede escanear las redes para descubrir hosts o servicios, así como para detectar vulnerabilidades y poder generar informes muy detallados.
- Scapy: Se trata de una herramienta que nos permite programas los paquetes para enviar y capturar datos de la red. Es una herramienta muy flexible, y se puede utilizar para gran variedad de tareas relacionadas con la seguridad. Lo que incluye análisis de tráfico y diferentes pruebas.
- Hping: Es muy similar a Hping3, pero cuenta con características adicionales. Se pueden enviar paquetes ICMP, TCP, UDP y RAW. A mayores, cuenta con funciones avanzadas para poder personalizar el cómo se comportan los paquetes.
- Addrwatch: Es un software que permite el monitoreo de direcciones, así como las múltiples interfaces de red con un dominio. Se usa prinicpal para llevar a cabo distintos monitoreos de seguridad y realizar monitoreo de direcciones ARP e IP.
- Zmap: Nos permite realizar escaneos de red a altas velocidades. Esto nos da la posibilidad de detectar dispositivos y servicios dentro de la red. Pero en general, esta herramienta se caracteriza por la posibilidad de realizar escaneos de grandes redes en poco tiempo.
- Wireshark: Nos encontramos con una herramienta que permite realizar un análisis de paquetes de datos, la cual es altamente programable para disponer de más funciones. Puede codificar muchos protocolos de red. Con esta se pueden detectar intrusiones, así como analizar otras aplicaciones de seguridad.
- Arping: es otra de las diferentes alternativas que se pueden descargar en tu sistema operativo. Esta herramiente da la opción a los usuarios de crear paquetes ARP e ICMP para luego poder enviarlos hacia hosts arbitrarios en la red local. Además de que se convierte en una aplicación que se puede usar sin problemas para enumaror los hosts que están en funcionamiento, al igual que sirve para estar informado, ya que permite la impresion de las respuestas ICMP y ARP.
Como puedes ver, son muchas las alternativas, con gran variedad de opciones. Y lo más importante, nos permiten utilizar la que más se ajusta a nuestras necesidades o de un momento concreto.
Compatibilidad con sistemas
Esta herramienta avanzada se puede usar desde distribuciones basadas en Linux como Debian, Kali, CentOS… hasta otros sistemas operativos como Windows, macOS, Solaris y hasta en algunso BSD como OpenBSD. Por lo tanto, una de sus muchas cualidades es que se puede utilizar sin problemas en diferentes sistemas operativos.
Sin embargo, hay que tener en cuenta que no siempre será tan sencillo realizar su instalación. En nuestro caso, explicaremos cómo se encuentra disponible ya en los repositorios oficiales de Ubuntu. Por lo que su puesta en marcha será bastante sencilla desde la terminal del sistema.
Desventajas de Hping3
Pese a que la herramienta de Hping3 cuenta con una serie de ventajas que hacen interesante su uso, también tenemos que tener en cuenta, antes de comenzar con ella, ciertos puntos que podrían ser un problema o desventaja, y que no está de más mencionarlos y recordarlos:
- Complejidad: la curva de aprendizaje de esta herramienta no es sencilla, sobre todo para personas con poca experiencia en programas de comandos, ya que la falta de una interfaz visual, así como sus opciones avanzadas, hacen que muchos tengan que recurrir a tutoriales como el de hoy para poder entenderla.
- Mal uso: Hping3 puede ser utilizado para actividades maliciosas como ataques DDoS o escaneos de red no autorizados. Esto puede llevar a problemas legales o éticos.
- Equipos y sistemas operativos: si usamos un sistema o equipo donde Hìng3 no esté disponible, evidentemente no podremos llegar a instalarlo, por lo que, pese a aprender a usar la herramienta, deberemos tener un dispositivo compatible con ella, ya que no es universal.
- Consumo de red: pese a que su uso no debería repercutir de forma notable en redes importantes, si nuestra velocidad y conexión no es muy buena, el uso de la herramienta debilitaría al resto de programas que hagan uso de ella.
- Poca documentación: esta herramienta no es tan popular como otras, y encontrar información sobre ella, sobre todo si tenemos algún problema o duda, puede ser complicado, por lo que esa curva de aprendizaje de la que hablábamos se pondría todavía peor.
Estas serían las principales contras en el uso de Hping3, sin embargo, la mayoría de ellas no son tan importantes, y no deberíamos preocuparnos si realmente queremos instalarla y utilizarla, por lo que ahora que ya sabes un poco más sobre ella, vamos a ver cómo se haría.
Instalar Hping3
Hping3 se encuentra disponible en los repositorios oficiales de Ubuntu, Debian y también otras distribuciones de Linux, por lo que para instalarlo simplemente debemos abrir un terminal (o un gestor de paquetes como Synaptic) y teclear en él:
sudo apt install hping3
La herramienta ocupará unos 3.600 KB que, una vez se instalen, ya podremos empezar a utilizar. Hay distribuciones Linux que ya viene instalado de forma predeterminada este programa Hping3, como, por ejemplo, Kali Linux, la popular distribución orientada a auditorías de seguridad donde tendremos esta y decenas de herramientas más con el objetivo de comprobar la seguridad de diferentes objetivos y explotar diferentes vulnerabilidades.
Listado de comandos de Hping3
Las funciones que nos admite este programa son inmensas. Desde realizar un sencillo ping hasta enviar paquetes a través de un puerto determinado incluso ocultando la IP de origen. Si queremos conocer a fondo todos los parámetros que nos ofrece este programa podemos consultar la ayuda incluida en la herramienta simplemente tecleando en el terminal:
hping3 --help
Uso básico de la herramienta
El uso de esta herramienta es muy sencillo, pero disponemos de una gran cantidad de argumentos con el objetivo de aumentar sus funcionalidades, como lanzar un determinado número de paquetes, enviar paquetes con un determinado intervalo de espera, enviar paquetes para «floodear» a un objetivo y realizarle una denegación de servicio, posibilidad de contar los paquetes enviados y recibidos por los diferenes hosts, e incluso un modo de depuración para ver a bajo nivel qué está ocurriendo en la red.
- v –version muestra la versión actual de hping3
- -c –count contador de paquetes
- -i –interval tiempo de espera (uX para X microsegundos, por ejemplo -i u1000)
- –fast alias para -i u10000 (10 paquetes por segundo)
- –faster alias para -i u1000 (100 paquetes por segundo)
- –flood envía paquetes lo más rápido posible, no muestra las respuestas.
- -n –numeric salida con números
- -q –quiet comando silencioso sin que lo muestre por pantalla
- -I –interface nombre de la interfaz, si no se pone nada, por defecto es la interfaz de la puerta de encima predeterminada.
- -V –verbose modo verbose para depuración
- -D –debug información de debugging
- -z –bind enlaza ctrl+z a ttl (por defecto al puerto de destino)
- -Z –unbind desenlaza ctrl+z
- –beep beep por cada paquete recibido que coincida
Modos
Este programa Hping3 dispone de varios modos de funcionamiento, el más destacado es el modo de enviar paquetes TCP directamente, de hecho, es el modo por defecto de Hping3, sin embargo, también tenemos la posibilidad de enviar datos vía UDP, ICMP e incluso en RAW IP entre otros.
- Modo por defecto es TCP
- -0 –rawip modo RAW IP
- -1 –icmp modo ICMP
- -2 –udp modo UDP
- -8 –scan modo SCAN mode.
- -9 –listen modo escuchar
Ejemplo: hping –scan 1-30,70-90 -S www.objetivo.com
IP
Este programa nos permite configurar el direccionamiento IP de origen y también destino, de esta forma, podremos crear una dirección IP de origen para falsificarla, también podremos configurar más a bajo nivel para fragmentar los paquetes enviados, el MTU y muchas otras opciones avanzadas con el objetivo de atravesar firewalls.
- -a –spoof spoofea la dirección IP de origen
- –rand-dest dirección IP de destino aleatorio.
- –rand-source dirección IP de origen aleatorio.
- -t –ttl ttl (por defecto 64)
- -N –id id (por defecto aleatorio)
- -W –winid usa el orden de bytes win*id
- -r –rel relativiza el campo de identificación (para estimar el tráfico del host)
- -f –frag fragmenta paquetes en más de un fragmento, puede atravesar ACL débiles
- -x –morefrag fragmenta más
- -y –dontfrag no fragmenta paquetes.
- -g –fragoff establece el offset del fragmento
- -m –mtu establece un MTU virtual, implica que el fragmento del paquete sea mayor que el MTU.
- -o –tos tipo de servicio (por defecto 0x00), intenta hacer –tos help
- -G –rroute incluye la opción RECORD_ROUTE y muestra el buffer de la ruta
- –lsrr enrutamiento de origen suelto y registro de ruta
- –ssrr enrutamiento de origen estricto y registro de ruta
- -H –ipproto establece el protocolo IP, solamente para modo RAW IP.
ICMP
En el caso de que utilices el protocolo ICMP, también podremos configurar este protocolo en detalle para adaptarse a las necesidades de los usuarios.
- -C –icmptype tipo de ICMP (por defecto es ICMP Echo request)
- -K –icmpcode código ICMP (por defecto es 0)
- –force-icmp envía todos los tipos de ICMP (por defecto solo envía los tipos soportados)
- –icmp-gw establece dirección de puerta de enlace predeterminada para ICMP redirect (por defecto 0.0.0.0)
- –icmp-ts alias para –icmp –icmptype 13 (ICMP timestamp)
- –icmp-addr alias para –icmp –icmptype 17 (ICMP dirección de máscara de subred)
- –icmp-help muestra la ayuda para otras opciones icmp.
Códigos de ICMP
Es muy útil saber algunos códigos de ICMP que nos podría llegar a mostrar hping3, a continuación, tenéis todos los más utilizados:
TCP/UDP
- -s –baseport puerto de origen base, por defecto es aleatorio
- -p –destport [+][+]
puesto de destino (por defecto 0) ctrl+z inc/dec - -k –keep mantener el puerto de origen
- -w –win tamaño de ventana, por defecto 64
- -O –tcpoff establece desplazamiento de datos tcp falso (en lugar de tcphdrlen / 4)
- -Q –seqnum muestra solamente el número de secuencia
- -b –badcksum (try to) envía paquetes con el IP checksum falseado, muchos sistemas solucionarán este checksum al enviar el paquete, así que tu tendrás un checksum erróneo a nivel de UDP/TCP.
- -M –setseq establece el número de secuencia TCP
- -L –setack establece TCP ack
- -F –fin establece FIN flag
- -S –syn establece SYN flag
- -R –rst establece RST flag
- -P –push establece PUSH flag
- -A –ack establece ACK flag
- -U –urg establece URG flag
- -X –xmas establece X flag sin usar(0x40)
- -Y –ymas establece Y flag sin usar (0x80)
- –tcpexitcode usa el último tcp->th_flags como código de salida
- –tcp-mss habilita la opción TCP MSS con el valor dado
- –tcp-timestamp habilita la opción TCP timestamp para adivinar el tiempo de uptime.
Opciones comunes a todos
- d –data tamaño de los datos, por defecto es 0.
- -E –file datos desde un archivo.
- -e –sign agrega una firma
- -j –dump vuelca los paquetes en hexadecimal
- -J –print vuelca los caracteres imprimibles
- -B –safe habilita protocolo «safe»
- -u –end te dice cuando un archivo ha llegado hasta el final
- -T –traceroute modo traceroute (implica –bind y –ttl 1)
- –tr-stop Salida cuando se recibe el primer paquete que no es ICMP en modo traceroute
- –tr-keep-ttl Mantiene el TTL del origen fijo, útil para monitorear solo un salto
- –tr-no-rtt No calcula y no muestra información RTT en modo traceroute
- Descripción de paquete ARS (nuevo e inestable)
- –apd-send Envía paquetes descritos con APD
Ejemplos de utilización de Hping3
Prueba de Ping sencilla
Podemos utilizar esta herramienta como el comando ping convencional, obteniendo prácticamente los mismos resultados. Para ello simplemente debemos teclear:
hping3 www.google.es
Y veremos cómo se realiza esta prueba sencilla de conexión. (Podemos cambiar el dominio de Google por cualquier otro o utilizar directamente una IP para hacer ping a ella).
Trazar ruta de conexión
De forma similar a la opción «tracert» de Windows o «traceroute» de Linux, con esta herramienta también podemos seguir todos los saltos entre redes de un paquete desde que sale de nuestro ordenador hasta que llega a su destino, pudiendo conocer en todo momento si hay algún tipo de problema en la conexión.
Para ello simplemente debemos teclear:
hping3 redeszone.net -t 1 --traceroute
Escaneo de puertos usando el flag SYN de TCP
Lo primero que tendremos que hacer es un ping sweep de forma que podamos determinar los hosts activos en la red escaneada, pero este puede no ser efectivo si el ping está bloqueado, en el servicio o en los que buscamos con el comando. En todo caso podremos utilizar otras herramientas como pueden ser arping, nmap o fping para realizar el sweep.
Esta herramienta también nos permite enviar paquetes bajo el protocolo TCP, al más puro estilo Nmap. Para realizar un escaneo a través de este método teclearemos en el terminal «hping3 –S [IP Destino] –p [Puerto]» quedando el resultado similar a lo siguiente:
hping3 -S www.google.es –p 80
El resultado de este test nos devolverá un flag SA quiere decir que corresponde con SYN/ACK, es decir, que la comunicación ha sido aceptada, o lo que es lo mismo, que el puerto está abierto. De lo contrario, si el valor es RA corresponde a RST/ACK o lo que es lo mismo, que la comunicación no se ha realizado correctamente porque el puerto está cerrado o filtrado.
También podemos asignar otros parámetros, los cuales pueden variar la velocidad con la que se realiza el envío de los paquetes con -fast, -faster o -flood.
Si la cantidad de hosts que se determinan como activos, es inferior a la cantidad que supuestamente tendría que estar activa, es posible que algunos se encuentren apagados o que directamente se están filtrando como icmp, por lo cual deberíamos probar con otras opciones para localizarlos.
También podemos apreciar un apartado que muestra «^C«. Esto corresponde al comando de Ctrl+C. En este caso se aplicó ese comando para finalizar el envío de paquetes. Esto hace que podamos especificar cuántos de estos queremos enviar al objetivo. Si usamos -c podemos establecer un número concreto de paquetes. Por ejemplo -c 3, con este realizaremos el envío de tres unidades.
De esta manera podremos conocer, por ejemplo, si se permite la comunicación a un determinado puerto, o si de lo contrario el Firewall lo está filtrando.
Escaneo NULL
En este escaneo los puertos que se muestran como «Not responding ports», nos indican que están abiertos o filtrados. Si el destino nos devuelve desde alguno de los puertos un paquete con la etiqueta R (RST), se considera que está cerrado. Para usar este escaneo haremos uso de lo siguiente:
- sudo hping3: Para aplicar la utilidad.
- –scan: El cual enviaremos a los puertos seleccionados.
- -V: Que establecerá un nivel de verbosidad. Este se puede usar en todos los escaneos.
Lo aplicaremos de la siguiente forma:
sudo hping3 --scan "puertos" -V
Firmar paquetes con un archivo de texto personalizado
Es posible utilizar esta herramienta para modificar los paquetes que enviamos e introducir en ellos un mensaje personalizado de forma similar a una firma. Para ello simplemente debemos teclear:
hping3 redeszone.net -d 50 -E firmaredeszone.txt
Este comando introducirá dentro de los paquetes de Ping el contenido del archivo txt indicado. Si analizamos dichos paquetes con un software adecuado como WireShark veríamos que dentro de ellos está el contenido del fichero en cuestión.
Los parámetros introducidos significan:
- -d : La longitud del mensaje que vamos a introducir, en este caso, 50.
- -E : Fichero del que vamos a coger la firma mensaje que queremos introducir a los paquetes.
Igualmente podemos utilizar otros parámetros, por ejemplo, -p para indicar el puerto al que queremos enviar dichos paquetes o -2 para enviar los paquetes a través del protocolo UDP.
Generar múltiples peticiones para probar la protección DoS y DDoS
Esta herramienta también nos va a permitir comprobar la estabilidad de nuestro sistema frente a ataques de red como DoS y DDoS generando pruebas reales, ya sea hacia localhost como hacia otro servidor dentro (o fuera) de la red.
Podemos realizar una serie de pings únicos modificando la IP de origen de los mismos en los paquetes TCP/IP simplemente tecleando:
hping3 --rand-source 192.168.1.1
Igualmente, podemos añadir el parámetro –flood para que los paquetes se envíen en tiempo real de forma masiva. De esta forma podremos comprobar, en primer lugar, si nuestro cortafuegos funciona y, en segundo lugar, qué tal responde nuestro sistema ante un amago de ataque DDoS.
Para ello teclearemos:
hping3 --rand-source --flood 192.168.1.1
En tan sólo un par de segundos hemos generado más de 25.000 paquetes, por lo que debemos tener cuidado ya que puede quedar nuestra red bloqueada e inservible.
Con esto se empezarán a generar un gran número de paquetes con un «falso origen» (gracias al parámetro rand-source) que se enviarán de forma continua al servidor de destino (en este caso 192.168.1.1). De esta manera podremos comprobar la robustez de nuestro sistema frente a los ataques DDoS ya que, si el sistema deja de funcionar o se bloquea es posible que haya un fallo de configuración y que debamos aplicar las medidas correspondientes para evitar que esto pueda pasar en un entorno real.
Esta herramienta es muy útil, aunque siempre debe utilizarse en entornos cerrados y controlados ya que de salir al exterior es posible que terminemos por realizar un ataque de denegación de servicio a un equipo que no debamos, siendo esto ilegal y pudiendo terminar sancionado por ello.
Os recomendamos acceder al MAN PAGE oficial de hping para conocer todas sus opciones.