用自治智能体保护我们的代码库

撰写者 Travis McPeak产品

在过去九个月里,我们的 PR 处理速度提升了 5 倍。基于静态分析或僵化代码归属的安全工具仍然有帮助,但在这样的规模下还远远不够。为此,我们开始使用 Cursor Automations,这使我们能够快速构建一支安全智能体队伍,持续在代码库中识别并修复漏洞。

安全智能体每周审查 3,000+ 个内部 PR,发现 200+ 个漏洞安全智能体每周审查 3,000+ 个内部 PR,发现 200+ 个漏洞

今天,我们发布了四个新的自动化模板,其中包含了我们认为最有帮助的安全智能体的完整蓝图。其他安全团队可以基于这些模板进行定制,构建能够自动解决各类安全问题的智能体。

自动化架构

要让智能体在安全场景中真正发挥作用,它们需要具备两个能力,而 Cursor Automations 恰好同时提供了这两点。

第一,是开箱即用的集成能力,可用于接收 webhook、响应 GitHub pull request,以及监控代码库变更。这让在后台运行的智能体能够知道何时该介入并采取行动。

第二,是完善的智能体运行框架和环境。Automations 由云端智能体提供支持,因此能够使用云端智能体可访问的所有工具、技能和可观测性能力。

为了让自动化更好地适用于安全相关的特定用例,我们构建了一个安全 MCP 工具,并将其部署为无服务器的 Lambda 函数:仅在需要时即时可用,平时不会持续运行。

这个 MCP 的参考代码可在这里获取,它有三个用途:

  1. 持久化数据。 智能体使用 MCP 存储数据,这样我们就能持续跟踪和衡量安全影响。我们利用这些数据不断优化触发自动化的时机和方式。

  2. 去重。 我们会对每一次变更运行多个审查智能体,而由于它们的发现项由 LLM 生成,不同智能体最终可能会用不同措辞来描述同一个底层问题。为避免重复工作,MCP 允许智能体部署一个由 Gemini Flash 2.5 驱动的分类器,用来判断两个语义表述不同的发现项是否指向同一个问题。

  3. 一致的输出。 智能体会通过 MCP 上报它们发现的每一个漏洞,由 MCP 发送格式统一的 Slack 消息,并处理后续操作,例如忽略或稍后处理某个发现项。

有了这一基础,下面详细介绍的四种安全自动化就可以在此之上叠加各自的工作流和触发逻辑。我们使用 Terraform,确保对安全工具的所有变更都经过标准的审查和部署流程。

Agentic Security Review

在内部,我们已经在使用 Bugbot 审查 PR 的代码质量和常规问题,其中也包括一些安全发现项。但通用型审查工具并不适合安全场景,因为它无法根据我们的特定威胁模型进行提示调优,而且我们还需要能够仅在出现安全发现项时阻止 CI,而不是因为每一个常规代码质量问题都触发阻止。

因此,我们构建了一个专用自动化,并将其命名为 Agentic Security Review。最初,我们让它将发现项转发到一个由安全团队监控的私有 Slack 频道。

显示 Agentic Security Review 安全发现项的 Slack 频道
Agentic Security Review 会将发现项发送到一个由安全团队监控的私有 Slack 频道。

当我们确信它能够识别出真实问题后,我们启用了 PR 评论功能,随后又实现了阻断式门禁检查。在过去两个月里,Agentic Security Review 已在数千个 PR 上运行,并阻止了数百个问题进入生产环境。

Vuln Hunter

在 Agentic Security Review 成功用于新代码之后,我们开始让智能体面向现有代码库开展工作。Vuln Hunter 是一种自动化,它会将代码划分为逻辑片段,并逐一搜索其中的漏洞。我们的团队会对发现项进行分诊,并通常会修复这些问题,且经常使用 Slack 中的 @Cursor 来生成 PRs。

Anybump

依赖修补非常耗时,以至于大多数安全团队最终都会放弃,并将这项工作转给工程团队,结果它又长期积压在待办列表中。我们创建了一种名为 Anybump 的自动化,几乎将这项工作全部自动化了。

Anybump 会运行可达性分析,将漏洞范围缩小到真正会产生影响的那些问题,然后沿着相关代码路径进行追踪、运行测试、检查是否出现破坏,并在测试通过后创建 PR。PR 合并后,Cursor 的金丝雀部署流水线会在任何变更进入生产环境之前提供最后一道安全关卡。

Anybump 创建的 GitHub pull request,用于修补存在漏洞的依赖项
测试通过后,Anybump 会自动创建 PRs 来修补存在漏洞的依赖项。

Invariant Sentinel

Invariant Sentinel 每天运行,以监控是否偏离一组安全与合规属性。它会将代码仓库划分为逻辑片段,并启动子智能体,根据一系列不变量验证代码。

分析完成后,智能体会使用自动化记忆功能,将当前状态与之前的运行结果进行比较。如果检测到偏离,它会重新验证以确保结果正确,然后更新记忆,并向安全团队发送 Slack 报告,说明变更内容,并附上具体代码位置作为证据。

由于此自动化在完整的开发环境中运行,智能体可以编写并执行代码来验证自身假设,从而补充传统的功能测试、单元测试和集成测试。

更多自动化即将推出

安全领域充满了可应用自动化的机会,而这四项只是我们后续规划工作的开端。我们已经在将它们扩展到涵盖漏洞报告受理、隐私合规监控、值班告警分诊以及访问权限配置。

在这些场景中,智能体都能以我们靠人工无法实现的规模,提供覆盖能力和一致性。

分类: 产品

大使: Travis McPeak

用自治智能体保护我们的代码库 · Cursor