SecretScrub 将清除你所有肮脏的硬编码秘密。该脚本处理采用 SARIF 文件格式的文件,SARIF 由各种静态分析工具生成。该工具扫描文件系统中的目录,将所有在 SARIF 文件中检测到的秘密实例在目录的新副本中进行脱敏。由于秘密通常存在于 Git 历史记录中,因此生成副本时会省略 .git 目录。
尽管 SARIF 是行业标准格式,但各种工具生成的 SARIF 输出仍存在差异。因此,目前仅支持以下工具。
| Tool | Version | Comments |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | 仅适用于使用 --no-git 选项生成的报告,该选项用于扫描文件系统,但不扫描底层 Git 仓库(如果存在)。 |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | ccs 输出必须使用随附的 ccs2sarif.py 脚本预处理为 SARIF 格式。 |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | CQ 输出必须使用随附的 cq2sarif.py 脚本预处理为 SARIF 格式。由于 CQ 输出可能噪声很大,建议单独执行脱敏操作,或者对文件命名,使 CQ 文件在目录中最后出现。 |
| BinDetect | 一种内置工具,用于检测通常被其他面向文本的工具遗漏的二进制文件。 |
由于 SARIF 输出的差异,未来版本工具生成的输出可能无法正常工作。
依赖项列在 requirements.txt 文件中。简而言之,需要以下软件包:
| 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>]
注意:为了正常工作,当前系统上必须存在并安装这些工具:
从该源码树构建的 Docker 镜像包含 SecretScrub 工具以及 Trivy、GitLeaks、ccs 和 cq 工具的副本。
如果使用 secretscrub:latest 标签构建,以下命令将启动一次完整的分析和脱敏操作,并生成相应的报告。
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
请注意,这需要在容器内映射两个卷。第一个 -- <source-path> -- 应包含原始的、未脱敏的源代码。第二个 -- <output-path> -- 将接收脱敏后的输出和报告。
以下示例假设源代码存储在名为 src 的子目录中,且 SecretScrub 安装在名为 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 |
| 参数 | 定义 |
|---|
| input | 待处理的 SARIF 结果的位置。它可以包含多个 SARIF 文件,这些文件可能是使用不同受支持工具生成的。 |
| srcdir | 被扫描以生成待处理的 CQ 结果的原始源代码的位置。 |
| outdir | 脱敏后的源文件将要存储的位置。 |
| placeholder | 用于替换所有检测到的秘密的占位符。它可以接受以下替换: - ${tool} 用于检测秘密的工具名称- ${rule} 用于检测秘密的规则名称- ${regex} 与用于检测秘密的规则关联的正则表达式- ${yaml} 一个 YAML 流式结构,包含(如果已知)仅用于检测秘密的工具和规则的名称- ${yaml_regex} 一个 YAML 流式结构,包含(如果已知)用于检测秘密的工具、规则名称以及正则表达式 |
| process-archives | 一个用于指示的开关 |
| report | 将要生成的 CSV 报告的位置和名称,其中包含已脱敏秘密的详细信息。 |
| report-encryption | 如果生成报告文件,则要使用的加密方法。可能的值:none、zip-aes256。默认值:zip-aes256 |
| log-level | 用于工具输出的日志级别。可能的值:critical、fatal、error、warning、info、debug。默认值:info |
| 参数 | 定义 |
|---|
| analyse-with | 一个以逗号分隔的要调用工具的列表。它可以包含以下任何工具:trivy、gitleaks、ccs、cq、bindetect |
| srcdir | 被扫描以生成待处理的 CQ 结果的原始源代码的位置。 |
| outdir | 脱敏后的源文件将要存储的位置。 |
| placeholder | 用于替换所有检测到的秘密的占位符。它可以接受以下替换: - ${tool} 用于检测秘密的工具名称- ${rule} 用于检测秘密的规则名称- ${regex} 与用于检测秘密的规则关联的正则表达式- ${yaml} 一个 YAML 流式结构,包含(如果已知)仅用于检测秘密的工具和规则的名称- ${yaml_regex} 一个 YAML 流式结构,包含(如果已知)用于检测秘密的工具、规则名称以及正则表达式 |
| report | 将要生成的 CSV 报告的位置和名称,其中包含已脱敏秘密的详细信息。 |
| report-encryption | 如果生成报告文件,则要使用的加密方法。可能的值:none、zip-aes256。默认值:zip-aes256 |
| log-level | 用于工具输出的日志级别。可能的值:critical、fatal、error、warning、info、debug。默认值:info |
| 工具 | 备注 |
|---|
| Trivy | 必须安装 trivy 命令并确保其在 PATH 中可访问。 |
| GitLeaks | 必须安装 gitleaks 命令并确保其在 PATH 中可访问。 |
| ccs | ccs.py 文件必须位于包含 secretscrub.py 文件的目录中名为 ccs 的子目录内。 |
| cq | cq.py 和 fn.py 文件必须位于包含 secretscrub.py 文件的目录中名为 cq 的子目录内。 |
| bindetect | 目前它随 secretscrub 一起提供,无需进一步安装。 |