DumpsterDiver 是一款工具,能够分析大量数据,搜索硬编码的机密信息,如密钥(例如 AWS Access Key、Azure Share Key 或 SSH 密钥)或密码。此外,它还允许创建带有基本条件的简单搜索规则(例如,仅报告包含至少 10 个电子邮件地址的 CSV 文件)。 该工具的主要理念是检测任何潜在的机密泄露。你可以通过演示视频观看其实际运行,或通过这篇文章了解所有功能。
usage: DumpsterDiver.py [-h] -p LOCAL_PATH [-r] [-a] [-s] [-o OUTFILE]
[--min-key MIN_KEY] [--max-key MAX_KEY]
[--entropy ENTROPY] [--min-pass MIN_PASS]
[--max-pass MAX_PASS]
[--pass-complex {1,2,3,4,5,6,7,8,9}]
[--exclude-files EXCLUDE_FILES [EXCLUDE_FILES ...]]
[--bad-expressions BAD_EXPRESSIONS [BAD_EXPRESSIONS ...]]
-p LOCAL_PATH - 指向包含待分析文件的文件夹的路径。-a, --advance - 设置此标志后,所有文件将额外使用 rules.yaml 文件中指定的规则进行分析。-r, --remove - 设置此标志后,将删除不包含任何机密(或若 -a 标志已设置,则删除不包含任何感兴趣内容)的文件。-s, --secret - 设置此标志后,所有文件将额外进行硬编码密码搜索。-o OUTFILE - JSON 格式的输出文件。要运行 DumpsterDiver,您必须安装 Python 库。您可以通过运行以下命令来安装:
$> pip install -r requirements.txt
如果您分别安装了 Python 2 和 Python 3,则应使用 pip3 或 pip3.6。
没有一款工具能适合所有人的需求,DumpsterDiver 也不例外。有两种方式可以自定义您的搜索:
config.yaml 文件--min-key MIN_KEY - 指定待分析的最小密钥长度(默认值为 20)。--max-key MAX_KEY - 指定待分析的最大密钥长度(默认值为 80)。--entropy ENTROPY - 指定高熵的阈值(默认值为 4.3)。此外,还提供了一个单独的脚本,允许您计算单个单词中字符的熵。这有助于您更好地根据需求自定义 DumpsterDiver。您可以通过以下命令使用它:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
当您清楚要查找什么时,这种方法会很有帮助。以下是一些示例:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 40 --max-key 40 --entropy 4.3
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 66 --max-key 66 --entropy 5.1
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 76 --max-key 76 --entropy 5.1
aws_access_key_id 或 aws_secret_access_key 的出现时:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
请注意,在 grep 单词前后有意使用了通配符。这样,像
"aws_access_key_id"或aws_access_key_id=这样的表达式也会被报告。
使用熵来查找密码效果并不理想,因为它会产生大量误报。这就是为什么 DumpsterDiver 采用不同的方法查找硬编码密码——它使用 passwordmeter 来验证密码复杂度。要自定义此搜索,您可以使用以下命令:
--min-pass MIN_PASS - 指定待分析的最小密码长度(默认值为 8)。需要在语法中添加 -s 标志。--max-pass MAX_PASS - 指定待分析的最大密码长度(默认值为 12)。需要在语法中添加 -s 标志。--pass-complex {1,2,3,4,5,6,7,8,9} - 指定密码复杂度的阈值,范围从 1(简单密码)到 9(非常复杂密码)(默认值为 8)。需要在语法中添加 -s 标志。例如,如果您想查找包含大写字母、小写字母、特殊字符、数字且长度为 10 到 15 个字符的复杂密码,可以使用以下命令:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
您可能希望跳过对某些文件的扫描。为此,可以使用以下参数:
--exclude-files - 指定不应分析的文件名或扩展名。文件扩展名应包含 . 字符(例如 .pdf)。多个文件名和扩展名之间用空格分隔。
--bad-expressions - 指定不良表达式。如果 DumpsterDiver 在文件中发现此类表达式,则不会分析该文件。多个不良表达式之间用空格分隔。
如果您想通过单独的文件指定多个文件名、不良表达式或 grep 单词,可以使用以下 Bash 技巧:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
您可以在 config.yaml 文件中一次性为上述所有参数指定值,从而避免使用多个命令行参数。
DumpsterDiver 还支持高级搜索。除了简单的通配符 grep 之外,该工具还允许您创建条件。假设您正在搜索公司电子邮件的泄露。此外,您只对包含至少 100 个电子邮件地址的大型泄露感兴趣。为此,您应该按如下方式编辑 rules.yaml 文件:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
假设另一种情况,您正在 .db 或 .sql 文件中搜索术语 "pass"、"password"、"haslo"、"hasło"(如果您正在分析波兰公司的代码仓库)。那么,您可以通过按如下方式修改 rules.yaml 文件来实现:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
请注意,仅当总权重(filetype_weight + grep_words_weight)>= 10 时,规则才会被触发。
DumpsterDiver 提供了 Docker 镜像。使用以下命令运行:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
如果您想覆盖配置文件之一(config.yaml 或 rules.yaml):
$> docker run -v /path/to/my/config/config.yaml:/config.yaml /path/to/my/config/rules.yaml:/rules.yaml -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
您有更好的想法吗?想为这个项目提供帮助吗?请通过 Twitter @Rzepsky 与我联系。我非常希望能有贡献者加入!
在此,我要衷心感谢所有帮助开发此项目的人:
请参阅 LICENSE 文件。