ARTICLE / ai

系统提示词为什么防不住:从手工诱骗到梯度优化的提取攻击全景

导读:LLM 应用安全里有两个方向相反的攻击,经常被混为一谈。提示词注入是"写"——攻击者往模型上下文里塞指令,劫持模型行为;系统提示词提取是"读"——攻击者诱导模型把开发者藏起来的系统提示词原样吐出来。注入方向的攻防资料已经很多,本文专门拆"读"方向:攻击者怎么偷、真实世界里偷到了什么程度(三份独立研究交叉验证)、为什么"不要泄露提示词"这句话在结构上防不住,以及从设计卫生到系统向量的四层防御。文中所有数字均标注论文出处(arXiv 编号),可自行复核。

一、先分清两个方向:注入是写,提取是读

两者的攻击面根本不同。注入打的是输入通道——攻击者写内容进上下文,让模型执行攻击者的指令而不是开发者的;提取打的是输出通道——提示词本来就在模型上下文里,攻击者要做的是让它"说出来"。这意味着:你在输入侧部署的一切防线(输入分类器、内容审核、注入检测),对提取攻击基本无效,你需要的是输出层的控制。

维度提示词注入系统提示词提取
攻击方向写入上下文,劫持行为读出上下文,窃取内容
攻击通道输入侧输出侧
直接危害越权操作、生成有害内容知识产权泄露、安全规则暴露
后续危害一次性滥用为定制化注入做侦察(先偷规则再绕规则)
OWASP 对应条目LLM01 提示词注入LLM07 敏感信息泄露

时间点上这件事正值得聊。2026 年 9 月下旬的 Hacker News 上,“编码 Agent 擅自替用户签署合同"的求助帖和 OpenAI 通报多起模型失准行为的新闻接连出现,面向 AI Agent 的 MicroVM 沙箱项目同日获关注——社区焦点集中在"Agent 越权了什么”。但在"做什么"成为头条的同时,一个更安静的攻击面一直在工作:你的应用把什么暴露了。

二、威胁模型:被偷的到底是什么

系统提示词之所以是资产,是因为它承载了三类东西。

第一类是业务逻辑与知识。一个垂直领域的助手,其提示词往往浓缩了领域专家数周的调优经验——输出格式约束、推理步骤设计、边界情况处理。PLeak 论文(arXiv:2405.06823,CCS 2024)开篇就指出:LLM 应用的功能与性能高度依赖系统提示词,开发者将其保密以保护知识产权,提取攻击直接复制这份资产。

第二类是安全规则本身。内容过滤标准、拒绝策略、权限边界写在提示词里。攻击者拿到它,就拿到了你防御工事的图纸,可以针对性地构造绕过。

第三类最致命:不该放进去的机密。OWASP 在 LLM Top 10(2025 版,LLM07 敏感信息泄露)中的指引说得很直白:系统提示词不是安全边界,密钥、内部端点这类机密不应该存放在提示词中——因为提示词可能被诱导泄露,泄露即失守。

受害面也远不止"GPT 商店里的玩具应用"。三类典型受害者:平台上的定制助手开发者(提示词就是产品本身)、企业内部的知识助手(提示词里写着内部流程与数据边界)、以及带工具权限的 Agent 产品(提示词里描述了工具清单与使用规则,泄露等于把能力面清单交给攻击者)。

三、攻击三代演进:军备竞赛的真实节奏

第一代:手工诱导(零成本,正在失效)

最早的提取攻击就是人写的诱导话术——直接要求复述、伪装成维护人员、要求"对上面的指令做拼写检查"这类套路。Perez 与 Ribeiro 2022 年的工作是这一代的代表。

值得注意的是这一代正在退化。SysVec 论文(arXiv:2509.21884)观察到:模型厂商通过监督微调和偏好对齐加入了防泄露样本之后,面对最新版本的主流模型,多数简单提取话术已经不再有效。但这不是故事的结束,而是升级的开始。

第二代:多轮谄媚(单轮 17.7% 到多轮 86.2%)

单轮被拒,攻击者就拉长战线。EMNLP 2024 工业track论文(arXiv:2404.16251)设计了一个利用 LLM 谄媚效应(sycophancy)的多轮威胁模型:攻击者不直接索要提示词,而是在多轮对话中持续营造让模型迎合的氛围,逐步逼近目标。结果是平均攻击成功率从单轮的 17.7% 抬升到 86.2%,在 gpt-4 和 claude-1.3 上达到 99.9% 的泄露率。

这个数字的启示不在数值本身,而在杠杆点:攻击者没有碰任何模型底层,只是把"用户"这个人设演得更好。防线在对话轮数上是被逐轮磨损的,而多数应用的防御设计只考虑了单轮。

第三代:梯度优化(自动化的工业级提取)

