低调学安全

执行 Agent 需要对手,而不是观众

CyberStrikeAI Agent 审批能力设计札记


一、危险从不发生在聊天框里

大模型最擅长的是说服——用流畅的语言让你相信计划合理、范围可控、风险可接受。

但渗透测试真正出事的时刻,从来不是某段漂亮推理落地的那一刻,而是 exec 被调用、nmap 扫出去、c2_task 入队 的那一秒。语言可以撤回,命令不能。

CyberStrikeAI 的人机协同(HITL)早已在工具执行前设下一道闸。这次新增的 Agent 审批,动的是闸后面那个关键问题:

每一记即将落下的手,由谁做最后一瞥?

答案新增了一种:审计 Agent——与执行 Agent 异构、同权、专司质疑的第二个模型。侧栏里把审批方从「人工」切到「审计 Agent」,白名单和协同模式不变;变的是,裁决不再等人,而由一次独立的 LLM 调用当场完成。

这不是 HITL 换皮。这是在硅基劳动力内部,复刻了一种人类组织用了几百年的结构:做的人,和审的人,不能是同一个人。

Image

二、吞吐与问责之间,有一条裂缝

人工审批的珍贵,在于问责。日志里写着谁点的通过,复盘时有名有姓,客户问起来站得住。

人工审批的困境,同样实在。一次深度测试,执行 Agent 可以在数小时内抛出上百次工具调用。若每一次非白名单操作都等人,只有两种稳态:

  • 人变成瓶颈,自主性名存实亡;
  • 人变成橡皮图章,治理名存实亡。

第二种更隐蔽,也更致命——审批栏还在,信任已经死了。 形式上有人把关,实质上关口已空。这比没有审批更糟:它制造了一种虚假的安全感。

所以问题从来不是「要不要审批」,而是:

审批所需的注意力,能否从人身上剥离,同时又不回流到同一个执行模型?

Agent 审批挤进的,正是这条裂缝。


三、自我声明不是审计

行业里常见的「安全增强」,是让模型在工具调用前多输出一句:「我认为此操作安全。」

那是自我声明。执行模型同一套权重、同一个目标函数、同一段上下文,让自己相信自己——冲突被内化进网络,外面看不见,改不了,查不到。

CyberStrikeAI 的做法粗暴而有效:两次请求,两个人格。

执行 Agent
审计 Agent
任务
推进测试、提出行动
裁决这一条行动可否发生
气质
全力出击、深度探索
信息不足则拒绝
输出
工具调用
一行 JSON:approve / reject
温度
探索需要发散
0.1,裁决需要稳定

执行侧可以写「切勿等待批准」——那是战略层的进取。审计侧写「越权、破坏性、与任务无关 → reject」——那是战术层的克制。两种立场刻意不调和。

制衡从 prompt 里的自我说服,迁移为运行时的异构对手。这才是 Agent 审批的核心:不是多一次模型调用,而是多一个被规定成专门找茬的角色。


四、审参数不够,要审意图是否还在

若审计 Agent 只看到 nmap -sS 10.0.0.0/8,它和关键词过滤器没本质区别。

难判的越权从来不是语法层面的「危险」,而是意图漂移——工单授权 app.example.com,参数形式合法,但执行 Agent 的推理链早已滑向内网;用户说的是「验证 SQL 注入」,模型却准备对生产库做破坏性写入。

CyberStrikeAI 在审计前对审批包做认知增强。审计 Agent 读到的 JSON 里,不只有 argumentsObj,还有:

  • userMessage —— 用户本轮到底要什么
  • thinking / reasoningChain / planning —— 执行侧为何走到这一步

审的是动机与行动的一致性,而不只是行动的表层。

这背后有一个对长程 Agent 的冷判断:上下文压缩之后,目标会变形;变形发生在执行之前,最先体现在推理里。 把 cognition 喂给审计方,等于在后果落地前,给意图漂移一次被拦截的机会。

人读这些材料,认知负荷极高;机器读机器的长推理,反而可持续。Agent 审批在这里不是偷懒,而是把人类从逐行 JSON 的疲劳里解放出来,让人去做策略和例外。

Image

五、拒绝不是断头台,是修正案

很多人把「审批拒绝」理解成流程终止。CyberStrikeAI 不是这么设计的。

审计 Agent 拒绝一次调用,裁决意见会以结构化错误回灌执行侧——会话不断,任务不废,模型换参数、换路径、换策略,或者向用户澄清。拒绝是一次可恢复的否决,不是惩罚。

这在制度上很重要。若拒绝等于任务死亡,执行 Agent 会学会讨好审批方——包括审计 Agent——形式上过关,实质空转。可恢复的拒绝,才让双方保持诚实:执行侧可以大胆提案,审计侧可以严格否决,循环继续,直到行动落在可接受的空间里。

审查编辑模式(review_edit)则更进一步:审计 Agent 不只说「不行」,还可以说「行,但参数要这样」——完整替换工具参数,且被提示词约束为最小必要收窄:限 path、去危险 flag、禁止扩大攻击面;改不干净就 reject,不勉强放行。

