Volver al inicio

sa-tests-db: flujos de datos en análisis estático

El artículo describe la evolución del analizador estático en el corpus sa-tests-db: desde la búsqueda basada en patrones hasta data-flow híbrido con análisis interprocedural y de control-flow. Discute limitaciones de los patrones, ventajas de los flujos de datos y el rol de un benchmark externo según la Norma Nacional Rusa R 71207-2024.

De patrones a data-flow: sa-tests-db y Norma Nacional Rusa
Advertisement 728x90

La evolución del análisis estático: de patrones a flujo de datos en sa-tests-db

Un analizador estático se califica bajo GOST R 71207-2024 utilizando el corpus sa-tests-db para seis lenguajes: C, C#, Go, Java, JavaScript, Python. Esto se logra al pasar de la búsqueda basada en patrones al análisis de flujo de datos, que considera llamadas interprocedurales, flujo de control y sensibilidad a campos en estructuras. Este enfoque minimiza falsos positivos y falsos negativos en todos los tipos de errores.

Limitaciones de la búsqueda basada en patrones

El análisis basado en patrones busca llamadas peligrosas como sprintf, system o SPI_execute en un contexto de pocas líneas. Es efectivo para un escaneo inicial rápido, pero tiene limitaciones:

  • No considera los flujos de datos entre puntos de definición y uso.
  • Surgen falsos positivos por la proximidad accidental de código sospechoso sin una conexión real.
  • Pierde cadenas largas que pasan por funciones o archivos.

En el corpus externo sa-tests-db, estas limitaciones se hacen evidentes rápidamente, lo que requiere un cambio al análisis de flujo de datos.

Google AdInline article slot

Análisis de flujo de datos

La transición al flujo de datos responde a la pregunta: ¿pueden los datos de fuentes (como getenv, recv, fgets) llegar a sumideros peligrosos? Esto construye un gráfico de conexiones entre la definición y el uso de valores.

Ventajas:

  • Reduce falsos positivos al verificar la ruta real.
  • Descubre rutas interfuncionales.

En la implementación, el analizador rastrea la propagación de contaminación, excluyendo valores no relacionados.

Google AdInline article slot

Análisis interprocedural

El flujo de datos intrafuncional es insuficiente para vulnerabilidades reales que pasan por cadenas de llamadas. La capa interprocedural conecta argumentos con parámetros:

  • Rastreo de valores de retorno.
  • Análisis de argumentos en llamadas.
  • Construcción de un gráfico de llamadas para rutas entre archivos.

Sin esto, los patrones solo ven bloques locales, perdiendo el contexto del sistema.

Consideración del flujo de control

La existencia de una ruta de datos no garantiza una vulnerabilidad. La ruta puede bloquearse por:

Google AdInline article slot
  • Validación.
  • Manejo de errores.
  • Verificaciones de permisos.
  • Ramas lógicamente inalcanzables.

Integrar análisis de flujo de control clasifica las rutas:

  • Incondicionales (alta prioridad).
  • Condicionales (requiere revisión manual).

Esto filtra el ruido, mejorando la precisión de los informes.

Sensibilidad a campos en estructuras

En estructuras, la contaminación de un campo no debe extenderse a toda la estructura. Distinguir entre campos reduce falsas alarmas:

  • Rastreo de contaminación separado para cada campo.
  • Exclusión de campos seguros al llegar a un sumidero.

Estos detalles son críticos para código de producción con datos complejos.

Arquitectura híbrida del analizador

El enfoque óptimo combina etapas:

  • Pre-escaneo basado en patrones para candidatos.
  • Filtrado de casos trivialmente seguros.
  • Análisis completo de flujo de datos para el resto.
  • Priorización basada en rutas confirmadas.
  • Reducción de rango de las no confirmadas.

Esto equilibra velocidad y precisión.

El papel de sa-tests-db en el desarrollo

El conjunto sa-tests-db sirve como referencia externa para tipos de errores correspondientes a GOST R 71207-2024. Detecta regresiones durante cambios:

  • Métricas: falsos positivos, falsos negativos por lenguaje.
  • No promedios agregados, sino un desglose por categorías.

Una ejecución del 23 de marzo de 2026 confirmó la calificación para C, C#, Go, Java, JS, Python.

Conclusiones clave

  • Los patrones solo son adecuados para filtrado rápido; el flujo de datos es esencial para precisión.
  • Análisis interprocedural + flujo de control encuentra el 80% de las rutas reales.
  • La sensibilidad a campos reduce el ruido en un 30–50% en estructuras.
  • sa-tests-db es una prueba de regresión, no una demostración única.
  • GOST requiere métricas por tipo de error, no cifras generales.

— Editorial Team

Advertisement 728x90

Leer después