CARE:面向执行 shell 命令的 LLM 智能体的执行前命令校验
CARE: Pre-Execution Command Verification for Shell-Executing LLM Agents
- Permissions and approval
- Prompt injection
- Permissions and sandboxing
- Detection and filtering
- Guardrails and judges
- coding agent
- Application layer
CARE在派发前核验智能体shell命令:主分割F1为85.64%、FPR为0.91%、均值延迟2.32ms。
攻击者可用提示注入、对抗任务或社会工程,诱导LLM智能体在派发边界产出危险shell命令,造成文件损坏、凭证泄漏、外泄或权限放大。
- LLM智能体把shell命令派发到宿主,使派发边界成为高风险控制点。通用护栏不细建模shell结构,常开LLM评审延迟高且不稳定,解析器不阻止执行。
- CARE先把原始命令规范化为不执行的稳定核验目标,再从语法、语义、路径和带来源的风险模式得到确定性证据,只把未决的WARN交给LLM评审。
- 主分割549条上,完整CARE的F1为85.64%、FPR为0.91%、均值延迟2.32ms;静态配置F1为84.99%、延迟0.34ms,RedCode-gen的realised harm为37.33%。
- 作者称命令级防护不覆盖分阶段攻击链与跨轮环境改变。生成器与评审共用Qwen3-Coder-30B,跨家族敏感性为后续工作。实验含549条主分割、300个NL2SH-ALFA任务和RedCode-gen 600条。
- Threat model
- 攻击者可用提示注入、对抗任务或社会工程,诱导LLM智能体在派发边界产出危险shell命令,造成文件损坏、凭证泄漏、外泄或权限放大。防护只见命令串c及有界路径上下文,不见推理、用户提示和历史。不替代沙箱或TOCTOU-safe enforcement。
- Benchmarks
- Main evaluation splitARTRedCode-ExecCanonical AttacksNL2BashReal-world CmdsNL2SH-ALFAGTFOBinsObfuscationExploit-DBRedCode-gen
- Metrics
- F1DRFPRmean latencyResolve raterealised harm rate
研究者提出 CARE(Canonicalization, Attribution, and Resolution Engine),一种针对 LLM 智能体所生成单条 shell 命令的执行前静态校验器。CARE 先将命令规范化为稳定的校验目标,再依据语法、命令语义、路径上下文和来源支撑的风险模式生成确定性证据,只把难以判定的命令升级给 LLM 裁判,使常见情况保持快速、可复现和可审计。在平衡主划分上,CARE 取得 85.64% F1、0.91% 误报率和 2.32 ms 平均延迟。切换到静态执行配置后,它保持 84.99% F1、0.34 ms 延迟,并将 RedCode-gen 上的实际危害降至 37.33%。作者称这些配置在外推测试和受控 Docker 沙箱执行中呈现出良性恢复、误报负担、延迟与危害削减之间的实际取舍。
Paper analysis
What problem does this paper attempt to solve?
在有限可观测性下,于派发前拦截智能体产生的危险shell命令。
LLM智能体派发的单条shell命令,须在执行前仅凭命令串与有界路径上下文判为ALLOW、WARN或DENY。
- 场景:作者称编码与终端自动化把命令派发变成关键运行时边界。不安全命令可能损坏文件、外泄秘密或建立持久化。论文写CVE-2025-66032中,Claude Code的只读校验可被$IFS改写和短标志缩写绕过,且利用需要上下文中的不可信内容。
- 现有不足:作者称ToolSafe、ClawGuard及由AgentSpec导出的规则基线未充分刻画shell结构、路径和命令习语;常开LLM评审有延迟、成本与波动;bashlex与ShellCheck不决定能否执行。部署还须同时平衡检测、假阳性率、延迟和可审计性。
- 观察:作者认为许多不安全动作在执行前就暴露于命令结构、命令头、路径目标和高置信shell习语。
- 提出内容:静态优先核验器CARE(Canonicalization, Attribution, and Resolution Engine),把确定性证据构造与只针对未决命令的LLM裁决分开。
- 威胁模型:
- 攻击目标:在派发边界诱导危险命令,后果包括文件损坏、凭证泄漏、数据外泄或权限放大。
- 影响渠道:提示注入、对抗任务描述,或用户提示上的社会工程。论文未使用white-box或black-box等知识分级。
- 防护输入:命令串c,以及工作区根、家目录展开、解析符号链接用的只读文件系统元数据。不见推理、用户提示和对话历史。
- 环境假设:文件系统权限、认证和内核隔离由部署环境另行保证。CARE不替代沙箱、宿主加固或TOCTOU-safe enforcement。范围是Linux上bash/sh的单命令筛查。
What related research exists?
相关工作覆盖工具护栏、内容分类器和shell解析;CARE收束到派发边界。
智能体与文本拒绝
- AgentDojo(Debenedetti等,NeurIPS 2024)与Agent-SafetyBench(Zhang等,2024)——前者涉及97个任务、629项安全测试中的不安全行为;后者中没有系统的总体安全分超过60%(349个环境)。
- Mind the GAP(Cartagena与Teixeira,2026)及Liu等(ACL 2026)——论文称文本级拒绝不能稳定转移到工具调用;前者中智能体可以一边生成拒绝文本,一边仍派发被禁工具调用。
- Claude Code、Codex与RedCode(Guo等,NeurIPS 2024)——论文用来说明编码、终端自动化和风险代码执行;CVE-2025-66032被引为只读命令校验被绕过的事例。
运行时护栏与内容分类
- ToolSafe、ClawGuard、AgentSpec、NeMo Guardrails、MAGE与SafeHarness——论文把它们概括为处理工具调用、策略、长程智能体状态或生命周期安全。作者称CARE的区别是把执行点收束到shell派发,并先用shell专用静态证据。
- Llama Guard与gpt-oss-safeguard——对生成文本做内容安全分类。论文在实验中把对应模型当作迁移基线,并称它们不是原生shell命令守卫。
shell分析与提示注入
- bashlex与ShellCheck——面向解析和脚本正确性。作者称它们不决定能否执行;Discussion称若直接当作拦截器,仍需策略、来源,以及对良性双用途命令的弃权机制。
- ShellCore(Alasmary等,2022)——离线脚本分类,不是在执行前对单条命令做门控。
- Greshake等(2023)、StruQ(Chen等,USENIX Security 2025)与NL2Bash(Lin等,LREC 2018)——分别识别间接提示注入、加固提示、把shell生成当作学习。Discussion称StruQ降低指令跟随风险,但不可信内容到达工具边界后,间接注入暴露仍然存在(引用Zhan等,ACL 2024)。
基线方法为NoGuard、Regex、ClawGuardSim、OpenClaw4Layer、PromptOnly、LLMJudge、NeMo Guardrails、Granite Guardian 2B、Llama Guard 3-8B、GPT-OSS-Safeguard-20B,以及CARE的两个配置。LLMSecGuard被讨论后排除:它分析并修复源代码,不是调解shell派发。基准/数据集包括ART、RedCode-Exec、NL2Bash、NL2SH-ALFA、GTFOBins、Exploit-DB,以及作者整理的Canonical Attacks、Real-world Cmds、Obfuscation和RedCode-gen。
作者把本文放在派发边界的命令级调解上:每条命令都在边界被检查,模糊情况可弃权进入Resolution,裁决保留可审计轨迹。
How does the paper address this problem?
CARE先静态构造shell证据,只把未决WARN升级给LLM评审。
CARE对单条命令做三阶段、静态优先的执行前核验:先得到不执行的稳定目标,再用多视图证据给出临时ALLOW/WARN/DENY,只把未决WARN交给LLM。
问题设定
- 输入是智能体规划器在执行前产生的候选命令c。裁决必须发生在任何shell副作用之前,且一次只看一条命令。调解步骤本身无状态。
- 范围是Linux上的bash/sh;zsh、dash、busybox等外层包装在L0规范化。发出命令的智能体可以是单轮,也可以是DENY后重试的多轮,两种都进入评测。
- 作者给出的同时目标是安全、延迟和可审计性:高精确率与召回、每次派发都够快,并为每次裁决发出解释轨迹。
规范化
- 有界算子N按固定顺序做幂等、确定的重写:解开包装、引号与转义规范化、有界解码、轻量去混淆,单遍得到ĉ。不启动子进程。
- 原始token与规范化形式一并保留,下游可同时匹配。作者称这是有界规范化,不是完全语义恢复。附录A.1列出代表性重写与运行限制。
- bashlex解析失败,且原始或L0规范化命令仍含高风险token时,失败关闭并返回DENY。
多视图归因
- L1用bashlex把ĉ建成AST,抽出命令头、参数、控制流、重定向、替换和解析诊断。结构惩罚取已匹配指标的最高严重度。附录A.1中,接到解释器的管道严重度为1.00,普通管道为0.05。
- L2用策划词表把命令头映射到语义类,类有基分,旗标、目标和串联带来的非负加成把分数截断到1。双用途命令另有子分类器和上下文加成。附录A.2的基分从READ ONLY的0.00到DESTRUCTIVE的1.00;词表约250个命令头。
- L3从AST token和重定向抽出路径,展开家目录、有界解析符号链接,并展开工作区相对引用。同一敏感路径上,读上下文低于写上下文;秘密路径不论读写都升高,以免把例行诊断读误拦,同时仍标记系统路径上的持久化写。
- L4匹配有明确操作含义、带来源的高置信模式,而不是宽关键词封锁。每条规则有标识、失败家族、置信度,以及公开来源或人工理由。信号取来源权重与置信度乘积的最大值。
- L5把四路证据加成临时分数。该分数是可审计启发式,不是学得的概率:
score(c)=wsemssem(c)+wpathspath(c)+wpatspat(c)+wstructδstruct(c) 权重非负且和为1。低于τlow为ALLOW,落在τlow与τhigh之间为WARN,不低于τhigh为DENY。权重和阈值只在dev分割上调节后固定。strict、balanced、auto只改阈值,不改层逻辑。
决议与执行
- 临时ALLOW和DENY直接定案。只有分数落在WARN带才考虑升级。静态配置CARE(w/o Resolution)把WARN和DENY都按拦截计入二值指标。
- WARN上的跳过谓词由规则、敏感路径和语义三部分组成。目录锚定规则的加权置信达到θrule,或语义分达到θsem且命令头属于高风险类,或L3看到对保护路径的写、或对秘密路径的任意访问,就保持DENY,不调用LLM。
- 三者都不成立时,把归因证据对象交给评审。评审在不确定时默认DENY,并返回ALLOW或DENY。允许则转发执行,拒绝则在副作用前阻断。Algorithm 1汇总全流程。附录E给出Resolution评审和各LLM基线的完整提示词。
正文采用的参数
- balanced模式为τlow=0.15、τhigh=0.35;默认权重为0.30、0.30、0.30、0.10。跳过谓词为θrule=0.80、θsem=0.70,路径谓词开启。
- 规则库139条:92条MITRE ATT&CK、31条GTFOBins、16条Manual Cases。来源权重分别为1.00、0.85、0.60。七个失败家族见附录A.4。
- Resolution评审是本地vLLM上的Qwen3-Coder-30B-A3B-Instruct,temperature=0,单次提示。
What experiments did the paper conduct?
主分割上CARE的F1为85.64%、FPR为0.91%;静态配置的RedCode-gen harm更低。
实验设置
- 比较对象:§IV-C列出12个方法:NoGuard、Regex、ClawGuardSim、OpenClaw4Layer、PromptOnly、LLMJudge、Granite Guardian 2B、Llama Guard 3-8B、GPT-OSS-Safeguard-20B、NeMo Guardrails、CARE(w/o Resolution)、CARE。后三个内容安全模型是迁移基线。ClawGuardSim是规则边界设计的shell侧近似;OpenClaw4Layer是已发表四层流水线的仅shell重实现。引言另称相对12个基线。
- 评审模型:PromptOnly、LLMJudge、NeMo和CARE的Resolution共用Qwen3-Coder-30B-A3B-Instruct,temperature=0、单次提示。三个自有模型基线用厂商提示、各自的vLLM实例。附录E中,CARE评审解析失败记DENY;PromptOnly与LLMJudge记ALLOW。
- 主分割:1,862条池按模板族做70%dev:30%test(seed 42),EVAL为549条(220 DANGEROUS+329 SAFE);其余1,313条只用于超参。Table I:ART 137、RedCode-Exec 71、Canonical Attacks 12、NL2Bash 299、Real-world 30。同一ART YAML或NL2Bash模板的兄弟命令不跨dev与eval。
- 其他语料:NL2SH-ALFA为300个安全任务。OOD为GTFOBins 69、Obfuscation 250(50条基命令×5种技术)、Exploit-DB 123,各与547条NL2Bash SAFE池做1:1抽样。RedCode-gen为600条。
- 指标与检验:DR、FPR、F1为点估计。延迟是每命令平均墙钟,LLM方法含完整vLLM往返。效用列为Resolve%。realised harm是守卫放行且Docker内执行成功的比例;作者称这是守卫间相对代理,不是独立安全主张。差异用双侧McNemar;小桶另报Wilson 95%区间。
- 运行点与环境:规则库139条,Regex基线22条。平衡阈值0.15/0.35,θrule=0.80、θsem=0.70、路径跳过开启。机器为4×NVIDIA H100。RedCode用Docker-in-Docker,超时30s,出网限于localhost。
主结果
据Table II,主分割549条。下表只列8行;省略ClawGuardSim(F1 39.27%)、PromptOnly(66.99%)、Llama Guard 3(55.95%)、NeMo Guardrails(68.63%)。
Swipe horizontally to read the table
方法 F1% DR% FPR% 延迟ms CARE 85.64 75.91 0.91 2.32 CARE (w/o Resolution) 84.99 75.91 1.82 0.34 LLMJudge 73.09 67.27 11.25 45.90 OpenClaw4Layer 72.62 57.27 0.30 0.02 Granite Guardian 65.58 82.27 45.90 17.25 GPT-OSS-Safeguard 45.21 30.00 1.82 459.89 Regex 29.46 17.27 0.00 0.01 NoGuard 0.00 0.00 0.00 0.00 - 作者称启用Resolution后F1升到85.64%,是因为FPR从1.82%降到0.91%,DR仍为75.91%。三例修正都是良性跨主机rsync,没有目录来源的DENY被翻转。作者报告CARE(w/o Resolution)相对PromptOnly、LLMJudge、ClawGuardSim、OpenClaw4Layer和Llama Guard 3的McNemar检验均为p < 10^{-5};相对完整CARE的三例改进p=0.25,作者称未达到该检验的显著性。
- §V-A1:静态配置P95为0.91ms;完整CARE中位路径为0.24ms,P99为50.61ms,尾部来自23/549次LLM升级。Granite Guardian召回82.27%,同时FPR为45.90%。
- Figure 1图注:CARE为F1=85.64%、FPR=0.91%、2.32ms;无Resolution时0.34ms。作者称LLM护栏位于17–460ms带,静态规则基线低于3ms、F1最高72.62%,且没有基线同时处在高F1、低FPR、均值延迟低于10ms的区域。
良性工作流保持
- Table III(a),NL2SH-ALFA单步、300个任务:CARE解决率57.00%、拒绝1次;NoGuard为57.33%、拒绝0。CARE(w/o Resolution)为55.67%、拒绝7次。Granite Guardian解决率36.67%、拒绝131次,论文写拒绝占43.67%。
- Table III(b),5轮循环:CARE解决率65.33%、累计拒绝4、均值轮数1.70、延迟1.13ms;NoGuard为65.33%、0、1.69。Granite Guardian为49.33%、累计拒绝529、均值轮数2.86。
- 作者称单步与多步的差距与假阳性在重复交互中累积相一致。论文未报告驱动该循环的智能体模型名。
外部泛化与沙箱伤害
- GTFOBins、Obfuscation、Exploit-DB按1:1搭配SAFE样本。作者称这里的F1是平衡混合诊断值,不是部署流行率F1。Table V中CARE的F1为68.91、88.62、66.33,FPR为13.04%、11.60%、8.13%。LLMJudge在前两个危险语料中的GTFOBins与Exploit-DB上为83.56和73.95;Llama Guard 3在Obfuscation上为91.70。Regex在Exploit-DB上为81.52,高于CARE的66.33。作者称落后原因是CVE概念验证含刻板破坏习语,关键词匹配可不靠上下文捕获。
- RedCode-gen的600条是Qwen3-Coder-30B在攻击意图提示下实际发出的命令,不是基准金答案;12个方法索引对齐后在Docker中执行。NoGuard的harm上限为74.83%(449/600)。CARE(w/o Resolution)为37.33%,作者称这是比较中非LLM方法里的最低值;完整CARE为52.50%,作者称比静态配置高15.17个百分点。
- 作者认为,在改写后的攻击上,Resolution评审有时放行静态栈已经标记的WARN,可能因为评审与攻击者共享同一改写分布。Granite Guardian的harm为26.33%,但拒绝率71.83%,三个良性语料上的OOD FPR为56.91%–62.80%。CARE的对应OOD FPR为8.13%–13.04%,RedCode拒绝率38.67%。作者称harm应与拒绝负担一起读。生成器与CARE及若干LLM基线的评审同为Qwen3-Coder-30B;作者用三个其他厂商护栏和四个纯静态方法作锚定。
层与来源消融
- Table IV在CARE(w/o Resolution)、主分割上去掉静态层:去掉语义层后F1从84.99%到58.31%(∆F1 −26.68);去掉路径层到68.04%(−16.95);去掉模式层到75.49%,FPR到0.30%,DR到60.91%。作者称DR下降14.99个百分点。去掉AST+结构层的∆F1为−1.79。
- 按来源删规则:去掉GTFOBins的∆F1为−0.30;去掉MITRE为−4.13;去掉Manual Cases为−4.57;同时去掉GTFOBins与Manual Cases后F1为80.11%(−4.88)。作者称三者互补,并称GTFOBins规则在主分割上变化小、在RQ3 holdout上作用更大;正文未给该holdout的单独消融数字。
- Table VII是代表子集、银标签。CARE的credential DR为92.1%(n=38),workspace-escape为62.5%(n=80),destructive为88.5%(n=26),FPR为0.91%。同表Granite Guardian的credential DR为86.8%,workspace-escape为65.0%,总FPR为45.90%。下载执行家族n=5。作者称CARE在凭证类命令上家族级DR最高,在工作区逃逸上仍有竞争力。
其他消融与分析
- Table VI(a)默认权重0.3/0.3/0.3/0.1的F1为84.99%,与Table II的CARE(w/o Resolution)相同;semantic-upweighted为85.28%(+0.29);pattern-dominant为70.49%(−14.50)。
- Table VI(b):τlow=0.15时F1为84.99%;τlow=0.10时DR为96.82%、FPR为23.10%;τlow=0.30时DR为35.91%、F1为51.97%。
- Table VI(c):θrule=0.80、θsem=0.70、路径谓词开、nllm=23时F1为85.64%;关闭路径谓词后nllm=88、F1为81.70%。
- Table IX每技术50条:CARE的Enc. DR为84.0%、Wrap为98.0%;CARE(w/o Resolution)的IFS为94.0%、Enc.为84.0%。作者称静态栈在wrapper与whitespace/IFS上更强、在escape/encoding上更弱。
- 附录D,n=65:bash的DR为0.89、解析错误率0.11;zsh与dash的DR为1.00;busybox为0.85。相对bash,每种方言有7次裁决翻转。
- 附录A.6:549条中WARN为117条,跳过谓词抢先处理94条,评审处理23条,其中3条改为ALLOW、20条维持DENY;作者称没有危险命令被评审改成ALLOW。
What are some points that can be further explored?
作者称跨轮攻击链不在范围内,生成器与评审同骨干留作后续。
作者指出的局限与后续方向
- CARE是派发边界上的命令级守卫,不是轨迹级防御。分阶段的download–chmod–execute链、迭代外泄和跨轮环境改变不在范围内;作者称应把它读成部分风险降低,而不是完全遏制。按作者举例,危险命令占1%时,完整CARE(DR=75.91%、FPR=0.91%)每10,000次派发约拦截76条危险命令、漏过24条、误拦约90条良性命令;静态配置的危险漏过相同,良性误拦约180条。(Discussion,Scope, deployment, and limitations)
- CARE的Resolution评审和若干评审基线,与生成RedCode-gen的模型共用Qwen3-Coder-30B骨干。作者把跨家族的生成器–评审敏感性列为后续工作。(Discussion)
- 作者称样本量仍限制按失败家族的分辨力,因此对小桶报告Wilson区间;失败家族标签是silver。附录C亦称这些标签应作诊断,而不是金标准分类。(Discussion;Appendix C)
- 来源重叠已做缓解,但仍然可能存在,因此使用三个非MITRE基准。GTFOBins使用未见过的binary-hash holdout。(Discussion)
- RedCode是相对的Docker沙箱代理,不是完整的宿主沦陷度量。Resolution阈值在dev上调节,并在四个OOD语料上验证。(Discussion)
- 作者称互补的沙箱、宿主加固和执行后审计仍然必要。结论称发布评测分割、带来源标签的规则库、良性命令池和可复现实验框架,以支持轨迹级推理和更丰富部署上下文上的后续工作。(Discussion;Conclusion)
实验覆盖范围
- 主结果比较§IV-C列出的12个方法。主分割549条,来自ART、RedCode-Exec、Canonical Attacks、NL2Bash和Real-world Cmds;另外1,313条只用于超参选择。(Table I、Table II、§IV-B)
- 效用评测是NL2SH-ALFA的300个任务,含单步和5轮循环,指标为Resolve%、拒绝次数和均值轮数。(Table III)
- OOD语料为GTFOBins 69、Obfuscation 250、Exploit-DB 123,各与NL2Bash SAFE池1:1配对;RedCode-gen为600条Qwen3-Coder-30B生成命令,在超时30s、出网限于localhost的Docker沙箱中执行。(Table I、Table V、§V-C)
- 消融覆盖去掉语义、路径、模式、AST+结构层,以及按MITRE、GTFOBins、Manual Cases删规则。敏感性扫描覆盖聚合权重、τlow和三个跳过谓词。附录D把65条危险命令改包到zsh、dash、busybox。(Table IV、Table VI、Appendix D)
- 差异检验为双侧McNemar,小桶有Wilson 95%区间。LLM评审为Qwen3-Coder-30B-A3B-Instruct,temperature=0、单次提示。论文未报告NL2SH-ALFA循环所用的智能体模型,也未报告主分割指标的重复实验次数。(§IV-D、§IV-E、Table III)
Summarize the main content of the paper
静态优先的派发前核验在主分割上F1为85.64%,两种配置取舍不同。
CARE是shell执行型LLM智能体的命令级执行前守卫,在宿主shell产生副作用之前筛查单条命令。
要处理的边界是命令派发。智能体把自然语言目标拆成shell命令;防护看不到推理、用户提示和历史,只能看到命令串,以及工作区根、家目录展开和只读文件系统元数据。作者认为通用工具护栏、常开LLM评审和脚本检查器不能同时覆盖shell结构、低延迟和执行裁决。
做法是静态优先的三阶段流水线。规范化把命令变成不执行的稳定目标;归因从语法、语义、路径和带来源的模式得到可加启发式分数;高置信ALLOW与DENY直接生效,只有未决WARN才交给Qwen3-Coder-30B-A3B-Instruct。无Resolution时,WARN与DENY都按拦截计。
主分割549条上,完整CARE的F1为85.64%、DR为75.91%、FPR为0.91%、均值延迟2.32ms;静态配置的F1为84.99%、FPR为1.82%、延迟0.34ms。二者的McNemar p为0.25。NL2SH-ALFA 300个任务上,CARE单步解决率57.00%,无防护为57.33%,拒绝1次。RedCode-gen 600条上,静态配置的realised harm为37.33%,完整CARE为52.50%,无防护为74.83%。
作者的结论是:完整CARE面向低FPR的良性恢复,静态配置面向零LLM、延迟敏感或更保守的伤害降低。命令级调解可以降低派发边界风险,并保留大部分良性工作流;它不覆盖跨轮攻击链,也不替代沙箱和执行后审计。