Browse > Home /

| Subcribe via RSS

Manual práctico de hping

Artículo escrito por Pedro Carrasco

Que es y para qué sirve

La herramienta hping es un analizador/ensamblador de paquetes TCP/IP de uso en modo consola. Está inspirado en el comando ping de unix, aunque a diferencia de éste, hping no solo es capaz de enviar paquetes ICMP sino que además también puede enviar paquetes TCP, UDP, y RAW-IP.

Todo esto quiere decir, que con esta herramienta, podemos generar paquetes TCP/IP a medida, que contengan la información que queramos. Esto puede resultar muy interesante para poder efectuar auditorías de red y poder así prevenir ataques malintencionados.

Descarga e instalación

La instalación de esta herramienta, al menos en Ubuntu, es realmente sencilla, como la mayoría de aplicaciones. Tan sólo hay que abrir una consola y escribir como root:

root@laptop:/home/root# apt-get install hping3

Para más información puedes consultar la web oficial aquí.

Diferentes usos y su sintaxis

El uso más sencillo que podemos darle es como sustituto de la herramienta ping, aunque veremos que la información que nos aporta es algo diferente. Vamos a comparar ambas herramientas:

root@laptop:/home/root# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.016 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.017 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.023 ms
^C
— localhost ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.016/0.019/0.023/0.002 ms

root@laptop:/home/root# hping3 localhost
HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.1 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.1 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.0 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=3 win=0 rtt=0.0 ms
^C
— localhost hping statistic —
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.1 ms

En ambos casos, la información que nos proporciona es muy similar, salvo algún pequeño matiz como el campo de flags, que a continuación veremos de qué se trata.

También podemos utilizarlo como scanner de puertos, utilizando el método idle scan (por cierto, método ideado por Salvatore Sanfilipo, el mismo creador de hping), la sintaxis es la siguiente:

root@laptop:/home/root# hping3 -S localhost -p 9091
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=0 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=1 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=2 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=3 win=32792 rtt=0.0 ms
^C
— localhost hping statistic —
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.1/0.1 ms

Si nos fijamos en el valor del flag, veremos que pone SA, que quiere decir SYN/ACK, que a grosso modo es el mensaje que un servidor responde cuando tiene un puerto abierto (en mi caso tengo un pequeño servidor web en el puerto 9091). Si hubiera estado cerrado, nos habría respondido con el flag RA, que quiere decir RST/ACK, o lo que es lo mismo, que tiene el puerto cerrado; veámoslo utilizando otro puerto distinto:

root@laptop:/home/root# hping3 -S localhost -p 9092
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=0 win=0 rtt=0.0 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=1 win=0 rtt=0.1 ms
^C
— localhost hping statistic —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.1 ms

En este caso nos responde con un RST/ACK, lo que nos indica que el puerto 9092 está cerrado.

Otro uso que podemos darle es como herramienta traceroute, aunque para este uso, prefiero tcptraceroute, veamos cómo hacerlo con hping:

root@laptop:/home/root# hping3 pedrocarrasco.org -t 1 −−traceroute
HPING pedrocarrasco.org (wlan0 174.132.157.133): NO FLAGS are set, 40 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=10.109.8.1 name=UNKNOWN
hop=1 hoprtt=0.9 ms

El campo ip=10.109.8.1, hace referencia a la IP del primer salto que realiza para llegar al dominio especificado. Ésto lo hemos especificado poniendo -t 1 (también podemos utilizar el comando -z en vez de -t, e incrementar el TTL cuanto queramos de uno en uno presionando Ctrl+Z).

Además podemos “firmar” los paquetes que enviemos, con el contenido que queramos. Aunque este ejemplo es inocuo, utilizándolo (in)debidamente podríamos causar diversas alteraciones en la máquina destino. Veámos el ejemplo:

root@laptop:/home/root# cat firma.txt
esto es solo un ejemplo
root@laptop:/home/root# hping3 -2 -p 7 localhost -d 50 -E firma.txt
HPING localhost (lo 127.0.0.1): udp mode set, 28 headers + 50 data bytes
[main] memlockall(): Success
Warning: can’t disable memory paging!
ICMP Port Unreachable from ip=127.0.0.1 name=localhost
status=0 port=1963 seq=0

Estableciendo la opción -2 enviamos paquetes UDP, con la opción -d 50 indicamos la longitud del mensaje y con la opción -E indicamos que lea del archivo firma.txt. Podemos ver lo que hemos enviado si capturamos con cualquier sniffer (yo he usado wireshark) el tráfico de la red.

Firmar paquetes con hping

Firmar paquetes con hping

Otra interesante habilidad de hping es poder enviar archivos a través de la red. Para esto, necesitamos una máquina que envíe algún archivo, y otra que esté a la escucha para recibirlo. Primero, preparamos la máquina que permanecerá a la escucha, para ello utilizaremos el parámetro −−listen en el que especificaremos el texto que nos servirá de indicador de inicio de mensaje (en este caso utilizo signature), el protocolo que usaremos es ICMP y lo establecemos utilizando el parámetro −−icmp (también puede usarse UDP o TCP). Al ejecutarlo veremos algo así:

root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp
Warning: Unable to guess the output interface
hping3 listen mode
[main] memlockall(): Success
Warning: can’t disable memory paging!

Ahora toca preparar por otro lado el comando que nos servirá para enviar el fichero que queramos.

