
Elabora l'output SARIF proveniente da strumenti di analisi statica per rilevare e oscurare i segreti hard-coded nel codice sorgente, creando una copia pulita senza i segreti originali.
SecretScrub eliminerà tutti i tuoi sporchi segreti hardcoded. Questo script elabora i file nel formato SARIF generato da vari strumenti di analisi statica. Lo strumento esegue la scansione di una directory nel file system e oscura tutte le occorrenze di segreti rilevate nei file SARIF in una nuova copia della directory. Poiché i segreti risiedono spesso nella cronologia Git, la directory .git viene omessa dalla copia risultante.
Sebbene SARIF sia un formato standard di settore, ci sono variazioni nell'output SARIF prodotto dai vari strumenti. Di conseguenza, gli unici strumenti attualmente supportati sono i seguenti.
| Tool | Version | Comments |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | Funziona solo con report generati utilizzando l'opzione --no-git per eseguire la scansione di un file system ma non del repository Git sottostante, se presente. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | L'output di Ccs deve essere pre-elaborato nel formato SARIF utilizzando lo script ccs2sarif.py allegato. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | L'output di CQ deve essere pre-elaborato nel formato SARIF utilizzando lo script cq2sarif.py allegato. Poiché l'output di CQ può essere molto rumoroso, si consiglia di eseguire l'operazione di oscuramento separatamente o di nominare i file in modo che il file CQ appaia per ultimo nella directory. |
| BinDetect | Uno strumento integrato che rileva file binari che tipicamente sfuggono ad altri strumenti orientati al testo. |
A causa delle variazioni nell'output SARIF, è possibile che l'output generato dalle versioni future dello strumento non funzioni correttamente.
Le dipendenze sono elencate nel file requirements.txt. In breve, sono richiesti i seguenti pacchetti:
| Package |
|---|
$ 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>]
NOTA: Affinché il funzionamento sia possibile, gli strumenti devono essere presenti e installati sul sistema corrente:
L'immagine Docker creata da questo albero sorgente include lo strumento SecretScrub e copie degli strumenti Trivy, GitLeaks, ccs e cq.
Se è stata creata con un tag secretscrub:latest, il seguente comando avvierà un'operazione completa di analisi e oscuramento con un report allegato.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
Si noti che ciò comporta il mapping di due volumi all'interno del container. Il primo -- <source-path> -- deve contenere il codice sorgente originale non oscurato. Il secondo -- <output-path> -- riceverà l'output oscurato e il report.
Gli esempi seguenti presuppongono che il codice sorgente sia archiviato in una sottodirectory denominata src e che SecretScrub sia installato in una sottodirectory denominata tools.
$ 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 | Definition |
|---|
| input | La posizione dei risultati SARIF da elaborare. Può contenere più file SARIF generati utilizzando diversi strumenti supportati. |
| srcdir | La posizione del codice sorgente originale che è stato scansionato per produrre i risultati CQ da elaborare. |
| outdir | La posizione in cui devono essere salvati i file sorgente oscurati. |
| placeholder | Il segnaposto da inserire al posto di tutti i segreti rilevati. Può accettare le seguenti sostituzioni: - ${tool} Il nome dello strumento utilizzato per rilevare il segreto- ${rule} Il nome della regola utilizzata per rilevare il segreto- ${regex} L'espressione regolare associata alla regola utilizzata per rilevare il segreto- ${yaml} Una struttura in stile flusso YAML contenente (se noti) solo i nomi dello strumento e della regola utilizzati per rilevare il segreto- ${yaml_regex} Una struttura in stile flusso YAML contenente (se noti) i nomi dello strumento e della regola e l'espressione regolare utilizzati per rilevare il segreto |
| process-archives | Un'opzione per indicare |
| report | La posizione e il nome di un report CSV da generare contenente i dettagli dei segreti ripuliti. |
| report-encryption | Se viene generato un file di report, il metodo di crittografia da utilizzare. Valori possibili: none, zip-aes256. Predefinito: zip-aes256 |
| log-level | Il livello di logging utilizzato per l'output dello strumento. Valori possibili: critical, fatal, error, warning, info, debug. Predefinito: info |
| Parameter | Definition |
|---|
| analyse-with | Un elenco separato da virgole di strumenti da richiamare. Può includere uno qualsiasi dei seguenti: trivy, gitleaks, ccs, cq, bindetect |
| srcdir | La posizione del codice sorgente originale che è stato scansionato per produrre i risultati CQ da elaborare. |
| outdir | La posizione in cui devono essere salvati i file sorgente oscurati. |
| placeholder | Il segnaposto da inserire al posto di tutti i segreti rilevati. Può accettare le seguenti sostituzioni: - ${tool} Il nome dello strumento utilizzato per rilevare il segreto- ${rule} Il nome della regola utilizzata per rilevare il segreto- ${regex} L'espressione regolare associata alla regola utilizzata per rilevare il segreto- ${yaml} Una struttura in stile flusso YAML contenente (se noti) solo i nomi dello strumento e della regola utilizzati per rilevare il segreto- ${yaml_regex} Una struttura in stile flusso YAML contenente (se noti) i nomi dello strumento e della regola e l'espressione regolare utilizzati per rilevare il segreto |
| report | La posizione e il nome di un report CSV da generare contenente i dettagli dei segreti ripuliti. |
| report-encryption | Se viene generato un file di report, il metodo di crittografia da utilizzare. Valori possibili: none, zip-aes256. Predefinito: zip-aes256 |
| log-level | Il livello di logging utilizzato per l'output dello strumento. Valori possibili: critical, fatal, error, warning, info, debug. Predefinito: info |
| Tool | Comments |
|---|
| Trivy | Il comando trivy deve essere installato e accessibile nel PATH. |
| GitLeaks | Il comando gitleaks deve essere installato e accessibile nel PATH. |
| ccs | Il file ccs.py deve trovarsi in una sottodirectory denominata ccs all'interno della directory che contiene il file secretscrub.py. |
| cq | I file cq.py e fn.py devono trovarsi in una sottodirectory denominata cq all'interno della directory che contiene il file secretscrub.py. |
| bindetect | Attualmente è incluso in secretscrub e non è necessaria alcuna ulteriore installazione. |