← 返回 2026-07-21

自托管AI智能体的自状态攻击:操作系统防御能走多远? Self-State Attacks on Self-Hosted AI Agents: How Far Can OS Defenses Go?

Yimeng Chen, Nathanaël Denis, Roberto Di Pietro, Jürgen Schmidhuber 📅 2026-07-20 👍 5 2026-07-25 18:30
AI智能体安全 异常检测 提示注入 操作系统防御 自状态攻击 负载条件化分析

形式化“自状态攻击”并系统量化操作系统层防御的能力边界。

前置知识

自托管AI智能体 (Self-hosted AI Agent)

直接运行在用户机器上、拥有持久shell和文件系统访问权限的LLM智能体,如Claude Code、OpenClaw。它与云端聊天助手的核心区别是维持“自状态”——以本地文件形式存在的记忆(MEMORY.md)、指令(SOUL.md/AGENTS.md)、配置(openclaw.json),且这些文件由智能体自身用与执行其他任务相同的OS操作写入,因此永久处在智能体自己的写集合内,而非任何只读沙箱区。

本文全部攻击模型都建立在“自托管智能体必须自更新状态文件才能工作”这一产品特性上,理解它才能理解为何OS沙箱无法把状态文件划成只读区。

自状态攻击 (Self-State Attack) 与 $A(R) \subseteq L(R)$

当智能体决策过程被间接提示注入污染后,它会用本就合法的写路径(write/rename/unlink/chmod)去篡改自己的持久状态。形式化定义是:对任意自状态资源 $R$,攻击操作集合 $A(R)$ 是合法操作集合 $L(R)$ 的子集。这与跨边界攻击(rm -rf 用户文件、外泄到C2)相反,后者 $A(R) \not\subseteq L(R)$,OS隔离机制可有效阻断。

$A(R) \subseteq L(R)$ 是全文最核心的不等式,直接推出预防不可区分性——没有任何按事件触发的OS访问控制能在不误杀合法操作的情况下阻断全部自状态攻击。

间接提示注入 (Indirect Prompt Injection) 与困惑代理 (Confused Deputy)

攻击者把恶意内容植入智能体读取的渠道(文档、网页、消息、工具输出),诱导其执行攻击者选择的行为。它放大了经典的“困惑代理”问题:一个有特权的组件被诱骗滥用其权限。在LLM智能体里,自然语言的灵活性加上跨会话持久化让问题更严重,自适应攻击能持续突破基于LLM的语义防御。

本文威胁模型把“智能体已被污染”作为给定前提,专注研究“被污染的智能体能对自己的持久状态做什么、OS能做什么”。理解间接注入是理解攻击如何进入的前提。

OS访问控制、VFS事件与文件完整性监控 (DAC/MAC/chattr/LSM/inotify/FIM)

Unix权限+POSIX ACL、SELinux/AppArmor(MAC)、chattr +i、eBPF LSM hooks、Landlock 属于预防层;inotify/fanotify/auditd 是内核事件监控接口;FIM(Tripwire/Wazuh)用SHA-256哈希基线对任何属性变化告警。在VFS边界,每个攻击都还原为特征元组 $\langle\text{target-path}, \text{op\_type}, \delta s, \text{mode-delta}, \Delta t\rangle$,这是任何内核级监控器能看到的全部表面。

论文把整个攻击空间和三类防御都投影到这一个VFS特征元组上,理解DAC/MAC/FIM各自的作用域才能理解三个结构极限(prevention/detection/recovery gap)的根因。

统计异常检测与负载条件化 (B1 vs B2)

对文件事件特征做均值-标准差建模,对偏离基线的事件打z分数。本文用 $\text{score}(e) = \max(|\delta s - \mu_s|/\sigma_s, |\log \Delta t - \mu_t|/\sigma_t)$,阈值 $\tau = 2.0$ 对应 $2\sigma$。负载盲基线B1在所有profile合并的池子上拟合一组全局统计量;负载条件化基线B2为每个profile单独拟合。

B1/B2对比是论文最关键的消融,证明“负载条件化”是一个能提升每profile灵敏度却不必然关闭更多cell的设计原则,是读者必须理解的核心创新。

V/C/I 可检测性分类 (Workload-conditioned Detectability)

在不同负载profile下,按cell的最低TPR把23格canonical矩阵分成三类:V(Visible,$\text{TPR}_{\min} \geq 0.80$)、C(Conditioned,$0.50 \leq \text{TPR}_{\min} < 0.80$)、I(Indistinguishable,$\text{TPR}_{\min} < 0.50$ 且目标可写)。一个cell的类别是攻击与所测profile集合的属性,profile变多可能把V-cell迁移到C。

