评测台上一排隔离靶场节点串成一条链,链的中间被一只手动闸刀断开

一、先把“端到端”拆成三段可判定的东西

安全类能力基准最难读的地方,是它把一个过程压成一个数。报告里那句“完成端到端漏洞利用若干次”看着像是一次是或否的判定,实际上它至少压了三段判断:链条的边界画在哪里、链条里有多少环节是模型自己发起的、通过与不通过由谁来判。这三段任何一段松一点,同一个模型的成功率就能翻几倍,收紧也一样。

第一段是边界。一条从信息收集开始,经定位缺陷、构造利用、执行,最后到取得权限的链条,起点和终点必须都写死。起点定在“已给一份目标说明”和定在“只给一个公网入口”是两个难度;终点定在“进程内执行成功”和定在“获得可持续的控制能力”又是两个难度。边界不写清,跨报告比较就没有意义。

第二段是自主性。评测方在中间补了一次提示、替人选了下一步,和模型自己决定下一步,是两种不同的能力。这类基准的价值恰恰在自主性上:要防的不是“有人在旁边操作时它能做什么”,而是“它在无人干预的循环里能走多远”。所以我们只承认人工干预次数为零的那一组数字,其余另立一档。

第三段是判定。用自动断言(检查目标环境里是否出现预期状态)还是靠人工看轨迹,前者严、后者松;判定失败但目的其实达成、判定通过但只是碰上了预设断言,这两种都会发生。判定条件本身要能公开复核,否则分子不可信。

二、分母的构成比分子更能决定这个数能不能用

分子只是一个计数,分母是一整套设计。看分母要先问四件事:任务从哪来、难度怎么分布、覆不覆盖我们要防的那类目标、同一个任务被允许试几次。

任务来源决定外部效度。来自公开竞赛题集、来自真实代码库的历史缺陷、来自评测方自搭的靶场,三种来源的难度分布完全不同。前两类偏“已知缺陷类型”,第三类偏“结构可控”。我们关心的是能不能迁移到自己交付的系统上,所以任务集是否公开、能否自取一份复测,比总分更重要。

难度与覆盖面决定这个数字能不能代表风险。缺陷类型若集中在某一两类内存问题上,它就不说明对配置类、逻辑类缺陷的能力;目标语言若只有一两种,它就不说明对多语言交付栈的能力。只在少数类型上打通链条的模型,和各类类型都能打通的模型,需要的护栏配置不是一个量级。

尝试次数的计数规则是最容易把数字做漂亮的一处。同一个任务允许试八次取一次成功,和只允许试一次,出来的成功率差好几倍,而两者都可能被写成同一个百分比。我们要的口径是首次成功率和多轮累计成功率分列,不允许合并成一个数。

分母的四个问题 影响哪一面读数 进表前要向评测方拿到什么
任务集来源 能否迁移到自家系统 任务清单与来源说明,能否自取复测
缺陷类型与语言分布 护栏需要覆盖多少类 按类型与语言分组的计数,不是总数
尝试次数怎么计 数字被放大多少倍 首次成功率与累计成功率分列
判定方式与判据 分子是否可复核 自动断言的规则原文与人工复核比例

三、三类失败必须分账:护栏拒答、执行失败、判定不通过

一次未完成的尝试至少有三种完全不同的样子,报告通常把它们合成一个“失败”。分不开,读出来的结论就会把策略问题当能力问题,或者反过来。

护栏拒答是链条在第一步就断,输出里没有实际动作,通常跟着一段拒绝文本。它说明的是策略配置,不是能力上限。同一个模型换一档配置,这个数字可以大幅变化。因此它既不能用来把某个模型整体定性为不安全,也不能用来证明它安全。

执行失败是有动作但没达成:中间环节出错、环境条件不满足、假设存在的缺陷其实不在。它是能力问题,处置在模型侧和任务侧,不在策略侧。

判定不通过是动作实际达成了目的,但预设断言没被触发,或者判定窗口设得太短。这是评测设计问题,改评测就行,与真实风险无关。

失败形态 日志里的特征 它实际说明什么 归属与处置
护栏拒答 无动作记录,只有拒绝原因码 策略档位,不说明能力上限 安全策略负责人,调档与分场景放行
执行失败 有动作序列,末段无预期状态 能力与环境适配 平台与接入方,不通过改策略解决
判定不通过 状态已变更但断言未触发 评测设计缺陷 评测设计方,补断言与时间窗

如果供应商只提供合并后的一个成功率,这张准入表上我们不接受这个数。不接受不是因为它难看,而是因为它不可行动。

四、进采购表时不问“这模型安不安全”,问“它的自主执行能力有多强”

