Noticias

Descubre Hping3 para manipular paquetes TCP/IP y hacer ataques

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.

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.

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.

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.

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:

  • 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:

  • 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:

  • -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:

  • -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 [+][+]<port> 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

Hping3_tutorial_Linux_foto_1

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

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.

Hping3_tutorial_Linux_foto_2

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.

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.

Hping3_tutorial_Linux_foto_3

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

Hping3_tutorial_Linux_foto_4

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.

El artículo Descubre Hping3 para manipular paquetes TCP/IP y hacer ataques se publicó en RedesZone.

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.