V/C/I是论文对“OS检测能走多远”的直接回答——残余的4个I-cell就是结构性不可区分的攻击面,必须靠OS之上的语义层,是results的核心结论。

研究动机

近期LLM智能体正从云端聊天界面迁移到直接运行在用户机器上的自托管形态(如Claude Code、OpenClaw),因为开发者需要能进入私有代码库并拥有完整shell/文件系统访问的智能体,企业需要对机密文档推理而不外泄,个人希望智能体处理本地工作流。这类智能体的本质特征是“持久自状态”——以本地文件形式存在的记忆(MEMORY.md)、指令(SOUL.md/AGENTS.md)、配置(openclaw.json),且智能体必须读写它们来记忆、适应偏好、跨会话学习,所以这些文件永久处在智能体自己的写集合内而非只读沙箱区。一旦决策过程被间接提示注入污染,它本就合法的写路径就变成攻击者篡改自状态的通道,作者称之为“自状态攻击”。现有防御集中在语义层(LLM-as-judge、guard agent),但语义防御是结构性概率化的,与攻击者共用同一个开放自然语言空间,自适应攻击能持续突破;Cisco已记录过Claude Code的真实持久记忆污染事件,但OS层对自托管智能体的防御能力从未被系统研究:哪些攻击OS能独自关闭、哪些依赖部署方式、哪些必然逃逸,都悬而未决。

本文的目标是本文要给出第一个对自状态攻击OS层可防御性的系统刻画,含五项目标:(1)把自状态攻击形式化为一个特定安全问题并定义威胁模型;(2)构建四轴攻击空间(Target×Mechanism×Granularity×Temporal),让每个攻击实例对应一个可被OS观测的特征元组cell,暴露被既有威胁目录捆绑在一起的防御可观测子结构;(3)沿预防/检测/恢复三维度分析OS防御各自的结构极限并量化失效原因;(4)提出“负载条件化异常检测”作为OS层监控的设计原则,并用V/C/I分类把23格canonical矩阵分成可见/负载条件化/不可区分三类;(5)在真实OpenClaw智能体、四个负载profile、每profile 30任务×5链共600任务槽的trace池上实证评测,给出推荐的分层防御栈(L3预防+B2检测+15事件备份)并量化残余攻击面有多大。

与已有工作不同的是,既有工作要么把记忆污染当作kill-chain的一个阶段(Promptware),要么当作单一攻击方法(AgentPoison/MINJA/PoisonedRAG),要么在case study里提到智能体改自身状态但停在per-case映射(Christodorescu et al.)。行业威胁框架(MITRE ATLAS的AML.T0080.000、OWASP Agentic的ASI06、微软失败模式分类)虽开始把自状态污染列为顶层条目,但都把它分散在生命周期、层、危害类型等其他轴下,没有一个把它定义成带维度空间的类。本文的独特切入是:从OS/VFS边界视角发现每个攻击无论语义内容如何都还原为同一特征元组,于是选四个轴各投影到元组一个分量(目标→路径前缀、机制→IN_* mask、粒度→|δs|、时序→Δt),使同一目录级攻击可能在whole-file改写、行插入、4字节翻转或慢速小写之间裂解为可处理与不可处理两种情形。这种“防御者可观测性子结构”是既有目录从未暴露的。

核心方法

直觉上,这篇论文像在问:“如果把攻击者的语义花招全抽掉,只看文件系统那一层,操作系统到底看得见什么、能拦什么?”作者把所有自状态攻击统一投影到VFS特征元组 $\langle\text{target-path}, \text{op\_type}, \delta s, \text{mode-delta}, \Delta t\rangle$ 上——即任何内核级监控器(inotify/fanotify/auditd)能看到的东西。技术路线分三步:(1)用四轴(Target/Mechanism/Granularity/Temporal)组织攻击空间,每轴投影到元组的一个分量,枚举出23格canonical矩阵(43个脚本实例);(2)沿预防/检测/恢复分析OS防御的结构极限,引入“负载条件化”部分弥合检测极限,导出V/C/I三类;(3)在真实OpenClaw trace上跑三个实验(预防-功能权衡、检测矩阵、恢复保真度)并做时间规避与FIM消融,最后把三维度机械合成为per-cell防御结论。