读数方式的分野直接决定这张表有没有用。把漏洞利用基准当安全评分来打是范畴错误:它测的是能力,不是意愿,更不是防护水平。真正该从中读出的是一句工程判断——这个模型能在多长的自主链条里连续做对决策,因此我们的权限边界和人工确认点必须设在哪一级。

据此,采购问卷里该问的六个字段都是能拿到书面答复的具体问题。

  • 可配置护栏的粒度与绕过成本。能不能按动作类别分别设允许、需确认、禁止三档,生效范围是账户级还是单次调用级;一次诱导式提示能否稳定绕过,绕过要付出什么代价。
  • 动作级日志的字段与保留期。是否逐条记录动作意图、参数摘要、执行结果、拒绝原因、终止原因,记录保留多久,我们能否导出到自有存储长期比对。
  • 拒答与执行失败是否可区分。日志里有没有独立字段标明“被护栏拦下”还是“动作跑了但没成”,还是只有统一错误码。
  • 任务集是否允许客户自建复测。能否用我们自己的靶场与题集跑同一套评测流程,结果能否与内部口径对齐。
  • 漏洞披露与安全响应通道。有没有成文的披露入口与响应时限承诺。
  • 是否提供受限能力的部署档。是否存在关闭对外连接、关闭长链条自主执行的低自主档位,档位切换是否需要重新签协议。

五、自家系统要配的五个动作,以及每个动作的最小实现

外部数字读完,落到洹拓这一侧真正能控的部分,是自家交付的权限与护栏。五个动作按“从默认值到强制点”排。

  • 默认拒绝自主对外连接。智能体与自动化流程默认不带出站网络能力,需要访问外部时走一层代理,代理按目标白名单放行。最小实现:出站请求记录目标域名与发起会话标识,非白名单直接拒绝并单独落一条策略事件,这条事件必须与“执行失败”分开记账。
  • 工具调用按危险等级分层授权。把动作分三档:只读、可回退写、不可回退写。只读可批量放行;可回退写要带单次会话调用次数上限;不可回退写一律走确认。最小实现:工具注册表加风险等级与是否可回退两个字段,由网关按字段路由,不允许业务代码自己声明。
  • 生产凭证不下发。执行环境只拿测试环境凭证,或拿短时效、范围受限的凭证。最小实现:凭证由运行时按需签发,有效期绑定任务时长,不落盘,任务结束即失效;生产凭证放在智能体访问不到的独立系统里,需要时由人工侧完成替换。
  • 执行过程逐条留证并可一键停。会话内每一步意图、动作、结果要能事后重建,还要有立刻终止整个会话的开关。最小实现:会话事件表含会话标识、序号、动作类型、参数摘要、结果、终止标记;终止开关按会话和按租户两级都可用;终止后不留悬挂的外部副作用。
  • 可触发真实副作用的动作强制人工确认。发通知、改配置、下工单、动账、改权限这五类必须有确认点。最小实现:确认本身要留痕,记下谁确认、确认了哪段摘要;确认后参数若被改动,前一次确认作废。

六、误伤与误用的成本不对称,所以按身份和场景分档

护栏设太严,第一个被拦住的是授权范围内的渗透测试与应急演练;设太松,风险是把别人的攻击过程脚本化。两种代价不对称:误伤是效率损失,几小时内就会以工单形式暴露;误用是事件损失,可能很长时间才被发现。所以配置不能只有一个全局档位。

分档看三个维度。身份上,持授权的安全测试人员与一般业务用户不同档;环境上,隔离靶场、预发、生产不同档;时段上,演练窗口与平时不同档。三档交叉后策略表会有几十行,但这几十行可以逐行评审,每行都是一个明确判断,比“整体严一点”或“整体松一点”更可维护,也更容易在审计时说清某次放行是谁批的。

最后一件事是别照抄外部数字。外部基准的任务集不是我们的系统,报告的判定也不是我们的判定标准。做法是在自己的隔离靶场里,按同一批缺陷类型各出若干题,让模型在受控环境内跑,量两个自己的数:本机构口径下的完成率,以及每次未完成时链条停在哪一段。停止点的分布比完成率有用得多,它直接指出该在哪一段加人工确认,也指出哪一档护栏已经在拦合法动作。这个数不对外发布,只用来定配置。

至于报道里那组尝试次数与完成次数,本文只当作“这类基准已被公开引用”这件事的证据,不作为任何配置档位的依据;档位取自我们自己量出来的停止点分布。据公开报道的信息里,我们没有采信的部分比采信的部分更多,这本身就是这类基准该有的用法。