
Offline-Secrets-Scanner, der Regex-Regeln, lexerbasierte semantische Analyse und Hashwert-Abgleich kombiniert, um offengelegte Zugangsdaten im Code zu erkennen, mit SARIF-Ausgabe.
Absolut nicht!
In unserer Ära des LLM-Hypes läuft DeepSecrets weiterhin vollständig auf deiner Maschine — und liefert dir großartige Ergebnisse offline, sicher und kostenlos.
Die meisten existierenden Scanner „verstehen" Code nicht wirklich. Stattdessen parsen sie nur Texte und haben eine schlechte Abdeckung.
DeepSecrets schließt die Lücke zwischen klassischen Regex-Scannern und vollwertigen kommerziellen SAST-Tools. Es erweitert die klassische regexbasierte Scanstrategie, indem es stark auf semantische Codeanalyse, Erkennung gefährlicher Variablen und kontextbewusste Entropieanalyse setzt. Das bedeutet, dass Secret-Kandidaten immer semantisch korrekt sind. Wir erreichen echtes Codeverständnis über 500+ Sprachen und Formate hinweg mithilfe von Lexing- und Parsing-Techniken.
DeepSecrets führt außerdem eine neue Methode ein, um Zugangsdaten ohne Vorwissen zu finden: die HashedSecret Engine. Gib einfach die gehashten Werte deiner bekannten Produktions-Secrets an, und das Tool findet sie im Klartext in deinem Code aufgedeckt.
DeepSecrets v2.0 wurde (Juni 2026) gegen den SecretBench-Benchmark evaluiert und übertraf dabei traditionelle Flat-Text-Scanner:
(Die vollständige Hintergrundgeschichte und die Aufschlüsselung der Benchmarks kannst du in meinem HackerNoon-Artikel hier lesen)
Von GitHub via pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Von PyPi
$ pip install deepsecrets
DeepSecrets benötigt Python 3.11 oder höher.
Der einfachste Weg, einen Scan auszuführen:
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Dies führt einen Scan gegen /path/to/your/code mit der Standardkonfiguration aus:
Ein Bericht im SARIF-Format (kompatibel mit DefectDojo und GitHub Security) wird in report.json gespeichert.
Der Befehl --help ist immer bereit, Sie zu führen, aber hier sind die wichtigsten Flags, mit denen Sie den Scan an Ihre Umgebung anpassen können:
--regex-rules /path/to/rules.json: Liefern Sie Ihren eigenen benutzerdefinierten Regex-Regelsatz.--hashed-values /path/to/hashes.json: Stellen Sie eine Liste vorab gehashter bekannter Produktionsgeheimnisse bereit, um sie sicher zu suchen.--excluded-paths /path/to/exclusions.json: Überschreiben oder erweitern Sie die Standardpfade, die beim Scannen ignoriert werden.--deep-max-size BYTES: Dateien, die größer sind als dieser Wert (Standard 250.000 Bytes), erhalten die schnelle Analyse: die Regex-Regeln und die Variablensuche, ohne den Sprach-Lexer. Große Dateien sind meist generiert oder minifiziert, der Lexer kostet bei ihnen die meiste Scanzeit und findet dort selten mehr. 0 gibt jeder Datei die vollständige Analyse.--skip-bundles: Überspringen Sie minifiziertes JavaScript, Source Maps und Bundles (*.min.js, *.map, *.bundle.js) vollständig, zusätzlich zu den anderen Pfadausschlüssen.--confidence-level {all,low,medium,high,very-high}: Die niedrigste zu meldende Konfidenz (Standard low, jeder Fund). medium, high und very-high behalten Konfidenz 3, 6 und 9 oder mehr; all meldet auch die Regex-Treffer, die der Scanner als keine Geheimnisse eingestuft hat (Platzhalter, Beispiele), mit einer -INFO-Regel-ID.--report-diagnostics: Fügen Sie jede unter dem Ziel gefundene Datei dem SARIF-Bericht hinzu, mit ihrem Status, Scanzeit, Überspringgrund und Analysetiefe.--regex-candidate-scoring-rules /path/to/rules.json: Liefern Sie Ihre eigenen Regeln zur Bewertung von Regex-Treffern, bevor sie gemeldet werden. Geben Sie dem Flag keinen Wert, um Regex-Treffer unbewertet zu melden.--multiprocessing-context {forkserver,spawn,fork}: Wie Worker-Prozesse starten. Der Standard ist forkserver, wo die Plattform ihn hat (Linux, macOS): Worker teilen sich den Scanner, der bereits in einem Serverprozess geladen ist. Windows verwendet spawn. Alle drei liefern dieselben Funde.--disable-masking: Behalten Sie potenzielle Geheimnisse unmaskiert im Ausgabebericht (siehe Warnung unten).--ci / --no-ci: CI-Modus ein- oder ausschalten. Der CI-Modus gibt alle 30 Sekunden eine einfache Fortschrittszeile aus statt der Live-Fortschrittsanzeige. Er aktiviert sich selbst innerhalb von CI-Diensten (GitHub Actions, GitLab CI, Jenkins und andere) und immer dann, wenn die Ausgabe kein Terminal ist.z. B. .github/workflows/deepsecrets.yml
name: DeepSecrets Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install DeepSecrets
run: pip install deepsecrets
- name: Run Scan
run: deepsecrets --target-dir . --outformat dojo-sarif --outfile report.sarif
continue-on-error: true
- name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: report.sarif
Ab Version v1.3.0 werden potenzielle Secrets in Berichten automatisch maskiert, um Ihre Pipeline-Artefakte zu schützen. Deaktivieren Sie dies bei Bedarf über das Flag --disable-masking.
Die Maskierung beeinträchtigt nicht die Deduplizierungslogik nachgelagerter Plattformen (wie GitHub), da der Abschnitt partialFingerprints im Bericht korrekt auf Basis der Rohdaten befüllt wird.
[!Caution]
Wenn Sie DeepSecrets mit deaktivierter Maskierung in Ihre CI-Pipeline integrieren, werden Ihre Secrets wahrscheinlich erneut in Ihren CI-Logs und -Artefakten offengelegt.
Jeder Fund erhält einen Konfidenzwert. Allerdings parsen verschiedene Sicherheitsplattformen SARIF-Metriken unterschiedlich. Um die Kompatibilität mit modernen ASPM-Dashboards zu gewährleisten, geht DeepSecrets wie folgt vor:
Virtuelle Unterregeln (rules[]): Generiert dynamisch Regeln nach Konfidenzstufe, von S105-LOW über -MEDIUM und -HIGH bis S105-VERY-HIGH (und -INFO für die abgelehnten Treffer, die mit --confidence-level all gemeldet werden). Dies zwingt GitHub Security und DefectDojo, die Varianz der semantischen Präzision korrekt abzubilden, ohne native Parser zu beeinträchtigen.
Deterministische Ergebnisstufe: Das Tool setzt im results[]-Modell stets explizit level: error. Dies fungiert als universeller Fallback für CI/CD-Pipelines und ältere SAST-Parser und stellt sicher, dass offengelegte Secrets zuverlässig Builds abbrechen oder Pull Requests blockieren, unabhängig von der individuellen Regelinterpretation.
Kontextbezogene Meldungen: Fügt den rohen numerischen Konfidenzwert nativ in result.message.text ein, sodass Sicherheitsanalysten ihn sofort auf ihren Dashboards sehen.
Der integrierte Regelsatz für Regex-Prüfungen befindet sich in /deepsecrets/rules/regexes.json. Sie können dem Format folgen und einen benutzerdefinierten Regelsatz erstellen.