jay-tank/secmend

GitHub: jay-tank/secmend

secmend 是一款结合 AI 的密钥泄露检测与修复指导工具,帮助开发者发现泄露凭证并生成针对不同服务商的吊销、轮转和历史清除操作手册。

Stars: 0 | Forks: 0

# secmend [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/jay-tank/secmend/actions/workflows/ci.yml) [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](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, 上游代理, 安全助手, 无后门, 网络安全研究, 逆向工具