两军交锋,一方如果每次进攻都被严密挡回去,看起来防守固若金汤。但从另一个角度看,每一次成功防守,其实也在向对手传递信息:这一招不行,换一招;这个方向不对,再试另一个方向。

如果对手还能根据每一次失败不断调整策略,那么防得越认真,有时反而越像是在陪对手“练招”。

今天的大模型自动化越狱攻击,就正在面临类似的问题。

PAIR、TAP、X-Teaming 等自动化攻击方法已经不再依赖人工反复修改 Prompt,而是由模型自动生成攻击提示、观察目标模型回答、判断是否成功,再根据失败原因继续调整。

一次拒答并不能结束攻击,反而可能成为下一轮攻击的重要反馈。

哥伦比亚大学等机构提出的 PROACT 换了一种思路:既然攻击者需要根据反馈不断优化,那么防御者为什么一定要老老实实告诉它“你失败了”?

或许可以“诈败”,让攻击者以为自己已经赢了。

https://www.cs.columbia.edu/~junfeng/papers/proact-emnlp26.pdf

越安全的拒答,为什么可能越会“教”攻击者?

传统越狱防御的逻辑很直观:

攻击请求进入模型,安全机制识别风险,模型拒绝回答。

从单轮交互来看,这显然是一次成功的防御。

但自动化越狱攻击并不是只尝试一次。

一个典型攻击系统往往包含三个环节:攻击模型负责生成 Prompt,目标模型负责回答,评价模型负责判断这次攻击是否成功。如果失败,攻击模型就根据上一轮结果继续修改 Prompt,再发起下一轮尝试。

因此完整过程更像:

生成攻击 → 获取回答 → 判断失败原因 → 修改攻击 → 再次尝试。

这时候,“拒答”本身就不再只是防御结果,而成为了一种反馈信号。

攻击者每收到一次拒答,都获得了一条非常明确的信息:

当前策略无效。

论文中的一个实验非常直观。一个安全过滤器在攻击开始时已经能够拦截大约 88% 的请求,第一轮攻击成功率只有约 12%。但攻击系统不断根据这些失败反馈调整策略之后,后续攻击成功率持续上升,到第五轮时甚至能够达到接近 100%。

换句话说,一个很准确的安全系统,在持续对抗过程中可能无意中扮演了另一种角色:

攻击者的“陪练”。

每一次拒绝都像在告诉对方:

这一招错了。

再换一个。

还不行。

继续。

直到攻击者找到那条真正能够绕过去的路径。

这也是 PROACT 想解决的第一个问题:当攻击具备自动优化能力之后,防御系统不能只考虑“这一次有没有挡住”,还要考虑自己的反馈会如何改变下一次攻击。

既然“失败”会帮助攻击者,那就给它一次“假胜利”

PROACT 的思路并不复杂。

假设某一次攻击已经成功触发模型的安全机制,传统系统会直接返回:

“抱歉,我无法帮助你完成这个请求。”

攻击系统中的评价模型看到这句话,很容易判断:

攻击失败。

于是攻击继续。

PROACT 则在这里插入了一层新的机制。

当系统确认模型准备拒答时,它不再直接把拒答返回给攻击者,而是另外生成一段特殊回答。

这段回答表面上非常像一次成功的越狱:格式完整、语气肯定、似乎包含大量细节,甚至可能使用编码、符号、虚构术语等方式包装。

但是其中并没有真正有价值的危险信息。

对于攻击系统来说,它看到的却可能是:

“目标模型终于回答了。”

于是评价器给出:

攻击成功。

攻击者因此停止搜索。

这就像两军交锋时,一方故意让出一个“战果”。

对手以为防线已经被突破,于是停止继续寻找真正的缺口;但实际上,他得到的只是一个提前准备好的假目标。

PROACT 并不是单纯把攻击挡在门外,而是主动影响攻击者对战局的判断。

这也是“诈败”这个比喻最贴近它的地方。

传统安全机制追求的是:

让攻击者一直失败。

PROACT 追求的则是:

让攻击者错误地相信自己已经成功。

真正被“骗”的是攻击者的裁判

为什么这种方法能够奏效?

关键在于今天很多自动化越狱系统都存在一个重要组件:

Judge,也就是负责判断攻击是否成功的评价器。

攻击模型通常不会真正理解自己有没有获得想要的信息。它依赖 Judge 阅读目标模型的输出,再回答一个问题:

这次越狱成功了吗?

于是自动化攻击实际上依赖两个不同的标准。

一个是真实世界中的安全标准:

这段回答到底有没有真正提供危险信息?

另一个是攻击系统内部 Judge 的判断:

