El papel del fuzzing en el desarrollo de software
El fuzzing es clave para encontrar errores en sistemas de software complejos.
― 6 minilectura
Tabla de contenidos
En el desarrollo de software, encontrar y arreglar errores es clave para garantizar que los programas funcionen correctamente y de forma segura. Con la creciente complejidad del software, los Desarrolladores se enfrentan a una tarea difícil. El Fuzzing es una técnica que ayuda a identificar problemas generando automáticamente entradas aleatorias para los programas. Este método puede revelar problemas como errores de memoria y caídas del sistema. Muchos desarrolladores han empezado a usar herramientas de fuzzing, como OSS-Fuzz, para mejorar la calidad y Seguridad de su código.
La Importancia de la Detección de Errores
Los ingenieros de software trabajan duro para crear programas confiables y seguros. Los bugs, que son errores o fallos, pueden ocasionar problemas de seguridad y fallos en el sistema. En muchos casos, las vulnerabilidades son pocas en número pero pueden tener consecuencias graves. A medida que el software se vuelve más sofisticado, las herramientas que facilitan encontrar y arreglar errores se vuelven esenciales.
El fuzzing funciona ejecutando automáticamente pruebas con datos aleatorios para ver cómo se comporta un programa bajo condiciones inesperadas. Este proceso puede descubrir problemas ocultos que podrían no encontrarse a través de pruebas manuales. La capacidad de ejecutar estas pruebas en segundo plano mientras continúa el desarrollo puede ahorrar tiempo y mejorar la calidad del software.
Fuzzing y OSS-Fuzz
Los fuzzers como OSS-Fuzz pueden evaluar proyectos de código abierto, identificando varios errores. OSS-Fuzz se ha integrado en muchos proyectos populares, brindando a los desarrolladores una forma eficiente de monitorear y abordar problemas. Al generar automáticamente informes en un sistema de seguimiento, OSS-Fuzz permite a los desarrolladores mantenerse informados sobre los bugs y actuar rápido para resolverlos.
Sin embargo, adoptar fuzzing no está exento de desafíos. Los desarrolladores deben considerar si los beneficios del fuzzing superan el tiempo y esfuerzo requeridos para configurarlo. Tienen que preguntarse si usar pruebas de fuzz es valioso para sus proyectos.
Investigando Bugs de Fuzzing
Para determinar el impacto del fuzzing en proyectos de software, un estudio analizó un número significativo de problemas reportados por OSS-Fuzz. El objetivo era aprender sobre los tipos de bugs que encuentra el fuzzing, cuánto tiempo permanecen esos bugs en el sistema antes de ser arreglados y si los desarrolladores están aprendiendo de sus errores.
Metodología del Estudio
Se recopiló un gran conjunto de datos de 44,102 problemas de fuzzing de OSS-Fuzz. El estudio rastreó la historia de estos bugs a través de registros de commits que indicaban cuándo se introdujeron y cuándo se arreglaron. Esto permitió un examen detallado de la duración de los bugs y cuán rápido respondieron los desarrolladores.
El estudio se centró en varias preguntas clave sobre fuzzing:
- ¿Cuánto tiempo permanecen los bugs detectados por fuzzers en el sistema?
- ¿Qué tan rápido corrigen los desarrolladores estos bugs una vez que son reportados?
- ¿Qué tipos de bugs son los más efectivos para que los fuzzers encuentren?
- ¿Cómo se comparan los resultados del fuzzing con las vulnerabilidades conocidas en otras bases de datos?
- ¿Los desarrolladores están arreglando sus propios bugs o son otros los que los abordan?
Hallazgos Clave
El análisis produjo varias conclusiones notables sobre el fuzzing y sus efectos en el desarrollo de software.
Duración de los Bugs
Los bugs detectados por OSS-Fuzz tenían una duración mediana de unos 324 días. Esto significa que muchos bugs permanecieron en el software durante casi un año antes de ser abordados. Sin embargo, una vez que se identificaba un bug, normalmente se arreglaba muy rápido, con un tiempo de arreglo mediano de solo 2 días. Esto indica que, aunque los bugs pueden permanecer por mucho tiempo, los desarrolladores a menudo priorizan arreglarlos de inmediato.
Tiempo de Respuesta de los Desarrolladores
Al observar cuán rápido respondían los desarrolladores a los informes de fuzzing, la mayoría de los problemas se manejaron rápidamente. El tiempo medio para arreglar un bug de fuzz era de 2 días, con una cantidad significativa de problemas resueltos en una semana. Esta rápida respuesta sugiere que los desarrolladores toman en serio los hallazgos del fuzzing y actúan pronto para corregir los problemas.
Tipos de Bugs Encontrados
El estudio también reveló qué tipos de bugs son comúnmente detectados por fuzzers. Aunque muchos de los problemas encontrados son críticos, una cantidad significativa de bugs no está directamente relacionada con la seguridad. Solo alrededor del 21% de los bugs identificados por OSS-Fuzz fueron clasificados como relacionados con la seguridad. Esto apunta a la necesidad de que los desarrolladores complementen el fuzzing con otras prácticas de aseguramiento de calidad para asegurar una cobertura completa de posibles problemas.
Superposición con Vulnerabilidades Conocidas
El estudio comparó los bugs encontrados por OSS-Fuzz con las vulnerabilidades reportadas en la Base de Datos Nacional de Vulnerabilidades (NVD). Solo alrededor del 9.2% de los bugs de fuzz identificados tenían informes similares en la NVD. Esto sugiere que los fuzzers pueden descubrir una amplia gama de problemas, pero puede que no capten cada vulnerabilidad que podría afectar la seguridad del software. Los equipos de desarrollo deben tener cuidado de no depender únicamente de los fuzzers para sus verificaciones de seguridad.
Oportunidades de Aprendizaje para los Desarrolladores
Otro descubrimiento clave fue sobre los desarrolladores y su capacidad de aprender de los problemas que crean. Se encontró que alrededor del 46% de los bugs reportados fueron arreglados por el mismo desarrollador que los introdujo. Mientras algunos desarrolladores están usando el fuzzing como una herramienta de aprendizaje, muchos no están corrigiendo sus propios errores. Esto podría significar que hay una brecha en la educación de los desarrolladores o una separación entre los equipos que crean funciones y los que las mantienen.
Desafíos en la Implementación del Fuzzing
Aunque los beneficios del fuzzing son claros, hay desafíos en implementar esta técnica en un entorno de desarrollo. Los desarrolladores deben invertir tiempo por adelantado para configurar y configurar herramientas de fuzzing, lidiar con falsos positivos y priorizar arreglos de bugs basados en su gravedad. Además, necesitan llevar un seguimiento de los resultados del fuzzing y mantener la integración con sus procesos de desarrollo existentes.
Conclusión
El fuzzing, particularmente con herramientas como OSS-Fuzz, ha mostrado su potencial para mejorar la calidad del software. La capacidad de detectar y arreglar bugs rápidamente es un activo valioso para los desarrolladores. Sin embargo, los hallazgos también indican que el fuzzing por sí solo no es una solución infalible para identificar todas las vulnerabilidades. Los desarrolladores deben complementar el fuzzing con otras prácticas de prueba y asegurar que todos los miembros del equipo estén involucrados en aprender de sus errores.
En resumen, el fuzzing representa una inversión valiosa para muchos proyectos de software. Con una implementación cuidadosa y una mejora continua, los desarrolladores pueden aprovechar los beneficios del fuzzing para crear software mejor y más seguro.
Título: What Happens When We Fuzz? Investigating OSS-Fuzz Bug History
Resumen: BACKGROUND: Software engineers must be vigilant in preventing and correcting vulnerabilities and other critical bugs. In servicing this need, numerous tools and techniques have been developed to assist developers. Fuzzers, by autonomously generating inputs to test programs, promise to save time by detecting memory corruption, input handling, exception cases, and other issues. AIMS: The goal of this work is to empower developers to prioritize their quality assurance by analyzing the history of bugs generated by OSS-Fuzz. Specifically, we examined what has happened when a project adopts fuzzing as a quality assurance practice by measuring bug lifespans, learning opportunities, and bug types. METHOD: We analyzed 44,102 reported issues made public by OSS-Fuzz prior to March 12, 2022. We traced the Git commit ranges reported by repeated fuzz testing to the source code repositories to identify how long fuzzing bugs remained in the system, who fixes these bugs, and what types of problems fuzzers historically have found. We identified the bug-contributing commits to estimate when the bug containing code was introduced, and measure the timeline from introduction to detection to fix. RESULTS: We found that bugs detected in OSS-Fuzz have a median lifespan of 324 days, but that bugs, once detected, only remain unaddressed for a median of 2 days. Further, we found that of the 8,099 issues for which a source committing author can be identified, less than half (45.9%) of issues were fixed by the same author that introduced the bug. CONCLUSIONS: The results show that fuzzing can be used to makes a positive impact on a project that takes advantage in terms of their ability to address bugs in a time frame conducive to fixing mistakes prior to a product release.
Autores: Brandon Keller, Andrew Meneely, Benjamin Meyers
Última actualización: 2023-05-19 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2305.11433
Fuente PDF: https://arxiv.org/pdf/2305.11433
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.