AnshumanAtrey/betterleaks-cloud
GitHub: AnshumanAtrey/betterleaks-cloud
一款基于 Apify 平台的云端密钥泄露扫描器,支持扫描 GitHub 和 S3 存储桶中的泄露凭据,并可选实时验证密钥有效性。
Stars: 0 | Forks: 0
# Betterleaks Cloud - GitHub 与 S3 密钥扫描器
云托管的 [Betterleaks](https://github.com/betterleaks/betterleaks) v1.3.1,用于搜寻 GitHub 上任何位置、克隆的 git 仓库或 S3 / R2 / MinIO 存储桶中泄露的 API 密钥、钱包私钥和凭据。可选的实时验证功能会针对厂商 API 探测每个检测到的密钥,以标记哪些仍然有效。
作为 [Apify Actor](https://apify.com/anshumanatrey/betterleaks-cloud) 提供。启动费 $0.05 + 每个扫描的仓库 $0.05 + 每个实时验证的密钥 $0.30。无需安装,无需 CLI,输出扁平化的 JSON。
## 它的功能是什么?
扫描 GitHub 组织、用户、仓库、Pull Request、Issue、Gist、Action 工作流或 S3 存储桶,查找泄露的凭据。基于 Betterleaks 构建(Gitleaks 的继任者,由 Gitleaks 原作者 Zachary Rice 以及来自 Red Hat、Amazon、RBC 的共同维护者维护)。每个 Betterleaks CLI 标志都作为输入字段公开。当您启用验证时,每个发现的结果都会针对厂商 API 进行实时探测,并标记为 `valid`、`invalid`、`revoked`、`unknown` 或 `error`。
## 它与在本地运行 Betterleaks 有何不同?
| | 本地 Betterleaks CLI | 此 actor |
|---|---|---|
| 设置 | 安装 Go 二进制文件,设置 GitHub token,配置 shell | 粘贴 JSON 输入 |
| 范围 | 一次一个目标 | github / git / s3 模式 + 我们的 `global_github` 模式(代码搜索选择仓库) |
| 验证成本 | 您机器的 HTTP 出口流量 | Apify 管理的并行 worker |
| 输出处理 | stdout JSON,自行解析 | 数据集记录,可过滤的视图 |
| 调度 | cron + 自己动手 | 内置 Apify 调度 |
| 成本 | 您笔记本电脑的耗电量 | $0.05 actor 启动费 + 每个扫描的仓库 $0.05 |
## 它与我们的 gitleaks-github-secret-scanner actor 有何不同?
| | gitleaks-cloud | betterleaks-cloud (本工具) |
|---|---|---|
| 引擎 | Gitleaks 8.x | Betterleaks 1.3.1 (Gitleaks 的继任者) |
| 实时验证 | 不支持 | 是(可选开启) |
| 源类型 | 仅支持 github + git | github, git, s3, dir, stdin, global_github |
| 定价 | $0.01 + 每个仓库 $0.02 | $0.05 + 每个仓库 $0.05 + 每个实时验证的密钥 $0.30 |
| 最适用于 | 批量扫描,单次扫描成本低 | 当“密钥是否仍然有效?”很重要时的高级扫描 |
## 我应该在什么时候使用它?
- 审计您自己的 GitHub 组织,查找混入提交中的密钥
- 在报告之前希望实时验证密钥的漏洞赏金搜寻
- 对目标公司的 GitHub 足迹进行收购前的安全检查
- 按计划进行持续监控,对任何新的实时验证发现发出警报
- 取证:追踪是哪个 PR ref 上的哪个悬空提交泄露了凭据
- 扫描某人公开分享的 Cloudflare R2 / AWS S3 存储桶
## 需要多少成本?
按事件付费:
- 每次 actor 启动 $0.05
- 每个扫描的仓库 $0.05(在 github / git / global_github 模式下)
- 推送到数据集的每个发现结果 $0.01
- 每个**实时验证**的密钥 $0.30(仅在开启验证并且状态返回 `valid` 时)
- 每次代码搜索查询 $0.005(仅在 `global_github` 模式下)
典型扫描:
| 场景 | 成本 |
|---|---|
| 扫描 1 个小仓库,1 个发现结果,无验证 | $0.11 |
| 扫描 1 个大仓库,30 个发现结果,无验证 | $0.40 |
| 扫描一个包含 25 个仓库的组织,50 个发现结果,无验证 | $1.80 |
| 对 `rzp_live_` 进行 25 个仓库的全局搜索 | $1.93 |
| 扫描 100 个仓库,200 个发现结果,10 个实时验证 | $10.05 |
与 GitGuardian Enterprise 每年约 $5000 的固定价格相比。使用此 actor 进行全面扫描的成本要便宜 300-500 倍。
## 我可以在哪些模式下进行扫描?
| 模式 | 扫描的内容 | 所需输入 |
|---|---|---|
| `github` | 特定的 GitHub 组织 / 用户 / 仓库 / PR / Issue / Gist(由您选择) | `target_url`,推荐使用 `github_token` |
| `global_github` | 通过关键词匹配整个 GitHub - 我们通过代码搜索添加此层 | `global_search_query`,必须提供 `github_token` |
| `git` | 带有完整历史的单个 git clone URL | `target_url` |
| `s3` | AWS S3, Cloudflare R2, MinIO 或任何兼容 S3 的存储桶 | `target_url`,S3 凭据(或公开存储桶使用 `s3_anonymous`) |
| `dir` | 压缩包 / zip URL - 我们会下载、解压并扫描文件系统 | `dir_source_url` |
| `stdin` | 您粘贴的原始文本内容 | `stdin_content` |
## 在 `github` 模式下它可以扫描哪些 GitHub 资源?
支持 betterleaks 支持的全部 12 个表面,可通过 `include` / `exclude` 进行选择:
- `repos`(默认),`forks`
- `prs`、`pr-comments`
- `issues`、`issue-comments`
- `actions`、`action-artifacts`
- `discussions`
- `releases`、`release-assets`
- `gists`
您还可以按 `since` / `until` 日期进行过滤,通过 glob 模式排除仓库,或者定位特定的 GitHub Actions 工作流文件。
## 它能找到从当前文件中删除的泄露吗?
能。Betterleaks 会扫描完整的 git 历史。一个被提交然后在后续提交中删除的密钥仍然会出现在历史记录中并被检测到。每个发现结果上的 `Commit` 字段会告诉您是哪个提交引入了泄露。
您还可以启用高级 `--log-opts` 传递,以使用 git pickaxe (`-S secret_string`) 进行有针对性的历史搜索。
## 密钥会针对实时的厂商 API 进行验证吗?
可选 - 默认关闭以保持扫描快速。设置 `validation: true`,Betterleaks 将使用规则内置的 CEL 验证器,针对每个发现的结果向厂商 API 发送 HTTP 请求。
输出字段:
- `ValidationStatus`:`valid`(仍然有效)、`invalid`(被拒绝)、`revoked`(显式禁用)、`unknown`(无法确定)或 `error`
- `ValidationReason`:人类可读的原因
- `ValidationMeta`:特定于厂商的元数据。对于 GitHub PAT,这包括 `username`、`name` 和授予的 `scopes`。对于 Stripe,包括测试/ live 模式 + 账户信息。
注意:验证仅对在其 TOML 中包含 `validate` CEL 子句的规则触发。并非所有检测到的密钥类型都有此子句(上游规则集会随着时间的推移不断扩展)。
您还可以调整验证行为:
- `validation_timeout`(单次请求的 HTTP 超时)
- `validation_workers`(并行 HTTP worker)
- `validation_status`(过滤输出以仅显示特定状态)
- `validation_debug`(在 `ValidationMeta` 中包含原始 HTTP 响应)
- `validation_extract_empty`(即使为空也包含验证器输出)
- `validation_env_vars`(向 CEL 验证器公开额外的环境变量)
## 我可以使用自定义检测规则吗?
可以 - 将完整的 betterleaks TOML 配置粘贴到 `custom_config_toml` 中。根据您编写 TOML 的方式,它可以替换内置规则或附加到内置规则中。
您还可以使用 `enable_rule` 从内置规则集中仅运行白名单规则 ID(例如 `["github-fine-grained-pat", "stripe-secret-key"]`),而无需编写自己的配置。
参考格式:https://github.com/betterleaks/betterleaks/blob/main/.betterleaks.toml
## 输出是什么样的?
每个数据集记录都是 betterleaks 原始的 `Finding` 结构体 - 没有转换,没有字段重命名:
```
{
"RuleID": "github-fine-grained-pat",
"Description": "GitHub Fine-Grained Personal Access Token, risking unauthorized repo access.",
"Match": "github_pat_11AABBCC...",
"Secret": "github_pat_11AABBCC...",
"StartLine": 12,
"EndLine": 12,
"StartColumn": 18,
"EndColumn": 105,
"MatchContext": "...optional surrounding lines if match_context is set...",
"CaptureGroups": {},
"Fragment": {
"FilePath": "config/secrets.env",
"Url": "https://github.com/owner/repo/blob//config/secrets.env#L12"
},
"Attributes": {
"path": "config/secrets.env",
"resource": "git.patch_content",
"url": "https://github.com/owner/repo/blob//config/secrets.env#L12",
"git.author_name": "alice",
"git.author_email": "alice@example.com",
"git.commit": "abcd1234",
"git.date": "2025-06-12T10:23:14Z",
"git.message": "Add config",
"github.owner": "owner",
"github.repo": "repo",
"github.visibility": "public"
},
"Tags": [],
"Fingerprint": "abcd1234:config/secrets.env:github-fine-grained-pat:12",
"ValidationStatus": "valid",
"ValidationReason": "",
"ValidationMeta": {
"username": "alice",
"name": "Alice Doe",
"scopes": "repo, workflow"
}
}
```
该数据集有两个预配置的视图:
- **Findings**:所有记录
- **Live secrets only**:过滤为 `ValidationStatus == valid`,高信号的分类列表
## 它有多准确?
基于底层的 Betterleaks 1.3.1 规则集(200+ 个检测器),以及上游基于 BPE-tokenization 的误报过滤器和基于 CEL 的上下文过滤器。在实际测试运行中观察到的计算资源使用情况:
- 单个小仓库扫描:约 7 秒,0.0084 个计算单元
- 扫描 `anshumanatrey/*`(约 30 个仓库):约 134 秒,0.1491 个计算单元,735 个发现结果
- 使用查询 `rzp_live_` 进行 3 个仓库的 `global_github` 扫描:约 8.5 秒,0.0095 个计算单元,14 个发现结果
## 常见问题
**问:我可以扫描私有仓库吗?** 可以 - 提供具有 `repo` scope 的 `github_token`。
**问:它会扫描 PR 分支和悬空提交吗?** 通过 `--include prs` 可以扫描 PR ref。目前尚未公开支持悬空提交,但底层工具支持。
**问:它如何处理速率限制?** 如果没有 `github_token`,GitHub 限制为共享的约 60 个请求/小时。使用 token 时:您的账户为 5000 个请求/小时。对于任何实际的扫描,请务必提供 token。
**问:我可以按计划运行它吗?** 可以,通过 Apify 调度。推荐用于持续监控的使用场景。
**问:我可以使用自己的 betterleaks 规则 TOML 吗?** 可以,通过 `custom_config_toml`。或者通过 `enable_rule` 将特定的内置规则列入白名单。
**问:什么是 `global_github` 模式?** 我们在上游 betterleaks 之上添加的功能。您提供一个搜索查询,我们使用 GitHub 代码搜索查找唯一的候选仓库,然后并行对每个仓库运行 `betterleaks git`。适用于在整个 GitHub 中搜寻特定的密钥模式。
**问:为什么不使用更便宜的 gitleaks-github-secret-scanner actor?** 将那个工具用于大容量、对成本敏感的扫描。当实时验证很重要时(漏洞赏金分类、事件响应、了解实际需要轮换哪些密钥),请使用此工具。
**问:检测到的密钥会怎样处理?** 写入运行的数据集中,仅供运行该 actor 的用户访问。我们绝不会在服务器端存储它们。
**问:我可以扫描我不拥有的 S3 存储桶吗?** 只有在它是公开的(匿名模式)或者您拥有凭据的情况下才可以。
**问:最大扫描大小是多少?** 对仓库没有硬性上限。`max_target_megabytes`(默认为 100)会跳过超过该大小的文件。
## 限制
- 每个 CEL 规则的验证:只有带有 `validate` 子句的规则才会实际探测 live 环境。并非每种密钥类型都已有此功能。
- `global_github` 模式需要 GitHub PAT(代码搜索仅限授权使用)。
- `dir` 模式要求源是可下载的压缩包 URL,而不是本地文件。
- Apify 运行超时将单个扫描限制为每个子进程 30 分钟。对于超过 200 个仓库的组织扫描,请拆分为多次运行。
- `stdin` 模式受限于 Apify 的输入大小上限(约 5 MB)。
## 伦理使用
仅供授权的安全测试使用。此 actor 扫描公开的 GitHub 内容(任何已登录的 GitHub 用户都能看到的相同内容),或您的 PAT 明确授权访问的私有仓库。
发现的结果应通过负责任的披露渠道进行报告:
- 泄露的开发者(提交作者邮箱)
- 厂商的 `security@` 地址
- 厂商存在的漏洞赏金计划
在未经所有者授权的情况下使用泄露的凭据在大多数司法管辖区都是非法的。
## 我作品集中的其他 actor
- [gitleaks-github-secret-scanner](https://github.com/AnshumanAtrey/gitleaks-github-secret-scanner) - 更便宜的基于 Gitleaks 的无验证扫描器
- [holehe-email-osint](https://github.com/AnshumanAtrey/holehe-email-osint) - 邮箱关联的注册账户(+ 个网站)
- [phoneinfoga-phone-osint](https://github.com/AnshumanAtrey/phoneinfoga-phone-osint) - 电话 OSINT
- [theharvester-osint](https://github.com/AnshumanAtrey/theharvester-osint) - 通过公开来源获取邮箱 / 子域名 / 主机
- [social-analyzer](https://github.com/AnshumanAtrey/social-analyzer) - 跨 300+ 个社交平台的用户名
- [nmap-scanner](https://github.com/AnshumanAtrey/nmap-scanner) - Nmap 端口扫描器
- [netintel](https://github.com/AnshumanAtrey/netintel) - DNS / WHOIS / IP 地理位置 / 端口扫描 / SSL / 技术栈
- [instagram-profile-intel-no-login](https://github.com/AnshumanAtrey/instagram-profile-intel-no-login) - 免登录的 Instagram 资料情报
- [bug-bounty-finder](https://github.com/AnshumanAtrey/bug-bounty-finder) - 搜索 HackerOne、Bugcrowd、Intigriti
## 许可证
MIT。上游的 Betterleaks 二进制文件也是 MIT 许可证,由 [betterleaks/betterleaks](https://github.com/betterleaks/betterleaks)(Zachary Rice 以及来自 Red Hat、Amazon、RBC 的共同维护者)维护。
标签:日志审计, 漏洞探索