首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >检测率 97.9% 仍被打穿:HarnessRisk 提醒我们「认出风险」不等于安全

检测率 97.9% 仍被打穿:HarnessRisk 提醒我们「认出风险」不等于安全

原创
作者头像
用户9746675
发布于 2026-11-12 10:59:05
发布于 2026-11-12 10:59:05
10
举报

做 Agent Harness 的人,很容易把「模型有没有识破注入」当成安全 KPI。HarnessRisk(lifecycle-oriented agent harness safety benchmark)用 128 个沙箱用例、六个生命周期阶段、三套 Harness × 六种模型,把这个错觉拆开了:Detection 高,ASR 仍可能不低;任务 Utility 高,也可能同时攻击成功。

一、评的不是单点攻击,是整条生命周期

HarnessRisk 把 Harness 责任拆成六个阶段:

  1. Harness Configuration:凭证、连接器、权限与安全策略
  2. Capability Extension:插件选择、安装、更新与权限边界
  3. Runtime Operation:不可信邮件、网页、文档与工具输出
  4. State Persistence:记忆、身份、偏好、策略与持久触发器
  5. Action Control:支付、部署、删除、授权与对外通信
  6. Incident Recovery:调查、回滚、轮换、状态修复与证据保全

每个用例都是「良性用户目标 + 嵌在工作流产物里的对抗指令」。轨迹上分开记四件事:Utility、Attack Success Rate(ASR)、Persistence、Detection。完成任务与是否被攻破,不再混成一个分数。

跨 14 组 model–harness 配置,ASR 大约在 12.6%~80.9%,Utility 仍多在 75.0%~97.6%。没有一组被评成「全生命周期安全」。

二、三个最扎人的数字

同一模型,换 Harness,安全可以差四倍以上。

GLM-5.2 在 OpenClaw 上 ASR 约 54.7%,换到 Nanobot 约 12.6%。安全排序会随 Harness 变——评「模型安不安全」而不绑运行时,结论会漂。

有用但不安全,是常态而不是例外。

大量轨迹一边做完用户任务,一边让攻击目标得逞(报告里 useful-but-unsafe 大约落在 38%~59% 量级,随 Harness 变化)。只看成功率的业务看板,会系统性地漏掉这件事。

高检测 ≠ 低攻击成功。

MiniMax M3 挂在 OpenClaw 上时,Detection 可到约 97.9%,ASR 仍约 31.2%。模型「喊出来了」,执行层照样可能放行,或把脏状态写进记忆 / 技能 / 配置。

Detection 与 ASR 负相关(论文报告 Pearson 约 -0.71),说明「认出」仍然有用;但相关性不是闸门。闸门必须接在 Action Control 与 State Persistence 上。

三、为什么配置阶段最脆

三个 Harness 上,Harness Configuration 都是最脆弱阶段之一:攻击不必一上来就外泄密钥,只要在「看起来合法」的工作流里改弱审批、改安全敏感参数,后面的 Runtime / Action 就会在授权外衣下失控。

这对工程的含义很具体:

  • 把「改权限 / 改连接器 / 改自动批准」当成高危动作,而不是普通配置写入;
  • 配置变更要有独立审批与审计,不能只靠模型口头确认;
  • 评测集要覆盖「授权内的参数篡改」,不要只测明显的恶意 shell。

四、落到 Harness:把 Detection 接到控制面

我自己的落地顺序是:

  1. 指标拆开看板undefinedUtility、ASR、Persistence、Detection 四条线并行。任何「又好用又安全」的宣传,至少要同时报 ASR 与 Persistence。
  2. 认出之后必须有强制动作undefinedDetection 事件默认映射到:收回工具子集、冻结持久化写入、要求人类确认高危 Action。只打日志不算控制。
  3. 按生命周期做回归,而不是只回归 promptundefined配置、扩能力、运行、落盘、动作、恢复,每阶段至少保留若干「良性目标 + 脏产物」用例。换模型或换 Harness 时整表重跑——HarnessRisk 已经证明安全是配置级属性。

示意:把检测结果变成权限衰减,而不是再生成一段警告话。

代码语言:python
复制
from dataclasses import dataclass


@dataclass
class SafetyEvent:
    detected: bool
    phase: str  # config|extension|runtime|persist|action|recovery


@dataclass
class Gate:
    tools: set
    can_persist: bool
    needs_human: bool


def on_detect(event: SafetyEvent, gate: Gate) -> Gate:
    if not event.detected:
        return gate
    blocked = {"shell", "network", "payments", "deploy"}
    return Gate(
        tools=gate.tools - blocked,
        can_persist=False,
        needs_human=True,
    )


g0 = Gate(tools={"read", "write", "shell", "network"}, can_persist=True, needs_human=False)
g1 = on_detect(SafetyEvent(True, "runtime"), g0)
print(sorted(g1.tools), g1.can_persist, g1.needs_human)
# ['read', 'write'] False True

五、小结

HarnessRisk 真正有用的结论不是「某某模型更安全」,而是:

  • 安全评测要绑在 model–harness 配置上;
  • 生命周期里配置与持久化往往比单次拒答更致命;
  • Detection 是传感器,不是制动器。

下一台 Agent 上线前,与其追问「它能不能看出来」,不如追问:看出来之后,权限、落盘和对外动作,谁在 12 微秒量级里把它按住。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、评的不是单点攻击,是整条生命周期
  • 二、三个最扎人的数字
  • 三、为什么配置阶段最脆
  • 四、落到 Harness:把 Detection 接到控制面
  • 五、小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档