Es mejor prevenir que curar… Esa es la filosofía que está en la base del fuzzing. Su principio es probar un software o sistema desde los ángulos más diversos e inesperados, intentando así identificar fallos potenciales antes de que puedan ser explotados de manera perjudicial.
Un sistema, cualquiera que sea, está inicialmente diseñado para funcionar en un entorno tranquilo, sin sorpresas. Sin embargo, en la realidad, puede suceder que dicho sistema experimente un fallo por una razón inesperada. El usuario ha introducido una información que el software no había previsto, y al no saber cómo manejarla, termina fallando.
Para los diseñadores de un programa, el problema es que es difícil prever las situaciones en cuestión. Como resultado, ha surgido una industria completa con el objetivo de poder someter a un sistema a todo tipo de condiciones imprevistas.
Una de las técnicas de prueba que ha surgido se llama «fuzzing». Es una técnica de prueba automatizada. Consiste en inyectar datos aleatorios en un sistema informático y observar cómo reacciona. El fuzzing puede así revelar problemas de seguridad y rendimiento.
¿Qué es un fuzzer?
Un fuzzer es un programa que inyecta automáticamente entradas aleatorias en un programa para detectar potenciales anomalías.
Gracias a los fuzzers, los expertos en ciberseguridad pueden descubrir vulnerabilidades antes de que tengan la posibilidad de ser explotadas por hackers. Se pueden tomar medidas para corregir estos fallos y prevenir potenciales ataques.
El origen de la palabra fuzzing
Durante los años 80, el profesor Barton Miller de la Universidad de Wisconsin estaba conectado a través de la red telefónica durante una situación de fuerte tormenta. Entonces notó una importante interferencia en la señal. Poco a poco, esta interferencia causó un fallo del sistema.
Intrigado, Miller pidió a sus estudiantes que simularan esta experiencia utilizando un generador de ruido, y ver si estas señales podían hacer fallar sistemas UNIX. Así creó la primera prueba de fuzzing. Esta estrategia se aplicó luego en todo tipo de entornos informáticos.

¿Cómo funciona el fuzzing?
El principio del fuzzing consiste en introducir entradas incorrectas deliberadamente en un sistema para identificar fallos.
Un fuzzer se basa en varios componentes clave que son llamados poeta, mensajero y oráculo debido a sus roles específicos: crear, transmitir y analizar los casos de prueba.
- Un poeta, que genera los datos de prueba (test cases). La filosofía de un fuzzer es que, por naturaleza, no se centra en las vulnerabilidades conocidas, la idea es generar el mayor número posible de casos de prueba.
- Un mensajero que transmite estos test cases al software objetivo.
- Un oráculo, que detecta si un fallo se ha revelado. Si este es el caso, proporciona información para que sea posible reproducir el problema, analizarlo y corregirlo.
Los tres tipos de 'test cases'
El poeta crea datos aleatorios basados en modelos evolutivos o los genera a partir de un entendimiento profundo de los protocolos, formatos de archivos o API. Pueden existir tres enfoques:
- Fuzzing aleatorio: datos totalmente aleatorios.
- Fuzzing evolutivo: anomalías introducidas deliberadamente en entradas válidas y ajustadas según los resultados.
- Fuzzing generativo: basado en la comprensión de las reglas del sistema, con el principio de infringirlas sistemáticamente.
Las ventajas del fuzzing
El fuzzing tiene muchas ventajas.
Evaluación de seguridad
Produce una evaluación global de la robustez y los riesgos de seguridad.
Prevención de hackeos
Las fuentes de potencial hacking son identificadas antes de que puedan ser explotadas.
Costos reducidos
Una vez configurado, un fuzzer puede funcionar de manera autónoma.
Detección de bugs
Un fuzzer puede revelar bugs que los métodos de prueba convencionales no detectan.
Los tipos de fuzzers
Caja negra
El término «caja negra» indica que el fuzzer no tiene ninguna información sobre el funcionamiento interno del software.
Caja blanca
Un fuzzer de caja blanca tiene un conocimiento profundo del software que está probando. Tiene acceso a su código fuente, documentación y estructura interna.
Los principales fuzzers
Fuzzers comerciales
- Beyond Security beSTORM
Este fuzzer de tipo caja negra utiliza un motor de fuzzing generativo basado en modelos. Cubre de manera extensa los protocolos, normas y formatos de archivos sin requerir acceso al código fuente.
- Black Duck Defensics
Esta solución de fuzzing se distingue por su inteligencia integrada, más de 250 suites de pruebas predefinidas (redes, archivos, etc.), y su capacidad para detectar rápidamente vulnerabilidades gracias a un análisis profundo de las especificaciones y reglas del sistema objetivo.
- Code Intelligence Fuzz
Esta plataforma de fuzzing de tipo caja blanca se integra directamente en los pipelines CI/CD (conjunto automatizado de procesos de creación y despliegue de aplicaciones) y ayuda así a automatizar las pruebas de seguridad.
- ForAllSecure Mayhem for Code
Una solución avanzada de tipo caja blanca dedicada a la detección de bugs y vulnerabilidades en el código fuente. Ofrece pruebas automatizadas, cobertura profunda y reportes detallados.
- Coverity Fuzz Testing
Esta solución automatizada de fuzzing incluye la generación de datos de prueba, la ejecución de pruebas y la generación de reportes. Integra herramientas de diagnóstico de los defectos detectados.
Fuzzers de código abierto
- Ffuf (Fuzz Faster U Fool)
Una herramienta de fuzzing flexible y rápida capaz de explorar subdominios, archivos ocultos. Puede manejar grandes volúmenes de datos y es un recurso de elección para las pruebas de seguridad de aplicaciones web.
- OneFuzz
Esta plataforma de fuzzing en la nube, aunque desarrollada por Microsoft, es de código abierto, disponible gratuitamente en GitHub – busca democratizar el fuzzing. OneFuzz se basa en técnicas de aprendizaje automático para mejorar la eficacia de las pruebas. Sin embargo, su uso puede implicar costos indirectos, como aquellos relacionados con el uso de infraestructura en la nube.
- PeachTech Peach Fuzzer
Esta herramienta de fuzzing versátil puede utilizarse para probar una gran variedad de software, protocolos y formatos de archivos. Sirve para probar la robustez del software, protocolos y formatos de archivos. Es capaz de simular entornos complejos para identificar vulnerabilidades críticas de manera sistemática y dirigida.