Mastodon Mastodon Mastodon Mastodon

Fuzzing

Actualizado: · CyberSecureFox Editorial Team

El fuzzing es una técnica de pruebas automatizadas que alimenta un programa con grandes cantidades de entradas no válidas, inesperadas o aleatorias para encontrar fallos, errores de memoria y vulnerabilidades.

Cómo funciona el fuzzing

Un fuzzer genera entradas sin cesar, ejecuta el programa con ellas y vigila bloqueos, cuelgues o aserciones fallidas, guardando las entradas que reproducen el fallo. La idea se remonta a 1988, cuando los estudiantes de Barton Miller en la Universidad de Wisconsin hicieron fallar muchas utilidades de Unix con entradas aleatorias. Enfoques principales:

  • Basado en mutaciones: modifica entradas de ejemplo invirtiendo bits, insertando bytes y combinándolas.
  • Basado en generación: construye entradas a partir de una gramática o especificación de protocolo.
  • Guiado por cobertura: instrumenta el programa y conserva las entradas que alcanzan nuevas rutas de código. American Fuzzy Lop (AFL, 2013) y libFuzzer de LLVM popularizaron este enfoque.

Los fuzzers suelen combinarse con sanitizadores como AddressSanitizer, que convierten la corrupción silenciosa de memoria en fallos inmediatos y notificables.

Por qué es importante

El fuzzing es una de las formas más eficaces de descubrir desbordamientos de búfer, errores use-after-free y fallos de análisis en código escrito en C y C++. El servicio OSS-Fuzz de Google, lanzado en 2016, somete continuamente a fuzzing a cientos de proyectos de código abierto y ha encontrado muchos miles de errores, buena parte de ellos vulnerabilidades de seguridad. Atacantes e intermediarios de exploits también lo emplean, y los investigadores lo usan en programas de bug bounty para encontrar fallos en navegadores, sistemas operativos y protocolos de red.

Cómo se usa en la práctica

  • Integrar objetivos de fuzzing en CI/CD para probar cada cambio de forma continua.
  • Priorizar el código que procesa entradas no fiables: formatos de archivo, protocolos de red y bibliotecas de imágenes y fuentes.
  • Ejecutar los fuzzers con sanitizadores y mantener un corpus de buenas entradas semilla.
  • Combinar el fuzzing con revisión de código, análisis estático y lenguajes con seguridad de memoria.
Sinónimos:
fuzz testing, pruebas de fuzzing, pruebas fuzz