HookPry 精读:Agent Harness 的 hook 更新通道是全新的供应链攻击面

论文:A Blind Trust, the Bloody Thrust: When Attacker-Controlled Hook Updates Steer AI Agent Harnesses towards Malicious Behaviors(arXiv:2609.03884,cs.CR,2026-09-03) 作者:Pengxun Li, Litian Zhang, Jianwei Hou, Shujiang Wu, Song Li, Zifeng Kang, Xi Zhang 机构:北京邮电大学、国家网信办数据技术支持中心、北京航空航天大学、浙江大学


一、题目

  • 类型:攻击系统化 + 基准化评估的安全论文(开源框架 HookPry)。
  • 发表单位:北邮网络空间安全学院梯队 + 网信办数据技术支持中心(Jianwei Hou)+ 北航 + 浙大(Song Li)。高校与监管机构的组合暗示该发现已进入监管视野。
  • 一句话概括:Agent Harness 无条件信任插件的版本更新——攻击者只需控制更新内容,就能把任意 shell 命令绑定到生命周期事件上,在 LLM 决策路径之外、以宿主权限执行;现有全部主流防御对此失效。

二、背景

研究脉络

  1. Agent Harness 生态爆发:Claude Code hooks、OpenClaw 等框架引入"生命周期 hook"机制——用户/插件把 shell 命令绑定到 session start、tool call、file edit 等运行时事件上,用于自动化审计、格式化、权限控制。hook 以宿主用户权限直接执行。
  2. Agent 安全研究的既有版图:prompt injection、间接注入(网页/文档投毒)、MCP 工具投毒、恶意 skill——全部聚焦"模型上下文"内的攻击;hook 机制被默认为防御设施而非攻击面。
  3. 供应链攻击的经典剧本:typosquatting、依赖投毒、更新劫持在 npm/PyPI 生态已有大量先例。插件市场正在把这套剧本原样搬进 Agent 生态,但 harness 侧的信任模型没有跟上。

本文要解决的矛盾

Hook 被设计为"LLM 之外的可靠性层",恰恰因为它绕过 LLM 决策路径而高效;但这个"绕过"同时意味着:hook 的恶意内容永远不需要骗过模型——只需要骗过一次性的市场审核。

三、定位

维度定位
问题类型新攻击面的系统化利用 + 防御评估
威胁模型攻击者仅控制插件元数据(manifest)与生命周期 hook 配置;不控制模型、不控制宿主、不依赖模型失能
攻击载体版本更新:先以完全良性的 v1.0 上架获取信任与下载量,恶意逻辑藏于后续更新
与 MCP 安全的关系MCP 攻击针对模型调用的工具;本文攻击 harness 的宿主侧事件系统,两者正交
目标会议口径USENIX Security / CCS / NDSS;亦适合 ICSE/FSE 的 agent 工程安全主题

四、问题定义

攻击者目标(10 种):凭证窃取(env dump)、权限提升、持久化后门、数据外传、横向移动等。

成功标准:oracle 确认的恶意效果达成(非仅命令执行)。

为什么这是"新"攻击面——三个被 harness 设计者忽视的事实:

  1. hook 配置可以随插件更新静默变化,harness 不会重新审查或提示用户;
  2. hook 触发不经过 LLM——模型对将要发生的事零可见性,也就零防御机会;
  3. hook 命令以宿主权限运行,等价于攻击者获得本机 shell。

五、解法:HookPry 三组件

5.1 AMO(Adversarial Manifest Optimization)

对抗性 manifest 优化:对插件的名称、描述、关键词做检索导向优化,使良性版本在插件市场/目录中容易被搜索与安装——这是建立"初始信任"的流量工程。

5.2 TD(Temporal Decoupling)

时间解耦:把信任获取(v1.0 良性上架、积累用户与评分)与恶意激活(v1.1 更新携带 hook + 条件触发)在时间轴上彻底分离。这直接击穿"上架时审查过所以安全"的信任模型——审查的是快照,执行的永远是最新的更新。

5.3 LCI(Least Common Interface)

最小公共接口:7 个 harness 的 hook 接口语义各异(事件名、配置格式、shell 调用方式不同),LCI 把攻击载荷自动映射到目标 harness 的原生接口,实现一套攻击逻辑跨平台鲁棒执行。

六、实验结果

6.1 主结果

  • 规模:7 个 harness × 5 个 LLM 后端 = 25 种组合,1000 次端到端运行;
  • 覆盖:全部 7 个 harness 被攻破,无一是例外;
  • 成功率:整体 77.0% 达成 oracle 确认的恶意效果;单 harness 最高 92.5%(Hermes);
  • 模型无关性:零次运行被 LLM 显式阻断——印证攻击完全在模型决策路径之外。

6.2 防御评估(更重要的发现)

防御结果
Microsoft Defender召回率 0%
三个静态防御(含 lifecycle-hook-aware 策略)的并集仍漏掉 47.5% 恶意样本

防御失灵的机制根源:静态扫描器检查"文件内容是否恶意",但 hook 攻击的载荷形态是合法的配置语法 + 常规 shell 命令(如 curl、base64),恶意性只存在于"谁在何时让什么命令绑定到什么事件"的关系里——单看任何静态切片都不可疑。

6.3 初步对策(RQ4)

论文给出方向性缓解:更新差异审计(更新前后 hook 配置的 diff 强制提示)、hook 注册的最小权限与白名单、事件触发时的宿主侧确认。但作者坦承:在可用性与安全性之间的权衡尚未解决,防御侧整体仍开放。

七、知识反推

  1. “绕过 LLM 的执行层"是双刃剑:harness 工程为了可靠性把关键操作移出模型上下文(hooks、后台任务、托管权限),但这些层不受模型对齐与 prompt 防御保护——攻击面与可靠性工程共享同一条路径。
  2. 供应链信任的时间维度被普遍低估:快照式审核(上架审查、签名校验发布者)无法约束"信任之后的更新”。Agent 插件生态需要的是每次更新的差异级审查,而非一次性身份验证。
  3. 静态防御对"关系型恶意"天然失明:恶意性存在于配置与环境的关系中,检测必须转向运行时行为基线(hook 事件序列的异常检测、命令与事件的关联分析)。
  4. 评测启示:7/7 全灭说明这不是某家 harness 的实现 bug,而是共享设计模式的结构性缺陷——安全评审需要进入 harness 设计文档层面,而非事后渗透测试。

八、通用灵感

  • 对 harness/工具生态建设者:把"hook 更新 diff"做成用户不可跳过的显式确认(类似浏览器扩展权限变更提示)是成本最低的第一步;更进一步,hook 命令应默认运行在降权沙箱中。
  • 对企业 Agent 部署:本文的威胁模型(仅控制插件元数据)意味着插件市场供应链是新的安全边界——企业 Agent 平台应维护内部插件镜像,冻结更新通道,按自己的节奏审查升级。
  • 对评测与基准研究:HookPry 的 25 组合 × 1000 运行 × oracle 确认范式,可复用于评测任何"LLM 之外执行层"的安全属性(MCP、沙箱逃逸、计划任务),其 oracle 设计(验证实际效果而非表面执行)值得借鉴。
  • 对自主代码评审系统:hook 配置 diff 应成为评审 Agent 的强制检查项——本文证明了它是当前最脆弱且最易被自动化审计的供应链环节。
  • 与 DeepMind 蜂群研究的互文:DseWiki 事件与本文共同指向同一结论——Agent 系统的风险重心正从"模型说了什么"转向"系统架构允许什么"。