我知道有很多其他工具可以用于查找当前泄露在 Github 上的敏感信息,我自己也在使用其中一些。但我认为它们仍然缺少一些功能,例如:
其他工具更侧重于查找已传入 Git 地址的仓库中存在的敏感信息。在我开发 GitMonitor 时,只有极少数类似工具专注于先发现需要关注的仓库、找到所有相关仓库,然后检查这些仓库中是否存在敏感信息。
除了用于检查敏感信息的规则外,该工具还需要用于搜索感兴趣仓库的规则。需要考虑的仓库可能是那些包含公司或项目相关关键字的仓库。
如果你是漏洞赏金猎人,你一次只会关注几个目标。但如果你是公司的安全工程师,你需要知道何时出现与公司或项目相关的仓库,并且这些仓库可能包含敏感信息。这类仓库可能出现在 Github 的任何地方,名称任意,由任何账户发布。你应该在出现此类仓库时立即收到警报(持续监控)。
该工具具有灵活的报告机制。
正是出于这些原因,我创建了这个工具——GitMonitor。GitMonitor 使用两组不同的规则来查找你需要的内容。搜索规则集将搜索可能与你的组织或内部项目或其他任何内容相关的仓库,将匹配的仓库克隆到本地。然后,敏感过滤规则集检查这些仓库中是否存在敏感信息。最后,工具将通过 Slack 报告。你可以将此工具与 Cronjob 配合使用,创建一个持续监控系统,跟踪与组织相关的泄露在 Github 上的敏感信息,并通过 Slack 接收结果。
更新 2020 年 6 月 15 日: 我们已更新至 1.0 版本。该版本修复了一些错误,使 Gitmonitor 能稳定工作。如果你使用的是之前的版本,建议执行 git pull。
使用两组不同的规则:一组搜索规则集(yaml)用于搜索感兴趣的仓库,一组过滤规则集(正则表达式)用于检查这些感兴趣的容器是否包含敏感信息。搜索规则(yaml)和过滤规则(正则表达式)分别定义。用户可以轻松直观地定义 yaml 规则和正则表达式。
搜索规则集:你可以通过使用不同的 yaml 文件创建许多不同的规则。规则允许你灵活地定义搜索仓库的方式,可以使用关键字,或者关键字与语言、文件名和扩展名的组合,也可以定义根据语言、文件名或扩展名排除仓库。关键字将在仓库名称、仓库代码以及提交中进行搜索。
过滤规则集:你可以轻松添加或修改正则表达式,以查找仓库中可能存在的敏感信息。
第一个匹配搜索规则集的仓库将被克隆到本地。然后,过滤规则集将检查此仓库是否存在敏感信息。检查完成后,Gitmonitor 会记录结果,并自动从本地删除该仓库以节省空间,然后继续重复此过程,直到所有相关仓库都被找到并检查完毕。
通过 Slack 报告。
此工具可通过 Cronjob 调度实现持续监控。

> python3 -m pip install -r requirements.txt
请确保你安装了 Pyyaml 5.x 或更高版本(pip3 install --ignore-installed PyYAML)
下表解释了配置文件中每个键的含义:
| 键 | 描述 |
|---|---|
| user | Github 用户名 - 如果已通过环境变量设置 Github 凭据,则留空 |
| pass | Github 密码 - 如果已通过环境变量设置 Github 凭据,则留空 |
| webhooks | 从 GitMonitor 向 Slack 发送消息的 Webhook 令牌 |
| rule | 包含搜索规则集的目录 |
| source | 下载仓库的目录 |
| log | 包含记录每次扫描后状态的 JSON 文件的目录,该 JSON 文件用于比较扫描结果(以识别新仓库) |
| start | 定义开始扫描的横幅和敏感过滤规则集扫描结果的横幅 - 将显示在发送到 Slack 的结果中 |
| end | 定义结束扫描的横幅和搜索规则集扫描结果的横幅 - 将显示在发送到 Slack 的结果中 |
| all | 定义显示所有仓库的横幅 - 将显示在发送到 Slack 的结果中 |
> export GIT_USERNAME=你的 Github 用户名
> export GIT_PASSWORD=你的 Github 个人密钥或密码
或者在配置文件中定义凭据信息(不推荐):
当你在环境变量中定义凭据信息时的配置文件示例

你可以创建多个不同的 yaml 文件(如规则模板)来定义多个关键字。规则文件如下图所示:

> python3 gitmonitor.py
例如:

该项目的许多方面都可以改进,并在重构现有代码和实现新功能时发生重大变化。欢迎社区提供改进反馈和拉取请求。
一般来说,我们遵循“fork-and-pull”的 Git 工作流。
注意:在发起拉取请求之前,请确保合并来自“上游”的最新内容!