X3r0Day/XeroDay-APISniffer
GitHub: X3r0Day/XeroDay-APISniffer
一个模块化的 GitHub 公开仓库密钥泄露扫描工具,集成 AI 驱动的自然语言查询能力,用于发现和识别暴露的 API 密钥、令牌和敏感凭证。
Stars: 7 | Forks: 0
# XeroDay's API Sniffer
API Sniffer 是一个专注于 GitHub 的秘密发现工具包,用于扫描公开仓库并识别暴露的 API 密钥、令牌、Webhook 和其他敏感凭证。它是 X3r0Day Framework 的一部分,专为安全研究、防御性分析和负责任的披露而构建。
该项目围绕发现、扫描和查询进行组织,配备了一个 AI 优先的启动器、一个工作流编排器、共享路由和搜索实用程序、扫描器仪表板助手以及仓库目标提取助手。
## 工作原理
API Sniffer 支持两种操作模式:
1. **AI 优先启动路径**,通过 `main.py` -> `AIWorkflow.py`,自然语言请求被路由到发现、扫描、直接数据库查询或链式工作流中。
2. **手动阶段执行**,即您自己运行模块或使用编号启动器菜单。
核心流水线如下:
**阶段 1 - 发现 (`APISniffer.py`)**:查询 GitHub 获取最近时间窗口内新创建的公开仓库,将其与活动队列和过往扫描历史进行去重,并将新目标存储在 `recent_repos.json` 中。
**阶段 2 - 扫描 (`APIScanner.py`)**:从队列中拉取仓库,在需要时解析仓库的默认分支,下载仓库归档,扫描匹配的文件,可选择扫描最近的提交补丁,并将结果写入 `leaked_keys.json`、`clean_repos.json` 或 `failed_repos.json`。
**阶段 3 - AI 搜索 (`AISearch.py`)**:使用自然语言查询本地发现数据库。搜索运行时与 AI 工作流共享,因此可以直接从启动器流程回答诸如 `show all the API keys` 这样的数据库问题。
**共享运行时模块 (`src/shared/`)**:包含用于 API 签名定义、类别路由、AI 辅助搜索、扫描器匹配、扫描器仪表板渲染和 GitHub 仓库目标提取的可复用逻辑。
### 项目流程
```
main.py
├── Enter
│ └── src/AIWorkflow.py
│ ├── Query request -> src/shared/ai_search_runtime.py -> leaked_keys.json
│ ├── Discovery request -> src/APISniffer.py -> recent_repos.json
│ ├── Scanner request -> src/APIScanner.py -> leaked_keys.json / clean_repos.json / failed_repos.json
│ └── Mixed request -> orchestrated multi-step workflow
└── Manual
└── Control Center
├── src/APISniffer.py
├── src/APIScanner.py
├── src/AISearch.py
└── src/AIWorkflow.py
```
## 项目结构
```
API Sniffer/
├── main.py # Control center entry point
├── src/
│ ├── APISniffer.py # Stage 1: GitHub repository discovery
│ ├── APIScanner.py # Stage 2: Repository scanning and secret detection
│ ├── AISearch.py # Stage 3: AI-powered local database search
│ ├── AIWorkflow.py # AI workflow router and stage orchestrator
│ └── shared/
│ ├── __init__.py
│ ├── ai_search_runtime.py # Shared AI query runtime used by AISearch and AIWorkflow
│ ├── api_signatures.py # Secret signature definitions
│ ├── category_routing.py # Query/category inference helpers
│ ├── scanner_dashboard.py # Dashboard rendering for the scanner
│ ├── scanner_matcher.py # Regex matching and finding extraction
│ └── scanner_targets.py # Repo target extraction from prompts/URLs
├── requirements.txt
├── live_proxies.txt # Optional proxy list to bypass rate limits
└── README.md
```
以下文件在运行时生成,不属于源代码的一部分:
| 文件 | 用途 |
|---|---|
| `recent_repos.json` | 已发现并等待扫描的仓库队列 |
| `leaked_keys.json` | 检测到的秘密数据库 |
| `clean_repos.json` | 扫描后未发现问题的仓库 |
| `failed_repos.json` | 下载或解析失败的仓库 |
可选的本地输入文件:
- `live_proxies.txt` - 用户管理的代理列表,格式为 `ip:port`
## 系统要求
- Python 3.8 或更高版本
- `requirements.txt` 中列出的包
安装依赖:
```
pip install -r requirements.txt
```
## 执行顺序
模块可以逐个运行,启动器提供了完成完整工作流的最快路径。
### 统一启动器(推荐)
```
python main.py
```
这将打开启动器。从中您可以:
- 输入 `help` 查看工作流原理
- 输入 `Manual` 打开编号控制中心
- 按 `Enter` 直接打开 AI 工作流
示例请求:
- `show all the API keys`
- `find any Discord tokens`
- `start scanning`
- `run discovery for last 3 minutes, then scan`
### 阶段 1:发现仓库
```
python src/APISniffer.py
```
此步骤查询 GitHub 获取最近创建的仓库,并将新条目写入 `recent_repos.json`。发现过程还会跳过已存在于队列或历史输出文件(`clean_repos.json`、`failed_repos.json` 和 `leaked_keys.json`)中的仓库。如果您的 IP 被限速,它可以回退使用 `live_proxies.txt` 中的代理。
### 阶段 2:扫描泄露的秘密
```
python src/APIScanner.py
```
此步骤从 `recent_repos.json` 读取,在可能的情况下解析仓库的默认分支,将每个仓库作为 ZIP 归档下载,并根据支持的秘密签名进行扫描。它还可以检查最近的提交补丁。结果将写入 `leaked_keys.json`、`clean_repos.json` 或 `failed_repos.json`。已扫描的仓库将从队列中移除。
扫描器会打开一个全屏终端仪表板。
- 按 `Space` 暂停或恢复
- 按 `i` 插入,以便在扫描器运行时要求 AI 插入 GitHub 仓库目标
- 仓库插入接受 GitHub URL 或 `owner/repo` 目标,并将它们推送到活动队列或仅作为 AI 查询
### 阶段 3:查询数据库
```
python src/AISearch.py
```
这将打开本地数据库的 AI 搜索提示符。它需要 Groq API 密钥,可以通过 `GROQ_API_KEY` 设置或在运行时输入。
您也可以在不打开交互式提示符的情况下运行一次性查询:
```
python src/AISearch.py --query "Show all AWS keys"
```
示例查询:
- `Show me all AWS keys`
- `Find any Discord tokens`
- `List all AI-related API keys`
## 代理配置
所有面向网络的脚本都支持 HTTP 代理轮换。在工作目录中创建一个名为 `live_proxies.txt` 的文件,每行一个代理:
```
103.21.244.0:8080
45.77.56.114:3128
192.168.1.100:8888
```
当直接 GitHub 请求被限速或阻止时,代理将作为后备方案使用。
## 支持的 API 密钥签名
签名集包括:
| 类别 | 示例 |
|---|---|
| AI 和 LLM 提供商 | OpenAI (legacy/project), Anthropic, Groq, xAI (Grok), OpenRouter, HuggingFace, Replicate, Cerebras |
| 云和基础设施 | AWS Access Keys, AWS Session Tokens, DigitalOcean, Google API/GCP, Heroku, Databricks |
| 源代码控制 | GitHub classic PATs, GitHub fine-grained PATs, GitLab PATs |
| 包注册表 | NPM, PyPI |
| 通信和 Webhook | Discord bot tokens, Discord webhooks, Slack bot/user tokens, Slack webhooks, Telegram |
| 支付和商务 | Stripe, Square, Shopify |
| 电子邮件和消息传递 | SendGrid, Mailgun, Twilio |
| 数据库和后端服务 | Supabase, Firebase, PlanetScale, Airtable, Appwrite, Deta, PocketBase |
| 其他实用工具 | Postman, Mapbox, Sentry |
## 配置
可以通过编辑脚本顶部的常量来调整关键值。
**APISniffer.py**
- `LOOKBACK_MINS` - 向后搜索新仓库的时间跨度(分钟)
- `CHUNK_MINS` - 每次 GitHub 搜索分块使用的时间窗口大小
- `PAGES_TO_SCRAPE` - 要获取的 GitHub API 结果页数
- `PROXY_RETRY_LIMIT` - 放弃前尝试的最大代理数量
**APIScanner.py**
- `MAX_THREADS` - 并发扫描线程数
- `SCAN_COMMIT_HISTORY` - 是否同时扫描提交差异
- `MAX_HISTORY_DEPTH` - 要扫描的最近提交数量
- `SCAN_HEROKU_KEYS` - 是否包含 Heroku UUID 模式
- `FAT_FILE_LIMIT` - 跳过大于此大小的文件
- `MAX_DOWNLOAD_SIZE_BYTES` - 中止大于此大小的下载
## 免责声明
此工具仅用于教育目的、安全研究和防御性分析。它处理公开的仓库数据,不利用、访问或修改任何系统。
请负责任地使用它,尊重平台规则和速率限制,如果您发现暴露的凭证,请遵循负责任的披露做法。
## 许可证
X3r0Day Framework 的一部分。可免费使用、修改和重新分发,但需注明原始项目的来源。
标签:AI 安全工具, API 安全, DevSecOps, DLP, ESC4, GitHub 安全, Homebrew安装, OSINT, Python, Secret Scanning, Sysdig, 上游代理, 凭证扫描, 实时处理, 无后门, 结构化查询, 网络安全, 自动化安全, 逆向工具, 隐私保护, 黑盒测试