Saltar al contenido

Fuzzing: la técnica que usan los investigadores para encontrar vulnerabilidades

    Investigación de seguridad | unfantasmaenelsistema.com

    En 1988, el profesor Barton Miller de la Universidad de Wisconsin observó que los caracteres aleatorios generados por el ruido de una línea telefónica hacían crashear varios programas del sistema Unix. Decidió convertir ese accidente en un experimento sistemático. Acababa de inventar el fuzzing.

    Hoy, Google descubrió más de 10.000 bugs de seguridad con su infraestructura OSS-Fuzz. Microsoft la usa en Windows y Office. Y tú puedes usarla también, con herramientas gratuitas, desde hoy.

    1. ¿Qué es el fuzzing y por qué funciona?

    El fuzzing consiste en alimentar un programa con entradas masivas, inesperadas, malformadas o semialeatorias, y observar si se produce algún comportamiento anómalo: crashes, hangs, comportamiento indefinido o salidas incorrectas.

    1.1 Tipos de vulnerabilidades que encuentra el fuzzing

    2. Coverage-guided fuzzing: la revolución

    La gran innovación del fuzzing moderno es la retroalimentación por cobertura de código. El fuzzer instrumenta el binario para medir qué ramas del código se ejecutan con cada entrada. Las entradas que descubren código nuevo se añaden al corpus para futuras mutaciones.

    3. AFL++: el estándar del fuzzing moderno

    3.1 Interpretar la interfaz de AFL++

    4. Sanitizers: amplificando la detección de bugs

    Un crash es la forma más obvia de detectar un bug, pero muchos bugs de memoria son silenciosos. Los sanitizers de LLVM instrumentan el binario para detectar estos bugs silenciosos y convertirlos en crashes inmediatos y descriptivos.

    5. libFuzzer: fuzzing en proceso

    libFuzzer se ejecuta dentro del mismo proceso que el código a fuzzear. En lugar de lanzar un proceso nuevo por cada entrada, compila el fuzzer junto con el target en un único ejecutable. Requiere escribir un pequeño adaptador llamado fuzz target o harness.

    6. Analizar crashes: de bug a vulnerabilidad

    7. OSS-Fuzz y fuzzing continuo

    8. Casos reales

    Conclusión

    La barrera de entrada es más baja de lo que parece. Con AFL++ puedes empezar a fuzzear un binario existente en minutos. Con libFuzzer puedes integrar fuzzing directamente en el ciclo de desarrollo. Y con OSS-Fuzz, si tu proyecto es open source, puedes tener infraestructura de fuzzing continuo completamente gratis.

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.