root@laptop:/home/root# hping3 localhost −−icmp -d 50 −−sign signature −−file firma.txt
HPING localhost (lo 127.0.0.1): icmp mode set, 28 headers + 50 data bytes
[main] memlockall(): Success
Warning: can’t disable memory paging!
len=78 ip=127.0.0.1 ttl=64 id=5268 icmp_seq=0 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5287 icmp_seq=1 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5289 icmp_seq=2 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5291 icmp_seq=3 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5293 icmp_seq=4 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5295 icmp_seq=5 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5297 icmp_seq=6 rtt=0.1 ms

El resultado es que en el lado en que estábamos esperando recibir algo, empieza a verse lo siguiente:

root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp
Warning: Unable to guess the output interface
hping3 listen mode
[main] memlockall(): Success
Warning: can’t disable memory paging!
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo

Conociendo este último uso, y con un poco de imaginación podremos utilizar hping como si de un troyano se tratase. Aunque mas que para ser usado como troyano, esta herramienta es perfecta para realizar ataques de DoS, spoof o flood. Acabaremos el artículo viendo un sencillo ejemplo de ataque flooding:

root@laptop:/home/root# hping3 −−rand-source −−flood localhost
HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes
hping in flood mode, no replies will be shown
^C
— localhost hping statistic —
189742 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Podemos ver que en tan solo unos segundos, hemos inundado la red con casi doscientos mil paquetes transmitidos de forma ininterrumpida. Esto puede (suele) causar que la red se colapse, impidiendo a otros usuarios poder utilizarla, ya que hping no deja espacio (entre paquete y paquete) para que otras máquinas transmitan ningún tipo de información. El parámetro −−rand-source hace que cada paquete tenga un origen distinto y aleatorio, y −−flood no deja espacio entre paquete y paquete. Si tenemos wireshark a la escucha, podemos ver cual es el resultado:

hping-flood

hping-flood

Ahora os toca practicar con hping para aprender más sobre el protocolo TCP/IP y sus debilidades. No creo que haga falta decirlo, pero por si acaso aviso de que el uso malintencionado de esta herramienta puede ser ilegal, así que utilizad esta información de un modo educativo o para auditar vuestra propia red.

Tags: , , , , , , ,

Redes sociales: ¿Oportunidad o riesgo?

noviembre 22nd, 2007 | No Comments | Posted in Privacidad y Aspectos Legales, Seguridad

Ignacio Javier Borraz plantea una interesante cuestión en Neurona entorno a la privacidad y uso de las redes sociales: Redes sociales: ¿Oportunidad o riesgo?

El debate pasa por la eterna cuestión: la digitalización de nuestras vidas. Realmente existe una línea insignificante entre la adicción a Internet
y la productividad mediante la red; cuando hablo de productividad me
refiero, además de la que generan las empresas, al rendimiento personal.

A mi, personalmente, me encanta aprender y descubrir nuevos mundos. Obviamente Internet es
uno de mis mayores proveedores de innovación, y no en vano, utilitzo la
mayoría de redes sociales, tanto profesionales (Neurona, Linkedin, …)
como de ocio (Myspace, …).

Lo primero que debemos plantearnos es: ¿estamos sustituyendo las
relaciones personales con los contacos en la red? Sí y no. A mi me
encanta tratar en vivo y en directo con la gente, y especialmente con
aquellas personas más cercanas a mi. Hay un problema: trabajamos,
estudiamos, conocemos gente, evolucionamos y no es posible mantener el
contacto directo con todas las personas a las que vamos conociendo. ¿Y
si hablamos de trabajo? Cuántos contactos de negocios potencialmente
interesantes conocemos en un mes? O tenemos una memoria prodigiosa o
necesitamos un modo de mantener el contacto con mucha gente. Con las
redes de contactos solucionamos gran parte del problema. Por otro lado,
nos ayuda a conocer gente potencialmente interesante para nuestros
cometidos.

candado
Pero… ¿los datos que incluimos en las redes virutales están bien
custodiados? Aquí llega el dilema para muchos de nosotros. Obviamente
debemos plantearnos qué consideramos una buena custodia. Si estamos
pensando en la posiblidad de que otras personas accedan a ellos sin
autorización (¿hackers?), problemente la respuesta sea alentadora. Y es
que las grandes empresas como Facebook dedican importantes recursos en
proteger la confidencialidad de sus usuarios. Ahora bien, parece un
negocio bastante jugoso para las propias empresas que mantienen las redes de contactos. Todos
sabemos que conocer a los usuarios nos ayuda a satisfacer necesidades,
y por lo tanto, a vender productos. ¿Qué sucedería si Myspace, Facebook
o alguno de sus asociados utilizasen los datos de sus usuarios para
generar nuevos productos? Es más, ¿qué tal sienta que las empresas
muestren anuncios personalizados acorde al contenido de nuestros
mensajes o nuestro perfil? ¿Dónde termina la privacidad?

Moraleja: Si no quieres que se conozcan tus datos, no los publiques en
la red. Si no quieres que se conozca un secreto, no se lo cuentes a
nadie. Al final no es tan diferente.

More »

Tags: , , ,

Redes de networking

noviembre 27th, 2006 | No Comments | Posted in Interacción, Sistemas de Información
Hace unos días, leyendo el artículo "10 Consejos para hacer networking en Redes Sociales" de Marqueze Telecom y Rosaura Alastruey, empecé a pensar en la exclusividad de las redes de contactos. El decálogo comprende una serie de puntos muy interesantes pero hay uno que no comparto totalmente:

"4. No fomentes agrupaciones elitistas. No todos los contactos son iguales, pero todos son importantes. La esencia del mundo Web 2.0 es la apertura de las relaciones sociales, sin jerarquías ni discriminaciones. Todo el mundo nos aporta valor."

More »

Tags: , ,