Que es y para qu sirve HPING
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 adems tambin 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 informacin que queramos.
Esto puede resultar muy interesante para poder efectuar auditoras de
red y poder as prevenir ataques malintencionados.
Descarga e instalacin
La instalacin de esta herramienta, al menos en Ubuntu, es realmente
sencilla, como la mayora de aplicaciones. Tan slo hay que abrir una
consola y escribir como root:
root@laptop:/home/root# apt-get install hping3
Diferentes usos y su sintaxis
El uso ms sencillo que podemos darle es como sustituto de la
herramienta ping, aunque veremos que la informacin 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 informacin que nos proporciona es muy similar,
salvo algn pequeo matiz como el campo de flags, que a continuacin
veremos de qu se trata.
Tambin podemos utilizarlo como scanner de puertos, utilizando el
mtodo idle scan (por cierto, mtodo 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 pequeo
servidor web en el puerto 9091). Si hubiera estado cerrado, nos habra
respondido con el flag RA, que quiere decir RST/ACK, o lo que es lo
mismo, que tiene el puerto cerrado; vemoslo 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 cmo 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 (tambin podemos utilizar el comando -z en vez de -t, e
incrementar el TTL cuanto queramos de uno en uno presionando Ctrl+Z).
Adems podemos firmar los paquetes que enviemos, con el
contenido que queramos. Aunque este ejemplo es inocuo, utilizndolo
(in)debidamente podramos causar diversas alteraciones en la mquina
destino. Vemos 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: cant disable memory paging!
ICMP Port Unreachable from ip=127.0.0.1 name=localhost
status=0 port=1963 seq=0
Estableciendo la opcin -2 enviamos paquetes UDP, con la opcin -d 50
indicamos la longitud del mensaje y con la opcin -E indicamos que lea
del archivo firma.txt. Podemos ver lo que hemos enviado si capturamos
con cualquier sniffer (yo he usado wireshark) el trfico de la red.
Firmar paquetes con hping
Otra interesante habilidad de hping es poder enviar archivos a travs
de la red. Para esto, necesitamos una mquina que enve algn archivo,
y otra que est a la escucha para recibirlo. Primero, preparamos la
mquina que permanecer a la escucha, para ello utilizaremos el
parmetro 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
parmetro icmp (tambin 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: cant 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: cant 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 estbamos 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: cant 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 imaginacin 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 artculo 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 mquinas transmitan ningn tipo de informacin. El
parmetro 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
Ahora os toca practicar con hping para aprender ms 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 informacin de un modo educativo o para
auditar vuestra propia red.