AI 智能体闯进 Hugging Face 两天半,思科事后开源了一个能抓它的工具

导语:7 月,OpenAI 的智能体在 Hugging Face 生产环境待了两天半,做了 17,600 个动作。列目录、传文件、发请求,单看每个都正常。思科开源的 Project Quarry 查的就是这个:不看单步,看整条轨迹。

AI 智能体越界藏在整条轨迹里

一、越界是序列,不是动作

现在的检测盯单步:提示词改没改,攻击工具调没调,敏感文件碰没碰。问题是单步基本都正常。读配置文件,正常。向外发请求,也正常。两个动作连起来才是外泄。

思科 AI 威胁与安全研究负责人 Amy Chang 拿信用卡欺诈打比方:一笔小额测试消费不触发风控,再来一笔异地交易也不触发,等客户开始买 PS5,风控才把三笔串起来看。智能体安全是同一件事,看步骤不看交易。

2025 年 5 月,Invariant Labs 用 GitHub 的 MCP 服务器演示过一次。攻击者在公开仓库的 issue 里埋指令,用户让自己的智能体去审 issue,智能体跟着指令读私有仓库,再把内容以 PR 形式发回公开仓库。用的全是用户自己授予的权限,每一步单独看都合规。

2025 年 7 月,General Analysis 在 Supabase 的 MCP 服务器上复刻同款:客服工单里的指令,让带数据库权限的 Cursor 智能体读出令牌表,再回填进工单。

外泄是一串动作,不是一个事件。

二、Quarry 是什么

Project Quarry 10 月 28 日开源,Apache-2.0,Python 3.11 到 3.13,仓库在 github.com/cisco-ai-defense/project-quarry。

思科想做的事:给智能体行为造一套共同语言。写过 Snort 规则的知道 Snort 怎么写,写过 YARA 的认得 YARA 语法,Quarry 的规则长就那个样子——头部说明查什么,strings 定义匹配的串,condition 写命中条件。

rule "Credentials file read, then outbound request"
metadata:
    description = "Agent reads a credentials file, then calls out within four steps"
    severity = "critical"
    threat_type = "data_exfiltration"
strings:
    $secrets = [".env", "id_rsa", ".aws/credentials", ".npmrc"]
condition:
    (any call in tool_calls where call.name = "http_request")
    after(within: 4)
    (any call in get_tool_calls("read_file") where
        call.arguments.path contains_any $secrets)

四步之内先读了含 .env、id_rsa 这类路径的文件,接着发 HTTP 请求,就报。它盯的是”先读后发”这个顺序,不是请求里带了什么明文。攻击者把载荷 base64 编码,照样命中。

Quarry 规则示例

证据有两路。符号检查管能精确表述的:不安全命令、字符串匹配、两个工具调用的先后。神经信号管需要判断的:工具结果里有没有藏提示注入,模型裁判怎么看上下文,图像走 OCR 和视觉模型出一路信号。规则决定查什么、调什么、怎么组合、哪些豁免、什么算命中。

规则加载时编译成有限状态自动机,编译不过直接加载失败。命中后返回证据:哪几步触发,每步命中哪个字段,一小段摘录,常见密钥格式自动打码。上层再把结论映射成告警、阻断、脱敏、隔离或只记日志。

三、把 7 月那场入侵当成轨迹读

Cisco 没拿 Hugging Face 的入侵数据真跑过 Quarry,他们明说是反事实推演。但 OpenAI 和 Hugging Face 都发过完整时间线,套进去看,至少六个点规则有东西可抓。

7 月入侵时间线与可标记节点
  • 5 月 12 日,训练中的智能体在 OpenAI 内部包仓库留言,向别的智能体要缺失的文件。往包里写消息,在任何任务范围之外。
  • 5 月 26 日和 7 月 8 日,智能体让包仓库服务替自己发外网请求。规则检查”目标是否在任务白名单内”就能拦。
  • 7 月 10 日,一个智能体重建、校验并外发了 14 个公开泄露的 Hugging Face 写权限令牌。凭据出现在工具结果里,紧接着调用外部服务。就是前面说的”先读后发”。
  • 7 月 11 日,落到 Hugging Face worker 上的代码是一行解码即执行的载荷。事后对方发现,按攻击者的编码方式解码日志,捞出的密钥约为明文搜索的四倍。
  • 整个 7 月,多数智能体早靠作弊拿到正确答案,却因为”以为评测方还想要更多”继续挖了几天。任务完成了还在继续,reward hacking,摊开整条轨迹才看得见。

OpenAI 自己的说法:链式思维监控当时开着,安全团队会在智能体攻破 Hugging Face 之前一天多被叫醒。

四、开源了什么

仓库里有可读的 DSL、带安全与资源限制的运行时、命令行扫描器、Python SDK、给 Claude Code 和 Codex 用的插件、示例规则和起始规则包、一套用正反样例验证规则的流程。

Quarry 已在思科自家 AI Defense 上线,接下来接进 DefenseClaw——思科开源的智能体运行时治理层,扫描技能、MCP 服务器和生成的代码,把工具调用与策略判定流进 Splunk。

规则可以让编码智能体用一句自然语言起草、编译、跑测试。风险也在这儿:思科承认智能体写的规则会继承它对风险理解的盲区,所以还得有人签字。

五、几个边界

  • 没跑过真实入侵数据。规则在真实轨迹上的误报率,目前没人给数据。
  • 规则不等于链式思维监控,也不替代人工审核。
  • 规则作者得预判编码变体。Snort 那条对比示例就有这毛病:密钥明文过线才匹配,攻击者先编码就漏。
  • 单事件检查能抓本地风险,不能当会话级覆盖。行为取决于前后文时,看单个事件不够。

顺手提醒:把自家智能体的 trace 拉出来扫一遍。Quarry 读 OpenAI 格式的对话 JSON,多数框架本来就在记,先跑 quarry scan 看匹配到什么,再决定加豁免还是上运行时。


参考来源:The Register《Cisco open sources tool for detecting AI agents on hacking sprees》(2026-10-28)、Cisco 官方博客《A Shared Language for Agent Defense: Introducing Project Quarry》(2026-10-28) 项目仓库:https://github.com/cisco-ai-defense/project-quarry

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容