Dufflebag 是一个工具,用于搜索公共弹性块存储(EBS)快照中可能意外遗留的秘密。你可能会惊讶于到处都是密码和秘密!
该工具以 Elastic Beanstalk("EB",不要与 EBS 混淆)应用程序的形式组织,如果你试图在自己的机器上运行它,它绝对无法工作。
Dufflebag 有很多活动部件,因为实际上读取 EBS 卷并非易事。你必须在 AWS 环境中,克隆快照,从快照创建卷,附加卷,挂载卷等等...这就是为什么它被做成一个 Elastic Beanstalk 应用,这样它可以自动地根据需要上下扩展,并且当你完成后整个东西可以轻松拆除。
只需留意你的 AWS 控制台,确保没有出现问题导致账单激增。我们已经尽力考虑各种可能情况并提供了错误处理...但你已经得到了警告!
你需要在角色 aws-elasticbeanstalk-ec2-role 上添加一些额外的 AWS IAM 权限。或者,你可以创建一个具有这些权限的全新角色,并设置 EB 使用该角色,但这会稍微复杂一些。无论如何,你需要添加:
核心应用程序是用 Go 编写的,因此你需要一个 Golang 编译器。但 EB 应用程序实际上会被构建成一个 .zip 文件(EB 就是这样工作的),所以 makefile 会为你输出一个 zip 文件。
检查你的区域。Dufflebag 一次只能在一个 AWS 区域中操作。如果你想搜索每个区域,你必须部署那么多实例。要更改区域,请更改源代码文件 region.go 的内容。
安装依赖项:Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
你现在应该会在项目根目录中看到一个 dufflebag.zip 文件。
dufflebag 开头。S3 存储桶名称必须是全局唯一的,因此你可能需要添加一些随机字符作为后缀。前往你的 AWS 控制台,找到 Elastic Beanstalk 菜单选项。这可能也可以通过 CLI 完成,但本描述将使用控制台。选择 Actions -> Create Environment。

然后在下一个窗口中选择 Worker environment 并点击 Select。

在下一个窗口中,为 Platform 选择 Preconfigured -> Go。

在 Application Code 下,选择 Upload your Code。

点击 Upload 按钮,选择刚刚构建的 dufflebag.zip 文件。

最后,点击 Create Environment 开始。
AWS 需要几分钟来创建所有东西并开始。创建完成后,Dufflebag 会立即启动。无需做其他事情。
一旦你将其启动并运行,可以移除此安全阀后再试。默认情况下,Dufflebag 只搜索 20 个 EBS 快照。(这样它就不会在你第一次尝试时失控)为了将搜索范围扩大到整个区域,进入 populate.go,移除以下代码行,然后重新构建:
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
Dufflebag 设计为 Elastic Beanstalk 应用的原因之一是你可以轻松地自动扩展或缩减程序。默认情况下,它只在一个实例上运行,速度相当慢。但如果你想提升性能,可以在 Elastic Beanstalk 中调整自动扩展。完整选项超出本文档范围,所以我让你自行探索。但实践中,我发现简单的 CPU 使用率触发效果很好。
在设置上述环境时,你会在 Configure more options 按钮(而不是点击 Create environment)下找到选项,然后点击 Scaling。

Dufflebag 会将所有有趣的文件复制到你之前创建的 S3 存储桶中。(从技术上讲,Dufflebag 会使用它找到的第一个名称以 "dufflebag" 开头的 S3 存储桶。)
你可以直接查看 S3 存储桶中逐个进入的文件。它们将被命名为:
originalfilename_blake3sum_volumeid
如果一切顺利,你不需要读取日志。但以防万一,Elastic Beanstalk 允许应用在运行时写入日志文件,这些日志可以通过导航到 Logs 选项卡来捕获。然后点击 Request Logs 和 Last 100 Lines。这将获取 Dufflebag 最近的日志批次。点击 Download 按钮读取。该文件将包含许多其他系统日志,但 Dufflebag 部分位于顶部的 "/var/log/web-1.log" 下。
要查看完整的日志历史,请选择 Full Logs 而不是 Last 100 Lines。(注意,EB 默认会非常积极地轮转日志)
此外,你可以通过查看环境的 SQS 队列来了解整体进度。Elastic Beanstalk 工作环境使用 SQS 管理工作流程。Dufflebag 队列中的每条消息代表一个待处理的 EBS 卷:

Messages Available 列显示尚未处理的卷数。Messages in Flight 列显示当前正在处理的卷数。
Dufflebag 被编程为搜索我们认为可能“有趣”的内容。私钥、密码、AWS 密钥等...但如果你真的想搜索与你特定相关的内容呢?比如,也许你在 bank.com 工作,想看看外面有哪些引用 bank.com 的内容。
这样做需要对 Dufflebag 代码进行少量修改,但并不多。别担心!搜索逻辑发生在 inspector.go 中。pilfer() 函数是一个处理检查文件的协程。那里的代码一开始可能看起来有点吓人,但以下是它所做的。(以及如何轻松修改它)
文件名黑名单:
blacklist_exact)blacklist_contains)blacklist_prefix)你可以通过更改这三个列表中的内容轻松修改搜索逻辑。不过,我通常建议保持这些列表不变。这些黑名单旨在覆盖许多文件系统中存在的无聊文件,并防止 Dufflebag 需要深入检查 AWS 上的每个文件。你要查找的敏感数据可能在这些文件中...但可能不是。
文件名白名单:
IsSensitiveFileName() 函数根据正则表达式检查文件名,以查找敏感文件名。(例如 /etc/shadow、bash_history 等...)文件内容:
checkContentsRegex() 根据一组正则表达式检查文件内容。(文件输入参数是逐行的,因此该函数的输入是文件的一行,而不是整个文件。)因此,要查找与你的组织相关的关键词,只需更改 checkContentsRegex() 中的正则表达式即可。