Hace ya mucho tiempo escribí en este blog un artículo sobre la herramienta hping3 en el que hablaba de como falsificar la dirección IP desde la que se enviaba un paquete a través de la red. Dada la gran versatilidad de esta herramienta hoy os voy a hablar de otra de las tareas para las que se suele utilizar esta herramienta, en este caso, probar las reglas de nuestro firewall.
Una parte muy importante del bastionado de nuestros sistemas, es la de que nuestros firewall estén bien configurados para, de esta forma, solo permitir el acceso a aquellos servicios que nosotros ofrecemos al exterior e impedir el acceso a todo lo demás. Para esto, lo más habitual suele ser tener extensas (o no tan extensas) listas de reglas a aplicar en nuestro firewall. Después de aplicar estas reglas un paso básico, muchas veces olvidado, debería ser el de probar estas reglas, ya sea por despiste, descuido o por la existencia de otras reglas en conflicto, muchas veces nos podemos llevar desagradables sorpresas que no queremos que sea un cliente quien nos notifique o peor aún, que lo descubramos tras el resultado de un ataque.
En este escenario en el que necesitamos probar las reglas dadas de alta en nuestro firewall es cuando la herramienta hping3 nos puede ser de gran utilidad, ya que nos permite crear paquetes de diferentes tipos para poder probar nuestras reglas.
En general, en el artículo, estoy hablando de probar las reglas de un firewall, pero también nos puede servir en el mismo modo para probar nuestros sistema IDS (Intrusion Detection System). Pero bueno, en el ejemplo que voy a poner a continuación, nos vamos a centrar en la prueba de una regla del firewall.
Para ver la información general sobre el comando, bastará con ejecutar en la consola el comando:
hping3 -h
Este nos mostrará las diferentes opciones de las que disponemos.
A modo de resumen y que nos sean útiles para este artículo, tenemos:
Definir protocolo
No. Abrev. Largo Descripción 0 Por defecto se envía un paquete TCP 1 -0 –raw-ip Envía paquetes RAW IP 2 -1 –icmp Envía paquetes ICMP 3 -2 –udp Envía paquetes UDP 4 -8 –scan Establece el modo escáner 5 -9 –listen Establece el modo escuchaPaquetes TCP
No. Option Flag name 0 Paquete TCP por defecto 1 -S syn 2 -A ack 3 -R rst 4 -F fin 5 -P psh 6 -U urg 7 -X xmas: flags fin, urg, psh set 8 -Y ymas
Pero bueno, vamos a empezar con un pequeño ejemplo. Yo para las pruebas he utilizado una máquina virtual con linux en la que he definido las siguientes reglas en el firewall:
- Aceptar paquetes TCP al puerto 22 (SSH).
- Denegar todo lo demás.
Tras esto, vamos a probar la regla:
Primero probaremos el caso que debería funcionar. Para ello mandaremos un paquete TCP SYN al puerto 22:
hping3 192.168.1.82 -c 1 -S -p 22
Esto nos tendría que devolver que nuestro paquete ha sido recibido
Ahora vamos a probar los casos en los que deberíamos ser rechazados.
Primero probaremos con un mensaje ICMP:
hping3 -1 192.168.1.82 -c 1
Tras ejecutarlo, deberíamos ver que nuestro paquete se ha perdido.
El siguiente paquete que debería ser rechazado que vamos a probar es un paquete como el TCP pero utilizando UDP:
hping3 -2 192.168.1.82 -c 1-S -p 22
Como vemos, si todo ha ido bien con nuestra nueva regla, este paquete es rechazado también.
En este sentido, podemos crear y probar tantas reglas como queramos, incluso podemos crear nuestros propios scripts para probarlas teniendo scripts para diferentes configuraciones o entornos.
Bueno, hasta aquí hemos llegado, el ejemplo ha sido bastante simple, pero creo que tenéis la suficiente información como para lanzaros a jugar un rato con hping3 y a utilizarlo seriamente. Nos vemos.