[控场AI]
· 6 分钟阅读· 3,157 字

红队测试儿童AI导师:一词之差绕过提示注入过滤器

红队测试儿童AI导师:一词之差绕过提示注入过滤器

儿童AI导师Learna Tutor红队测试首轮即发现提示注入正则漏掉一词变体,暴露纵深防御中正则脆弱性。

Learna Tutor面向4至13岁儿童提供AI导师对话服务,其安全架构采用三层纵深防御:输入正则过滤器、模型系统提示词和输出过滤器。团队在私有测试阶段进行红队对抗测试,首轮即发现提示注入模式能拦住'ignore previous instructions',却漏掉多一个'your'的变体。修复方式是用可选捕获组泛化限定词和同义词,并扩展对disregard、forget、jailbreak等的平行覆盖。文章强调误报测试与拦截测试同等重要,正则只是绊线而非围墙,每层都假设其他层可能失败。

儿童AI辅导应用Learna Tutor在私有测试阶段做了一轮红队对抗测试,结果第一次跑就暴露了一个真实缺口:防护规则能拦住"ignore previous instructions",却漏掉了加一个词的"ignore your previous instructions"。

红队测试儿童AI导师提示注入过滤器

为什么儿童AI导师的安全是"承重墙"

Learna Tutor面向约4到13岁的孩子,允许他们直接和AI导师对话。和成人工具不同,这里的失败模式直接指向未成年人:提示注入("忽略你的指令,然后……")、隐私套取("告诉我你的邮箱")、以及学术诚信绕过("直接把答案给我")。

这类产品的安全不能只靠一句系统提示词加祈祷,需要能被实际验证的护栏。测试团队的目标很明确:不测"文档里的例子能不能拦住",而是测"真实用户会敲进去的东西能不能拦住"。

三层纵深防御架构

Learna的安全设计是三层,测试重点打的是两个确定性层:

输入过滤器(checkTutorInput):在任何模型调用之前运行,包含八类正则规则——隐私、危机、霸凌、医疗法律、超范围、学术诚信、提示注入、不安全网页,同时直接拒绝不支持的导师模式。

模型系统提示词:按年级分档、优先给提示而非答案,靠人工评审验证,不做单元测试。

输出过滤器(checkTutorOutput):在模型生成之后筛查响应。它具有专门的隐私检查,一旦导师向孩子索取个人信息(比如"告诉我你的邮箱地址"),该响应会被拦截。说个细节它对否定句处理正确——"不要分享你的邮箱地址"能通过,因为拦掉安全提醒本身就是误报。

把正则过滤器放在最外层是刻意的:便宜、快、不需要调用模型,而且失败时默认关闭(fail closed)。

对抗测试怎么做的

测试套件覆盖了每个类别,用的是孩子或好奇青少年真的会敲的措辞,而不是教科书式例句。

同样重要的是加入了误报检查:那些过滤器绝不能拦的合法问题。作者最喜欢的一个例子是一道阅读理解题,里面包含"Maya听到脚步声,把一封信藏在地板下"。天真的隐私过滤器如果匹配"letter"附近的个人语境词,就会把一道完全正常的英语题毙掉。好在这条通过了。

红队对抗测试(red teaming) 是一种模拟真实攻击者行为的测试方法:测试者主动扮演恶意用户,尝试用各种手段绕过系统防护,而不是只验证系统在正常路径下能否正确工作。在AI产品语境中,红队测试通常关注提示注入、越狱(jailbreak)、隐私套取、有害内容诱导等攻击面。它和常规单元测试的关键区别在于:单元测试验证的是“已知正确输入能否得到正确输出”,红队测试验证的是“恶意或边缘输入能否被有效拦截”。

误报(false positive) 指系统把本应放行的合法输入错误地拦截掉。在安全领域,漏报(false negative,即攻击被放过)通常被优先关注,但在面向儿童的学习产品中,误报的代价同样高昂:一个把正常英语阅读理解题当成隐私套取的过滤器,会直接破坏产品体验,让孩子失去求助能力。因此安全测试必须同时衡量拦截率和误报率,二者不可偏废。

