Zurück zur Startseite

sa-tests-db: Datenflüsse in der statischen Analyse

Der Artikel beschreibt die Evolution des statischen Analysators auf dem sa-tests-db-Korpus: von musterbasierter Suche zu hybrider Datenflussanalyse mit interprozeduraler und Kontrollflussanalyse. Erörtert Einschränkungen von Mustern, Vorteile von Datenflüssen und die Rolle eines externen Benchmarks gemäß Russischem Nationalstandard R 71207-2024.

Von Mustern zu Datenfluss: sa-tests-db und Russischer Nationalstandard
Advertisement 728x90

Die Entwicklung der statischen Analyse: Von Mustern zur Datenflussanalyse in sa-tests-db

Ein statischer Analyzer qualifiziert sich gemäß GOST R 71207-2024 unter Verwendung des sa-tests-db-Korpus für sechs Sprachen: C, C#, Go, Java, JavaScript, Python. Dies wird durch den Übergang von musterbasierter Suche zur Datenflussanalyse erreicht, die prozedurübergreifende Aufrufe, Kontrollfluss und Feldsensitivität in Strukturen berücksichtigt. Dieser Ansatz minimiert falsch positive und falsch negative Ergebnisse über verschiedene Fehlertypen hinweg.

Grenzen der musterbasierte Suche

Musterbasierte Analyse sucht nach gefährlichen Aufrufen wie sprintf, system oder SPI_execute im Kontext weniger Zeilen. Sie ist effektiv für schnelles initiales Scannen, hat aber Grenzen:

  • Sie berücksichtigt nicht Datenflüsse zwischen Definitions- und Verwendungspunkten.
  • Falsch positive Ergebnisse entstehen durch zufällige Nähe verdächtigen Codes ohne echte Verbindung.
  • Sie übersieht lange Ketten, die durch Funktionen oder Dateien verlaufen.

Am externen sa-tests-db-Korpus werden diese Grenzen schnell deutlich, was einen Wechsel zur Datenflussanalyse erfordert.

Google AdInline article slot

Datenflussanalyse

Der Übergang zur Datenflussanalyse beantwortet die Frage: Können Daten von Quellen (wie getenv, recv, fgets) gefährliche Senken erreichen? Dies baut einen Graphen von Verbindungen zwischen Definition und Verwendung von Werten auf.

Vorteile:

  • Reduziert falsch positive Ergebnisse durch Überprüfung des tatsächlichen Weges.
  • Entdeckt funktionsübergreifende Pfade.

In der Implementierung verfolgt der Analyzer die Ausbreitung von Taint und schließt unverwandte Werte aus.

Google AdInline article slot

Prozedurübergreifende Analyse

Intrafunktionale Datenflussanalyse ist unzureichend für echte Schwachstellen, die durch Aufrufketten verlaufen. Die prozedurübergreifende Schicht verbindet Argumente mit Parametern:

  • Verfolgung von Rückgabewerten.
  • Analyse von Argumenten in Aufrufen.
  • Aufbau eines Aufrufgraphen für dateiübergreifende Pfade.

Ohne dies sehen Muster nur lokale Blöcke und verlieren den Systemkontext.

Berücksichtigung des Kontrollflusses

Die Existenz eines Datenpfades garantiert keine Schwachstelle. Der Pfad kann blockiert werden durch:

Google AdInline article slot
  • Validierung.
  • Fehlerbehandlung.
  • Berechtigungsprüfungen.
  • Logisch unerreichbare Zweige.

Die Integration von Kontrollflussanalyse klassifiziert Pfade:

  • Unbedingt (hohe Priorität).
  • Bedingt (erfordert manuelle Überprüfung).

Dies filtert Rauschen heraus und verbessert die Genauigkeit von Berichten.

Feldsensitivität in Strukturen

In Strukturen sollte Taint von einem Feld nicht auf die gesamte Struktur übergreifen. Die Unterscheidung zwischen Feldern reduziert Fehlalarme:

  • Separate Taint-Verfolgung für jedes Feld.
  • Ausschluss sicherer Felder beim Erreichen einer Senke.

Solche Details sind entscheidend für Produktionscode mit komplexen Daten.

Hybride Analyzer-Architektur

Der optimale Ansatz kombiniert Stufen:

  • Musterbasierte Vorabprüfung für Kandidaten.
  • Herausfiltern trivial sicherer Fälle.
  • Vollständige Datenflussanalyse für den Rest.
  • Priorisierung basierend auf bestätigten Pfaden.
  • Herabstufung des Rangs unbestätigter Fälle.

Dies balanciert Geschwindigkeit und Genauigkeit.

Die Rolle von sa-tests-db in der Entwicklung

Der sa-tests-db-Satz dient als externer Benchmark für Fehlertypen entsprechend GOST R 71207-2024. Er erkennt Regressionen während Änderungen:

  • Metriken: falsch positive, falsch negative Ergebnisse nach Sprache.
  • Keine aggregierten Durchschnitte, sondern Aufschlüsselung nach Kategorien.

Ein Lauf vom 23. März 2026 bestätigte die Qualifikation für C, C#, Go, Java, JS, Python.

Wichtige Erkenntnisse

  • Muster sind nur für schnelles Filtern geeignet; Datenfluss ist für Genauigkeit essenziell.
  • Prozedurübergreifende + Kontrollflussanalyse findet 80 % der echten Pfade.
  • Feldsensitivität reduziert Rauschen um 30–50 % in Strukturen.
  • sa-tests-db ist ein Regressionstest, keine einmalige Demonstration.
  • GOST erfordert Metriken nach Fehlertyp, nicht allgemeine Zahlen.

— Editorial Team

Advertisement 728x90

Weiterlesen