当AI代理从"你问我答"的文本框,变成能自己跑循环、自己调工具的自主执行体,它拿到的东西也变了:shell命令、生产数据库、通过MCP动态注册的外部工具。能力给出去容易,收回来难。

问题在于,大多数团队给代理加护栏的方式,是把请求发到外部API去审一遍。这条路有三个绕不开的坑。

打开网易新闻 查看精彩图片

外部护栏为什么跟不上代理的节奏

第一是慢。外部API护栏端点每次工具调用会引入100毫秒到300毫秒的网络延迟,实时循环的响应感直接被拖垮。

第二是漏。把内部工具参数、SQL查询参数、系统状态发到第三方护栏API,等于把敏感的知识产权和凭证往外送。

第三是看不见。API层面的过滤器只能评估文本提示词,它看不到V8内存堆、文件描述符、子进程创建,也看不到流内容。

Vark想解决的就是这三件事。它是一个开源、本地优先、亚毫秒级的执行防火墙和运行时护栏引擎,专门为自主AI代理设计。

它跑在你的进程里,而不是网络另一头

Vark100%本地优先运行在应用进程或边缘运行时内部,支持Node.js、V8 Isolates和WASM。它内联在代理编排器和系统能力之间,每一个工具执行请求都要过一条8道闸门的检查流水线,整个过程在1毫秒以内完成。

这8道闸门是顺序执行的,任何一道检测到威胁或策略违规,流水线会立刻失败关闭:

  • 输入归一化闸门:把字符串载荷归一化为Unicode NFKC,剥离零宽字符和双向文本方向覆盖符,递归解码Base64、Hex、URL和HTML多层混淆。
  • 运行时Schema闸门:在工具调用前,按JSON Schema(Draft-07子集)严格校验并强制转换参数类型。
  • 亚毫秒熔断闸门:按工具身份追踪实时错误率,一旦触发立即跳闸,掐断失控代理的无限重试循环。
  • 声明式策略与污点追踪闸门:评估细粒度的基于角色的策略(.vark.yaml),并把从不可信外部来源取回的数据标记为"污点"。
  • 人在回路(HITL)闸门:拦截高风险操作,比如破坏性数据库查询、资金转账,暂停执行直到通过webhook或数字签名批准。
  • 隔离沙箱闸门:拉起专用的V8 isolate(isolated-vm / QuickJS WASM)、带内存上限的worker线程,或临时的写时复制虚拟文件系统(memfs)。
  • 输出DLP与流扫描闸门:检查返回值、二进制缓冲区和ReadableStream实例里有没有泄露的PII、API令牌和私钥,用Luhn校验和香农熵分析,同时不阻塞流的消费。
  • 加密审计闸门:用HMAC-SHA256或Ed25519对执行载荷签名,并把条目追加到不可篡改的哈希链上。

MCP的"换皮"攻击,它用哈希钉死

MCP普及之后,代理会从远程MCP服务器动态拉取工具定义。这里藏着一个危险攻击面:被攻陷或恶意的MCP服务器可以做"schema rug pull",在会话中途篡改工具描述,骗大模型去执行非预期的命令。

Vark的应对方式是动态SHA-256描述符钉扎。工具注册时,Vark会对MCP工具对外公布的schema、名称和描述字符串生成加密哈希摘要。如果远程MCP服务器试图在会话中途改动schema定义,Vark会检测到这次修改并立即阻断执行。通过外部MCP服务器取回的上下文,会被自动标记为污点,防止不可信的外部输入抵达高权限的执行汇点。

接入长什么样

从代码看,接入方式是在代理和真实执行之间插一层。初始化Vark引擎时指定策略文件路径、审计日志路径,并打开DLP开关;代理发起工具执行请求后,由引擎给出放行或拦截的决策。放行时,代码在带内存上限和超时限制的V8隔离沙箱里执行,返回载荷再经过一次输出扫描才回到代理上下文;被拦截时,则输出是哪道闸门、什么原因挡下的。

Vark采用Apache-2.0 / MIT双许可开源,由LUVEO Technologies维护。