这段回答看起来像不像一次成功的越狱?

理想情况下,两者应该完全一致。

但现实中很难做到。

一个评价模型通常只能根据文本本身进行判断。回答格式是否完整、内容是否足够详细、是否与请求主题相关,都可能成为它判断“成功”的依据。

这就留下了一个缝隙:

有没有可能生成一段回答,让 Judge 认为攻击成功,但实际又没有泄露真正有害的信息?

PROACT 正是在寻找这样的回答。

从这个角度看,这篇论文真正“越狱”的对象甚至不是目标大模型。

而是:

攻击者自己的 Judge。

如果说传统越狱是:

修改 Prompt,欺骗目标模型。

那么 PROACT 做的事情恰好反了过来:

修改 Response,欺骗攻击评价器。

这是一种非常有意思的镜像关系。

攻击方在寻找目标模型的判断漏洞,防守方则开始寻找攻击 Judge 的判断漏洞。

PROACT 如何制造一个足够真实的“假战果”?

当然,随便生成一段乱码并不能骗过攻击系统。

如果一个越狱请求要求获得某类具体内容,而模型只返回一句毫无关联的话,Judge 很容易发现异常。

因此 PROACT 本身也需要一个生成和优化过程。

整个系统可以简化成三个模块。

首先是响应监测。

正常用户的请求仍然由目标模型正常回答,PROACT 不介入。只有当模型产生安全拒答,或者已有的输入过滤器、输出过滤器判断请求存在风险时,这套机制才会启动。

其次是 PROACT Defender。

它负责生成那段“看起来成功、实际上安全”的响应。

为了避免 Defender 自己真的生成危险内容,论文还采用了一个比较谨慎的设计:它不一定直接获得完整的恶意请求,而更多依据请求主题和有限信息生成诱饵回答。

最后还有一个替代评价器。

因为防守方并不知道攻击者真正使用的是哪一个 Judge,所以 PROACT 自己训练或者调用另一个模型,模拟攻击者的判断方式。

Defender 先生成一版回答,替代评价器检查:

“这看起来像一次成功的攻击吗?”

如果不像,就告诉 Defender 哪里还不够真实,再重新生成。

如此反复,直到得到一个:

在评价器看来足够像成功,同时又没有真实危害的响应。

也就是说,攻击者在进行自动化优化,防御方实际上也建立了一套反向优化机制。

红队在优化:

怎样的 Prompt 更容易骗过目标模型?

蓝队则开始优化:

怎样的 Response 更容易骗过攻击 Judge?

两边最终形成了两个互相嵌套的对抗闭环。

它不只是让攻击提前停下,还可能把攻击者带进“死胡同”

最容易想到的破解方法是:

既然 PROACT 靠的是让攻击系统误以为成功,那么攻击者干脆取消“成功后停止”这个规则,不就行了吗?

论文也专门进行了测试。

结果发现,即便攻击系统在 Judge 判断成功之后仍然继续尝试,PROACT 仍然能够产生明显效果。

原因在于,攻击算法并不仅仅利用 Judge 决定“停不停”,还会利用它决定:

下一轮应该往哪个方向走。

如果 Judge 认为当前 Prompt 已经非常接近成功,攻击模型往往不会重新探索完全不同的策略,而会围绕当前 Prompt 继续小幅修改。

于是,一个假的成功反馈会产生第二层影响:

它开始改变攻击者的搜索空间。

论文分析攻击 Prompt 的变化后发现,PROACT 介入之后,不同轮次生成的 Prompt 相似度明显增加,攻击策略越来越集中。

攻击者以为:

“我已经找到正确方向了,只需要再优化一点。”

但实际上,这个方向本身就是防守方人为制造出来的假方向。

这有点像在迷宫里设置了一个假出口。

即使探索者没有立刻停下来,他也可能会围着这个假出口反复搜索,而不再寻找真正的道路。

因此 PROACT 最有意思的地方,并不只是“让攻击提前结束”。

它实际上正在尝试:

污染攻击者的优化过程。

或者说,主动塑造攻击者看到的搜索空间。

这已经不再只是传统意义上的内容过滤。

从“拦每一次攻击”变成“骗成功一次就够了”

这种设计还带来了一个很重要的安全逻辑变化。

传统防御面对一个持续十轮的自动化攻击时,需要十轮全部防住。

只要其中任意一次漏过去,攻击就可能成功。

因此它要求防御系统在整个攻击轨迹中持续保持很高的召回率。

PROACT 的逻辑则不同。

如果系统能够在攻击早期的某一轮识别风险,并成功向攻击者投放一次可信的“假战果”,后面的攻击可能就直接消失了,或者被引向错误方向。

