jay-tank/secmend
GitHub: jay-tank/secmend
secmend 是一款结合 AI 的密钥泄露检测与修复指导工具,帮助开发者发现泄露凭证并生成针对不同服务商的吊销、轮转和历史清除操作手册。
Stars: 0 | Forks: 0
# secmend
[](https://github.com/jay-tank/secmend/actions/workflows/ci.yml)
[](https://www.python.org/)
[](LICENSE)
大多数密钥扫描器只停留在**检测**阶段——它们告诉你密钥泄露了,然后就
留给您自己去想办法解决。但真正的差距不在于检测,而在于**后续行动**:
研究表明,大多数泄露的凭证在暴露后仍会保持*激活*状态长达数年,
而暴露的云密钥可能在几分钟内就被滥用。
`secmend` 弥补了这一差距。它不仅能检测密钥,**还能**为您提供具体的、
特定于提供商的操作指南:*立即*吊销什么、如何轮转、从历史记录中清除它的
确切 `git`/BFG 命令,以及如何防止再次发生。
```
🔑 3 secret(s) detected:
● AWS Access Key ID (critical) AKIA************MPLE config.py:4
● GitHub Personal Access Token (critical) ghp_********************************wxyz config.py:5
● Stripe Secret Key (critical) sk_l************************uvwx config.py:6
🛠 Remediation (critical): Live credentials were committed and must be treated as compromised.
🚨 Immediate actions:
› Deactivate the AWS key: IAM → Users → Security credentials → Make inactive → Delete.
› Revoke the GitHub token at github.com/settings/tokens.
› Roll the Stripe key in the Stripe Dashboard → Developers → API keys.
🔄 Rotate & update: …
🧹 Scrub from git history: …
🛡 Prevent recurrence: …
```
## 为什么选择 secmend
| | 典型的扫描器 | **secmend** |
| :--- | :--- | :--- |
| 检测密钥 | ✅ | ✅ |
| 告诉您*如何*修复每一个问题 | ❌ | ✅ 特定于提供商 |
| Git-history 清除命令 | ❌ | ✅ |
| 预防指导 | ❌ | ✅ |
| 无需 API key 即可工作 | — | ✅ `--detect-only` / `mock` / 本地 Ollama |
| 绝不将密钥发送给 LLM | — | ✅ 只有掩码后的元数据会离开您的机器 |
## 安全第一
- **您的密钥永远不会离开您的机器。** 只有每次发现的*类型*(例如
"AWS Access Key ID")会发送给 LLM —— 绝不会发送其值。预览将被掩码处理。
- **只读模式。** secmend 绝不会编辑、提交或删除任何内容。它只提供建议;
由您来运行命令。
- **无需 key** 即可获得价值:`--detect-only` 和 `--provider mock` 完全
离线;`--provider ollama` 使用本地模型。
## 安装
```
# 从源码安装(直到发布到 PyPI)
git clone https://github.com/jay-tank/secmend.git
cd secmend
pip install .
# 对于 Claude / OpenAI providers:
pip install '.[claude]' # or '.[openai]'
```
## 用法
```
# 扫描文件或整个目录
secmend ./src
# 扫描 staged diff(非常适合作为 pre-commit / CI gate)
git diff --cached | secmend --stdin
# 检查您担心的单个值
secmend --secret "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 仅检测 —— 不使用 LLM,完全离线,如果发现任何内容则 exits non-zero
secmend ./src --detect-only
# 选择一个 provider(默认:claude)。mock 不需要 key。
secmend ./src --provider mock
secmend ./src --provider ollama
secmend ./src --json
```
**退出代码:** `0` = 干净,`1` = 发现密钥,`2` = 使用/读取错误 —— 因此它
可以直接插入 CI 步骤或 git hook 中。
## 提供商
| 提供商 | 标志 | 需求 |
| :--- | :--- | :--- |
| Claude *(默认)* | `--provider claude` | `ANTHROPIC_API_KEY` + `pip install '.[claude]'` |
| OpenAI | `--provider openai` | `OPENAI_API_KEY` + `pip install '.[openai]'` |
| Ollama (本地) | `--provider ollama` | 运行中的本地 Ollama |
| Mock (离线) | `--provider mock` | 无需任何内容 —— 确定性的演示输出 |
有关配置,请参阅 [docs/PROVIDERS.md](docs/PROVIDERS.md),有关使用方法(pre-commit hook、CI gate、JSON 管道),请参阅
[docs/USAGE.md](docs/USAGE.md)。
## 它能检测什么
AWS key、GitHub PAT(classic + fine-grained)、GitLab PAT、Stripe key、OpenAI /
Anthropic / Google / Slack / SendGrid / PyPI token、私钥、JWT、Slack
webhook,以及通用的 `password/secret/token = …` 赋值。检测是基于模式的
且是**尽力而为**的 —— 它是对 gitleaks 等完整历史记录扫描器的补充,而不是替代。
## 限制
- 基于模式的检测可能会漏掉自定义/混淆的密钥,并且可能会误报相似的内容。
请将检测结果视为确定优先级的起点。
- 修复指导是 AI 生成的 —— 在运行任何命令之前**请先阅读**,
尤其是历史记录重写。
- v1 仅提供建议;它不会调用提供商的 API 来为您轮转 key(这是设计使然)。
## 许可证
MIT —— 请参阅 [LICENSE](LICENSE)。
标签:AI辅助修复, AI风险缓解, DevSecOps, Petitpotam, Python, StruQ, 上游代理, 安全助手, 无后门, 网络安全研究, 逆向工具