site logo

Marico's space

AI Agent 跑得欢,安全谁来管?Vaultak 运行时安全实践踩坑记

算法解析 2026-04-20 15:13:34 5

最近 AI Agent 真是火得不行,各种自动化工作流、智能助手满天飞。但说实话,你有没有想过:这些 AI 代理在生产环境里到底在干什么?它们会不会突然删掉你的数据库,或者把敏感数据发到不该发的地方?

说实话,这个问题我自己也琢磨过。大多数 AI 代理项目上线时,底下其实连个像样的安全层都没有。测试时一切正常,一到生产环境就出幺蛾子——记录被误删、PII(Personally Identifiable Information)泄露、循环跑飞……最气人的不是出问题,而是出问题时居然没人能提前拦住。

AI Agent 安全防护概念图

传统应用安全那套东西,防火墙、WAF、访问控制,都是给人类操作设计的。但 AI 代理不一样啊,它们是非确定性的——同样的输入,今天可能写数据库,明天可能发邮件,后天可能直接删表。标准安全工具根本跟不上这种节奏。

这不,有个叫 Vaultak 的团队就盯上了这个痛点。他们花了八个月时间,搞了个专门给 AI Agent 用的运行时安全层。简单说,就是给 AI 代理装了个「行为保镖」。

Vaultak 到底干了啥?

本质上,Vaultak 是个行为拦截和策略执行层。它卡在你的代理和实际系统之间,干四件事:

  • 实时监控代理的每一个动作
  • 在多个维度上给行为风险打分(0-10分)
  • 执行策略——该拦的拦,该审批的审批
  • 风险超标时自动回滚

集成起来倒是简单,两行代码搞定:

from vaultak import Vaultak

vt = Vaultak(api_key="vtk_...")

with vt.monitor("my-agent"):
    # 你的代理代码放这里
    pass

监控上下文里的所有操作都会被 Vaultak 包起来。它先拦截动作,打分,应用策略,然后才决定是放行、拦截还是回滚——生产系统连碰都还没碰到呢。

最难的部分:风险评分引擎

说实话,这部分最难搞。最简单的办法是搞个规则库,列一堆危险动作黑名单。但规则库太死板了——一个代理想搞破坏,完全可以用一堆看起来无害的动作组合起来干坏事。

Vaultak 搞了个五维评分模型:

  1. 动作类型:读操作分低,写操作分高,删除、删表、截断这种分最高
  2. 资源敏感性:写日志表和写用户凭证表能一样吗?得分级——公开、内部、敏感、关键
  3. 损害半径:这动作要是出错了,能祸害多大范围?影响一行是小范围,影响全表就是大事故
  4. 频率:一次写入正常,十秒内写一百次就不对劲了
  5. 上下文偏差:这代理以前从没发过邮件,今天突然要发?哪怕发邮件本身没被禁止,也得标记一下

每个维度给个子分,加权平均就是总分。分数超过你设的阈值,Vaultak 就出手干预。

策略执行:不是一棍子打死

策略层是让你表达「我的代理能干什么、不能干什么」的地方:

vt = Vaultak(
    api_key="vtk_...",
    policy={
        "block": ["delete", "drop_table", "send_external_email"],
        "require_approval": ["write_production_db"],
        "max_risk_score": 7.0
    }
)

三种模式:

  • 阻止:直接拦下,代理收到策略违规响应
  • 需要审批:暂停动作,发人工审批请求,批了再继续
  • 警报:允许执行,但记下来并在仪表板里高亮显示

审批流程是他们跟安全团队聊过后加的。安全团队不想一棍子打死代理,但又想在高风险操作时保持知情权。暂停等审批这个模式正好解决了这个矛盾。

自动回滚:不只是拦截,还要恢复

拦截是被动的,回滚才是主动恢复。代理操作中途风险超标了,Vaultak 不光会停掉它,还会尝试撤销已经做完的操作。

每个被监控的动作都会记录完整的状态上下文:动作前啥样、变了啥、怎么才能撤销。当然,有些动作好回滚(比如数据库写入),有些就难了(比如已经发出去的邮件)。他们的做法是在拦截时就把动作分成可逆和不可逆两类,对不可逆的动作在执行前就用更严的阈值卡住。

PII 隐私保护:别让敏感数据溜出去

AI 代理最常见的翻车方式之一就是泄露敏感数据——把 PII 发给外部 API、用明文记录、或者塞进不该出现的 LLM 提示词里。

Vaultak 加了个 PII 屏蔽层:

from vaultak import mask_pii

safe_output = mask_pii(agent_output)

SSN、邮箱、信用卡号、电话、姓名……自动屏蔽。底层用了正则匹配结构化 PII,外加轻量级 NER 模型处理非结构化 PII。屏蔽在数据离开监控上下文之前就完成了。

MCP 网关扫描:工具调用也得管

Model Context Protocol(MCP)快成代理连接工具的标准了。通过 MCP,一个代理能调用几百个外部工具——功能是强了,攻击面也大了。

他们做了个 MCP 网关扫描器,拦截所有工具调用,执行前先过一遍策略规则集。工具响应里夹带的提示注入、调用未授权工具、异常使用模式……在网关这层就能逮住。

零代码集成:安全工程师狂喜

不是所有团队都愿意改代理代码。特别是安全工程师——他们想要的是对整个环境里所有运行中代理的可见性,而不是等每个开发团队慢慢集成 SDK。

Vaultak Sentry 就是个桌面守护进程,在系统级别监控代理活动。装好,连上仪表板,机器上所有代理的行为就全看见了——一行代码都不用改。

原理是拦截系统级的网络和进程活动,跟已知的代理行为特征做关联。结果跟 SDK 集成一样能评分能报警,就是不用碰代码。

GitHub Action:PR 阶段就拦住问题

他们最近还出了个 GitHub Action,每次 PR 都扫一遍代理代码里的安全风险:

- name: Vaultak Security Scan
  uses: samueloladji-beep/vaultak-action@v1
  with:
    api_key: ${{ secrets.VAULTAK_API_KEY }}

静态分析代理代码,标记高风险模式,有严重安全问题直接拦合并。在 PR 阶段发现问题,可比在生产环境里收拾烂摊子便宜多了。

踩坑心得

聊点他们自己没想到的:

  • 入口是安全工程师,不是 CTO:本以为要自上而下推,结果发现最接近问题的开发和安全工程师自己找来,集成完再内部推广。自下而上反而更有效。
  • 光有可观测性不够:很多工具能告诉你代理干了啥,但很少会拦着它干不该干的。团队要的是主动干预,不是事后看日志。
  • 「损害半径」这个说法很管用:把问题描述成「这代理要是乱来,最坏能造成多大损害?」工程师一听就懂为什么需要安全层。

试试看?

Vaultak 已经上线了:

  • SDK:pip install vaultak
  • Sentry:vaultak.com/download
  • 文档:docs.vaultak.com
  • GitHub:github.com/samueloladji-beep/Vaultak

入门计划免费,不用绑信用卡。如果你在生产环境跑 AI 代理而底下没安全层,花十分钟评估一下 Vaultak 绝对值——弄错的「损害半径」可能比你想象的大得多。

译自:How We Built Runtime Security for AI Agents