Stratus-Security/GitRekt

GitHub: Stratus-Security/GitRekt

一款针对 GitHub 的泄露信息发现与分类工具,可通过 AI 辅助筛选密钥、凭证和组织敏感数据。

Stars: 1 | Forks: 0

# GitRekt GitRekt 可帮助您对 GitHub 代码搜索结果进行分类整理,排查公开或已授权仓库中泄露的密钥、凭证、敏感配置和高风险个人数据。 GitHub 代码搜索功能强大,但原始结果噪音很大:同一代码段可能出现在多个生成的文件、旧导出文件、备份、测试数据、文档或误报示例中。GitRekt 在搜索之上添加了工作流层:直接文件链接、行号解析、去重处理、限流处理、可选的 GitHub App 认证,以及可选的 AI 审核功能,能够解释为什么某个匹配值得关注。 GitRekt demo 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扫描, 代码搜索, 信息泄露, 凭证枚举, 凭证泄露检测, 密码管理, 密钥发现, 敏感信息发现, 日志审计, 泄漏检测, 自动化安全审计, 输入验证