deepsec
来源:GitHub · ⭐ 1062 stars
Deepsec:当 AI Coding Agent 遇上安全审计,代码漏洞无处遁形
项目简介
在 AI 辅助编程席卷开发流程的今天,Cursor、GitHub Copilot 等工具大幅提升了代码产出效率,却也带来了一个被忽视的安全隐患:AI 生成的代码可能包含 SQL 注入、路径遍历、不安全的反序列化等经典漏洞,而传统的静态分析工具(SAST)往往难以跟上这种"AI 加速"的开发节奏。Vercel Labs 推出的 Deepsec 正是瞄准这一痛点,将"AI 生成"与"AI 审计"形成闭环——它不是一个传统的规则引擎,而是一个由 Coding Agent 驱动的安全测试框架。
Deepsec 的核心理念颇具前瞻性:让具备代码理解能力的智能体主动探索代码库,模拟攻击者的思维方式发现漏洞。与传统 SAST 工具依赖预定义规则不同,Deepsec 利用大语言模型的推理能力,能够理解业务上下文、追踪数据流、构造针对性的测试用例。这种"Agentic Security Testing"的范式转变,使得它不仅能发现已知的 CVE 模式漏洞,还能识别因 AI 生成代码的"创造性"而引入的新型安全风险。项目开源两周即收获 1000+ Star,反映出社区对 AI 原生安全工具的强烈期待。
核心特性
- Agent 驱动的漏洞挖掘:基于多步推理的 Coding Agent 架构,能够自主规划审计路径、分析函数调用链、构造 PoC(概念验证) payload,而非简单匹配正则规则
- 深度代码理解能力:利用 AST(抽象语法树)解析与 LLM 语义理解的结合,追踪用户输入到危险函数的完整数据流(Taint Analysis)
- 多语言与框架支持:基于 TypeScript 实现,通过统一的代码表示层支持 JavaScript/TypeScript 生态,并预留了向 Python、Go 等语言扩展的插件接口
- CI/CD 原生集成:提供 GitHub Actions 封装和 CLI 工具链,支持在 PR 阶段自动触发安全扫描,将安全左移(Shift Left)落实到每次代码变更
- 可解释的审计报告:不仅输出漏洞位置,还生成完整的攻击路径说明、风险评级和修复建议,降低安全团队与开发团队的沟通成本
技术实现
Deepsec 的技术架构体现了 Vercel Labs 对"AI Agent 工程化"的深刻理解。其底层采用 分层设计:最底层是语言解析层,基于 Tree-sitter 构建跨语言的 AST 解析能力,将不同语言的源代码统一为标准的语法树表示;中间层是符号执行与数据流引擎,负责构建代码的调用图(Call Graph)和控制流图(CFG),识别潜在的 Source-Sink 对;最上层则是LLM Agent 编排层,这是 Deepsec 区别于传统工具的关键。
在 Agent 层,Deepsec 实现了类似 ReAct(Reasoning + Acting)的循环架构:Planner 模块根据代码结构分解审计任务,Executor 调用工具链(如代码搜索、AST 查询、沙箱执行)收集证据,Critic 模块评估发现的可靠性,最终由 Reporter 生成结构化输出。这种设计巧妙地将 LLM 的"模糊推理"与程序的"精确执行"相结合——LLM 负责判断"这里是否存在漏洞模式",而传统程序分析保证"这个数据流确实可达"。
项目采用 TypeScript 全栈实现,依赖了 @vercel/ai-sdk 进行大模型调用抽象,支持 OpenAI、Anthropic 等主流提供商的灵活切换。值得关注的是其沙箱执行环境的设计:对于识别出的潜在漏洞,Deepsec 会在隔离的 Deno 运行时中验证 PoC 的可利用性,避免误报的同时确保审计过程本身不会引入安全风险。
快速上手
Deepsec 提供了零配置的快速体验方式。首先安装 CLI 工具:
npm install -g @vercel/deepsec
# 或直接使用 npx
npx @vercel/deepsec@latest
配置 API Key 后,即可对目标仓库进行安全审计:
# 设置大模型提供商(以 OpenAI 为例)
export OPENAI_API_KEY="sk-..."
# 扫描本地项目
deepsec scan ./my-project
# 指定扫描深度和并发数
deepsec scan ./my-project --depth thorough --workers 4
# 输出 SARIF 格式供 GitHub Advanced Security 消费
deepsec scan ./my-project --format sarif --output report.sarif
在 CI 环境中集成同样简洁,以下是 GitHub Actions 的示例配置:
name: Security Audit
on: [pull_request]
jobs:
deepsec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Deepsec
uses: vercel-labs/deepsec-action@v1
with:
api-key: ${{ secrets.OPENAI_API_KEY }}
fail-on: high # 发现高危漏洞时阻断合并
应用场景
AI 生成代码的安全把关:某团队使用 Cursor 批量生成用户管理模块后,通过 Deepsec 在 CI 中发现 AI 错误地拼接了 SQL 语句(而非使用参数化查询),且将用户输入直接传入 eval() 函数。传统 ESLint 规则无法识别这种"业务逻辑层面的漏洞",而 Deepsec 的 Agent 通过追踪 req.body.username 到数据库查询的完整路径,精准定位了注入点。
遗留系统的渐进式加固:对于缺乏测试覆盖的老旧 Node.js 项目,安全团队可部署 Deepsec 进行"地毯式"初筛。其 Agent 能够自主探索庞大的代码库,优先攻击暴露在网络层的接口,相比人工审计效率提升数十倍,且不会遗漏因人员流动而失传的暗逻辑。
开源供应链的自主审计:在引入新的 npm 依赖前,开发者可用 Deepsec 对依赖包进行轻量级扫描。其 AST 层面的分析能够识别混淆后的恶意代码模式(如动态 require、异常的 child_process 调用),作为 npm audit 依赖漏洞检测的有力补充。
总结
Deepsec 代表了安全工具演进的重要方向:从"规则驱动"到"智能体驱动"的范式跃迁。它并非要取代成熟的 SAST/DAST 工具链,而是填补了 AI 时代的新型安全空白——当代码的生产方式本身被 AI 改变时,审计方式也必须随之进化。对于采用 AI 辅助编程的团队、追求安全左移的 DevSecOps 实践者,以及需要处理大量遗留代码的安全工程师,Deepsec 提供了兼具深度与效率的解决方案。当然,作为早期项目,其在复杂框架(如 Next.js 服务端组件)上的分析精度仍有提升空间,且 LLM 调用的成本与延迟是需要权衡的现实因素。但毋庸置疑,"Agentic Security"这一技术路线值得持续关注。