安全目标从:

每一轮都不能漏。

变成了:

尽早成功识别一次,并利用这次机会打断攻击闭环。

论文在 PAIR、TAP、DAGR、X-Teaming 等多种自动化攻击方法,以及多个开源和闭源模型上进行了测试。在部分实验中,PROACT 可以将攻击成功率降低超过 90 个百分点,大量组合最终攻击成功率被压到很低水平。

更有意思的是人工核验结果。

在一些实验中,攻击系统自己的 Judge 几乎认为自己已经百分之百成功,但研究人员真正检查这些输出时,里面实际包含危险信息的比例却非常低。

也就是说,攻击者看到的是:

“我已经攻破模型。”

而防御系统看到的是:

“你拿到的只是我们准备好的假答案。”

从这一点来看,“诈败”甚至并不完全准确。

因为真正发生的事情更像是:

主动制造一场假胜利。

安全的目标,正在从“内容”扩展到“对抗过程”

PROACT 最值得关注的地方,或许并不是它具体生成了什么样的诱饵回答。

更重要的是,它改变了一个长期存在的安全假设。

过去的大模型安全研究主要关注:

用户输入了什么?

模型输出了什么?

所以我们的防御对象主要也是 Prompt 和 Response。

但自动化攻击出现之后,真正的攻击对象已经逐渐变成一个完整闭环:

攻击生成 → 模型回答 → 攻击评价 → 策略优化 → 下一轮攻击。

这时候,只盯着其中某一次输入和输出已经不够了。

因为攻击系统真正依赖的是:

反馈。

模型拒绝、过滤器分数、Judge 判断、错误提示,甚至响应时间,都可能成为攻击算法继续搜索的信息。

从这个角度看,PROACT 给出了一个值得继续研究的方向:

既然攻击者正在利用反馈优化,那么防御者也可以主动管理反馈。

不仅可以隐藏反馈,还可以延迟反馈、模糊反馈,甚至制造具有误导性的反馈。

安全问题于是从:

“如何识别恶意请求?”

进一步变成:

“如何控制攻击者看到的学习信号?”

这已经更接近传统对抗博弈中的思想。

“诈败”的代价

PROACT 并不是一个可以单独解决所有越狱问题的终极方案。

首先,它需要安全系统至少能够识别出一次攻击。

如果一个模型面对恶意请求第一轮就直接给出了真正危险的回答,那么 PROACT 根本没有机会介入。因此它更适合作为现有护栏上的附加防线,而不是替代输入检测、模型对齐和输出审核。

其次,它依赖攻击者 Judge 存在判断缺陷。

如果未来攻击评价器不再只判断回答“像不像成功”,而是能够解码、核查事实、验证内容是否真实可执行,那么“假成功响应”的欺骗空间也会缩小。

论文中的自适应攻击实验已经体现出这种趋势:不同评价模型面对 PROACT 时差异明显,更强、更谨慎的 Judge 确实更难被欺骗。

最后,还有一个真实系统必须考虑的问题。

PROACT 需要生成一段:

看起来非常像危险回答,但实际上是假的内容。

这种响应如果直接进入日志、审核系统、Agent 上下文或者后续工具链,很容易带来新的问题。

因此如果真的部署,这类响应最好被严格标记为内部生成的安全诱饵,与真实模型输出隔离,否则很可能造成日志污染、误告警甚至下游系统误用。

所以,“诈败”并不意味着防守方真的放弃安全边界。

恰恰相反,它要求系统对真假信息的内部边界管理得更加严格。

高手过招,不一定非要挡住每一剑

过去的大模型越狱防御,更像是一场纯粹的攻防:

攻击者不断出招,防守者不断格挡。

但自动化攻击正在改变这种关系。

当攻击者可以观察每一次防御结果、自动调整策略并持续试错时,单纯的“挡”可能已经不够。

因为一个始终诚实地告诉攻击者:

“你失败了。”

的安全系统,也在不断帮助它排除错误答案。

PROACT 提出的另一种可能是:

不要告诉攻击者真实战果。

必要的时候,甚至可以故意给它一个“胜利”。

让它以为已经穿过防线,让它停止搜索,或者把下一轮优化引向错误方向。

高手过招,未必要挡住每一剑。

有时候,故意露出一个破绽,让对手以为自己已经得手,反而可能更早结束这场交锋。

对于越来越自动化的大模型攻击来说,未来的安全系统或许不仅需要学会判断:

谁在攻击我?

还要进一步学会:

我应该让攻击者看到什么?

声明:本文来自模安局,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。