
Procesa la salida SARIF de herramientas de análisis estático para detectar y eliminar secretos embebidos en el código fuente, creando una copia limpia sin los secretos originales.
SecretScrub eliminará todos sus secretos sucios hardcodeados. Este script procesa archivos en formato de archivo SARIF que es generado por varias herramientas de análisis estático. La herramienta escanea un directorio dentro del sistema de archivos, redacta todas las instancias de secretos detectados dentro de los archivos SARIF en una nueva copia del directorio. Debido a que los secretos a menudo residen en los historiales de Git, el directorio .git se omite de la copia resultante.
Aunque SARIF es un formato estándar de la industria, existen variaciones en la salida SARIF producida por varias herramientas. Como resultado, las únicas herramientas actualmente soportadas son las siguientes.
| Tool | Version | Comments |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | Solo funciona con informes generados usando la opción --no-git para escanear un sistema de archivos pero no el repositorio Git subyacente si existe. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | La salida de Ccs debe procesarse previamente a formato SARIF utilizando el script adjunto ccs2sarif.py. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | La salida de CQ debe procesarse previamente a formato SARIF utilizando el script adjunto cq2sarif.py. Debido a que la salida de CQ puede ser muy ruidosa, se recomienda realizar la operación de redacción por separado o nombrar los archivos de modo que el archivo CQ aparezca al final del directorio. |
| BinDetect | Una herramienta integrada que detecta archivos binarios que normalmente pasan desapercibidos para otras herramientas orientadas a texto. |
Debido a las variaciones en la salida SARIF, es posible que la salida generada por versiones futuras de la herramienta no funcione correctamente.
Las dependencias se enumeran en el archivo requirements.txt. En resumen, se requieren los siguientes paquetes:
| 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: Para que funcionen, las herramientas deben estar presentes e instaladas en el sistema actual:
La imagen Docker construida desde este árbol fuente incluye la herramienta SecretScrub y copias de las herramientas Trivy, GitLeaks, ccs y cq.
Si se ha construido con una etiqueta secretscrub:latest, el siguiente comando iniciará una operación completa de análisis y redacción con un informe adjunto.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
Tenga en cuenta que esto implica mapear dos volúmenes dentro del contenedor. El primero -- <source-path> -- debe contener el código fuente original y sin redactar. El segundo -- <output-path> -- recibirá la salida redactada y el informe.
Los siguientes ejemplos asumen que el fuente está almacenado dentro de un subdirectorio llamado src, y que SecretScrub está instalado dentro de un subdirectorio llamado 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 |
| Parámetro | Definición |
|---|
| input | La ubicación de los resultados SARIF que se van a procesar. Puede contener múltiples archivos SARIF que pueden haber sido generados usando diferentes herramientas compatibles. |
| srcdir | La ubicación del código fuente original que fue escaneado para producir los resultados CQ que se van a procesar. |
| outdir | La ubicación donde se almacenarán los archivos fuente redactados. |
| placeholder | El marcador de posición a insertar en lugar de todos los secretos detectados. Puede aceptar las siguientes sustituciones: - ${tool} El nombre de la herramienta utilizada para detectar el secreto- ${rule} El nombre de la regla utilizada para detectar el secreto- ${regex} La expresión regular asociada con la regla utilizada para detectar el secreto- ${yaml} Una estructura de estilo de flujo YAML que contiene (si se conoce) solo los nombres de la herramienta y la regla utilizados para detectar el secreto- ${yaml_regex} Una estructura de estilo de flujo YAML que contiene (si se conoce) los nombres de la herramienta y la regla y la expresión regular utilizados para detectar el secreto |
| process-archives | Un interruptor para indicar |
| report | La ubicación y el nombre de un informe CSV que se producirá conteniendo detalles de los secretos eliminados. |
| report-encryption | Si se genera un archivo de informe, el método de cifrado a utilizar. Valores posibles: none, zip-aes256. Predeterminado: zip-aes256 |
| log-level | El nivel de registro utilizado para la salida de la herramienta. Valores posibles: critical, fatal, error, warning, info, debug. Predeterminado: info |
| Parámetro | Definición |
|---|
| analyse-with | Una lista separada por comas de herramientas a invocar. Puede incluir cualquiera de las siguientes: trivy, gitleaks, ccs. cq, bindetect |
| srcdir | La ubicación del código fuente original que fue escaneado para producir los resultados CQ que se van a procesar. |
| outdir | La ubicación donde se almacenarán los archivos fuente redactados. |
| placeholder | El marcador de posición a insertar en lugar de todos los secretos detectados. Puede aceptar las siguientes sustituciones: - ${tool} El nombre de la herramienta utilizada para detectar el secreto- ${rule} El nombre de la regla utilizada para detectar el secreto- ${regex} La expresión regular asociada con la regla utilizada para detectar el secreto- ${yaml} Una estructura de estilo de flujo YAML que contiene (si se conoce) solo los nombres de la herramienta y la regla utilizados para detectar el secreto- ${yaml_regex} Una estructura de estilo de flujo YAML que contiene (si se conoce) los nombres de la herramienta y la regla y la expresión regular utilizados para detectar el secreto |
| report | La ubicación y el nombre de un informe CSV que se producirá conteniendo detalles de los secretos eliminados. |
| report-encryption | Si se genera un archivo de informe, el método de cifrado a utilizar. Valores posibles: none, zip-aes256. Predeterminado: zip-aes256 |
| log-level | El nivel de registro utilizado para la salida de la herramienta. Valores posibles: critical, fatal, error, warning, info, debug. Predeterminado: info |
| Tool | Comments |
|---|
| Trivy | El comando trivy debe estar instalado y accesible en la ruta. |
| GitLeaks | El comando gitleaks debe estar instalado y accesible en la ruta. |
| ccs | El archivo ccs.py debe estar ubicado dentro de un subdirectorio llamado ccs dentro del directorio que contiene el archivo secretscrub.py. |
| cq | Los archivos cq.py y fn.py deben estar ubicados dentro de un subdirectorio llamado cq dentro del directorio que contiene el archivo secretscrub.py. |
| bindetect | Actualmente está incluido con secretscrub y no se necesita ninguna instalación adicional. |