git-all-secrets 是一款能够执行以下操作的工具:
扫描由多个开源工具完成:
注意 - 如果需要,未来可以添加更多此类工具!
注意 - 可以通过指定 toolName 标志来使用所有工具或仅使用其中一种进行扫描。
如果使用所有工具进行扫描,则工具的最终输出将合并所有工具的输出文件,生成一个统一的输出文件。
运行 git-all-secrets 最简单的方式是通过 Docker,我强烈建议你先安装 Docker。安装好 Docker 后:
docker run --rm -it abhartiya/tools_gitallsecrets --help 了解它可以接受的不同标志。docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> 的命令。你也可以通过 docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<> 指定使用特定工具进行扫描。可选值为 thog 和 repo-supervisor。thogEntropy 标志,例如:docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy。docker ps -a 获取容器 ID。docker cp <container-id>:/root/results.txt . 将结果文件从容器复制到宿主机。-token = GitHub 个人访问令牌。我们需要这个,因为未经身份验证的 GitHub API 请求很快就会遇到速率限制!
-org = 要扫描的组织名称。这将扫描该组织中的所有公共仓库 + 组织中所有用户的仓库和 Gist。如果你使用的令牌属于该组织的成员,它还会克隆并扫描该用户拥有的所有秘密 Gist,以及该用户有权访问的组织中的私有仓库。但不会克隆和扫描该组织内属于该用户的私有仓库。要扫描用户的私有仓库,请将 user 标志与 scanPrivateReposOnly 标志一起使用,并挂载 SSH 密钥的卷。
-user = 要扫描的用户名称。这将扫描该用户的所有仓库和 Gist。如果提供的令牌是该用户的令牌,则秘密 Gist 也会被克隆和扫描。但仅会克隆和扫描公共仓库。要扫描该用户的私有仓库,请将 scanPrivateReposOnly 标志与 user 标志一起使用,并挂载 SSH 密钥的卷。
-repoURL = 要扫描的仓库的 HTTPS URL。这将只扫描此仓库。对于公共仓库,只需要提供仓库的 https URL 即可。但是,如果你想扫描私有仓库,则需要提供 ssh URL,并挂载 SSH 密钥的卷以及 scanPrivateReposOnly 标志。
-gistURL = 要扫描的 Gist 的 HTTPS URL。这将只扫描此 Gist。只要你有 URL,就不存在公共或秘密 Gist 的概念。即使你有秘密 Gist,如果有人知道其 HTTPS URL,他们也可以访问它。
-output = 存储所有结果的文件名。默认为 results.txt。
-cloneForks = 可选的布尔标志,用于克隆组织和用户仓库的 fork。默认设置为 0,即不克隆 fork。如果要克隆 fork,需要将此值设置为 1。或者,只需在命令中加上 -cloneForks 以及其他标志。
token 标志是必须的。不能为空。
org、user、repoURL 和 gistURL 不能同时为空。你只需要提供其中一个值。如果你同时提供多个值,优先级顺序为 org > user > repoURL > gistURL。例如,如果同时提供 -org=secretorg123 和 -user=secretuser1 标志,工具会报错,表示不需要 org 值之外的额外参数。如果只想针对特定用户运行,只需提供 user 标志,不要提供 org 标志。
当指定 scanPrivateReposOnly 标志时:
扫描私有仓库最安全的方式是使用 SSH URL 克隆。要实现这一点,需要放置一个已添加到 GitHub 用户的适当 SSH 密钥。GitHub 提供了有用的文档用于配置你的账户。确保此密钥没有设置密码短语。获得 SSH 密钥后,只需通过卷将其挂载到 Docker 容器中。只需输入以下命令即可:
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
或
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
这里,我将本地的个人 SSH 密钥 id_rsa_personal 映射到容器内的 /root/.ssh/id_rsa,以便 git-all-secrets 可以通过 ssh 克隆仓库,并使用容器内 /root/.ssh/id_rsa 存储的 SSH 密钥。这样,你实际上没有在容器中存储任何敏感信息。你只是使用了本地机器上的一个文件。一旦容器被销毁,它就不再有权访问此密钥。
GitHub API 限制了私有仓库报告的情况。如果尝试使用非管理员用户扫描组织,你可能需要提供为用户提供仓库访问权限的团队。为此,请使用 teamName 标志以及 org 标志。示例如下:
docker run --it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
git-all-secrets 现在也支持扫描 GitHub Enterprise。如果你有托管在 VPN 或类似环境中的自有 GitHub Enterprise,请确保已连接到 VPN 或正确的网络,以便能够访问 GitHub Enterprise 仓库。enterpriseURL 是扫描 GitHub Enterprise 仓库所需的参数。以下是一些示例:
示例 1:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git
这里,我将 GitHub Enterprise SSH 密钥挂载到容器,然后是个人访问令牌、将接收请求的企业 URL 以及要扫描的仓库。
示例 2:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git -toolName thog -thogEntropy
以上命令仅使用 truffleHog 及熵设置对仓库进行扫描。
示例 3:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -user <username> -scanPrivateReposOnly
以上命令使用所有工具(repo-supervisor 和 thog)仅扫描提供令牌的用户的私有仓库,但不包含 truffleHog 的熵设置。
rules.json 文件中添加自己的正则表达式,并在执行 docker run 时使用 -v $(pwd)/rules.json:/root/truffleHog/rules.json 参数包含该文件。git-all-secrets 中。我查看了大量可用于在 GitHub 仓库中查找秘密的开源工具。我认为一些比较好的顶级工具有:gitrob、truffleHog 和 git-secrets。
Gitrob 是一个独立工具,由于拥有自己的数据库和 UI 来查看所有发现的秘密,因此很难与其他工具集成。它还会产生大量误报,比 truffleHog 更多。而且,它并没有真正高亮显示发现的秘密。它只查看文件及其扩展名,而不是实际内容。因此,虽然 Gitrob 是一个很好的入门工具,但我建议每隔一段时间运行一次,以了解攻击面并查看是否发生了变化。
然后是 truffleHog,它通过查看 Shannon 熵来查找文件实际内容中的秘密,并将输出打印到屏幕上。它接受仓库 URL 或仓库目录作为参数。这是一个不错的工具,尽管也有误报。其他一些缺点包括:
最后是 git-secrets,它可以标记诸如 AWS 秘密之类的内容。最好的部分是,你还可以添加自己的正则表达式来查找你知道应该查找的秘密。一个主要缺点是它不能像 truffleHog 那样很好地查找高熵字符串。而且,它只能扫描作为仓库的特定目录,因此无法从仓库目录递归扫描。
因此,如你所见,虽然有一些不错的工具,但它们需要以某种方式进行组合。还需要递归扫描多个仓库,而不仅仅是一个。那么 Gist 呢?有组织和用户,还有组织和用户的仓库,以及用户的 Gist。所有这些都应该被扫描。并且扫描方式应可自动化且易于被其他工具/框架使用。
2019年2月9日 - 添加了 blacklist 标志,以在扫描时跳过某些仓库名称。感谢 @sjqnn 的 PR。构建并推送了新的 Docker 镜像。祝好运!
2018年7月31日 - 使用 pip 简化了 truffleHog 的安装。@mhmdiaa 修复了 truffleHog 输出函数中的一个错误,该错误导致无法正确合并和排序。更新了正则表达式文件,包含 password 等内容。构建并推送了新的 Docker 镜像。祝好运!
2018年7月15日 - 更新了 repo-supervisor 的分支,因为上游有了一些变化。使用最新的 Trufflehog 重建了新的 Docker 镜像。提供了包含 Trufflehog 用于查找秘密的所有正则表达式的 rules.json 文件。添加了使用 -mergeOutput 标志合并两个工具输出(JSON 格式)的功能。通过使用多阶段构建和 dep 管理依赖,大幅减小了 Docker 镜像大小。非常感谢 @mhmdiaa 的所有贡献!
2017年12月12日 - 对于某些大型仓库,truffleHog 会失败并退出。但我们不想就此停止。我们想通知用户扫描失败,并继续扫描其他仓库。此功能已在最新的 Docker 镜像中实现。
2017年12月11日 - 移除了 gitsecrets,因为 truffleHog 现在支持正则表达式功能。只需在 rules.json 文件中添加你的正则表达式并重建 Docker 镜像,即可获得之前 gitsecrets 提供的功能,因此不再需要 gitsecrets。我还添加了对扫描 GitHub Enterprise 仓库和 Gist 的支持。@high-stakes 通过限制线程数量提交了一个(有望)修复 Goroutine 错误的 PR。最后,还添加了对扫描组织私有仓库的支持。
2017年12月8日 - 移除了我自己的 truffleHog 分支。现在使用上游版本以及 truffleHog 的新正则表达式功能和熵模式。我相信,一旦一些问题得到修复,我们可以仅用 truffleHog 替换 gitsecrets 和 repo-supervisor。
2017年12月7日 - 更新了文档,补充了关于不同标志的更多细节和说明。
2017年12月5日 - 集成了通过 SSH 密钥扫描私有仓库的支持。这是长期以来一直要求的功能,现在终于可以实现。还更改了 Docker 镜像标签方案。从现在起,最新镜像将带有 latest 标签。而之前的所有版本将用数字进行标记。这一切都离不开 SimpliSafe 团队,特别是 Matthew Cox(https://github.com/matthew-cox)。所以,Matt,向你大声致谢!
2017年10月14日 - 构建并推送了新镜像 abhartiya/tools_gitallsecrets:v6。这个新镜像包含了新版本的 git-secrets 和 ,即我将一些上游更改合并到了我的分支中,同时保留了我分支中已有的额外更改。新镜像使用了这些更改,因此一切都是最新和最棒的!* 10/14/17 - 构建并推送了新镜像 abhartiya/tools_gitallsecrets:v5。此镜像修复了一个非常愚蠢且烦人的错误,该错误可能导致 repo supervisor 失败。Dockerfile 中读取环境值的方式发生了变化,导致 repo supervisor 不知道要使用哪个 node 路径。Node 地狱!
如果你想表达支持,我的 BTC 钱包地址是 1PtMhXWCcMZCitcDfaEBe7jnV9sjKoNvq7。
-orgOnly = 可选的布尔标志,用于跳过扫描属于组织的用户仓库。默认设置为 0,即常规行为。如果不想扫描用户仓库,只想扫描组织仓库,需要将此值设置为 1。或者,只需在命令中加上 -orgOnly 以及其他标志。
-toolName = 可选的字符串标志,用于指定使用哪个工具进行扫描。默认设置为 all,即使用 thog 和 repo-supervisor 进行扫描。可选值为 thog 或 repo-supervisor。
-teamName = 组织团队的名称,该团队有权访问私有仓库进行扫描。此标志尚未经过全面测试,因此我无法保证其功能。
-scanPrivateReposOnly = 可选的布尔标志,用于指定是否要扫描用户的私有仓库。设置此标志将不扫描用户的公共仓库。并且,你需要通过将 SSH 密钥挂载到容器中来提供。此外,此标志仅与 user、repoURL 或 org 标志一起使用。
当 org 标志与 scanPrivateReposOnly 标志一起使用,且未设置 orgOnly 标志时,它将扫描该组织中用户(其令牌已提供)有权访问的公共和私有仓库。然后,它将仅扫描该用户(其令牌已提供)的私有仓库。最后,它将扫描该用户(其令牌已提供)的所有公共和秘密 Gist。简而言之,scanPrivateReposOnly 标志仅真正影响 user 和 repoURL 标志。
-enterpriseURL = 可选标志,用于提供企业版 GitHub 的 URL,如果你希望扫描企业仓库。它应该是类似 https://github.org.com/api/v3 的格式,并需要将 SSH 密钥挂载到容器中。请参考下面的 扫描 GitHub Enterprise。
-threads = 默认值为 10。如果你的系统性能不够,可以通过此标志限制线程数量。大多数情况下,保持为 10 即可。
-thogEntropy = 可选标志,用于指示是否要从 truffleHog 获取基于高熵的秘密。truffleHog 的高熵秘密会产生大量噪音,如果你不需要这些噪音,并且你正在大型组织上运行 git-all-secrets,我建议不要提及此标志。默认设置为 False,这意味着 truffleHog 将仅根据 rules.json 文件中的正则表达式产生结果。如果你正在扫描一个规模相当小的组织(仓库数量有限)或一个拥有少量仓库的用户,使用此标志更有意义。
-mergeOutput = 可选标志,用于合并和去重所使用的工具(目前是 truffleHog 和 repo-supervisor)的输出。默认值为 False。
-blacklist = 不应扫描的仓库名称,以逗号分隔提供。
-v 标志将包含私有 SSH 密钥的卷挂载到 Docker 容器中。ssh URL,而不是 https URL。请参考下面的 扫描私有仓库。
当指定 teamName 时,确保所提供的 token 属于该团队的成员。否则可能产生意外结果。请参考下面的 扫描组织团队。
当指定 enterpriseURL 标志时,即使你提供了仓库的 https URL,它也会始终使用 SSH URL。所有企业版克隆/扫描都通过 ssh URL 进行,而不是 https URL。
如上所述,确保用于扫描 SSH URL 的 SSH 密钥没有设置任何密码短语。
repo-supervisor9/29/17 - 构建并推送了带有 orgOnly 标志的新镜像 - abhartiya/tools_gitallsecrets:v4
8/22/17 - 由 kciredor 添加了 -orgOnly 切换:分析指定的组织仓库并跳过用户仓库。
6/26/17 - 移除了 repo-supevisor 中在未发现秘密时打印错误的一些输出。不必要的输出!构建并推送了新镜像 - abhartiya/tools_gitallsecrets:v3
6/25/17 - 添加了标志 toolName 以指定用于扫描的工具。构建并推送了新镜像 - abhartiya/tools_gitallsecrets:v2
6/14/17 - 添加了 repo-supervisor 作为扫描工具,同时更新并添加了版本号到 Docker 镜像 - abhartiya/tools_gitallsecrets:v1
6/14/17 - 添加了标志 cloneForks 以避免克隆组织及用户仓库的分叉。默认情况下为 false。如果您希望扫描分叉,只需将值设置为 1,即 -cloneForks=1