Analytics

jueves, 9 de marzo de 2023

Fuzzing: No todo lo que brilla es oro

En este artículo hablaremos sobre el fuzzing, primero con una breve explicación de que es, sus principales usos y finalmente de la una serie de problemas que pueden acarrear su uso ya que, como todo, pese a ser una herramienta muy útil y adaptable, no es perfecta y tiene una serie de riesgos y problemas.

Para empezar, ¿qué es el fuzzing?, el fuzzing o fuzz testing, es una técnica usada para descubrir bugs, fallas de seguridad o errores de código en cualquier tipo de aplicación, página web, o software en los que existe algún lugar dónde introducir datos. Este puede darse con distintos objetivos o distintos métodos. El objetivo en el que nos centraremos nosotros es el descubrimiento de directorios, contraseñas o cualquier otro dato, pero no el de provocar denegaciones de servicio.

En su uso podemos distinguir distintos pasos, el primero de ellos es la identificación del sistema objetivo, y dentro de este, los inputs dónde se producirá el fuzzing. El segundo paso será la generación de los datos que utilizaremos para fuzzear.

Existen distintos tipos de generadores de datos:

  • El basado en gramática
  • Y el de mutación. 

El basado en gramática hace unos cambios a un diccionario base siguiendo una gramática preestablecida para encontrar distintas cadenas que busquemos, como podría ser el caso de contraseñas o directorios, por otra parte, los de mutación alteran la palabra base buscando errores o algún tipo de cadena que consiga generar una salida inesperada, cada salida cambiará dependiendo de su anterior.

Los siguientes pasos serían la ejecución de los datos fuzzeados, la monitorización de las respuestas, y finalmente la creación de un log con los resultados.

Como ya se ha mencionado antes, nos centraremos en un fuzzing que no tenga como base la denegación de servicio, entre los distintos tipos de fuzzing, podemos diferenciar entre el de protocolo, que no implica de una denegación de servicio para su uso y los fuzzing de aplicación y de formato de archivo, que si lo requieren.

El fuzzing de protocolo consiste en mandar distintos paquetes a un objetivo, esperando una respuesta positiva del sistema. Cuidado con esto, que no implique denegación de servicio como base, no significa que no pueda llegar a darse, de hecho, es bastante probable que pase, y es uno de los principales riesgos.

El fuzzing tiene distintos tipos de riesgos, podemos verlos desde el lado del servidor o del lado del atacante. El atacante debe tener en cuenta principalmente, el WAF. Esta herramienta, como es lógico intentará bloquear a un usuario que esté mandando muchas peticiones en un periodo corto de tiempo, pero también cuando, aunque sean pocas, tengan características maliciosas.

Principales riesgos

Ahora, hablaremos de los riesgos en los que ponemos al servidor a través del fuzzing. Los riesgos son dos y en general son bastante simples, el primero es provocar una vulnerabilidad, que no esté documentada y hacer algo de daño al sistema o la más sencilla, provocar una denegación de servicio por no tener en cuenta las capacidades del sistema objetivo.

Lo primero que debemos tener en cuenta es, la capacidad media del sistema, dependiendo de esto, podremos lanzar un número menor o mayor de hilos, dentro de la capacidad.

El uso de la capacidad en ese momento, por lógica, el servidor tendrá momentos de más y menos uso y quizás un ataque que no agotaría la capacidad total, en una hora específica es capaz de tumbar el sistema. Además de esto, también habría que reducir el número de hilos que se usa dependiendo de la criticidad del sistema, cuanto más crítico sea, menos hilos deberemos utilizar.

En resumen, el fuzzing es una muy buena herramienta, pero para que sea utilizada de una manera correcta, debemos tener en cuenta la capacidad del sistema objetivo, su criticidad y el uso de WAF, reduciendo la potencia de nuestro ataque dependiendo, si aparecen cada uno de los factores nombrado anteriormente.



Autor: Carlos Mayor
Dpto. de auditoría