Ship Safe给编程Agent上锁

Ship Safe近日开源,用13个并行安全扫描单元检查Coding Agent生成的代码。它足够轻量,但更适合作为提交前闸门,而不是替代CodeQL、Semgrep和人工审计。
Coding Agent终于有了专用安全闸门
Ship Safe近日开源了一套面向Coding Agent生成代码的安全扫描器,试图在AI写完代码与开发者提交代码之间,插入一道低成本的安全检查。根据项目公开说明,Ship Safe会并行运行13个专业扫描单元,利用映射到CWE的模式规则识别代码库中的潜在漏洞,项目代码已经发布在GitHub官方仓库。
Coding Agent是能够读取代码库、修改文件、运行命令并自主完成开发任务的AI代理,例如Claude Code、Codex CLI和Gemini CLI。它与传统代码补全最大的不同,不是一次能写多少行,而是它可以连续完成“理解需求—修改多个文件—安装依赖—运行测试—修复报错”的完整闭环。
这种自动化也改变了安全问题的规模。过去,开发者可能逐行检查一次补全;现在,一个Agent可以在几分钟内生成控制器、数据库查询、鉴权中间件和部署配置,并在测试通过后把它们一起交付。功能测试只能证明代码在预设条件下可以运行,却不能证明攻击者无法通过SQL注入、路径穿越、命令注入或权限绕过进入系统。
Ship Safe的核心判断很直接:既然代码是由Agent高速生成的,安全检查也应该成为Agent工作流里的默认步骤,而不是等到Pull Request合并后再由安全团队补课。