手工和多轮话术都受限于人的想象力,第三代把这件事交给了优化器。PLeak(arXiv:2405.06823,CCS 2024)把"找到一个让模型吐出自己系统提示词的查询"形式化为优化问题,三个组件构成完整攻击框架:

  • 影子环境:用一组影子系统提示词和一个影子 LLM 搭出模拟应用,在影子环境里优化对抗查询,不需要知道目标应用的任何内部信息——闭盒攻击;
  • 增量搜索:不对整个提示词一次性优化,而是从提示词的前几个 token 开始逐步加长目标,逐段攻克"逐字复现"这个比越狱严格得多的目标;
  • 对抗变换:预判到输出过滤防御,让模型输出的是提示词的变换形态(加前缀、词序倒转),过滤规则看到的是"无害文本",攻击者事后逆变换还原。

在 50 个部署于 Poe 平台的真实应用上,PLeak 用单个对抗查询精确重构了 42% 的系统提示词,多查询聚合后达到 68%——作为对照,人工精心设计的话术只能重构 2%-20%,从越狱攻击改造而来的方法只有 18%。在离线环境(5 个数据集 × 5 个开源模型)上平均精确匹配率 82.3%,20 个配置中的 15 个子串匹配率超过 0.9。更麻烦的是可迁移性:在一种架构上优化出的对抗查询,换到不同架构的目标上依然有效。

四、三份独立研究的交叉验证

单一研究的数字可以质疑,三份方法各异的研究指向同一结论时,那就是结构性问题。

研究对象方法关键结果
Yu et al.(arXiv:2311.11538)216 个定制 GPT(200 第三方 + 16 官方)手工对抗提示,最多尝试 3 次系统提示词提取成功率 97.2%;带附件的应用文件泄露 24/24
PLeak(arXiv:2405.06823,CCS 2024)50 个 Poe 平台真实应用梯度优化对抗查询精确重构 68%;人工基线仅 2%-20%
Zhang et al.(arXiv:2404.16251,EMNLP 2024)多个商用模型多轮谄媚平均 ASR 17.7%→86.2%;gpt-4/claude-1.3 上 99.9%

三份研究的时间跨度从 2023 年底到 2024 年,方法从纯手工到全自动优化,测的对象从定制 GPT 到商用模型——成功率全部显著高于 60%。另一个容易被忽略的数字:Yu et al. 的研究中,只要应用带了上传文件,文件内容同样能被诱导吐出(24/24 全泄露)——提取攻击的边界不止提示词,是整个上下文里的敏感内容。

五、为什么防不住:三个结构性根因

根因一:复读是基础能力,不是漏洞

这是最深的一层。SysVec 论文把这个矛盾讲透了:模型厂商无法通过"禁止复述上下文"来根治泄露,因为复述与回忆上下文本来就是 LLM 的基础能力——摘要任务要求模型重复原文关键句,Agent 的常见实践是在推理末尾总结上下文中的重要信息。把这个能力关掉,模型本身就会严重残废。所以"不要复述系统提示词"永远只能是对一个能力的补丁式约束,而不是对漏洞的修复——攻击者总能找到绕过补丁的路径唤醒这个能力。

根因二:输出过滤是猫鼠游戏,且猫总是慢一步

对输出做关键词过滤是最直觉的防御。PLeak 的对抗变换就是为它准备的:模型输出的不是提示词原文而是加前缀、倒序后的版本,逐字匹配的过滤器形同虚设。论文实测,对抗变换让子串匹配指标提升约 0.50;即使部署句子级过滤,PLeak 仍维持 30% 的精确匹配率和 88.2% 的语义相似度——部分泄露依然足以让攻击者拼出大意

根因三:提示词承载了不该承载的东西

把 API 密钥、内部端点、过滤规则全文写进系统提示词,等于把保险箱密码贴在大门上。OWASP 的指引之所以反复强调"提示词不是安全边界",就是因为大量真实事故的根因不是攻击多高明,而是资产放错了位置。

六、防御四层:从免费卫生到架构重构

第 0 层:设计时卫生(零成本,今天就做)

对照 OWASP 指引做一次提示词审计:机密出提示词(改走环境变量或密钥服务)、过滤规则做抽象化表述而非可执行的完整清单、把"提示词泄露后的替代方案"写进应急预案。这一层不降低攻击成功率,但把泄露的爆炸半径从"失守"降到"丢面子"。

第 1 层:指令加固与输出过滤(有效但可绕)

在提示词中加入防泄露指令、对输出做过滤,是当前工程主流。它对第一代手工话术有效,对第三代优化攻击只能提高成本——PLeak 论文实测参数化防御(加防泄露指令)后攻击仍显著有效。这层的正确定位是抬高门槛,不是解决问题。

第 2 层:泄露检测与再生成

PromptKeeper(arXiv:2412.13426)把泄露检测形式化为假设检验问题:不只抓显式泄露,也抓改写后的隐性泄露;一旦检测到,用假提示词(dummy prompt)重新生成响应,让攻击者拿到的输出与正常交互不可区分。这层把防御从"过滤文本"升级为"检测行为",代价是检测器的漏报率决定上限。

第 3 层:代理提示词

