vercel-labs/deepsec
GitHub: vercel-labs/deepsec
一款由 AI agent 驱动的代码库漏洞扫描工具,专为大规模代码库的深度安全审查而设计。
Stars: 6148 | Forks: 359
# deepsec
`deepsec` 是一个由 agent 驱动的漏洞扫描程序,您可以在自己的基础设施中运行它,经过优化,可对现有大规模代码仓库中的所有代码执行按需审查。
`deepsec` 旨在发现那些长期潜伏在应用程序中且难以被发现的问题。它被配置为在最高思考级别下使用最佳模型(可通过 `--thinking-level` 调整,请参阅 [docs/models.md](./docs/models.md)),这意味着对于大型代码库,单次扫描可能需要花费数千甚至数万美元。我们的客户认为这是值得的,因为通过这种方式,他们能够极快地修补那些原本会被忽视的漏洞。
对于大型代码库,工作会并行分发到多台 worker 机器上执行。
如果某次运行被中断或中途出错,只需重新运行相同的
命令即可——deepsec 会从上次中断的地方继续,跳过已经分析过的文件,只对剩余部分进行调查。
## 开始使用
导航到您想要扫描的代码仓库根目录,然后执行:
```
npx deepsec init # creates .deepsec/ with this repo as the first project
cd .deepsec
pnpm install # installs deepsec from npm
# 按照 `init` 输出的指示进行
```
现在让您的编程 agent 引导完成安装。打开您选择的
agent 并输入提示词:
然后从 `.deepsec/` 目录内部执行扫描:
```
pnpm deepsec scan
pnpm deepsec process
pnpm deepsec revalidate # optional, cuts FP rate
pnpm deepsec export --format md-dir --out ./findings
```
如果您认为 `deepsec` 应该检查代码的更多部分,可以向其提供 [编写 matcher](docs/writing-matchers.md) 文档,以便在您的代码库中寻找更有价值的切入点。
## 文档
- [docs/getting-started.md](docs/getting-started.md) — 首次扫描操作指南
- [docs/reviewing-changes.md](docs/reviewing-changes.md) — 用于 PR 审查和 CI 门禁的 `process --diff`
- [docs/supported-tech.md](docs/supported-tech.md) — deepsec 开箱即支持识别的框架与生态系统
- [docs/writing-matchers.md](docs/writing-matchers.md) — **提示您的编程 agent 以扩充您的 matcher 集合**
- [docs/configuration.md](docs/configuration.md) — `deepsec.config.ts` 参考
- [docs/plugins.md](docs/plugins.md) — 插件编写
- [docs/models.md](docs/models.md) — 模型选择、默认设置、拒绝机制及未来模型
- [docs/vercel-setup.md](docs/vercel-setup.md) — AI Gateway + Vercel Sandbox 密钥 / token
- [docs/architecture.md](docs/architecture.md) — pipeline 内部机制
- [docs/data-layout.md](docs/data-layout.md) — `data/` schema(FileRecord、RunMeta、…)
- [docs/faq.md](docs/faq.md) — 成本、模型选择、沙盒模式、误报率
- [samples/](samples/) — 可直接复制粘贴的起点(当前包含:`webapp/`)
- [CONTRIBUTING.md](CONTRIBUTING.md) — 仓库结构、开发工作流
## AI 提供商
在本地运行时,如果您已在本机登录,`deepsec` 会回退使用您现有的 `claude` /
`codex` 订阅。订阅服务
(Claude Pro/Max、ChatGPT Plus)可用于评估 deepsec,
但通常没有足够的配额空间来执行完整的仓库扫描。
要进行实际扫描,请使用 Vercel AI Gateway。一个密钥即可同时覆盖 Claude 和
Codex,且网关的默认配额专为高度并行的
研究工作而设计。
```
AI_GATEWAY_API_KEY=vck_...
```
请参阅 [docs/vercel-setup.md](docs/vercel-setup.md) 了解如何获取密钥以及
Vercel Sandbox 的设置。要绕过网关,请显式设置
`ANTHROPIC_AUTH_TOKEN` + `ANTHROPIC_BASE_URL`(或 OpenAI 的对应变量)。
显式设置的值始终优先于 `AI_GATEWAY_API_KEY`
展开的值。
如果 `process` 或 `revalidate` 运行由于上游凭据的
配额或额度耗尽而停止,deepsec 会优雅地停止,并告知您
充值地址。之后重新运行相同的命令,它会从上次中断的地方继续。
## 分布式执行(可选)
大型 monorepo 可以将工作分发到 [Vercel Sandbox](https://vercel.com/docs/vercel-sandbox) microVM 中执行:
```
pnpm deepsec sandbox process --project-id my-app --sandboxes 10 --concurrency 4
```
需要 Vercel 账户。本地工作树会被打包并上传;
`.git` 会被排除。支持 OIDC token(本地)和 access
token(CI)——请参阅
[docs/vercel-setup.md](docs/vercel-setup.md)。
## deepsec 自身的安全模型
请将 `deepsec` 视为在其运行环境中拥有完整 shell 访问权限的
编程 agent。它旨在处理受信任的输入(您的源代码),但您可能仍然
会担心由于外部依赖或第三方引入的代码(vendored code)而导致的 prompt injection。
在沙盒中运行(见上文)确实可以大幅限制潜在的暴露风险:
- 编程 agent 的 API 密钥会在沙盒外部注入,因此无法被窃取
- 对于 worker 沙盒,从沙盒发出的网络流量被限制为只能访问编程 agent 的主机(在引导过程中允许网络流出,但该过程不会运行编程 agent)
## 工作流参考
| 命令 | 功能 |
|-----------------|----------------------------------------------------------|
| `scan` | 使用 regex matcher 查找候选站点(快速,无 AI) |
| `process` | AI 调查;输出发现的问题 + 建议 |
| `process --diff`| PR 模式:仅扫描并调查 diff 中发生更改的文件 |
| `triage` | 轻量级的 P0/P1/P2 分类(使用更便宜的模型) |
| `revalidate` | 重新检查现有发现的问题;检查 git 历史记录以确认是否已修复 |
| `enrich` | 添加 git 提交者信息 +(通过插件)所有权数据 |
| `report` | 生成单个项目的 Markdown + JSON 摘要 |
| `export` | 导出每个发现问题的 JSON 或包含 markdown 文件的目录 |
| `metrics` | 跨项目的统计数据:严重程度、按类型分类的漏洞、TPs |
| `status` | 项目镜像的快照 |
| `sandbox ` | 在 Vercel Sandbox microVM 上运行上述任何命令 |
## 许可证
Apache 2.0。请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
标签:GNU通用公共许可证, MITM代理, Node.js, 暗色界面, 自动化攻击, 静态应用安全测试