
Scanner de secrets hors ligne combinant des règles regex, une analyse sémantique basée sur un lexer et une correspondance de valeurs hachées pour détecter les identifiants exposés dans le code avec une sortie SARIF.
Absolument pas !
À l'ère de l'engouement pour les LLM, DeepSecrets s'exécute toujours entièrement sur votre machine — vous offrant d'excellents résultats hors ligne, en toute sécurité et gratuitement.
La plupart des scanners existants ne « comprennent » pas réellement le code. Ils se contentent d'analyser des textes et ont une mauvaise couverture.
DeepSecrets comble le fossé entre les scanners regex classiques et les outils SAST commerciaux à grande échelle. Il étend la stratégie de scan classique basée sur les regex en s'appuyant fortement sur l'analyse sémantique du code, la détection de variables dangereuses et l'analyse d'entropie contextuelle. Cela signifie que les candidats secrets sont toujours sémantiquement corrects. Nous parvenons à une véritable compréhension du code sur plus de 500 langages et formats grâce à des techniques de lexing et de parsing.
DeepSecrets introduit également une nouvelle façon de trouver des identifiants sans aucune connaissance préalable : le HashedSecret Engine. Fournissez simplement les valeurs hachées de vos secrets de production connus, et l'outil les trouvera exposés en clair dans votre code.
DeepSecrets v2.0 a été évalué (juin 2026) sur le benchmark SecretBench, surpassant les scanners traditionnels à texte plat :
(Vous pouvez lire l'histoire complète sous le capot et le détail des benchmarks dans mon article HackerNoon ici)
Depuis Github via pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Depuis PyPi
$ pip install deepsecrets
DeepSecrets nécessite Python 3.11 ou une version ultérieure.
La façon la plus simple de lancer une analyse :
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Cela exécutera une analyse sur /path/to/your/code en utilisant la configuration par défaut :
Un rapport au format SARIF (compatible avec DefectDojo et GitHub Security) sera enregistré dans report.json.
La commande --help est toujours prête à vous guider, mais voici les principaux indicateurs que vous pouvez utiliser pour adapter l'analyse à votre environnement :
--regex-rules /path/to/rules.json : Fournissez votre propre jeu de règles regex personnalisé.--hashed-values /path/to/hashes.json : Fournissez une liste de secrets de production connus pré-hachés pour les rechercher de manière sécurisée.--excluded-paths /path/to/exclusions.json : Remplacez ou étendez les chemins par défaut ignorés lors de l'analyse.--deep-max-size BYTES : Les fichiers plus volumineux que cette taille (250 000 octets par défaut) bénéficient de l'analyse rapide : les règles regex et la recherche de variables, sans le lexer de langage. Les gros fichiers sont principalement générés ou minifiés, le lexer coûte la majeure partie du temps d'analyse sur ceux-ci et y trouve rarement davantage. 0 applique l'analyse complète à chaque fichier.--skip-bundles : Ignore entièrement le JavaScript minifié, les source maps et les bundles (*.min.js, *.map, *.bundle.js), en plus des autres exclusions de chemins.--confidence-level {all,low,medium,high,very-high} : Le niveau de confiance le plus bas à signaler (par défaut low, toutes les détections). medium, high et very-high conservent les niveaux de confiance 3, 6 et 9 ou plus ; all signale également les correspondances regex que le scanner a jugées ne pas être des secrets (espaces réservés, exemples), avec un identifiant de règle -INFO.--report-diagnostics : Ajoute chaque fichier trouvé sous la cible au rapport SARIF, avec son statut, son temps d'analyse, la raison de son exclusion et la profondeur d'analyse.--regex-candidate-scoring-rules /path/to/rules.json : Fournissez vos propres règles pour juger les correspondances regex avant qu'elles ne soient signalées. Ne donnez aucune valeur à l'indicateur pour signaler les correspondances regex sans jugement.--multiprocessing-context {forkserver,spawn,fork} : Comment les processus de travail démarrent. La valeur par défaut est forkserver lorsque la plateforme le prend en charge (Linux, macOS) : les processus de travail partagent le scanner déjà chargé dans un processus serveur. Windows utilise spawn. Les trois donnent les mêmes résultats.--disable-masking : Conserve les secrets potentiels non masqués dans le rapport de sortie (voir la mise en garde ci-dessous).--ci / --no-ci : Active ou désactive le mode CI. Le mode CI affiche une ligne de progression simple toutes les 30 secondes au lieu de l'affichage de progression en direct. Il s'active automatiquement dans les services CI (GitHub Actions, GitLab CI, Jenkins et autres) et chaque fois que la sortie n'est pas un terminal.ex. .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
Depuis la v1.3.0, les secrets potentiels sont automatiquement masqués dans les rapports afin de protéger les artefacts de votre pipeline. Désactivez cette option via le flag --disable-masking si nécessaire.
Le masquage ne casse pas la logique de déduplication des plateformes en aval (comme Github), car la section partialFingerprints du rapport est correctement renseignée à partir des données brutes.
[!Caution]
Si vous intégrez DeepSecrets dans votre pipeline CI avec le masquage désactivé, vous risquez de re-divulguer vos secrets dans les logs et artefacts de votre CI.
Chaque résultat obtient un score de confiance. Cependant, différentes plateformes de sécurité interprètent les métriques SARIF différemment. Pour garantir la compatibilité avec les tableaux de bord ASPM modernes, DeepSecrets effectue les opérations suivantes :
Sous-règles virtuelles (rules[]) : génère dynamiquement des règles par niveau de confiance, de S105-LOW à -MEDIUM et -HIGH jusqu'à S105-VERY-HIGH (et -INFO pour les correspondances rejetées rapportées par --confidence-level all). Cela force GitHub Security et DefectDojo à mapper correctement la variance de précision sémantique sans casser les parseurs natifs.
Niveau de résultat déterministe : l'outil définit toujours explicitement level: error dans le modèle results[]. Cela sert de repli universel pour les pipelines CI/CD et les anciens parseurs SAST, garantissant que les secrets exposés font échouer les builds ou bloquent les Pull Requests de manière fiable, indépendamment des interprétations individuelles des règles.