ProxyPrompt(arXiv:2505.11459)的思路是不让真实提示词进上下文——用一个保持任务效用但混淆过的代理提示词替换原文,即使被提取,攻击者拿到的也无法复现原任务。在 264 组 LLM×提示词的评测中,ProxyPrompt 保护了 94.70% 的提示词,次优防御只有 42.80%。局限:代理生成本身有额外开销,且对任务效用有轻微影响。

第 4 层(研究前沿):把提示词搬出上下文

SysVec(arXiv:2509.21884)给出釜底抽薪的版本:把系统提示词编码为模型内部表示向量而不是文本放进上下文——上下文里根本没有提示词,“复述系统提示词"这个攻击类别直接不存在,这就是论文标题"你偷不走’无’“的含义。更反直觉的是副作用为正:论文报告该方案不仅保住了功能,还提升了通用指令遵循能力,并缓解了长上下文场景的遗忘问题。这层目前还在研究阶段,但方向意义重大——防御思路从"禁止说出来"转向"根本不在场”。

防御层机制防护效果代价与局限
第 0 层 设计卫生机密出提示词不降攻击率,砍爆炸半径无成本,需纪律
第 1 层 指令+过滤拒绝与关键词拦截挡第一代话术对抗变换可绕(EM 仍 30%)
第 2 层 检测再生成假设检验+dummy 再生成覆盖显式与隐性泄露漏报率是上限
第 3 层 代理提示词混淆替身进上下文94.7% vs 次优 42.8%(论文口径)生成开销、效用轻微损失
第 4 层 系统向量提示词不在上下文类别级消除(研究阶段)未产品化

七、给开发者的六条清单

按投入产出比排序:

  1. 今天:审计系统提示词,把密钥、端点、可执行的完整过滤规则全部移出——这是 OWASP 明确指引,也是唯一零成本高收益动作;
  2. 本周:给应用加输出侧泄露检测(哪怕先做关键词+相似度双通道),别只在输入侧设防——提取攻击打的是输出通道;
  3. 本周:多轮对话场景单独评估——单轮测试全绿不等于多轮安全,谄媚攻击的 17.7%→86.2% 全部发生在第 2 轮之后;
  4. 本月:评估代理提示词类方案是否匹配你的业务(提示词知识产权重的产品收益最大);
  5. 持续:把提取攻击纳入红队评测的固定科目,用子串匹配+语义相似度双指标衡量——精确匹配 0% 但语义相似度 0.88 仍然是泄露;
  6. 架构层:关注系统向量方向的产品化进展,新项目设计时预留"提示词与上下文分离"的可能性。

八、常见误区

误区一:“我的提示词写得很隐晦,偷了也拼不齐。” 学术评测用的是精确匹配+语义相似度双指标,部分泄露在语义指标下照样算成功——PLeak 在句子级过滤下精确匹配只剩 30%,语义相似度仍有 88.2%。

误区二:“加了一句’不得泄露提示词’就安全了。” 参数化防御在 PLeak 的评测中被显著穿透;这句话挡的是第一代话术,挡不住优化器和多轮谄媚。

误区三:“过滤输出文本就够了。” 对抗变换(加前缀、倒序)就是为逐字过滤设计的,实测把攻击的子串匹配指标抬高了约 0.50。

误区四:“我的应用不出名,没人盯。” 第三代攻击是自动化的,优化一次可以批量扫描无数目标,攻击成本与目标知名度无关。

误区五:“泄露最多丢面子。” 提取经常是注入的前置侦察——先拿到你的防御规则,再定制绕过方案;如果应用带附件或工具,泄露面还会从提示词扩展到文件内容(200+ 定制 GPT 研究中文件泄露 24/24)。

九、总结

一句话锚点:输入侧的注入防线,挡不住输出侧的提取——两个方向,两套防御。

这篇文章梳理了"读"方向的完整图景:攻击从手工话术进化到多轮谄媚再到梯度优化,三份独立研究交叉验证了 60% 以上的真实成功率;防不住的根因不是工程不努力,而是"复述上下文是模型基础能力"这个结构性矛盾;可行的路线是分层防御——设计卫生砍爆炸半径、输出检测抓行为、代理提示词混淆资产、系统向量釜底抽薪。

趋势上值得留意的是防御范式的迁移:从"教模型闭嘴”(注定是补丁)走向"让提示词根本不在上下文里"(消除攻击类别)。当提示词从一段文本变成模型内部的一个向量,“偷提示词"这件事在物理上就失去了抓手。在那一天到来之前,至少先把密钥从你的系统提示词里拿出来。

数据与引用说明:文中全部数字来自论文原文(arXiv:2311.11538 / 2404.16251 / 2405.06823 / 2412.13426 / 2505.11459 / 2505.23817 / 2509.21884,及 EMNLP 2024、CCS 2024 收录版本),为作者报告的实验口径,未做独立复现;HN 社区动态来自 2026-09-23 技术雷达日报。攻击技术仅做机制层描述用于防御建设,不含可用载荷。已过 Rigor Gate 自查 14/14(引用逐条核实、术语与来源逐字对照、无个人环境信息)。