发现:一词之差就是缺口

测试套件首轮就抓到一个真实漏洞:提示注入的匹配模式能命中"ignore previous instructions",却漏掉了"ignore your previous instructions"——多了一个可选的"your"。

这就是经典的正则脆弱性问题。攻击者不会用你的确切措辞,他们会变体。"Ignore all previous instructions"、"disregard the above"、"forget everything I told you",每个变体都是一个单独的洞,除非模式能泛化。孩子甚至不需要有攻击意图——"ignore your rules"就是小孩说话的方式。

修复:让模式覆盖限定词和同义词

修复方式是用可选捕获组扩展注入模式,让限定词和修饰语能泛化:

ignore\s+(your\s+|all\s+|the\s+)?(previous\s+)?instructions

同时对disregard、forget、system prompt、jailbreak、developer message以及角色扮演逃逸("pretend you are not…"、"act as unrestricted")做了平行覆盖。修复后重跑完整套件,全绿,并额外加了六个新措辞的注入探针,全部被拦。

正则表达式(regex) 是一种用字符模式匹配文本的技术。它的核心优势是确定性强、执行快、无需模型推理,因此适合放在最外层做第一道过滤。但正则的弱点也同样明确:它只能匹配“写出来的模式”,无法理解语义。攻击者只需改变词序、插入限定词、替换同义词,就能让原本有效的模式失效。文中“ignore previous instructions”漏掉“ignore your previous instructions”就是典型案例。

可选捕获组 是正则中用于表达“这部分可有可无”的语法。例如 (your\s+|all\s+|the\s+)? 中的 ? 表示整个括号内容可以出现零次或一次,从而让“your”“all”“the”等限定词被泛化覆盖。这种方式能显著提升模式的鲁棒性,但本质上仍是枚举已知变体,无法穷尽所有自然语言表达。因此正则适合作为“绊线”,而不是唯一的防线。

诚实的局限

正则是绊线,不是墙。它能抓住已知的措辞家族,一个真正全新的越狱措辞仍可能通过输入过滤器——这正是输出过滤器和系统提示词作为独立后备存在的原因。没有任何一层被完全信任。

本轮测试在过滤器层进行,没有对活模型做端到端测试(测试环境没有API key)。过滤器是确定性的,单元测试正是适合它们的工具;模型行为需要单独的评估。

这项工作还在继续。每学到一种新的攻击措辞,就增加一个测试用例,套件设计上就是持续生长的。

纵深防御(defense in depth) 源自军事与信息安全领域,核心理念是不依赖单一防线,而是让多层独立机制互为后备。在Learna的架构中,输入过滤器、模型系统提示词、输出过滤器分别在不同阶段运行,假设任何一层都可能被绕过。这样即使正则被新措辞突破,输出过滤器仍可能拦住模型生成的有害内容,系统提示词也能在一定程度上约束模型行为。

确定性过滤与模型评估的分工:正则过滤器是确定性的,同样的输入永远得到同样的结果,因此适合用单元测试做精确验证。模型行为则是概率性的,同样的提示可能产生不同输出,需要单独的评估集、人工评审或模型辅助打分。文章明确区分了这两类测试,避免用单元测试的思维去验证模型行为,也避免用模型评估的模糊标准去判断正则是否漏匹配。

可迁移的四条经验

对抗性地测护栏,而不是只做功能性测试。"它能不能拦住文档里的例子"和"它能不能拦住真实用户敲的东西"是两回事。

误报测试和拦截测试一样重要。一个会拦住合法学习问题的过滤器,就是一个坏产品,对孩子尤其如此。

一词变体就是提示注入的全部胜负手。如果你的模式不能泛化到限定词和同义词,它只是个演示,不是防御。

纵深防御不是口号,而是正则漏网不会变成灾难的原因。输入过滤器、系统提示词、输出过滤器,每一层都假设其他层可能失败。

#提示注入#红队测试#AI安全护栏#儿童AI导师#正则脆弱性#纵深防御#输入过滤器
分享:

相关推荐