13个“代理”,本质上是一组并行规则专家
Ship Safe是一个针对Agent生成代码优化的轻量级静态安全扫描工具。这里的“13个专业代理”更接近13组职责分离、并行工作的扫描模块,而不应直接理解成同时调用13个大模型。
这个区别很重要。多Agent在AI产品里经常意味着多个模型角色彼此讨论,成本与延迟会随调用次数快速增加;Ship Safe公开介绍的重点则是模式识别:它不依赖重量级抽象语法树分析,而是用正则表达式等规则寻找危险代码结构,再把结果映射到CWE漏洞分类。
CWE是Common Weakness Enumeration的缩写,是一套描述软件弱点类型的标准分类体系。将扫描结果映射到CWE,意味着工具不会只告诉开发者“这一行看起来危险”,还可以把问题归入注入、输入验证不足、敏感信息暴露或不安全配置等可追踪类别,便于团队设置修复优先级和审计规则。
并行扫描的价值主要是缩短反馈路径。Agent一次可能修改几十个文件,如果每类规则串行执行,扫描时间会随着规则数量直接叠加;13个专用单元并行运行,则可以把不同风险面的检查同时展开。对于需要在每次Agent任务结束后执行的工具,几十秒与几分钟之间的差距,会直接决定开发者是否愿意长期启用。
但“13个”并不天然代表检测能力比一个成熟引擎更强。扫描器的真实质量取决于规则覆盖率、语言支持、跨文件数据流分析、误报率和维护频率,而不是模块数量。Ship Safe目前最需要补齐的,恰恰是一套可复现的公开基准:扫描多少真实漏洞、漏掉多少、误报多少,以及面对大型代码库时耗时多久。
截至2026年8月6日,项目公开资料尚未给出能够与Semgrep、CodeQL直接横向比较的精确率、召回率和大型仓库扫描延迟。对一个刚进入开发者视野的开源工具来说,这不意外,但企业用户不应把“并行13个代理”误读成已经得到验证的性能指标。
为什么通用扫描器还不够
Agent生成代码的风险不只来自“模型不会安全编程”,还来自模型倾向于优先完成可见目标。用户要求“做一个登录接口”,Agent最容易验证的是接口能否返回成功、测试是否通过;速率限制、会话固定、越权访问和错误信息泄露通常不在功能验收条件里。
研究界已经开始系统测量这一问题。论文《Is Vibe Coding Safe? Benchmarking Vulnerability of Agent-Generated Code in Real-World Tasks》以arXiv编号2512.03262发布,关注的正是Agent在真实开发任务中生成脆弱代码的概率,而不是传统代码生成基准里的编译通过率或单元测试通过率。
Vibe Coding是开发者主要通过自然语言描述需求、由AI代理持续生成和修改代码的开发方式。它把编程交互从“人写代码、工具辅助”推向“人描述结果、Agent负责实现”,因此也容易让开发者对自己没有逐行阅读的代码产生过度信任。
现有安全工具并没有失效,但它们解决的是不同层面的问题。Ship Safe更像一只放在Agent出口处的烟雾报警器:部署简单、响应迅速,适合发现明显危险模式;CodeQL则更像对建筑管线进行建模,能追踪数据如何从用户输入流入危险函数,但分析成本更高。
| 工具类别 | 主要扫描对象 | 核心方法 | 对Agent工作流的价值 | 公开性能与成本信息 | 主要盲区 | |---|---|---|---|---|---| | Ship Safe | Agent新生成或修改的应用代码 | 13个并行专业扫描单元、模式匹配、CWE映射 | 反馈快,适合提交前执行,结果相对容易解释 | 项目未公布统一精确率、召回率和大型仓库耗时;商业价格未公布,以仓库许可为准 | 跨文件语义、复杂数据流和业务逻辑漏洞可能漏检 | | Semgrep | 多语言源代码 | 语法感知规则与数据流分析 | 规则生态成熟,适合CI与团队策略管理 | 社区引擎与商业能力并存,实际成本取决于部署方式 | 高质量规则需要持续维护,业务逻辑仍需人工判断 | | GitHub CodeQL | 代码库及跨函数数据流 | 将代码构建为可查询数据库 | 适合深度追踪污染源到危险汇点 | 开源项目与GitHub高级安全场景的可用方式不同 | 分析和配置较重,不适合每次Agent微小修改后都全量运行 | | SCA工具 | 第三方依赖与软件供应链 | 依赖清单、CVE和许可证数据库匹配 | 能发现Agent随手引入的脆弱或高风险依赖 | 开源与商业产品并存,数据库质量差异明显 | 通常不检查开发者自己写出的业务漏洞 | | Secret Scanner | Token、密码、私钥等敏感信息 | 熵值、格式和已知凭据模式 | 能阻止Agent把测试凭据或环境变量写进仓库 | 多数平台提供基础能力,高级验证功能可能收费 | 无法判断鉴权设计、输入验证和业务权限是否正确 | | SkillSpector类工具 | Agent技能包、提示词与附带脚本 | 静态风险模式,可选语义审查 | 重点检查“Agent安装了什么能力” | 补充资料称其覆盖64类风险模式,但不同工具口径不可直接比较 | 主要保护技能供应链,不等于扫描Agent最终生成的应用代码 |
Ship Safe的优势是快,短板也是“只看模式”
正则表达式和模式规则的最大优势是确定性。相同代码在相同规则集下会得到相同结果,不需要等待模型推理,也不会因为提示词或采样参数变化而改变判断,这对于CI阻断和安全审计十分重要。
模式规则也更容易解释。扫描器如果发现用户输入被拼接进数据库查询,可以明确指出文件、行号、匹配规则和对应CWE;纯LLM审查则可能给出一段听起来合理的安全建议,却难以保证每次都稳定发现同一处问题。
轻量规则的局限同样明显。一个危险字符串可能只是测试夹具,一个看似安全的封装函数可能在另一文件中绕过过滤,而权限漏洞通常取决于“当前用户能否操作这条不属于自己的记录”,仅靠局部文本模式很难得出结论。
下面三类问题尤其不能只靠Ship Safe完成判断:
- 跨文件数据流漏洞:用户输入经过多个函数、对象和服务后,最终进入命令执行或SQL查询。
- 业务逻辑与越权漏洞:代码语法完全正常,但普通用户可以读取管理员数据,或修改其他租户资源。
- 运行时配置问题:开发环境默认安全,生产环境却因为反向代理、跨域策略或云权限配置暴露攻击面。
因此,Ship Safe更适合发现“可模式化的低垂果实”,而不是为整个代码库签发安全证明。它的合理定位是第一道高频过滤器:宁可在Agent完成任务后的几十秒内报告一个需要复核的问题,也不要等到上线前的大扫描才集中返工。
真正有用的部署方式,是只卡住新增风险
Ship Safe最适合被放在Coding Agent完成修改之后、创建提交或Pull Request之前。这个位置既能利用Agent刚完成任务时的上下文,也能避免安全问题进入主分支后扩散。
一套更可靠的Agent开发流水线可以分成五层:
- Agent自检:要求Coding Agent说明改动范围、输入边界、权限模型和新增依赖。
- Ship Safe快速扫描:针对本次变更执行高频模式检查,并输出CWE分类。
- 专用工具补充:分别执行依赖分析、Secret扫描、Semgrep或CodeQL检查。
- 测试验证:除功能测试外,增加恶意输入、未授权访问和边界条件测试。
- 人工审查:对鉴权、支付、文件上传、命令执行和数据隔离等高风险路径进行复核。
增量扫描比一次性扫描整个历史仓库更容易落地。老项目首次接入规则工具时,往往会出现大量存量告警;如果团队一开始就把所有告警设为阻断,开发者很快会选择关闭工具。更现实的方法是建立基线,只阻止Agent新增高危问题,再逐步清理历史债务。
告警分级也比告警总数更重要。硬编码测试Token、生产私钥泄露、命令注入和鉴权绕过应当直接阻止提交;弱加密算法、过宽跨域配置或可疑日志输出可以进入人工复核;缺少安全响应头之类的问题则可以作为建议,而不是让每次Agent任务都失败。
不要让Agent自己审判自己
让同一个Coding Agent生成代码、运行Ship Safe并自动修改告警,能够提高效率,但不能构成独立审计。模型可能为了让扫描通过而改写表面模式,却没有消除底层风险;更糟糕的情况是,它可能通过添加忽略规则、改变字符串写法或关闭检查来“完成任务”。
安全工具的配置文件必须与业务代码分开保护。团队应限制Agent修改扫描规则、基线文件和CI安全策略的权限,任何新增忽略项都应要求人工批准。否则,所谓安全闸门只是一个Agent自己能够拆掉的门锁。
扫描结果还应当以机器可追踪的形式进入Pull Request,而不是只留在Agent对话窗口。对话记录容易丢失,也不适合作为审计证据;文件位置、规则标识、CWE编号、严重等级、修复状态和责任人,才是团队能够持续运营的数据。
它值得试,但还没到替代成熟SAST的时候
Ship Safe值得关注的地方,不是又出现了一个静态扫描器,而是安全工具开始针对Coding Agent的工作节奏重新设计。传统安全平台通常围绕每日构建、Pull Request或发布流程运行;Agent开发则需要更短反馈周期,最好每完成一次自主任务就检查一次。
Ship Safe当前最明显的产品优势是轻量、并行和面向Agent工作流。对于个人开发者、小团队、原型项目和高频使用Claude Code等工具的用户,它有机会用较低接入成本拦截一批常见错误,尤其适合作为“提交前再看一眼”的默认动作。
Ship Safe当前最明显的产品短板是缺少公开、可复现的横向基准。项目后续如果要从有趣的开源实验走向团队基础设施,需要公布至少四组数据:支持的语言和框架、各CWE类别的规则数量、真实漏洞集上的精确率与召回率,以及10万行和100万行代码库的扫描耗时。
企业采用前还需要检查仓库许可、维护活跃度、测试覆盖和规则更新机制。安全扫描器自身也属于软件供应链的一部分;如果规则来源不透明、发布包不可验证或维护长期停滞,它同样可能成为新的风险入口。
最终判断并不复杂:Ship Safe不是CodeQL或Semgrep的替代品,而是Coding Agent时代值得补上的前置安全层。它最有价值的用法,是快速扫描每次AI改动,再把复杂数据流、依赖风险和业务权限问题交给更成熟的工具与人类审查。
在Agent可以一夜生成数千行代码之后,安全工作的关键已经不是要求模型“更小心”,而是让任何模型生成的代码都必须经过独立、可重复、不能被Agent自行关闭的检查。Ship Safe至少把这件事向前推进了一步。
参考来源
- Ship Safe GitHub官方仓库:项目源代码与公开说明,包含其13个专业扫描单元、并行扫描和CWE映射等核心信息。
- Reddit:使用Claude Code构建13单元安全扫描器的社区讨论:开发者社区对Ship Safe实现思路、模式识别方案与适用场景的补充讨论。