这是红队老师傅带徒弟的数字化:方向认可,手法收一收。 治理的最高境界往往不是禁止行动,而是压缩行动的流形(manifold)——让探索仍在,伤害空间变小。


六、保守拒绝:把怀疑写成默认配置

审计 Agent 的实现里,几处「失败即 reject」值得当作宣言来读:

  • LLM 未配置 → reject
  • 调用失败或 90 秒超时 → reject
  • 响应无法解析为 JSON → reject
  • 审批模式下若偷偷返回改参 → 忽略,严守模式边界

这不是工程偷懒。是明确站队:在授权渗透里,漏放一次的代价,通常远大于多拦一次。

执行 Agent 被鼓励多疑(找洞);审计 Agent 被规定多疑(找茬)。两个多疑方向相反——一个向外扩,一个向内收。矛盾被保留,而非调和。

顺便说一句边界:审计 Agent 也是 LLM,会犯错,会被奇怪参数误导,会对提示词过度敏感或过度麻木。它不能替代签字式的授权书,也不能替代人的最终问责。 它的价值,是把「每一票都要人点」变成「每一票都有人定的规则在把关」,让人从重复劳动里退到规则设计者和异常处理者——侧栏随时可以切回人工,就是这个意思。


七、白名单:信任是一种预算

无论审批方是人还是 Agent,白名单内工具不触发裁决。会话配置与 config.yaml 全局列表取并集。

白名单不是「放松警惕」,而是把信任当预算来花:read_file、grep 等低危侦察,不值得每次都烧一轮审计算力;真正危险的动作,才把关口收紧。

空白名单 = 全部要审。这是默认严苛——适合还不了解自己的 Agent 会干什么的阶段。团队越成熟,越能精确描述「哪些动作可以默许」,Agent 审批就越接近精准的第二道门,而不是普遍意义上的税。

Image

八、日志里的 decided_by:硅基治理也要留痕

每一次 Agent 裁决写入 hitl_interrupts,decided_by 标为 audit_agent,与人工记录并列。

这很无聊,但极其重要。未来某天客户问:「这条命令谁批准的?」——你能回答「审计 Agent,依据当时策略 X,附裁决理由 Y」,而不是「模型自己觉得没问题」。

可审计性和可问责性不必永远指向自然人,但必须指向可追溯的决策节点。Agent 审批若做不到留痕,就只是把橡皮图章从人换成了机器。

Image

九、产能时代,真正缺的是异质

业界谈 Agent,几乎只谈产能:更多工具、更长上下文、更深的多 Agent 编排。仿佛把马力堆上去,安全问题会自然消失。

历史不这么运作。任何高后果行业——航空、核电、手术、证券交易——产能提升之后,增加的不是「更信任单一个体」,而是更密的制衡结构:飞行员与副驾驶、交易员与风控、手术主刀与核对护士。

自主渗透正在进入高后果区间。一个人带一队硅基队员,吞吐已超人类操作员几个数量级。此时若仍幻想单体模型既探索又自律,不是乐观,是裸奔。

Agent 审批,是把「执行 / 质控」这组古老分工,写进 Agent 运行时。它承认一件事:

自主性不该来自「我发誓我很小心」,而该来自「总有一个角色,被规定成与执行者利益不一致」。

利益不一致——执行 Agent 的 KPI 是找到问题;审计 Agent 的 KPI 是别闯祸。同一个模型里这两种 KPI 会打架;拆成两个角色,打架变成制度。

Image

十、怎么用,以及什么才值得投入

已在用人机协同:侧栏「审批方」→ 审计 Agent → 应用。一行切换。

尚未开启 HITL:Agent 审批不会凭空生效。先有「执行前可拦截」,才有「拦截后谁裁决」。

真正值得花时间写的,是 config.yaml 里两套审计提示词,或 Web「人机协同」页的在线编辑——你的授权边界怎么表述、什么情况必须 reject、审查编辑时收窄的尺度在哪。 默认提示词是宪法草案,不是成文法。团队自己的靶场规则、客户合同里的测试范围,才该成为审计 Agent 真正服从的上位法。


结语

我们正把渗透测试的手交给机器。手比嘴危险得多。

Agent 审批回答的不是「要不要人」,而是更尖锐的一层:

当执行者已经是硅基、且永远不会累的时候,谁有资格、以何种方式、对每一个即将发生的物理后果说「慢着」?

CyberStrikeAI 的答案是:再养一个 Agent,专门说这句话。让人来写它信什么、何时必须拒绝、何时可以收窄——让人在关键处接管;让机器在重复处互相牵制。

执行 Agent 负责把测试推到极致。
审计 Agent 负责在每一次出手前问:以你刚才那套推理,这一下——还是你该做的吗?

两个问题,两种角色,一次都不能少。


CyberStrikeAI — AI 驱动的自动化安全测试平台。Agent 审批位于人机协同流程内;审计策略见 config.yaml → hitl.audit_agent_prompt / audit_agent_prompt_review_edit。

仅限授权测试环境使用。