Stratus-Security/GitRekt
GitHub: Stratus-Security/GitRekt
一款针对 GitHub 的泄露信息发现与分类工具,可通过 AI 辅助筛选密钥、凭证和组织敏感数据。
Stars: 1 | Forks: 0
# GitRekt
GitRekt 可帮助您对 GitHub 代码搜索结果进行分类整理,排查公开或已授权仓库中泄露的密钥、凭证、敏感配置和高风险个人数据。
GitHub 代码搜索功能强大,但原始结果噪音很大:同一代码段可能出现在多个生成的文件、旧导出文件、备份、测试数据、文档或误报示例中。GitRekt 在搜索之上添加了工作流层:直接文件链接、行号解析、去重处理、限流处理、可选的 GitHub App 认证,以及可选的 AI 审核功能,能够解释为什么某个匹配值得关注。
The above example is a useful use case when penetration testing. Simply search the customers domain (e.g. @domain.com) with AI and agent mode enabled for best results as seen here. This often finds valid credentials or leaked data for individual companies.
## GitRekt 何时能帮上忙
当您已有想要在 GitHub 上调查的信号时,可使用 GitRekt:
- 疑似泄露的密码、令牌、API 密钥、客户端密钥、私钥或连接字符串,
- 公司域名、内部主机名、产品名称、客户名称或项目代号,
- 备份文件、配置文件、`.env` 文件、CSV 导出、日志或迁移转储,
- 广泛搜索 PII 时需要从普通公开联系数据中分离出有用的发现,
- 对您自己的仓库或您有权审查的仓库进行定期检查,防止意外泄露。
## 工作原理
GitRekt 会搜索 GitHub 的 gist 和仓库,找到匹配时流式输出结果,并打印带有直接 GitHub 链接的可读结果。默认情况下,它按 `gists,repos` 的顺序进行搜索。Gist 通过 GitHub 的 gist 搜索结果发现,然后 GitRekt 获取匹配的 gist 文件以获取代码片段、行锚点和 AI 上下文。启用 AI 验证后,每个结果会被分类为 `likely`、`possible` 或 `none`,以便您过滤明显的噪音。
代理模式更进一步:在对匹配进行分类之前,GitRekt 会收集仓库上下文,例如匹配的文件、高信号伴随文件和仓库树中的可疑路径。这有助于发现那些首个匹配只是线索,而附近的 `.env`、配置备份、CSV 导出或包含令牌的文件才是真正问题的情况。
## 它不是什么
GitRekt 不会验证凭证是否仍然有效、利用发现结果,或替代 CI 中的密钥扫描。它最适合用作研究人员、安全团队和维护者的发现和分类层,需要快速一致地审查 GitHub 搜索结果。
## 下载
从 [GitHub Releases 页面](https://github.com/Stratus-Security/GitRekt/releases) 下载预编译的二进制文件。
在 Linux 或 macOS 上解压后,如需要可执行权限:
```
chmod +x GitRekt
```
## 基本用法
搜索简单字符串:
```
GitRekt --query "Password1"
```
一次运行中搜索多个词:
```
GitRekt --query "Password1" --query "Password2" --query "@example.com"
```
仅搜索仓库:
```
GitRekt --query "Password1" --sources repos
```
显式指定顺序来源:
```
GitRekt --query "Password1" --sources repos,gists
```
将输出写入文件:
```
GitRekt --query "Password1" --output results.txt
```
完全按照原样使用高级 GitHub 代码搜索语法:
```
GitRekt --advanced --query "\"Password1\" language:C# path:/src/"
```
## GitHub 认证
未认证的 GitHub 搜索限制很大。要实际使用,请进行认证。
### 个人访问令牌
细粒度个人访问令牌是个人使用最简单的选项。在 [GitHub 的个人访问令牌设置](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) 中创建一个:
1. 进入 GitHub:**Settings** -> **Developer settings** -> **Personal access tokens** -> **Fine-grained tokens**。
2. 点击 **Generate new token**。
3. 选择 GitRekt 应该被允许搜索的所有者和仓库。
4. 设置仓库权限:
- **Contents**:**Read-only**
- **Metadata**:**Read-only**(如果 GitHub 显示可配置的话);GitHub 通常会自动包含元数据访问权限。
5. 生成令牌并妥善保存。GitHub 只显示一次。
设置环境变量:
```
export GITHUB_ACCESS_TOKEN="github_pat_..."
GitRekt --query "Password1"
```
或直接传递:
```
GitRekt --token "github_pat_..." --query "Password1"
```
如果必须使用经典令牌,请使用适用于目标仓库的最小范围。私有仓库搜索通常需要更广泛的 `repo` 范围。
### GitHub App
GitHub App 认证更适合长时间扫描,因为安装令牌可以刷新并限定在已安装的账户范围内。
在 [GitHub 的 GitHub App 注册页面](https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app) 创建应用:
1. 进入 GitHub:**Settings** -> **Developer settings** -> **GitHub Apps** -> **New GitHub App**。如果是组织所有的应用,请使用组织的设置。
2. 为其指定一个清晰的名称,例如 `GitRekt Scanner`。
3. 将 **Homepage URL** 设置为您的项目、公司或仓库 URL。
4. 禁用 **Active** webhook,除非您有其他用途。GitRekt 不需要 webhook。
5. 设置仓库权限:
- **Contents**:**Read-only**
- **Metadata**:**Read-only**
6. 不订阅 webhook 事件。
7. 选择可以在哪里安装应用:
- **Only on this account** 用于个人/内部使用。
- **Any account** 如果其他组织也应该安装它。
8. 点击 **Create GitHub App**。
9. 从应用的 **General** 页面复制 **App ID**。
10. 在 **Private keys** 下,点击 **Generate a private key** 并下载 `.pem` 文件。
11. 点击 **Install App** 并将其安装到 GitRekt 应该扫描的账户或仓库上。
如果应用有多个安装,请从已安装应用的 URL 中复制安装 ID。它是类似 `https://github.com/settings/installations/12345678` 这样的 URL 中的数字 ID。
设置:
```
export GITHUB_APP_ID="12345"
export GITHUB_APP_INSTALLATION_ID="67890"
export GITHUB_APP_PRIVATE_KEY_PATH="/path/to/app.private-key.pem"
GitRekt --query "Password1"
```
如果应用只有一个安装,`GITHUB_APP_INSTALLATION_ID` 是可选的。当设置了 `GITHUB_APP_ID` 时,GitRekt 也可以从当前目录中选取恰好一个 `*.private-key.pem` 文件。
GitHub App 安装令牌是短期有效的;GitRekt 会从应用 ID、安装 ID 和私钥创建和刷新它们。该应用不会绕过 GitHub 代码搜索限流,但它提供了更清晰的按安装范围划分,并避免了长期存在的用户凭证。
等效的 CLI 标志:
```
GitRekt \
--github-app-id 12345 \
--github-app-installation-id 67890 \
--github-app-private-key-path app.private-key.pem \
--query "Password1"
```
## AI 验证
AI 验证可以将每个显示的结果分类为:
- `likely`
- `possible`
- `none`
您可以通过判决过滤输出,其中包括更敏感的判决:
```
GitRekt --query "Password1" --ai --ai-model llama3.2 --ai-verdict possible
```
此示例命令显示敏感和可能敏感的结果,但隐藏 AI 认为不敏感的任何结果。
当广泛的 PII 风格搜索产生太多普通业务联系匹配时,可使用严格模式:
```
GitRekt --query "@example.com" --ai --strict --ai-model llama3.2 --ai-verdict possible
```
严格模式将营销列表、公开员工目录和普通工作联系方式(如姓名、公司、职位、电子邮件和办公室电话)视为低信号。它仍然保留更高影响力的发现,例如凭证、令牌、私钥、家庭住址、政府身份证、出生日期、薪资或补偿数据、财务数据、医疗数据、个人账户数据和私人客户记录。
### 代理模式
代理模式在验证之前收集同一仓库的上下文。它适用于每个 AI,通过在让模型分类结果之前添加匹配的文件摘录和高信号仓库候选。
代理还会查找仓库中的其他敏感文件,自动发现可能与匹配关键词相关的泄露密钥、PII 等。对于 gist 结果,代理模式仅限于匹配的 gist 和同一 gist 中的其他文件。
```
GitRekt --query "Password1" --ai-agent --ai-model llama3.2 --ai-verdict possible
```
### Ollama
Ollama 是默认的 AI 提供商。
```
GitRekt --query "Password1" --ai --ai-model llama3.2
```
### Gemini
```
export GEMINI_API_KEY="..."
GitRekt --query "Password1" --ai-provider gemini --ai-model gemini-2.5-flash
```
您也可以使用 `GOOGLE_API_KEY`、`--ai-api-key` 或 `--gemini-api-key`。
### OpenAI
```
export OPENAI_API_KEY="..."
GitRekt --query "Password1" --ai-provider openai --ai-model gpt-5-mini
```
您也可以使用 `--ai-api-key` 或 `--openai-api-key`。
## 限流
与其他许多 GitHub API 相比,GitHub 代码搜索的限流桶很小。GitRekt 通过以下方式减少不必要的 API 使用:
- 将仓库范围搜索的大小调整到请求的限制,
- 缓存获取的文件内容,
- 缓存仓库树,
- 在代理模式下使用仓库树检查而不是重复的广泛代码搜索,
- 批量处理同一仓库的 AI 验证工作,
- 避免对相同文件片段重复进行 AI 验证,
- 当 GitHub 暴露限流重置头时对请求进行限速,
- 在长时间运行期间刷新 GitHub App 安装令牌。
对于更重的使用,优先选择按客户或组织安装的 GitHub App。避免通过一个共享的 GitHub 凭证运行多个客户。
## 致谢
GitRekt 的灵感部分来自 Bishop Fox 的 [GitGot](https://github.com/BishopFox/GitGot),这是一个长期存在的 GitHub 密钥搜索工具。
The above example is a useful use case when penetration testing. Simply search the customers domain (e.g. @domain.com) with AI and agent mode enabled for best results as seen here. This often finds valid credentials or leaked data for individual companies.
## GitRekt 何时能帮上忙
当您已有想要在 GitHub 上调查的信号时,可使用 GitRekt:
- 疑似泄露的密码、令牌、API 密钥、客户端密钥、私钥或连接字符串,
- 公司域名、内部主机名、产品名称、客户名称或项目代号,
- 备份文件、配置文件、`.env` 文件、CSV 导出、日志或迁移转储,
- 广泛搜索 PII 时需要从普通公开联系数据中分离出有用的发现,
- 对您自己的仓库或您有权审查的仓库进行定期检查,防止意外泄露。
## 工作原理
GitRekt 会搜索 GitHub 的 gist 和仓库,找到匹配时流式输出结果,并打印带有直接 GitHub 链接的可读结果。默认情况下,它按 `gists,repos` 的顺序进行搜索。Gist 通过 GitHub 的 gist 搜索结果发现,然后 GitRekt 获取匹配的 gist 文件以获取代码片段、行锚点和 AI 上下文。启用 AI 验证后,每个结果会被分类为 `likely`、`possible` 或 `none`,以便您过滤明显的噪音。
代理模式更进一步:在对匹配进行分类之前,GitRekt 会收集仓库上下文,例如匹配的文件、高信号伴随文件和仓库树中的可疑路径。这有助于发现那些首个匹配只是线索,而附近的 `.env`、配置备份、CSV 导出或包含令牌的文件才是真正问题的情况。
## 它不是什么
GitRekt 不会验证凭证是否仍然有效、利用发现结果,或替代 CI 中的密钥扫描。它最适合用作研究人员、安全团队和维护者的发现和分类层,需要快速一致地审查 GitHub 搜索结果。
## 下载
从 [GitHub Releases 页面](https://github.com/Stratus-Security/GitRekt/releases) 下载预编译的二进制文件。
在 Linux 或 macOS 上解压后,如需要可执行权限:
```
chmod +x GitRekt
```
## 基本用法
搜索简单字符串:
```
GitRekt --query "Password1"
```
一次运行中搜索多个词:
```
GitRekt --query "Password1" --query "Password2" --query "@example.com"
```
仅搜索仓库:
```
GitRekt --query "Password1" --sources repos
```
显式指定顺序来源:
```
GitRekt --query "Password1" --sources repos,gists
```
将输出写入文件:
```
GitRekt --query "Password1" --output results.txt
```
完全按照原样使用高级 GitHub 代码搜索语法:
```
GitRekt --advanced --query "\"Password1\" language:C# path:/src/"
```
## GitHub 认证
未认证的 GitHub 搜索限制很大。要实际使用,请进行认证。
### 个人访问令牌
细粒度个人访问令牌是个人使用最简单的选项。在 [GitHub 的个人访问令牌设置](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) 中创建一个:
1. 进入 GitHub:**Settings** -> **Developer settings** -> **Personal access tokens** -> **Fine-grained tokens**。
2. 点击 **Generate new token**。
3. 选择 GitRekt 应该被允许搜索的所有者和仓库。
4. 设置仓库权限:
- **Contents**:**Read-only**
- **Metadata**:**Read-only**(如果 GitHub 显示可配置的话);GitHub 通常会自动包含元数据访问权限。
5. 生成令牌并妥善保存。GitHub 只显示一次。
设置环境变量:
```
export GITHUB_ACCESS_TOKEN="github_pat_..."
GitRekt --query "Password1"
```
或直接传递:
```
GitRekt --token "github_pat_..." --query "Password1"
```
如果必须使用经典令牌,请使用适用于目标仓库的最小范围。私有仓库搜索通常需要更广泛的 `repo` 范围。
### GitHub App
GitHub App 认证更适合长时间扫描,因为安装令牌可以刷新并限定在已安装的账户范围内。
在 [GitHub 的 GitHub App 注册页面](https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app) 创建应用:
1. 进入 GitHub:**Settings** -> **Developer settings** -> **GitHub Apps** -> **New GitHub App**。如果是组织所有的应用,请使用组织的设置。
2. 为其指定一个清晰的名称,例如 `GitRekt Scanner`。
3. 将 **Homepage URL** 设置为您的项目、公司或仓库 URL。
4. 禁用 **Active** webhook,除非您有其他用途。GitRekt 不需要 webhook。
5. 设置仓库权限:
- **Contents**:**Read-only**
- **Metadata**:**Read-only**
6. 不订阅 webhook 事件。
7. 选择可以在哪里安装应用:
- **Only on this account** 用于个人/内部使用。
- **Any account** 如果其他组织也应该安装它。
8. 点击 **Create GitHub App**。
9. 从应用的 **General** 页面复制 **App ID**。
10. 在 **Private keys** 下,点击 **Generate a private key** 并下载 `.pem` 文件。
11. 点击 **Install App** 并将其安装到 GitRekt 应该扫描的账户或仓库上。
如果应用有多个安装,请从已安装应用的 URL 中复制安装 ID。它是类似 `https://github.com/settings/installations/12345678` 这样的 URL 中的数字 ID。
设置:
```
export GITHUB_APP_ID="12345"
export GITHUB_APP_INSTALLATION_ID="67890"
export GITHUB_APP_PRIVATE_KEY_PATH="/path/to/app.private-key.pem"
GitRekt --query "Password1"
```
如果应用只有一个安装,`GITHUB_APP_INSTALLATION_ID` 是可选的。当设置了 `GITHUB_APP_ID` 时,GitRekt 也可以从当前目录中选取恰好一个 `*.private-key.pem` 文件。
GitHub App 安装令牌是短期有效的;GitRekt 会从应用 ID、安装 ID 和私钥创建和刷新它们。该应用不会绕过 GitHub 代码搜索限流,但它提供了更清晰的按安装范围划分,并避免了长期存在的用户凭证。
等效的 CLI 标志:
```
GitRekt \
--github-app-id 12345 \
--github-app-installation-id 67890 \
--github-app-private-key-path app.private-key.pem \
--query "Password1"
```
## AI 验证
AI 验证可以将每个显示的结果分类为:
- `likely`
- `possible`
- `none`
您可以通过判决过滤输出,其中包括更敏感的判决:
```
GitRekt --query "Password1" --ai --ai-model llama3.2 --ai-verdict possible
```
此示例命令显示敏感和可能敏感的结果,但隐藏 AI 认为不敏感的任何结果。
当广泛的 PII 风格搜索产生太多普通业务联系匹配时,可使用严格模式:
```
GitRekt --query "@example.com" --ai --strict --ai-model llama3.2 --ai-verdict possible
```
严格模式将营销列表、公开员工目录和普通工作联系方式(如姓名、公司、职位、电子邮件和办公室电话)视为低信号。它仍然保留更高影响力的发现,例如凭证、令牌、私钥、家庭住址、政府身份证、出生日期、薪资或补偿数据、财务数据、医疗数据、个人账户数据和私人客户记录。
### 代理模式
代理模式在验证之前收集同一仓库的上下文。它适用于每个 AI,通过在让模型分类结果之前添加匹配的文件摘录和高信号仓库候选。
代理还会查找仓库中的其他敏感文件,自动发现可能与匹配关键词相关的泄露密钥、PII 等。对于 gist 结果,代理模式仅限于匹配的 gist 和同一 gist 中的其他文件。
```
GitRekt --query "Password1" --ai-agent --ai-model llama3.2 --ai-verdict possible
```
### Ollama
Ollama 是默认的 AI 提供商。
```
GitRekt --query "Password1" --ai --ai-model llama3.2
```
### Gemini
```
export GEMINI_API_KEY="..."
GitRekt --query "Password1" --ai-provider gemini --ai-model gemini-2.5-flash
```
您也可以使用 `GOOGLE_API_KEY`、`--ai-api-key` 或 `--gemini-api-key`。
### OpenAI
```
export OPENAI_API_KEY="..."
GitRekt --query "Password1" --ai-provider openai --ai-model gpt-5-mini
```
您也可以使用 `--ai-api-key` 或 `--openai-api-key`。
## 限流
与其他许多 GitHub API 相比,GitHub 代码搜索的限流桶很小。GitRekt 通过以下方式减少不必要的 API 使用:
- 将仓库范围搜索的大小调整到请求的限制,
- 缓存获取的文件内容,
- 缓存仓库树,
- 在代理模式下使用仓库树检查而不是重复的广泛代码搜索,
- 批量处理同一仓库的 AI 验证工作,
- 避免对相同文件片段重复进行 AI 验证,
- 当 GitHub 暴露限流重置头时对请求进行限速,
- 在长时间运行期间刷新 GitHub App 安装令牌。
对于更重的使用,优先选择按客户或组织安装的 GitHub App。避免通过一个共享的 GitHub 凭证运行多个客户。
## 致谢
GitRekt 的灵感部分来自 Bishop Fox 的 [GitGot](https://github.com/BishopFox/GitGot),这是一个长期存在的 GitHub 密钥搜索工具。标签:AI安全, AI风险缓解, API密钥检测, Chat Copilot, CISA项目, GitHub, GitHub安全, GitHub扫描, OSINT工具, PII检测, Secrets扫描, 代码搜索, 信息泄露, 凭证枚举, 凭证泄露检测, 密码管理, 密钥发现, 敏感信息发现, 日志审计, 泄漏检测, 自动化安全审计, 输入验证