
Traite la sortie SARIF des outils d'analyse statique pour détecter et masquer les secrets codés en dur dans le code source, créant ainsi une copie propre sans les secrets d'origine.
SecretScrub éliminera tous vos sales secrets codés en dur. Ce script traite les fichiers au format SARIF, généré par divers outils d'analyse statique. L'outil analyse un répertoire du système de fichiers, masque toutes les occurrences de secrets détectées dans les fichiers SARIF dans une nouvelle copie du répertoire. Comme les secrets résident souvent dans l'historique Git, le répertoire .git est omis de la copie résultante.
Bien que SARIF soit un format standard de l'industrie, la sortie SARIF produite par différents outils varie. Par conséquent, les seuls outils actuellement pris en charge sont les suivants.
| Outil | Version | Commentaires |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | Ne fonctionne qu'avec les rapports générés à l'aide de l'option --no-git pour analyser un système de fichiers, mais pas le dépôt Git sous-jacent s'il existe. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | La sortie de Ccs doit être prétraitée au format SARIF à l'aide du script ccs2sarif.py fourni. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | La sortie de CQ doit être prétraitée au format SARIF à l'aide du script cq2sarif.py fourni. Comme la sortie de CQ peut être très bruitée, il est recommandé d'effectuer l'opération de masquage séparément ou de nommer les fichiers de sorte que le fichier CQ apparaisse en dernier dans le répertoire. |
| BinDetect | Un outil intégré qui détecte les fichiers binaires généralement manqués par les autres outils axés sur le texte. |
En raison des variations de la sortie SARIF, il est possible que la sortie générée par les futures versions de l'outil ne fonctionne pas correctement.
Les dépendances sont listées dans le fichier requirements.txt. En résumé, les paquets suivants sont requis :
| Paquet |
|---|
$ 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>]
REMARQUE : Pour fonctionner, les outils doivent être présents et installés sur le système actuel :
L'image Docker construite à partir de cette arborescence source inclut l'outil SecretScrub et des copies des outils Trivy, GitLeaks, ccs et cq.
Si elle a été construite avec une balise secretscrub:latest, la commande suivante lancera une opération complète d'analyse et de masquage, avec un rapport associé.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
Notez que cela implique le mappage de deux volumes dans le conteneur. Le premier -- <source-path> -- doit contenir le code source original non masqué. Le second -- <output-path> -- recevra la sortie masquée et le rapport.
Les exemples suivants supposent que le code source est stocké dans un sous-répertoire nommé src, et que SecretScrub est installé dans un sous-répertoire nommé 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 |
| Paramètre | Définition |
|---|
| input | L'emplacement des résultats SARIF à traiter. Cela peut contenir plusieurs fichiers SARIF, qui peuvent être générés à l'aide de différents outils pris en charge. |
| srcdir | L'emplacement du code source d'origine qui a été analysé pour produire les résultats CQ à traiter. |
| outdir | L'emplacement où doivent être stockés les fichiers source masqués. |
| placeholder | L'espace réservé à insérer à la place de tous les secrets détectés. Il peut accepter les substitutions suivantes : - ${tool} Le nom de l'outil utilisé pour détecter le secret- ${rule} Le nom de la règle utilisée pour détecter le secret- ${regex} L'expression régulière associée à la règle utilisée pour détecter le secret- ${yaml} Une structure de style flux YAML contenant (si elle est connue) uniquement les noms de l'outil et de la règle utilisés pour détecter le secret- ${yaml_regex} Une structure de style flux YAML contenant (si elle est connue) les noms de l'outil et de la règle ainsi que l'expression régulière utilisés pour détecter le secret |
| process-archives | Un commutateur pour indiquer |
| report | L'emplacement et le nom d'un rapport CSV à produire contenant les détails des secrets masqués. |
| report-encryption | Si un fichier de rapport est généré, la méthode de chiffrement à utiliser. Valeurs possibles : none, zip-aes256. Défaut : zip-aes256 |
| log-level | Le niveau de journalisation utilisé pour la sortie de l'outil. Valeurs possibles : critical, fatal, error, warning, info, debug. Défaut : info |
| Paramètre | Définition |
|---|
| analyse-with | Une liste d'outils à appeler, séparés par des virgules. Elle peut inclure l'un des suivants : trivy, gitleaks, ccs. cq, bindetect |
| srcdir | L'emplacement du code source d'origine qui a été analysé pour produire les résultats CQ à traiter. |
| outdir | L'emplacement où doivent être stockés les fichiers source masqués. |
| placeholder | L'espace réservé à insérer à la place de tous les secrets détectés. Il peut accepter les substitutions suivantes : - ${tool} Le nom de l'outil utilisé pour détecter le secret- ${rule} Le nom de la règle utilisée pour détecter le secret- ${regex} L'expression régulière associée à la règle utilisée pour détecter le secret- ${yaml} Une structure de style flux YAML contenant (si elle est connue) uniquement les noms de l'outil et de la règle utilisés pour détecter le secret- ${yaml_regex} Une structure de style flux YAML contenant (si elle est connue) les noms de l'outil et de la règle ainsi que l'expression régulière utilisés pour détecter le secret |
| report | L'emplacement et le nom d'un rapport CSV à produire contenant les détails des secrets masqués. |
| report-encryption | Si un fichier de rapport est généré, la méthode de chiffrement à utiliser. Valeurs possibles : none, zip-aes256. Défaut : zip-aes256 |
| log-level | Le niveau de journalisation utilisé pour la sortie de l'outil. Valeurs possibles : critical, fatal, error, warning, info, debug. Défaut : info |
| Outil | Commentaires |
|---|
| Trivy | La commande trivy doit être installée et accessible dans le PATH. |
| GitLeaks | La commande gitleaks doit être installée et accessible dans le PATH. |
| ccs | Le fichier ccs.py doit se trouver dans un sous-répertoire nommé ccs dans le répertoire contenant le fichier secretscrub.py. |
| cq | Les fichiers cq.py et fn.py doivent se trouver dans un sous-répertoire nommé cq dans le répertoire contenant le fichier secretscrub.py. |
| bindetect | Cet outil est actuellement inclus avec secretscrub et aucune installation supplémentaire n'est nécessaire. |