
Scanner offline di segreti che combina regole regex, analisi semantica basata su lexer e corrispondenza di valori hash per rilevare credenziali esposte nel codice con output SARIF.
Assolutamente no!
Nella nostra era dell'hype per gli LLM, DeepSecrets funziona ancora interamente sulla tua macchina — offrendoti ottimi risultati offline, in modo sicuro e gratuitamente.
La maggior parte degli scanner esistenti non "comprende" davvero il codice. Si limitano ad analizzare i testi e hanno una copertura scarsa.
DeepSecrets colma il divario tra gli scanner regex classici e gli strumenti SAST commerciali su larga scala. Estende la classica strategia di scansione basata su regex facendo ampio affidamento sull'analisi semantica del codice, sul rilevamento di variabili pericolose e sull'analisi dell'entropia consapevole del contesto. Ciò significa che i candidati segreti sono sempre semanticamente corretti. Otteniamo una vera comprensione del codice in oltre 500 linguaggi e formati utilizzando tecniche di lexing e parsing.
DeepSecrets introduce anche un nuovo modo per trovare credenziali con conoscenza zero: l'HashedSecret Engine. Basta fornire i valori hash dei tuoi segreti di produzione noti e lo strumento li troverà esposti in testo in chiaro all'interno del tuo codice.
DeepSecrets v2.0 è stato valutato (giugno 2026) rispetto al benchmark SecretBench, superando gli scanner tradizionali basati su testo piatto:
(Puoi leggere la storia completa dietro le quinte e l'analisi dei benchmark nel mio articolo su HackerNoon qui)
Da Github tramite pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Da PyPi
$ pip install deepsecrets
DeepSecrets richiede Python 3.11 o versione successiva.
Il modo più semplice per eseguire una scansione:
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Questo eseguirà una scansione su /path/to/your/code utilizzando la configurazione predefinita:
Un report in formato SARIF (compatibile con DefectDojo e GitHub Security) verrà salvato in report.json.
Il comando --help è sempre pronto a guidarti, ma ecco i flag principali che puoi usare per adattare la scansione al tuo ambiente:
--regex-rules /path/to/rules.json: Fornisci il tuo ruleset regex personalizzato.--hashed-values /path/to/hashes.json: Fornisci un elenco di segreti di produzione noti pre-hashati per cercarli in modo sicuro.--excluded-paths /path/to/exclusions.json: Sovrascrivi o estendi i percorsi predefiniti ignorati durante la scansione.--deep-max-size BYTES: I file più grandi di questa dimensione (predefinito 250.000 byte) ricevono l'analisi rapida: le regole regex e la ricerca di variabili, senza il lexer del linguaggio. I file grandi sono per lo più generati o minificati, il lexer costa la maggior parte del tempo di scansione su di essi e raramente trova di più. 0 assegna a ogni file l'analisi completa.--skip-bundles: Salta completamente i JavaScript minificati, le source map e i bundle (*.min.js, *.map, *.bundle.js), in aggiunta alle altre esclusioni di percorso.--confidence-level {all,low,medium,high,very-high}: Il livello di confidenza minimo da riportare (predefinito low, ogni risultato). medium, high e very-high mantengono confidenza 3, 6 e 9 o superiore; all riporta anche le corrispondenze regex che lo scanner ha giudicato non essere segreti (placeholder, esempi), con un id di regola -INFO.--report-diagnostics: Aggiungi ogni file trovato sotto il target al report SARIF, con il suo stato, tempo di scansione, motivo di esclusione e profondità di analisi.--regex-candidate-scoring-rules /path/to/rules.json: Fornisci le tue regole per giudicare le corrispondenze regex prima che vengano riportate. Non assegnare alcun valore al flag per riportare le corrispondenze regex senza giudizio.--multiprocessing-context {forkserver,spawn,fork}: Come vengono avviati i processi worker. Il valore predefinito è forkserver dove la piattaforma lo supporta (Linux, macOS): i worker condividono lo scanner già caricato in un processo server. Windows usa spawn. Tutti e tre producono gli stessi risultati.--disable-masking: Mantieni i potenziali segreti non mascherati nel report di output (vedi avvertenza sotto).--ci / --no-ci: Attiva o disattiva la modalità CI. La modalità CI stampa una riga di avanzamento semplice ogni 30 secondi invece della visualizzazione dell'avanzamento in tempo reale. Si attiva automaticamente all'interno dei servizi CI (GitHub Actions, GitLab CI, Jenkins e altri) e ogni volta che l'output non è un terminale.es. .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
A partire dalla v1.3.0, i potenziali segreti vengono mascherati automaticamente all'interno dei report per proteggere gli artefatti della tua pipeline. Disattiva questa funzione tramite il flag --disable-masking se necessario.
Il mascheramento non compromette la logica di deduplicazione delle piattaforme downstream (come Github), poiché la sezione partialFingerprints nel report viene popolata correttamente in base ai dati grezzi.
[!Caution]
Se integri DeepSecrets nella tua pipeline CI con il mascheramento disattivato, è probabile che i tuoi segreti vengano nuovamente esposti nei log e negli artefatti della CI.
Ogni rilevamento riceve un punteggio di affidabilità. Tuttavia, piattaforme di sicurezza diverse interpretano le metriche SARIF in modo differente. Per garantire la compatibilità con le moderne dashboard ASPM, DeepSecrets adotta le seguenti strategie:
Sottoregole virtuali (rules[]): genera dinamicamente regole per livello di affidabilità, da S105-LOW passando per -MEDIUM e -HIGH fino a S105-VERY-HIGH (e -INFO per le corrispondenze rifiutate che --confidence-level all riporta). Questo forza GitHub Security e DefectDojo a mappare correttamente la varianza di precisione semantica senza compromettere i parser nativi.
Livello deterministico dei risultati: lo strumento imposta sempre esplicitamente level: error nel modello results[]. Questo funge da fallback universale per le pipeline CI/CD e per i parser SAST più datati, garantendo che i segreti esposti interrompano in modo affidabile le build o blocchino le Pull Request indipendentemente dalle singole interpretazioni delle regole.
Messaggi contestuali: inserisce nativamente il punteggio numerico grezzo di affidabilità in result.message.text, così che gli analisti di sicurezza lo vedano immediatamente nelle loro dashboard.