
Ein statisches Analysewerkzeug zur Erkennung von Schwachstellen in C/C++-Quellcode.
Dies ist "flawfinder" von David A. Wheeler.
Flawfinder ist ein einfaches Programm, das C/C++-Quellcode scannt und über potenzielle Sicherheitslücken berichtet. Es kann ein nützliches Werkzeug zur Untersuchung von Software auf Schwachstellen sein und dient auch als einfache Einführung in statische Quellcode-Analyse-Werkzeuge im Allgemeinen. Es ist so konzipiert, dass es einfach zu installieren und zu verwenden ist. Flawfinder unterstützt die Common Weakness Enumeration (CWE) und ist offiziell CWE-kompatibel. Es unterstützt verschiedene Ausgabeformate, darunter SARIF, SonarQube und HTML.
Flawfinder kann zusammen mit KI-basierten Code-Analyse-Tools verwendet werden. Die Ausgabe von Flawfinder kann verwendet werden, um schnell zu identifizieren, welche Codebereiche näherer Aufmerksamkeit bedürfen, die ein KI-System dann genauer untersuchen kann.
Weitere Informationen finden Sie auf der Projekt-Website
Flawfinder ist für die Verwendung auf Unix/Linux/POSIX-Systemen (einschließlich Cygwin, Linux-basierten Systemen, MacOS und verschiedenen BSDs) als Kommandozeilen-Tool konzipiert. Es erfordert Python (wir testen mit Python 3; Python 2.7 sollte funktionieren, ist aber zunehmend ungetestet).
Wenn Sie es nur nutzen möchten, können Sie flawfinder mit Pythons "pip" oder mit dem Paketmanager Ihres Systems installieren (flawfinder hat Pakete für viele Systeme). Es unterstützt auch die einfache Installation nach den üblichen make install-Konventionen für die Installation aus dem Quellcode. Die Datei INSTALL.md enthält detailliertere Installationsanweisungen. Sie MÜSSEN es nicht installieren, um es auszuführen, aber so ist es am einfachsten.
Um flawfinder auszuführen, geben Sie ihm einfach eine Liste von Quelldateien oder Verzeichnissen zur Untersuchung. Um beispielsweise alle Dateien in "src/" und darunter rekursiv zu untersuchen:
flawfinder src/
Um alle Dateien im aktuellen Verzeichnis und darunter rekursiv zu untersuchen:
flawfinder ./
Treffer (Ergebnisse) erhalten eine Risikostufe von 0 (sehr geringes Risiko) bis 5 (hohes Risiko). Standardmäßig werden Ergebnisse mit einer Risikostufe von 1 oder höher angezeigt. Sie können nur die Treffer mit einer Risikostufe von 4 oder höher im aktuellen Verzeichnis und darunter auf diese Weise anzeigen:
flawfinder --minlevel 4 ./
Die Handbuchseite (flawfinder.1 oder flawfinder.pdf) beschreibt, wie man flawfinder verwendet (einschließlich seiner verschiedenen Optionen) und verwandte Informationen (z. B. wie es CWE unterstützt). So generiert die Option --html die Ausgabe im HTML-Format. Die Option --help gibt eine kurze Liste der Optionen aus.
Flawfinder muss in der Lage sein, die Zeichenkodierung Ihres Quellcodes korrekt zu interpretieren. In den allermeisten Fällen ist dies kein Problem, insbesondere wenn der Quellcode korrekt in UTF-8 kodiert ist und Ihr System für UTF-8 konfiguriert ist (die mit Abstand häufigste Situation).
Es ist jedoch möglich, dass flawfinder anhält, wenn ein Zeichenkodierungsproblem vorliegt und Sie Python3 verwenden. Das übliche Symptom sind Fehlermeldungen wie diese:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
Leider bietet Python3 keine brauchbaren eingebauten Funktionen, um damit umzugehen. Daher ist es nicht trivial, dieses Problem zu lösen, ohne auf externe Bibliotheken angewiesen zu sein (was wir vermeiden möchten).
Wenn Sie dieses Problem haben, finden Sie in der flawfinder-Handbuchseite eine Sammlung verschiedener Lösungen. Eine der einfachsten ist, den Quellcode und die Systemkonfiguration einfach auf UTF-8 zu konvertieren. Sie können Quellcode mit Tools wie dem Systemtool iconv oder dem Python-Programm cvt2utf in UTF-8 konvertieren; Sie können cvt2utf mit pip install cvt2utf installieren.
Technisch gesehen verwendet flawfinder lexikalisches Scannen, um Token (wie Funktionsnamen) zu finden, die auf wahrscheinliche Schwachstellen hindeuten, schätzt deren Risikostufe (z. B. anhand des Texts von Funktionsaufrufen) und meldet die Ergebnisse. Flawfinder verwendet oder hat keinen Zugriff auf die meisten Informationen über Kontrollfluss, Datenfluss, Datentypen, Namespaces und Sichtbarkeitsbereiche. Daher wird flawfinder zwangsläufig viele Fehlalarme für Schwachstellen produzieren und viele Schwachstellen nicht melden. Andererseits kann flawfinder Schwachstellen in Programmen finden, die nicht gebaut oder nicht gelinkt werden können. Flawfinder wird auch nicht so sehr von den meisten Makrodefinitionen und anderen Besonderheiten verwirrt, mit denen ausgefeiltere Tools Probleme haben.
Es gibt eine GitHub-Aktion für diejenigen, die GitHub verwenden.
Siehe action.yml
Erstellen Sie eine .yml-Datei unter .github/workflows mit folgendem Inhalt:
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
Sie können den Argumenten viele weitere Ergänzungen hinzufügen. Zum Beispiel führt --error-level=4 dazu, dass ein Fehler zurückgegeben wird, wenn flawfinder eine Schwachstelle der Stufe 4 oder höher findet. Beachten Sie die Versionsnummer nach dem @-Symbol; Sie können eine andere Version auswählen.
Sie finden den Aktionsnamen und die Versionszeichenfolge im Marketplace, indem Sie auf die Schaltfläche "Use latest/xxx version" klicken.
Flawfinder integriert sich in das cxx-Plugin von SonarQube. Fügen Sie die Flawfinder-Regeln in SonarQube unter "Administration > CXX External Analyers > Other Rule Definitions" hinzu, indem Sie Flawfinder einmal mit den folgenden Optionen ausführen.
flawfinder --listrules --sonar [...]
Führen Sie dann in Ihrer CI/CD Flawfinder wie folgt aus, um eine Ausgabe zu generieren, die SonarQube verstehen kann.
flawfinder -CDQ --sonar [...]
Sie möchten die Ausgabe in eine Datei umleiten, die Sie dann über die Option sonar.cxx.other.reportPaths in SonarQube laden können.
Wir freuen uns über Beiträge! Weitere Informationen zum Beitragen finden Sie in der Datei CONTRIBUTING.md.
Flawfinder wird unter der GNU GPL-Lizenz Version 2 oder später (GPL-2.0+) veröffentlicht. Siehe die Datei COPYING für Lizenzinformationen.