Resultados de la Competencia de Fuzzing Resaltan el Rendimiento de las Herramientas
Herramientas de fuzzing evaluadas para cobertura de código y detección de errores.
― 5 minilectura
Tabla de contenidos
En mayo de 2023, se llevó a cabo una Competencia de Fuzzing para evaluar varias herramientas de fuzzing diseñadas para encontrar errores en el software. Esta competencia duró 23 horas e incluyó ocho Fuzzers diferentes. Los principales objetivos eran ver qué tan bien podían cubrir el código y cuán efectivamente podían encontrar errores.
Estructura de la Competencia
La competencia se desarrolló en tres fases:
Desarrollo Privado: Los participantes integraron sus fuzzers con la plataforma de la competencia y realizaron pruebas privadas con benchmarks disponibles públicamente. Esta fase les permitió perfeccionar sus herramientas sin el escrutinio público.
Pruebas Públicas: La segunda fase consistió en ejecutar todos los fuzzers presentados sobre los benchmarks en un entorno público. Los participantes pudieron identificar y corregir cualquier error en sus herramientas en esta etapa.
Evaluación Final: En la fase final, todos los fuzzers fueron probados en un conjunto oculto de benchmarks y en los previamente disponibles. Esta fase determinó los rankings finales de los fuzzers.
Objetivos de la Competencia
Los objetivos principales eran evaluar los fuzzers en dos aspectos clave: cuánto del código podían cubrir y cuántos errores podían encontrar. También se recopiló retroalimentación sobre el proceso de benchmarking en sí. Se puso un enfoque específico en reducir diferentes tipos de sesgo en el proceso de pruebas para asegurar una evaluación justa.
Cobertura de Código y Detección de errores
La competencia tenía como objetivo medir dos áreas clave: la cobertura de código y la capacidad de encontrar errores. La cobertura de código se refiere a la medida en que la herramienta puede ejecutar diferentes partes del programa. La detección de errores indica cuántos problemas puede identificar la herramienta en el software que se está probando.
Para asegurar la equidad, cada fuzzer tuvo que ser evaluado bajo las mismas condiciones, y los benchmarks se dividieron en conjuntos públicos y ocultos. El conjunto público estaba disponible para que los participantes practicaran e identificaran problemas, mientras que el conjunto oculto se reveló solo durante las evaluaciones finales.
Importancia de los Benchmarks del Mundo Real
Los benchmarks utilizados en la competencia se seleccionaron de proyectos de código abierto bien conocidos. Esta elección asegura que los fuzzers fueron probados utilizando software que se mantiene activamente y que es ampliamente utilizado. Al usar proyectos actualizados, la competencia buscó garantizar que sus hallazgos fueran relevantes para las prácticas actuales de desarrollo de software.
Ejecución de los Fuzzers
Los fuzzers se ejecutaron en máquinas virtuales configuradas específicamente para la competencia. Cada fuzzer fue probado varias veces para obtener resultados confiables. Durante las pruebas, se registró el rendimiento de cada fuzzer, midiendo tanto su cobertura de los benchmarks como el tiempo que tardaron en encontrar errores.
Resultados de la Competencia
Resultados de Cobertura de Código
Los resultados mostraron que un fuzzer se destacó, liderando en cobertura de código en la mayoría de los benchmarks. Sin embargo, también tuvo baja cobertura en algunos benchmarks específicos, lo que afectó su puntaje general. Otros fuzzers también tuvieron buen desempeño, y algunos mostraron resultados consistentes en varias pruebas.
Los fuzzers de línea base, que son herramientas estándar bien conocidas, se desempeñaron admirablemente y lograron superar a muchos de los fuzzers participantes. Curiosamente, muchos de los fuzzers con mejor rendimiento tuvieron niveles de rendimiento similares porque se construyeron sobre arquitecturas parecidas.
Resultados de Detección de Errores
Al mirar la detección de errores, algunos fuzzers estaban a la par con los mejores, descubriendo un número significativo de errores. Sin embargo, se notó que, aunque muchos fuzzers eran eficientes en encontrar errores, algunos no destacaron en la cobertura de código, lo que llevó a una desconexión entre las dos métricas.
Se destacaron ciertos benchmarks como efectivos para distinguir las capacidades de los fuzzers, mostrando un rendimiento diverso entre ellos. Algunos fuzzers identificaron errores de maneras únicas, mostrando sus fortalezas y debilidades individuales.
Desafíos en la Evaluación de Fuzzers
La competencia enfrentó varios desafíos al medir el rendimiento. Un obstáculo importante fue cómo evaluar con precisión los errores del mundo real. Los organizadores abordaron este problema utilizando errores conocidos de proyectos de código abierto. Este enfoque ayudó a garantizar que la competencia reflejara las capacidades reales de detección de errores.
Otro desafío fue seleccionar benchmarks apropiados que pudieran proporcionar información valiosa sobre el rendimiento de los fuzzers. Para mitigar esto, ciertos benchmarks se mantuvieron ocultos durante la fase de prueba para evaluar su impacto en los resultados finales.
Además, determinar si varios fuzzers encontraron el mismo error presentó dificultades. La competencia simplificó esto asegurando que cada benchmark solo contuviera un error conocido. Este enfoque ayudó a mantener la claridad en los resultados y las evaluaciones de rendimiento.
Conclusión y Mejoras Futuras
La Competencia de Fuzzing proporcionó una evaluación integral de múltiples fuzzers utilizando un riguroso proceso de pruebas. Se midió su rendimiento en función de la cobertura de código y las capacidades de detección de errores. Los resultados destacaron tanto las fortalezas como las limitaciones de varios fuzzers.
De cara al futuro, los organizadores de la competencia buscan refinar su análisis estadístico e incluir datos más extensos sobre cómo se desempeñan los fuzzers. Planean ampliar la colección de benchmarks basados en errores, permitiendo una comprensión más profunda de las habilidades de los fuzzers.
Al mejorar continuamente el proceso de evaluación, la esperanza es capturar mejor la verdadera efectividad de los fuzzers en escenarios del mundo real, contribuyendo en última instancia al desarrollo de software más robusto.
Título: SBFT Tool Competition 2023 -- Fuzzing Track
Resumen: This report outlines the objectives, methodology, challenges, and results of the first Fuzzing Competition held at SBFT 2023. The competition utilized FuzzBench to assess the code-coverage performance and bug-finding efficacy of eight participating fuzzers over 23 hours. The competition was organized in three phases. In the first phase, participants were asked to integrate their fuzzers into FuzzBench and allowed them to privately run local experiments against the publicly available benchmarks. In the second phase, we publicly ran all submitted fuzzers on the publicly available benchmarks and allowed participants to fix any remaining bugs in their fuzzers. In the third phase, we publicly ran all submitted fuzzers plus three widely-used baseline fuzzers on a hidden set and the publicly available set of benchmark programs to establish the final results.
Autores: Dongge Liu, Jonathan Metzman, Marcel Böhme, Oliver Chang, Abhishek Arya
Última actualización: 2023-05-15 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2304.10070
Fuente PDF: https://arxiv.org/pdf/2304.10070
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.