
Verarbeitet SARIF-Ausgaben von statischen Analysetools, um hartkodierte Geheimnisse im Quellcode zu erkennen und zu schwärzen, und erstellt so eine bereinigte Kopie ohne die ursprünglichen Geheimnisse.
SecretScrub entfernt alle unsauberen hartkodierten Geheimnisse. Dieses Skript verarbeitet Dateien im SARIF-Dateiformat, das von verschiedenen statischen Analysetools erzeugt wird. Das Tool scannt ein Verzeichnis im Dateisystem und schwärzt alle in den SARIF-Dateien erkannten Geheimnisse in einer neuen Kopie des Verzeichnisses. Da sich Geheimnisse häufig in der Git-Historie befinden, wird das .git-Verzeichnis aus der resultierenden Kopie ausgelassen.
Obwohl SARIF ein Industriestandardformat ist, gibt es Abweichungen in den SARIF-Ausgaben, die von verschiedenen Tools erzeugt werden. Aus diesem Grund werden derzeit nur die folgenden Tools unterstützt.
| Tool | Version | Kommentare |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | Funktioniert nur mit Berichten, die mit der Option --no-git erstellt wurden, um ein Dateisystem zu scannen, nicht jedoch das zugrunde liegende Git-Repository, falls vorhanden. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | Die Ccs-Ausgabe muss mit dem begleitenden Skript ccs2sarif.py in das SARIF-Format vorverarbeitet werden. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | Die CQ-Ausgabe muss mit dem begleitenden Skript cq2sarif.py in das SARIF-Format vorverarbeitet werden. Da die CQ-Ausgabe sehr verrauscht sein kann, wird empfohlen, die Schwärzung separat durchzuführen oder die Dateien so zu benennen, dass die CQ-Datei im Verzeichnis zuletzt erscheint. |
| BinDetect | Ein integriertes Tool, das Binärdateien erkennt, die von anderen, textorientierten Tools normalerweise übersehen werden. |
Aufgrund der Abweichungen in der SARIF-Ausgabe ist es möglich, dass von zukünftigen Versionen des Tools erzeugte Ausgaben nicht korrekt funktionieren.
Die Abhängigkeiten sind in der Datei requirements.txt aufgelistet. Kurz gesagt werden die folgenden Pakete benötigt:
| Paket |
|---|
$ python secretscrub.py --input <path> --srcdir <path> --outdir <path> [--report <path>]
$ python secretscrub.py --analyse-with <analysis-tool-list> --srcdir <path> --outdir <path> [--report <path>]
HINWEIS: Damit die Tools funktionieren, müssen sie auf dem aktuellen System vorhanden und installiert sein:
Das aus diesem Quellbaum erstellte Docker-Image enthält das SecretScrub-Tool sowie Kopien der Tools Trivy, GitLeaks, ccs und cq.
Wenn es mit einem Tag secretscrub:latest erstellt wurde, startet der folgende Befehl einen vollständigen Analyse- und Schwärzungsvorgang mit einem zugehörigen Bericht.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
Beachten Sie, dass dabei zwei Volumes im Container gemappt werden. Das erste -- <source-path> -- sollte den ursprünglichen, nicht geschwärzten Quellcode enthalten. Das zweite -- <output-path> -- empfängt die geschwärzte Ausgabe und den Bericht.
Die folgenden Beispiele gehen davon aus, dass der Quellcode in einem Unterverzeichnis namens src gespeichert ist und SecretScrub in einem Unterverzeichnis namens tools installiert ist.
$ python tools/secretscrub.py --analse-with trivy,gitleaks,bindetect --srcdir src --outdir src-redacted
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
| Version |
|---|
| asn1 | 2.7.0 |
| filetype | 1.2.0 |
| py7zr | 0.20.5 |
| pyzipper | 0.3.6 |
| regex | 2023.5.5 |
| sarif-tools | 1.0.0 |
| Parameter | Beschreibung |
|---|
| input | Der Speicherort der zu verarbeitenden SARIF-Ergebnisse. Dieser kann mehrere SARIF-Dateien enthalten, die mit verschiedenen unterstützten Tools erzeugt wurden. |
| srcdir | Der Speicherort des ursprünglichen Quellcodes, der gescannt wurde, um die zu verarbeitenden CQ-Ergebnisse zu erzeugen. |
| outdir | Der Speicherort, an dem die geschwärzten Quelldateien abgelegt werden sollen. |
| placeholder | Der Platzhalter, der anstelle aller erkannten Geheimnisse eingefügt werden soll. Dieser akzeptiert die folgenden Ersetzungen: - ${tool} Der Name des Tools, das zum Erkennen des Geheimnisses verwendet wurde- ${rule} Der Name der Regel, die zum Erkennen des Geheimnisses verwendet wurde- ${regex} Der reguläre Ausdruck, der der zum Erkennen des Geheimnisses verwendeten Regel zugeordnet ist- ${yaml} Eine YAML-Flow-Stil-Struktur, die (sofern bekannt) nur die Namen des Tools und der Regel enthält, die zum Erkennen des Geheimnisses verwendet wurden- ${yaml_regex} Eine YAML-Flow-Stil-Struktur, die (sofern bekannt) die Namen des Tools und der Regel sowie den regulären Ausdruck enthält, der zum Erkennen des Geheimnisses verwendet wurde |
| process-archives | Ein Schalter zum Anzeigen |
| report | Der Speicherort und der Name eines CSV-Berichts, der erstellt werden soll und Details zu geschwärzten Geheimnissen enthält. |
| report-encryption | Falls eine Berichtsdatei erzeugt wird, die zu verwendende Verschlüsselungsmethode. Mögliche Werte: none, zip-aes256. Standard: zip-aes256 |
| log-level | Die Protokollierungsebene für die Ausgabe des Tools. Mögliche Werte: critical, fatal, error, warning, info, debug. Standard: info |
| Parameter | Beschreibung |
|---|
| analyse-with | Eine durch Kommas getrennte Liste der aufzurufenden Tools. Diese kann eines der folgenden enthalten: trivy, gitleaks, ccs. cq, bindetect |
| srcdir | Der Speicherort des ursprünglichen Quellcodes, der gescannt wurde, um die zu verarbeitenden CQ-Ergebnisse zu erzeugen. |
| outdir | Der Speicherort, an dem die geschwärzten Quelldateien abgelegt werden sollen. |
| placeholder | Der Platzhalter, der anstelle aller erkannten Geheimnisse eingefügt werden soll. Dieser akzeptiert die folgenden Ersetzungen: - ${tool} Der Name des Tools, das zum Erkennen des Geheimnisses verwendet wurde- ${rule} Der Name der Regel, die zum Erkennen des Geheimnisses verwendet wurde- ${regex} Der reguläre Ausdruck, der der zum Erkennen des Geheimnisses verwendeten Regel zugeordnet ist- ${yaml} Eine YAML-Flow-Stil-Struktur, die (sofern bekannt) nur die Namen des Tools und der Regel enthält, die zum Erkennen des Geheimnisses verwendet wurden- ${yaml_regex} Eine YAML-Flow-Stil-Struktur, die (sofern bekannt) die Namen des Tools und der Regel sowie den regulären Ausdruck enthält, der zum Erkennen des Geheimnisses verwendet wurde |
| report | Der Speicherort und der Name eines CSV-Berichts, der erstellt werden soll und Details zu geschwärzten Geheimnissen enthält. |
| report-encryption | Falls eine Berichtsdatei erzeugt wird, die zu verwendende Verschlüsselungsmethode. Mögliche Werte: none, zip-aes256. Standard: zip-aes256 |
| log-level | Die Protokollierungsebene für die Ausgabe des Tools. Mögliche Werte: critical, fatal, error, warning, info, debug. Standard: info |
| Tool | Kommentare |
|---|
| Trivy | Der Befehl trivy muss installiert und im Pfad verfügbar sein. |
| GitLeaks | Der Befehl gitleaks muss installiert und im Pfad verfügbar sein. |
| ccs | Die Datei ccs.py muss sich in einem Unterverzeichnis namens ccs innerhalb des Verzeichnisses befinden, das die Datei secretscrub.py enthält. |
| cq | Die Dateien cq.py und fn.py müssen sich in einem Unterverzeichnis namens cq innerhalb des Verzeichnisses befinden, das die Datei secretscrub.py enthält. |
| bindetect | Es ist derzeit in secretscrub enthalten; eine weitere Installation ist nicht erforderlich. |