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.
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.
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:
- 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
Noch keine Kommentare.