跳到主要内容

7 篇博文 含有标签「ai-security」

查看所有标签

输出即有效载荷:你的 AI 威胁模型只守住了一半边界

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的团队为 AI 功能编写的威胁模型几乎肯定止步于模型本身。输入是不可信的:提示词注入、越狱、对抗性上传、投毒检索。输出被视为内容:需要进行安全审核、在拒绝评估中评分、发送给用户。这种威胁模型的形态大致是“不可信的东西进去,模型思考,安全的东西出来”。

新的攻击类别翻转了这种极性。模型的输出由下游系统渲染、解析、执行或中转,攻击者只要能塑造该输出——通过检索中的间接提示词注入、训练数据影响或社交工程化的用户查询——就能向模型从未直接访问过的目标传递载荷。模型变成了一个拥有攻击者所不具备的访问权限的混淆代理 (confused deputy),而你的团队所防御的边界比实际落后了两个系统。

EchoLeak 是 2025 年的经典案例。一封精心制作的电子邮件进入 Microsoft 365 邮箱。Copilot 将其作为常规上下文读取。隐藏的指令导致 Copilot 在回复中将敏感上下文嵌入到引用样式的 Markdown 链接中,客户端界面会自动获取该外部图片——从而在无需用户点击的情况下窃取聊天记录、OneDrive 内容和 Teams 消息。微软的输入侧分类器被绕过了,因为攻击不需要破坏模型的拒绝校准,它只需要塑造输出中的一个特定 Token 序列。

80 问之墙:企业级 AI 安全调查问卷的真实需求

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的团队在 3 月发布的 AI 功能对你一半的潜在客户来说是无法销售的,而工程部门目前对此还一无所知。在客户执行(AE)的 Slack 频道里,一个成交概率原本为 80% 的项目刚刚被踢出了预测名单,因为潜在客户的 CISO 发来了一份包含 92 个问题的安全评估以及一份 AI 补充协议。第 31 题要求提供你的训练数据来源证明文档。第 47 题询问是否记录了提示词(prompts)、记录在何处、保存多长时间以及谁有权阅读。第 63 题询问你的推理过程是否可以固定在欧盟(EU)区域。第 78 题要求提供针对 OWASP LLM Top 10 语料库的提示词注入防御率,并按模型版本列出实测数字。销售团队只有 72 小时来做出回复。而 AI 团队中没有一个人写下过这些问题的答案。

这就是新的围墙。财富 500 强的采购团队现在会进行 2023 年尚不存在的 AI 功能专项安全审查,而你的工程部门需要的答案其实并不难产生 —— 只是目前没人负责这件事。这些问题是具体的,框架是公开的,但大多数 AI 产品却在悄无声息中变得无法销售给受监管的企业,因为答案从未被记录下来。

令人沮丧的是,这一切并不神秘。问卷是有模板的。预期的答案也是有据可查的。真正的失败模式在于:AI 功能在发布时被假设现有的 SOC 2 报告能像过去十年那样在企业交易中发挥同样的效力 —— 事实并非如此。

编程智能体自主曲线:阅读是免费的,合并是事故级的

· 阅读需 13 分钟
Tian Pan
Software Engineer

关于编程智能体(coding agents)的讨论总是陷入二元对立:自主还是受监督,YOLO 模式还是手握方向盘,--dangerously-skip-permissions 还是“批准每一次按键”。这种构想框架本身就是一个范畴错误。编程智能体执行的并非“一个动作”,而是一系列动作,其成本跨越了至少七个数量级 —— 从读取文件(免费、可撤销、无副作用)到合并至主分支(不通过 revert PR 则不可逆),再到向集群发布二进制文件(六位数成本级别的事故)。用一个自主性开关来处理如此广泛的范围,就像是为停车场和高速公路设置统一的限速一样。

如果团队在发布“无所不能的智能体”时,没有将每个动作映射到其爆炸半径(blast radius),那么只需一个带有提示词注入风险的 GitHub 评论,就足以引发一场事后复盘 —— 事实上,我们已经有了这种失败模式的公开案例。Anthropic 的 Claude Code 安全审查、Google 的 Gemini CLI Action 以及 GitHub Copilot Agent 在 2026 年都被证实可以通过精心设计的 PR 标题和 issue 正文被劫持,研究人员将这种攻击模式命名为“评论并控制”(Comment and Control)。这些智能体并非在抽象意义上损坏了,而是因为自主性层级悄无声息地将低信任输入抹平为“一视同仁”,从而基于这些输入执行了高阶动作(如推送代码、开启 PR)。

接下来需要建立的规范是:针对每个动作的曲线、随层级扩展的闸门、与爆炸等级匹配的回滚速度,以及一个测试工具组合升级而非单一动作失败的评估程序。

单租户推理隔离:当共享缓存、微调模型和嵌入在客户间泄露时