核心思想两层。第一层是“不可区分性”的形式化:自状态攻击的定义性质是 $A(R) \subseteq L(R)$——对同一自状态资源 $R$,攻击操作集合是其合法操作集合的子集,所以攻击与合法写最终都还原为针对同一inode、参数化为同一 $(\text{op\_type}, \delta s, \text{mode-delta})$ 元组的同一个write()系统调用。由此推出预防不可区分性(Claim 1):任何按事件触发、无记忆的OS预防策略都无法在不误杀合法操作的情况下阻断全部攻击,本质是“困惑代理”在更严格条件下的实例——被污染对象是智能体自己的持久状态而非外部资源。第二层是“负载条件化检测”:worst-case极限的前提是 $R$ 上所有合法操作等可能,但真实负载高度有偏,每个文件的合法写在 $(\text{op\_type}, |\delta s|, \Delta t)$ 特征空间里集中在窄区;让监控器按每profile学per-file基线并标记偏离,能把检测能力部分找回,把23格分成V/C/I三类——没有任何全局阈值是最优的,这正是与“语义层一招通吃”的本质区别。

方法步骤详情

方法分六步。第一步形式化自状态:分Instruction(SOUL.md/IDENTITY.md/USER.md、规则AGENTS.md、工具清单TOOLS.md)、Memory(MEMORY.md、memory/*.md、session日志)、Configuration(openclaw.json、安全阈值、HEARTBEAT.md)三层,定义自状态攻击为 $A(R) \subseteq L(R)$;威胁模型假设攻击者无内核访问、只能经智能体读取的渠道植入内容,OS内核与监控/备份组件可信且运行在独立principal下。第二步定义四轴:D1 Target→路径前缀,D2 Mechanism(M1 Modify/M2 Add/M3 Delete/M4 Deny)→IN_* mask,D3 Granularity(G1–G4)→|δs|,D4 Temporal(T1–T4)→Δt。第三步按四条排除规则枚举23格canonical矩阵并展开为43个(target-file)实例。第四步把23格映射到MITRE ATLAS/ATT&CK/OWASP Agentic三套目录。第五步分析预防/检测/恢复三极限并引入负载条件化导出V/C/I。第六步实验:openclaw-core(约2000行Python)驱动Gemini 3 Flash,W1编码/W2研究/W3运维/W4通用四profile各跑5条30任务链(共600槽),inotify采trace;Exp1用L0–L5六级权限做预防-功能权衡,Exp2用B0/B1/B2在τ=2.0打分并做时间规避与FIM消融,Exp3用8个跨V/C/I攻击加1个备份销毁哨兵在 $k\in\{5,15,30,60\}$ 跑720场景量恢复保真度。

技术新颖性

技术新颖性四点。第一,首次把自状态污染定义为一个独立的安全问题类并给出其维度空间,而MITRE/OWASP/CSA等框架只把它散落在生命周期或层里。第二,四轴里Granularity和Temporal专为暴露“防御可观测性子结构”而引入——同一目录级攻击(如aml.t0080.000记忆污染)在whole-file改写、行插入、4字节翻转、慢速小写之间OS可检测性完全不同,这是目录在target/mechanism级捆绑所掩盖的。第三,负载条件化异常检测(B2)把Denning/NIDES/FWRAP的经典z分数模型从“全局池化基线”改为“每profile独立基线”,并形式化为V/C/I分类规则,是明确设计原则而非trick;消融显示它双向迁移cell(2升2降),净计数几乎不变但暴露池化掩盖的真实漏洞。第四,把预防/检测/恢复三极限组合成per-cell级联,并在真实agent trace上机械合成出“推荐栈关闭除4个I-cell外全部”这一可落地结论。

实验结果

结论四块。预防权衡(Exp1):L0→L5,protection 0.00→1.00、functionality 1.00→0.00;L3(锁Instruction+Config)是平衡点protection 0.61/functionality 0.70,但W3因HEARTBEAT.md每tick写跌到11%、W4跌69%;L5完美防护但零功能。检测矩阵(Exp2):B2在τ=2.0下23格分11V/8C/4I,4个I-cell全集中在Memory行小改写(Mem-M1-G3/G4、Mem-M2-G3/G4),因W3的Memory行5-chain池含162个写事件(30 MEMORY.md+132 memory/*.md),使 $\sigma_s$ 宽到小改写 $z<2.0$。B1 vs B2消融:负载盲B1是13V/4C/6I、B2是11V/8C/4I,净计数几乎不变但双向迁移——Cfg-M1-G3/G4从I升C、Mem-M1-G2/M2-G2从V降C,ΔTPR在V -0.005、C +0.37、I +0.46。FIM基线B0:TPR恒1.00但每事件FPR 0.76–0.99(均值0.84),栽在整个合法负载而非I-cell。时间规避Exp2-T:random/burst/quiet为11V/8C/4I、10V/8C/5I、12V/7C/4I,仅2/23格变类。恢复Exp3:8个跨V/C/I攻击检测触发后100%补救,唯一失败是备份销毁哨兵0%;数据损失随 $k=5\to60$ 平均丢4→35事件、比例约14%→15%→11%(W3)。合成(Table 9):推荐栈下Instruction/Config被L3统一关闭,Memory行2个V被B2关闭、4个I在至少一profile跌破阈值——除4个I外全部关闭,每profile关闭数W1 20/23、W2 21/23、W3 17/23、W4 18/23。

The four axes and their VFS projections.
Table 1: The four axes and their VFS projections.
The three OS defense dimensions and the structural limit each meets against self-state attacks.
Table 2: The three OS defense dimensions and the structural limit each meets against self-state attacks.
The 23-cell canonical attack matrix.
Table 4: The 23-cell canonical attack matrix.
V/C/I distribution at τ=2.0 under B2 over the canonical 23-cell matrix.
Table 6: V/C/I distribution at τ=2.0 under B2 over the canonical 23-cell matrix.
Defense outcome per cell under the recommended configuration (L3 prevention + B2 detection at τ=2.0 + 15-event backup interval).
Table 9: Defense outcome per cell under the recommended configuration (L3 prevention + B2 detection at τ=2.0 + 15-event backup interval).
Prevention-functionality tradeoff under the strict cumulative cascade.
Figure 2: Prevention-functionality tradeoff under the strict cumulative cascade.
Target × Mechanism tile labels under B2 detection alone.
Figure 3: Target × Mechanism tile labels under B2 detection alone.
Workload-conditioning ablation (B1 vs B2).
Figure 4: Workload-conditioning ablation (B1 vs B2).
查看结构化数据
任务指标本文基线提升
预防-功能权衡(Exp1) Protection / Functionality(跨4 profile均值)与每profile成功率 L3平衡点 protection 0.61、functionality 0.70;L5 protection 1.00但functionality 0.00 L0无限制 protection 0.00、functionality 1.00 L3是跨部署可推荐的最高限制级——锁掉Instruction+Config两层同时保留至少3个profile可用工作负载
检测可检测性分类(Exp2, B2) V/C/I cell分布(τ=2.0, 30 trial均值) B2(负载条件化):11 V / 8 C / 4 I B1(负载盲):13 V / 4 C / 6 I 负载条件化把2个config小改写从I升到C、把2个Memory大改写从V降到C,净计数几乎不变但暴露池化掩盖的真实per-profile漏洞
FIM基线对比(Exp2-FIM, B0) TPR与每事件FPR B2:W3 TPR最高、FPR 0.08 B0(Wazuh式哈希FIM):TPR恒1.00,FPR均值0.84(W1 0.77/W2 0.76/W3 0.99/W4 0.87) B0在合法负载上结构性地过载告警(0.76–0.99合法写也触发),是栽在整个合法工作负载而非I-cell上的不同失败
时间规避鲁棒性(Exp2-T) V/C/I分布随注入时机变化 random/burst/quiet:11V/8C/4I、10V/8C/5I、12V/7C/4I 随机注入(默认)11V/8C/4I 仅2/23格跨时序变类,quiet-gap反而把Mem-M1-G2从C升到V;slow-drip(T4)被构造性排除因每子阈值写在任何模式下都in-distribution
恢复保真度(Exp3) 补救率与丢失事件比例(k∈{5,15,30,60}) 8个跨V/C/I攻击检测触发后100%补救;W3丢失比例约14%/15%/15%/11% 备份销毁哨兵0%补救(攻击rollback语料本身) 证明恢复原语不依赖V/C/I类别,唯一失败模式是自指攻击销毁备份语料
推荐栈防御合成(Table 9) per-cell关闭率(✓TPR≥0.80) L3+B2(τ=2.0)+15事件备份:除4个I-cell外全部关闭 无任何防御(L0) 每profile关闭数W1 20/23、W2 21/23、W3 17/23、W4 18/23;残余4个I-cell全集中在Memory行小改写,是结构性不可区分攻击面

局限与改进

作者承认四点。(1)检测器per-event、无记忆,V/C/I只关于该检测器在 $(\text{op\_type}, \delta s, \Delta t)$ 元组上能做什么,留下“轨迹级评分”这一互补面——指令污染可能产生新型syscall模式、记忆中毒可能偏移文件访问分布,只需轨迹统计不需语义,却对per-event检测器不可见。(2)Instruction行大部分V-cell(9个里8个)反映基线性质而非真实可见性——SOUL.md/AGENTS.md/IDENTITY.md在四profile几乎零合法写,任何写都触发unseen-key哨兵;用更丰富基线这些cell会迁移到C。(3)实验只在openclaw-core上做,Claude Code等其他智能体的可迁移性靠“遵守同一自状态契约”假设支撑,未直接验证。(4)sentinel攻击暴露恢复原语的自指失败模式,被排除在100%补救率外。我额外观察:防御组件假设运行在独立principal且被信任,但真实部署chattr +i需root、备份目录需防篡改,这套信任假设本身可能是新攻击面;τ=2.0与TPR 0.80/0.50边界人为选定,C类高度依赖阈值;slow-drip(T4)被构造性排除是per-event检测器的固有限制。

独立分析的弱点

独立分析五点。第一,per-event检测器对slow-drip(T4)结构性失明——攻击者把语义等价篡改拆成很多≤4B小写,每个都在任何profile的Memory分布内,只有累积效应异常,而z分数模型memoryless无法捕捉序列相关性;改进方向是把负载条件化扩展到滑动窗口轨迹评分(作者§G.2自提),对Δt序列、写大小序列做时序建模。第二,备份销毁哨兵暴露恢复原语唯一失败——攻击者先删backups/再删MEMORY.md,论文排除在100%补救率外等于承认“恢复不能防自指攻击”;改进方向是把备份放独立principal、网络隔离的append-only存储(WORM/区块链账本),或对备份目录施chattr +i + a。第三,Instruction行V-cell多来自空基线,使“Instruction行被预防统一关闭”部分反事实;改进方向是采15–20条reflection-centric trace重新评分。第四,整套V/C/I结论只在openclaw-core(Gemini 3 Flash)上得出,模型与架构效应未解耦;改进方向是把23格在Claude Code、不同模型上重跑做二维消融。第五,τ=2.0与V/C/I阈值全局统一但C类高度依赖阈值、不同部署FPR容忍差异极大;改进方向是给per-profile、per-mode的τ校准协议。

未来方向

作者明确提两条:(1)滑动窗口轨迹评分(§G.2)——在OS层之上但仍在语义层之下,用轨迹级统计(文件访问分布偏移、connect()目标异常、syscall新模式)回收部分I-cell;(2)更丰富的Instruction基线(§G.5)——采reflection-centric trace验证Instruction行V-cell迁移。基于成果可延伸三个方向。第三,语义层与OS层协同——I-cell结构性不可区分,必然需要content-diff audit或consume-time的read-path re-scoring这类架构不同的面,把“写可见性门控”作为OS层补充。第四,跨架构泛化——把四轴框架应用到Claude Code、Open Interpreter、Devin等其他自托管智能体,比较各自self-state contract差异如何改变cell分布,验证结论可迁移性。第五,威胁目录回馈——既然catalog级防御声明会over/under-state OS能力,可向MITRE ATLAS/OWASP提交Granularity维度作为子技术,让目录的“可防御性标注”更精细,形成研究与标准化的闭环。

复现评估

复现性是本文强项。作者在Appendix A公开完整实验平台artifact(匿名仓 anonymous.4open.science/r/self-state-attacks-os-C901):含约2000行Python的openclaw-core harness、全部43个canonical攻击脚本、四profile的per-task指令包与语料(W1 Aider polyglot Python子集、W2 FRAMES、W3/W4手写)、三检测器实现(B0/B1/B2)、Unix权限表L0–L5、备份管理器、Exp1/2/2-T/2-FIM/3全部驱动与图表生成脚本、原始JSON与CSV。提供一键复现scripts/run_all.sh,从已打包trace出发约30秒重建全部表与图,只需Python 3.10+无第三方依赖。算力上trace采集用Gemini 3 Flash经OpenRouter、每profile 30任务×5链共600槽,但全部V/C/I复现可用已打包trace离线跑,无需大算力或额外API费。复现难度低到中:方法学清晰、数据全开源、依赖极少;主要门槛是需Linux环境(inotify非Linux不可)与OpenRouter key(仅重采trace需要)。论文披露用Claude辅助起草散文与样板LaTeX,但所有实验设计与科学主张为作者自有并经人工复核,伦理上声明仅刻画防御边界、不开发新进攻能力。