Fuzzing


Fuzzing o fuzz testing es una técnica de prueba de software automatizada que implica proporcionar datos no válidos, inesperados o aleatorios como entradas a un programa informático . A continuación, se supervisa el programa en busca de excepciones, como bloqueos , fallas en las aserciones del código integrado o posibles fugas de memoria . Por lo general, los fuzzers se utilizan para probar programas que toman entradas estructuradas. Esta estructura se especifica, por ejemplo, en un formato de archivo o protocoloy distingue la entrada válida de la no válida. Un fuzzer eficaz genera entradas semiválidas que son "suficientemente válidas" en el sentido de que no son rechazadas directamente por el analizador, pero crean comportamientos inesperados más profundos en el programa y son "suficientemente inválidas" para exponer casos de esquina que no se han tratado correctamente . con.

Por motivos de seguridad, la entrada que cruza un límite de confianza suele ser la más útil. [1] Por ejemplo, es más importante fuzzear el código que maneja la carga de un archivo por parte de cualquier usuario que fuzzear el código que analiza un archivo de configuración al que solo puede acceder un usuario privilegiado.

El término "fuzz" se origina en un proyecto de clase de otoño de 1988 [2] en la clase de sistemas operativos avanzados (CS736), impartida por el profesor Barton Miller en la Universidad de Wisconsin, cuyos resultados se publicaron posteriormente en 1990. [3] Para prueba fuzz un UNIXutilidad destinada a generar automáticamente entradas aleatorias y parámetros de línea de comandos para la utilidad. El proyecto fue diseñado para probar la confiabilidad de los programas de línea de comandos de UNIX mediante la ejecución de una gran cantidad de entradas aleatorias en rápida sucesión hasta que colapsaron. El equipo de Miller pudo colapsar del 25 al 33 por ciento de las utilidades que probaron. Luego depuraron cada uno de los bloqueos para determinar la causa y categorizaron cada falla detectada. Para permitir que otros investigadores realicen experimentos similares con otro software, el código fuente de las herramientas, los procedimientos de prueba y los datos de resultados sin procesar se pusieron a disposición del público. [4] Este fuzzing temprano ahora se llamaría fuzzing de caja negra, generacional, no estructurado (tonto).

Este artículo de fuzz de 1990 también señaló la relación entre la confiabilidad y la seguridad: "En segundo lugar, uno de los errores que encontramos fue causado por la misma práctica de programación que proporcionó uno de los agujeros de seguridad al gusano de Internet (el error 'obtiene el dedo'). Hemos encontrado errores adicionales que podrían indicar futuros agujeros de seguridad". (Refiriéndose al gusano Morris de noviembre de 1988.)

El proyecto fuzz original hizo contribuciones en 1995, 2000, 2006 y más recientemente en 2020:

En abril de 2012, Google anunció ClusterFuzz, una infraestructura de fuzzing basada en la nube para componentes críticos para la seguridad del navegador web Chromium . [9] Los investigadores de seguridad pueden cargar sus propios fuzzers y recolectar recompensas por errores si ClusterFuzz encuentra un bloqueo con el fuzzer cargado.