Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Ingeniería del software# Criptografía y seguridad

Reduciendo Alarmas Falsas en Análisis Estático: FuzzSlice

Un nuevo método reduce los falsos positivos en herramientas de análisis estático usando pruebas de fuzz.

― 7 minilectura


FuzzSlice: EnfrentandoFuzzSlice: EnfrentandoAdvertencias de AnálisisEstáticoeficiente.en el análisis estático de maneraFuzzSlice minimiza los falsos positivos
Tabla de contenidos

Las Herramientas de Análisis Estático revisan el código en busca de errores sin ejecutar el programa. Estas herramientas ayudan a encontrar problemas pronto en el desarrollo, pero a menudo muestran muchas falsas alarmas, lo que hace que los desarrolladores confíen menos en ellas. Esto puede llevar a que se pasen por alto problemas reales.

El Fuzzing es un método de prueba donde se envían datos aleatorios a un programa para encontrar problemas inesperados. Este método se ha usado principalmente para confirmar problemas reales, pero no ha sido tan efectivo para reducir las falsas Advertencias del análisis estático. En este artículo, discutiremos un nuevo método llamado FuzzSlice que busca identificar y reducir las falsas alarmas de las herramientas de análisis estático.

El Problema con las Herramientas de Análisis Estático

Las herramientas de análisis estático pueden generar muchas advertencias sobre problemas potenciales en el código. Sin embargo, una gran cantidad de estas advertencias resultan ser Falsos Positivos. Esta situación crea varios desafíos:

  1. Sobrecarga de Información: Los desarrolladores a menudo reciben una avalancha de advertencias, lo que hace difícil enfocarse en los problemas reales.
  2. Falta de Contexto: Estas herramientas pueden no entender completamente cómo se mueve la información dentro de un programa. Como resultado, suelen señalar problemas que en realidad no existen.
  3. Problemas de Confianza: Debido al alto número de falsas alarmas, los desarrolladores pueden ignorar por completo los resultados del análisis estático, pasando por alto verdaderas vulnerabilidades.

Abordar estos problemas es crucial para que los desarrolladores mantengan la calidad y seguridad del código.

El Papel del Fuzzing

El fuzzing es una técnica bien conocida que se usa en las pruebas de software y consiste en enviar entradas aleatorias o inesperadas a un programa. Ayuda a descubrir problemas ocultos, como fallos o comportamientos inesperados. Aunque ha sido útil para encontrar errores reales, ha sido menos efectivo para filtrar las falsas alarmas producidas por el análisis estático.

En estudios anteriores, el fuzzing se ha centrado principalmente en confirmar problemas reales, dejando la identificación de posibles falsos positivos menos explorada. Con FuzzSlice, buscamos llenar este vacío al dirigirse específicamente a las falsas alarmas de las herramientas de análisis estático.

Resumen de FuzzSlice

FuzzSlice es un método diseñado para reducir automáticamente las falsas alarmas de las herramientas de análisis estático. Se centra en evaluar las advertencias y determinar cuáles son probablemente falsos positivos. La idea clave es simple: si una advertencia no causa un fallo cuando se hace fuzzing, podría ser un falso positivo.

Pasos Clave en FuzzSlice

FuzzSlice involucra algunos pasos clave:

  1. Crear un Slice Mínimo: Esto significa aislar la parte del código que contiene la advertencia, junto con cualquier función y dato relacionado que necesite.
  2. Generar Entradas para Fuzzing: Crear entradas aleatorias que puedan probar eficazmente la porción de código aislada.
  3. Clasificar Advertencias: Después del fuzzing, determinar si la advertencia es probablemente un falso positivo basándose en si ocurrió un fallo.

Estos pasos permiten a los desarrolladores centrarse en problemas reales mientras reducen el tiempo dedicado a falsas alarmas.

Implementando FuzzSlice

Paso 1: Crear un Slice Mínimo

Para dirigirse eficazmente a la advertencia, FuzzSlice crea un slice mínimo de código que incluye la función que causó la advertencia y cualquier función dependiente necesaria para ejecutarla. Este slice es más pequeño que todo el programa, permitiendo pruebas más rápidas.

Paso 2: Generar Entradas para Fuzzing

En este paso, el método genera entradas aleatorias específicamente adecuadas para la función incluida en el slice. Usa un método consciente del tipo para asegurarse de que las entradas sean apropiadas para las variables usadas en el código, aumentando la probabilidad de detectar cualquier problema potencial.

Paso 3: Clasificar Advertencias

Después del proceso de fuzzing, FuzzSlice verifica si la función falló con las entradas suministradas. Si no lo hizo y la función se ejecutó con éxito, la advertencia puede ser un falso positivo. Si ocurre un fallo, la advertencia podría ser un problema genuino.

Evaluando FuzzSlice

FuzzSlice fue probado en dos tipos de conjuntos de datos: un conjunto de datos sintético (Juliet test suite) y proyectos de código abierto del mundo real (como OpenSSL y tmux).

Resultados del Conjunto de Datos Sintético