· 阅读需 15 分钟
Tian Pan
Software Engineer

多租户 SaaS 在十年前就解决了数据隔离问题。Postgres 中的行级安全性(Row-level security)、每个租户的加密密钥、范围限定为租户前缀的 S3 存储桶策略——到 2018 年,这套方案已经非常成熟,以至于当审计员询问“向我展示客户 A 的数据如何无法触及客户 B 的数据”时,只需要提供一份一页纸的回答,并在每一层附上引用即可。AI 功能悄然重新引入了这个问题,而现在的答案不再只有一页纸。

有趣的部分并不是 AI 破坏了隔离。有趣的是它在 哪里 破坏了隔离:不是审计团队守卫了十年的数据层,而是没有人画在图表上的四个新层级。提示词缓存前缀(Prompt cache prefixes)以跨请求共享 KV 状态的方式,将首字生成时间(time-to-first-token)变成了一个侧信道。在聚合客户数据上训练的微调模型会记住特定租户的措辞,并将其反馈给错误的客户。当威胁模型要求物理分离时,嵌入索引(Embedding indexes)却通过查询过滤器进行逻辑分区。跨请求的 KV 缓存重用创建了时间信道,而当“共享推理没问题”被视为一种合理的捷径时,没有人对此进行过威胁建模。

本篇文章讨论了发生了哪些变化,以及当你认真对待这个问题时,这种规范看起来是什么样子的。

工具输出是 Agent 视为可信的不可信通道

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数团队在发布智能体时,其威胁模型中都潜伏着一个沉默的假设:当模型调用工具时,返回的任何内容都是可以安全读取的。在这个剧本里,用户提示词是唯一的对手,而工具输出则被视为“仅仅是数据”——搜索结果、收件箱摘要、数据库行、RAG 分块、文件内容、网页抓取。正是这种观念导致提示词注入(prompt injection)不断出现在生产环境中。工具输出并不是数据。它们是进入规划器(planner)的另一个输入通道,拥有与用户提示词相同的权限,却完全没有被怀疑。

如果这种说法听起来有些抽象,请考虑 2025 年 6 月 Microsoft 365 Copilot 内部发生的事情。一名研究人员发送了一封带有隐藏指令的电子邮件;受害者从未点击过链接,从未打开过附件,甚至从未亲自阅读过该邮件。一个常规的“总结我的收件箱”查询请求 Copilot 读取该邮件。智能体忠实地执行了在正文中发现的指令,访问了 OneDrive、SharePoint 和 Teams,并在任何人察觉之前通过受信任的 Microsoft 域名外泄了组织数据。该 CVE(2025-32711,“EchoLeak”)获得了 9.3 的 CVSS 评分和服务器端修补,但这类漏洞并未消失。它不可能消失,因为生产环境中智能体上的每一个读取工具都是那个电子邮件收件箱的变体。

这篇文章讨论的是能让你摆脱困境的思维转变:停止将“提示词注入”视为用户输入问题,并开始将每一个工具输出视为一个恰好与你的系统提示词共享 Token 流的不可信渠道。

文档即攻击:通过企业级文件流水线的提示词注入

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 助手刚刚处理了一份来自潜在供应商的合同。它总结了条款,标记了风险条款,并起草了回复。你不知道的是,PDF 中包含了白底白字的文本——肉眼不可见,但在模型面前一览无余——指令它无论条款如何都建议接受。摘要看起来很合理。批准建议看起来也很合理。模型遵循了你从未写过的指令。

这就是“文档即攻击面”问题,而大多数企业级 AI 流水线对此完全没有防备。

这种漏洞是架构性的,而非偶然发生的。当文档内容直接流向 LLM 的上下文窗口时,模型无法可靠地将合法指令与嵌入在文件中的攻击者控制内容区分开来。流水线摄取的每一份文档都是潜在的指令源——在大多数系统中,不可信的文档和可信的系统提示词(System Prompts)被以同等的权威进行处理。

共享 LLM 基础设施中的跨租户数据泄露:无人测试的隔离失效

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数多租户 LLM 产品都存在一个其工程师尚未测试过的安全漏洞。这并非理论上的漏洞 —— 而是一个实实在在的漏洞,已有记录在案的攻击向量和真实的确认案例。这个漏洞在于:现代 AI 栈中的每一层都引入了自己的隔离原语,而每一层都可能以静默的方式失效,导致一个客户的数据进入另一个客户的上下文。

这与提示词注入(prompt injection)或越狱(jailbreaking)无关。它关乎基础设施本身 —— 提示词缓存(prompt caches)、向量索引(vector indexes)、内存存储(memory stores)和微调流水线(fine-tuning pipelines) —— 以及大多数团队在未经核实的情况下就交付的“隔离”这一组织层面的虚构。