El Juliet test suite está diseñado específicamente para evaluar herramientas de análisis estático. Contiene etiquetas claras que indican cuáles advertencias son verdaderos positivos y cuáles son falsos positivos. En nuestras pruebas:

  • FuzzSlice pudo identificar todos los 864 falsos positivos en el conjunto de datos sintético.
  • Confirmó que ninguna de las líneas señaladas resultó en fallos al hacer fuzzing.

Resultados de Conjuntos de Datos del Mundo Real

FuzzSlice también fue evaluado en tres proyectos de código abierto. Los resultados mostraron:

  • Identificó 143 posibles falsos positivos de 265 advertencias de estos proyectos.
  • Los desarrolladores confirmaron que la mayoría de estas advertencias señaladas eran realmente falsos positivos.

Esto demuestra que FuzzSlice puede ayudar a los desarrolladores a priorizar sus esfuerzos al reducir la carga de trabajo asociada con falsas alarmas.

Por Qué FuzzSlice Es Importante

FuzzSlice ayuda a abordar un problema significativo en el desarrollo de software. Al automatizar el proceso de verificación de advertencias del análisis estático, los desarrolladores pueden centrarse en problemas genuinos, mejorando la eficiencia y la calidad del código.

  1. Ahorrando Tiempo: Al reducir los falsos positivos, los desarrolladores pasan menos tiempo revisando manualmente las advertencias.
  2. Mejorando la Confianza en las Herramientas: Con mejor precisión, los desarrolladores pueden estar más inclinados a usar herramientas de análisis estático.
  3. Destacando Vulnerabilidades Reales: Al suavizar el ruido de las falsas advertencias, el enfoque puede cambiar a problemas genuinos que necesitan solución.

Desafíos y Limitaciones

Aunque FuzzSlice muestra promesa, tiene algunas limitaciones:

  1. Estructuras de Código Complejas: Algunas estructuras complejas pueden no reducirse fácilmente a un slice mínimo, lo que puede llevar a advertencias pasadas por alto.
  2. Punteros de Función y Variables Globales: El enfoque actual puede no manejar adecuadamente los punteros de función y las variables globales, lo que puede llevar a clasificaciones erróneas.
  3. Problemas de Análisis: Usar herramientas como srcML para analizar el código puede introducir errores, lo que puede afectar la precisión de los slices mínimos.

Trabajo Futuro

Para mejorar FuzzSlice, podemos considerar varias mejoras:

  1. Refinar Técnicas para Manejar Variables Globales: Al incorporar métodos para abordar mejor las variables globales, la precisión para indicar falsos positivos podría mejorar.
  2. Generación de Entradas Mejorada: Desarrollar métodos de generación de entradas más sofisticados podría generar mejores resultados durante el fuzzing.
  3. Mayor Compatibilidad con Análisis Estático: Apoyar varias herramientas de análisis estático podría hacer que FuzzSlice sea más flexible y ampliamente aplicable.

Conclusión

FuzzSlice representa un paso significativo hacia la mejora de la confiabilidad de las herramientas de análisis estático. Al identificar y reducir efectivamente los falsos positivos, puede ahorrar tiempo y esfuerzo a los desarrolladores, permitiéndoles concentrarse en lo que realmente importa: escribir código seguro y confiable. A medida que continuemos refinando y expandiendo este método, esperamos hacer un impacto duradero en cómo se realiza el análisis estático en entornos de desarrollo de software prácticos.

Fuente original

Título: FuzzSlice: Pruning False Positives in Static Analysis Warnings Through Function-Level Fuzzing

Resumen: Manual confirmation of static analysis reports is a daunting task. This is due to both the large number of warnings and the high density of false positives among them. Fuzzing techniques have been proposed to verify static analysis warnings. However, a major limitation is that fuzzing the whole project to reach all static analysis warnings is not feasible. This can take several days and exponential machine time to increase code coverage linearly. Therefore, we propose FuzzSlice, a novel framework that automatically prunes possible false positives among static analysis warnings. Unlike prior work that mostly focuses on confirming true positives among static analysis warnings, which requires end-to-end fuzzing, FuzzSlice focuses on ruling out potential false positives, which are the majority in static analysis reports. The key insight that we base our work on is that a warning that does not yield a crash when fuzzed at the function level in a given time budget is a possible false positive. To achieve this, FuzzSlice first aims to generate compilable code slices at the function level and then fuzzes these code slices instead of the entire binary. FuzzSlice is also unlikely to misclassify a true bug as a false positive because the crashing input can be reproduced by a fuzzer at the function level as well. We evaluate FuzzSlice on the Juliet synthetic dataset and real-world complex C projects. Our evaluation shows that the ground truth in the Juliet dataset had 864 false positives which were all detected by FuzzSlice. For the open-source repositories, we were able to get the developers from two of these open-source repositories to independently label these warnings. FuzzSlice automatically identifies 33 out of 53 false positives confirmed by developers in these two repositories. Thus FuzzSlice reduces false positives by 62.26% in the open-source repositories and by 100% in the Juliet dataset.

Autores: Aniruddhan Murali, Noble Saji Mathews, Mahmoud Alfadel, Meiyappan Nagappan, Meng Xu

Última actualización: 2024-02-02 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2402.01923

Fuente PDF: https://arxiv.org/pdf/2402.01923

Licencia: https://creativecommons.org/licenses/by-nc-sa/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.

Más de autores

Artículos similares