AI 系统上线一个事故一个样,安全团队拿着传统的渗透测试清单去测大模型应用,测完发现漏洞没扫出来几个,提示词注入、数据投毒、越权调用倒是一个接一个,问题还不匹配常规漏洞库。后来我翻到了 OWASP AI Exchange 这个开源项目,才意识到 AI 安全该有个专门的拆解框架。这个项目不搞“漏洞列表”那一套,而是把 AI 系统整个生命周期里该做的安全控制措施整理成一份不断更新的对照清单,配上对应的“AI 安全与隐私指南”,专门解决“AI 应用到底该从哪些方面做安全设计、测试和运营”这个问题。
这篇文章适合三类人:一类是正在给 LLM 应用做安全评审的安全工程师,另一类是还在纠结“提示词注入怎么防”的 AI 应用开发者,还有一类是写安全合规文档时发现找不到权威参考的合规同学。我会先讲清楚这个项目到底提供了什么,再按安全控制的分类逐项拆解,然后把“怎么把这份清单落到研发流程里”讲透,最后补充我实际踩过的坑和排查经验。学会之后,你至少能给自己手上的 AI 项目做一次像样的安全差距分析,而不是凭感觉拍脑袋。
1. 项目定位与核心价值
1.1 OWASP AI Exchange 到底是一份什么材料
OWASP AI Exchange 不是一个下载完装好就完事的软件工具,它是一个持续维护、公开协作的智力资产集合。目前去看这个项目,至少能扫到两份核心材料:一份是 AI 安全控制清单,另一份是 AI 安全与隐私指南。
AI 安全控制清单的结构相当清晰。它把所有控制项分成四大类:通用防护(General Mitigations)、系统级与模型级控制(System and Model Specific)、使用阶段控制(Usage Phase)、运维阶段控制(Operations Phase)。通用防护适合任何 AI 功能,比如身份验证、权限管理、安全输入处理这些老生常谈但在 AI 场景下玩法不同的事项;系统级与模型级控制聚焦模型本身,比如训练数据安全、模型鲁棒性;使用阶段控制盯着模型对外提供服务那一刻的边界;运维阶段控制则覆盖上线之后监控、更新、事件响应。
这份清单最有价值的地方在于:它不是一篇读完就忘的抽象建议,而是一张可以直接对着打勾检查的控制表格。每个控制项都写清楚了适用阶段、对应的安全威胁类型、以及应该采取的具体措施。相当于给你画好了安全设计的全貌,团队照着逐项确认就行。
AI 安全与隐私指南则是另一条线索。它把安全(security)和隐私(privacy)分开讨论,同时补充了伦理(ethics)层面的考虑。为什么这样做?因为在 AI 系统里,安全漏洞可能带来隐私泄露,隐私设计不合理也可能被安全攻击利用,分开梳理才能避免混为一谈。指南里用了大量真实攻击案例来讲解每一种威胁怎么发生、怎么防御,对非安全专业的算法工程师来说尤其友好。
1.2 为什么用“控制清单”而不是“漏洞清单”
传统 Web 安全有 OWASP Top 10,为什么 AI Exchange 不搞一个“AI 漏洞 Top 10”排名?因为 AI 系统的漏洞形态和传统软件有本质差异。传统漏洞大多是个明确的实现缺陷,比如 SQL 注入、XSS,修一个点就行。而 AI 漏洞往往是一整条链路的问题。比如提示词注入不是模型代码某个 bug,而是大模型在设计上就无法可靠地区分“指令”和“数据”,直接修模型本身相当困难,只能在应用架构层面做控制。
所以 OWASP AI Exchange 采用“控制清单”这种组织形式,本质上是把安全建设变成一个持续工程化的过程。一篇“Top 10 漏洞排名”只能告诉你现在最容易踩的坑,但控制清单可以告诉你一个安全成熟的 AI 应用应该具备哪些能力。你在设计阶段就把控制项映射到架构上,相当于确定全年安全建设范围,而不是等上线前再做应急修补。
另外一个现实原因是对齐成本。AI 系统往往不是一个团队说了算,涉及算法团队、平台工程团队、业务方、合规方。一份分门别类的控制清单天然适合作为多方沟通的桥梁。你可以直接拉着每个负责人,指着一项控制说“这项谁负责、做到什么程度、截至什么时候”,验收标准也清晰,责任边界不会扯皮。
1.3 和 OWASP Top 10 for LLM 的互补关系
有人会问:已经有 OWASP Top 10 for LLM 了,再看 AI Exchange 是不是重复劳动?我的理解是两者应该配合使用。Top 10 for LLM 解决的是“安全意识普及”,把 LLM 应用最典型的十类风险(比如提示词注入、不安全的输出处理、数据泄漏)摆在你面前,让你快速知道要防什么。但如果你问“防到什么程度算完、用什么手段防”,Top 10 给不了你完整答案。
AI Exchange 解决“具体怎么防”的问题。它的控制清单把 Top 10 提到的每个风险点都对应到具体控制措施,还会覆盖 Top 10 没怎么展开的基础设施安全、供应链安全、运维监控这些模块。我的习惯是用 Top 10 做前期的威胁识别,再用 AI Exchange 做方案设计和差距分析,两份材料互补,不冲突。
当你需要一个权威的合规参照系来支撑安全设计决策时,AI Exchange 的开放性也是一个巨大优势。项目持续吸收全球安全社区提交的案例和控制建议,意味着你看到的不是某个厂商的售前材料,而是社区共同维护、经过评审的经验沉淀。
2. 里程碑版安全控制逐项拆解
2.1 通用防护体系:身份、权限与输入处理
通用防护这组控制项是所有 AI 功能的地基。身份验证(Authentication)和授权(Authorization)首当其冲,但 AI 场景下这两件事的复杂度比传统应用高不少。传统 API 的授权通常只需要判断调用者是谁、有没有权限访问某个资源,而 AI 应用的授权还涉及“这个用户能不能让模型输出这类内容”“这个用户上传的数据能不能进某个模型上下文”。比如一个客服机器人,普通用户和内部管理员具备的模型能力边界必须分开。
具体做法上,AI 服务的接入层应当统一使用标准的身份认证协议,不能因为内部调用就绕过认证。同时要引入细粒度的授权模型,也就是基于属性的访问控制(ABAC),根据用户角色、资源类型、操作行为动态判断。很多团队觉得“模型接口反正在内网,不设权限也没事”,结果某个业务接口被绕过,直接把模型目录和数据存储都暴露出来,这一类事故我在排查时见过不止一次。
安全输入处理这块是 AI 特有的重头戏。传统 Web 应用讲究校验参数格式、过滤特殊字符,而 AI 应用必须额外考虑“提示词注入”和“上下文污染”。控制项要求应用对用户的输入做分类处理:指令和内容要尽量分离,例如通过特殊的提示词包装器把用户输入区域与系统指令区域隔离;对超长输入要做截断或摘要,避免攻击者把恶意内容塞进上下文窗口。
输出处理也不能忽略。模型生成的内容本质上是不可信的,你需要对输出做策略过滤、敏感词检测、PII 识别。把模型输出直接拼接到 SQL 查询或系统命令里,等于把模型变成了攻击链的一环。这个控制项的含义是:模型输出必须先过安全网关,再交给下游模块使用。
2.2 系统级与模型级控制:训练数据、模型鲁棒性与供应链
模型级控制针对的是模型本身,而不仅是外层 API。训练数据安全是第一步。训练数据有可能被投毒,攻击者故意往数据里掺入错误样本,让模型在特定触发词下产生恶意输出。这个攻击在传统软件里没有对应物,因为传统代码是确定性的,而模型的行为由数据分布决定。控制措施包括:训练前做数据来源审查、去重清洗、异常样本识别;保留数据版本和审计血缘;对训练数据抽样做人工抽检。
模型鲁棒性是另一个关键控制项。你要测试模型在输入被轻微扰动时的输出稳定性,比如拼写错误、同义替换、对抗性后缀。一个在法律咨询场景上线的模型,如果换个表达方式就能被诱导产生完全相反的法律结论,那就谈不上可用。实践中常用的手段是对抗训练、输入扰动归一化、输出一致性校验。
供应链安全在 AI 场景下尤其容易被忽视。现代 AI 开发依赖大量的预训练模型、开源模型库、向量数据库组件。每一个环节都可能被植入后门。例如直接使用来源不明的模型权重文件,运行后才发现模型内置了恶意行为。控制措施要求:所有模型权重和数据集要从可信来源获取;对模型文件计算校验哈希并固定版本;建立依赖组件的安全扫描机制;使用开源模型时优先选择有安全审计算制的项目。
在模型部署层面,还需要考虑模型的加密和访问隔离。完整模型权重是核心知识产权,不能直接暴露给业务侧。常见的方案是把模型封装成推理服务,只暴露 API,同时用模型网关做流量代理,而不是让业务代码直接读权重文件。
2.3 使用阶段控制:推理接口、数据边界与用户上报
模型上线提供服务之后,“使用阶段”的控制才真正开始发挥作用。速率限制(Rate Limiting)是基础中的基础,但它不仅仅是为了防止资源耗尽。攻击者做提示词注入探测、模型行为逆向时,往往需要大量尝试,如果接口不设速率限制,等于给攻击者提供无限次的试错机会。设置合理的速率阈值需要考虑正常用户的调用频率分布,同时要结合分级制度区分付费用户和匿名用户。
推理数据的边界控制同样重要。大模型应用经常会接入外部知识库或业务数据库做检索增强(RAG),这时候攻击者可能通过构造特定问题来套取其他用户的数据。控制项要求每一次推理请求都需要重新计算数据访问范围,不能简单地把整个知识库塞进上下文。比如一个企业知识问答系统,普通员工只能查询公开文档,项目经理才能查询跨部门数据,这个边界必须在检索层就强制执行。
用户举报机制在这里也是强制项。AI 系统输出的问题往往无法在开发阶段全部覆盖,真实用户在使用过程中会遇到各种各样的异常输出。你要提供清晰的反馈入口,让用户能举报不当内容、明显错误或者涉及隐私的内容。这个机制既能帮你发现未知攻击样本,也能帮你收集模型幻觉的典型案例,后续用这些样本去做模型微调或提示词迭代。
使用阶段还有个容易被忽略的细节:会话隔离。多轮对话系统如果做不好会话状态隔离,用户 A 的对话历史可能被用户 B 看到。控制项要求会话 ID 与用户身份绑定,会话数据要单独存储并设置过期时间,严禁把全量对话日志无条件送入模型上下文。
2.4 运维阶段控制:监控、日志与事件响应
上线不是终点,运维阶段的控制决定了一个 AI 系统能否长期安全运行。日志记录的要求和传统应用不完全相同。除了记录谁在什么时候调用了哪个接口,你还需要记录模型输入输出摘要、推理耗时、模型版本号。这样在出事故时才能快速定责:是输入侧的构造问题,还是模型本身的版本问题,还是下游处理逻辑的问题。
日志本身也是敏感资产。用户的提问可能包含个人信息和商业秘密,因此日志的存储要设置访问权限,传输要加密,存放周期要符合数据最小化原则。不能因为“以后分析需要”就无限期保存全文日志,我建议只保存脱敏后的摘要,完整输入输出只在特定审计需求下临时开启。
异常检测在 AI 系统的运维里比传统应用复杂很多。传统应用主要盯错误率、延迟、资源水位,AI 应用还要盯输出内容的异常分布。比如某个模型接口的返回内容突然高频出现某些敏感词,或者同一类请求的攻击特征指标突然飙升,这些往往反映的是正在被攻击。控制项建议用内容安全策略建立基线,再做偏离检测。
事件响应计划也需要针对 AI 攻击场景做专门编排。AI 系统的事故处置有个特殊性:发现模型被注入成功时,不能只回滚代码,你还要考虑被污染的上下文是否已经影响到了其他会话、是否要从会话日志里撤销相关输出、是否需要对模型做再训练。这个流程如果没提前演练,事故发生时一定会手忙脚乱。
3. 把 AI Exchange 落进研发流程的具体操作
3.1 第一步:先做一次威胁建模
拿到 AI Exchange 清单后,第一件事不是急着堆控制措施,而是先梳理自己的系统结构。找个白板画出完整数据流:用户输入怎么进系统、模型怎么被调用、外部知识库怎么被检索、输出返回到哪个环节、日志存到哪里。这个过程看起来简单,但实际做起来大部分团队会发现,系统的调用关系比自己以为的复杂得多。
画完图之后,把 AI Exchange 里的控制项逐条对到数据流上,每条控制标注三个状态:已落实、部分落实、未落地。这一步的目的不是自我批判,而是建立差异清单。我见过不少团队在威胁建模时只关注模型本身的攻击面,忽略了知识库和中间件。比如一个 RAG 应用,向量数据库如果缺乏独立的访问控制,攻击者可能直接绕过模型层去读向量库里的原始文档。这类问题只有在画完完整数据流之后才能被发现。
威胁建模时建议按优先级排序。用两个维度打分——影响面和实现难度。高影响加低难度的控制项肯定先做,比如独立的推理服务 API 网关;高影响加高难度的控制项要专门立项,比如模型对抗训练;低影响加低难度的,直接顺手做掉,比如日志脱敏。
3.2 第二步:把控制项映射到现有 DevSecOps 流程
控制清单不是挂在墙上的合规文件,要真正进入迭代节奏。我的做法是把控制项拆成“设计期控制”“开发期控制”“发布期控制”“运行期控制”四块,分别挂到不同的流程关卡。
设计期控制对应的是架构评审。每个 AI 功能启动前,安全评审表里直接加入 AI Exchange 控制项作为必填项,没有补齐对应控制的方案不能进入开发。开发期控制挂在 CI 流水线里,包括依赖扫描、模型文件哈希校验、敏感信息探测、提示词注入测试用例自动执行。发布期控制包括发布前的红队评估和安全回归测试。运行期控制则对应监控规则、日志审计、事件响应预案,这些要写进运维手册。
有一个容易被忽略的细节:模型版本也是发布制品。AI 项目的发布流程往往只关注代码版本,模型权重文件和提示词模板的版本经常没人管理。实际上一份线上配置变更提示词,就可能导致模型行为大幅变化。我建议将模型、提示词、知识库切片都纳入版本管理,发布时统一打标签,做到“代码、模型、提示词三位一体”可追溯。
3.3 第三步:设计阶段就确定实施优先级
全量落地 AI Exchange 的所有控制项成本极高,现实的做法是分阶段推进。建议第一优先级是通用防护和推理接口安全,具体包括身份认证、细粒度授权、速率限制、输入过滤、输入输出记录。这些是 AI 应用的基本防线,也是最容易被自动化工具覆盖的部分。第二优先级是供应链安全和模型鲁棒性,具体包括模型来源审查、依赖扫描、对抗样本测试集建设。第三优先级才是复杂的训练数据治理和全面对抗防御,这类工作需要跨团队长期投入,通常结合后续模型迭代逐步补齐。
一个参考模板是建立“控制项状态表”。每行一条控制项,列头包括当前状态、责任人、证据、下一评估日期。安全团队例行巡检时,直接对着这张表检查证据是否更新。这个做法最大的好处是避免“口头安全”,一切控制以可核验的产物为准。
3.4 用最小化验证案例控制成本
如果团队刚接触这份清单,我强烈建议先拿一个内部小项目做试点,不要直接在生产环境推全量。我见过某团队一次性给所有 AI 服务全部加上输入输出过滤网关,结果延迟暴涨、误伤正常请求,最后不得不回滚。正确做法是选一个风险可控的内部 Demo,完整走一遍威胁建模、控制映射、上线监控的流程,把过程中遇到的问题记录下来,形成本团队的控制清单落地方案,再逐步复制到其他服务。
这个试点项目覆盖的控制项可以不用太多,但一定要把关键链路走通:通过网关接入模型服务、启用细粒度授权、完成输出过滤、把日志接进监控平台。试点结束后复盘,看哪些控制项实现成本比预期高、哪些工具链和现有平台冲突,这些经验比看十遍文档都值钱。
4. 常见问题与排查心得实录
4.1 高频问题速查表
| 典型问题 | 排查思路 | 对应控制项 |
|---|---|---|
| 模型频繁被提示词注入绕过 | 检查输入是否和指令完全隔离,确认是否启用了指令注入检测规则 | 安全输入处理、指令与内容分离 |
| 用户越权访问到其他部门数据 | 排查检索层是否执行权限过滤,查看向量数据库访问控制配置 | 细粒度授权、数据访问边界 |
| 训练数据来源不明 | 审查数据出处、检查数据血缘记录、抽样检查异常样本 | 数据来源审查、数据投毒防御 |
| 上线后模型输出明显偏离预期 | 先查模型版本是否变更、提示词模板是否调整、知识库切片有无更新 | 模型版本管理、运行时监控 |
| 攻击者高频探测模型行为 | 检查速率限制阈值、观察异常流量特征、启用临时封禁策略 | 速率限制、异常检测 |
| 日志中出现大量敏感信息 | 检查日志脱敏规则是否生效、确认日志存储访问权限 | 日志与监控、数据最小化 |
这个表是我实际排查问题时用得最频繁的索引。AI 系统的问题往往不会贴着“漏洞类型”标签出现,而是以一个业务异常的面目出现。这时候你要做的不是直接改代码,而是先想清楚这个问题在 AI 安全控制地图上属于哪个节点,用正确的工具去查。
4.2 隐患排查中的关键节点
排查提示词注入时,最容易被忽略的是“间接注入”路径。攻击者不直接攻击你的模型,而是把恶意指令藏在一个网页里,当你的模型去检索那个页面时,指令被带入上下文。这种攻击用常规的输入过滤根本防不住。应对方案是给外部检索内容贴上“不可信”标签,通过提示词约束模型把它当作数据处理,而不是当作指令执行。
排查数据泄漏时,要特别关注向量数据库的检索测试。很多团队测试 RAG 系统时,只会用正常问题验证检索结果是否相关,很少有人系统地构造跨越授权的边界问题去测试。我的建议是建立一组越权检索测试用例,放到发布流程里。比如普通用户身份的测试账号,强行去查只有管理员权限的文档内容,看系统是否返回。这类测试用例用于确认授权边界真的被强制执行了。
排查模型鲁棒性问题时,要区分“幻觉”和“被攻击”。“幻觉”是模型不知道答案但编造答案,而“被攻击”是输入中存在刻意构造的模式。两者的处置完全不同。幻觉主要靠提示词约束、知识库兜底和人工审核;被攻击则需要加固输入处理和监控规则。不要把所有问题都归因于攻击,否则会浪费大量应急精力。
4.3 检查清单与证据留存的实操建议
安全建设最怕“做了但说不清”。我每次跟团队复盘时都会强调:控制项是否落实,不能靠口头保证,要有证据。身份认证有统一网关的配置记录;速率限制有阈值的变更记录;输入过滤有对应的规则文件和测试结果;日志监控有 Dashboard 截图和告警策略配置。这些证据平时看起来繁琐,真正出事时能帮你快速证明“我们做到了什么程度”,也能避免安全团队和开发团队互相甩锅。
建议每个控制项的负责人每季度更新一次证据。不是说全量更新,而是确认规则没有因为业务迭代而失效。比如某个模型接口从一个单纯的问答接口变成了可以调用外部工具的接口,那么输入过滤规则、权限模型、审计日志策略都应该跟着调整。证据更新就是强制你重新走一遍检查流程。
4.4 安全团队与算法团队协作的“翻译”技巧
AI 安全落地最大的阻力往往不是技术,而是团队之间的沟通成本。安全团队习惯讲“攻击面”“控制项”“漏洞”,算法团队习惯讲“准确率”“召回率”“推理延迟”。两者如果各说各话,很容易僵持不下。
我的解法是搭一个“翻译层”。给算法团队讲安全要求时,尽量转化成他们关心的指标。例如:提示词注入会导致模型的误判率上升;数据投毒会导致模型在特定样本上的准确率显著下降;供应链风险可能让模型在极端输入下产生合规事故。把安全要求映射成模型质量指标后,算法工程师会更容易接受,因为他们本来就是在优化这些指标。
反过来,安全团队也要参与算法团队的技术选型评审。模型架构选什么、提示词模板怎么设计、是否用 RAG、数据采集渠道是什么,这些问题在传统安全评审里几乎不看,但在 AI 项目里都是安全相关的决策。早期介入可以避免后期推倒重来,这也是 AI Exchange 控制清单分成“设计期”和“运行期”的意义所在。
5. 踩坑记录与后续扩展思路
第一次完整跑 AI Exchange 的控制清单,我原本以为最花时间的是身份认证和权限管理,毕竟这些在企业里都有现成方案。实际做下来发现,最难的是“安全输入处理”和“输出处理”这两条。原因是这两条控制项没有标准答案,完全取决于业务场景。同样一个输入过滤规则,在代码生成工具里可能直接拦截合法需求,在客服系统里又可能过滤不够导致注入成功。每个 AI 应用都要单独调规则,这个工作量比预想的大很多。
另一个比较痛的经验是模型版本管理。我们一开始只做了代码仓库的分支保护和镜像发布,模型文件却放在共享存储上直接覆盖更新。结果有一次算法团队更新了模型,导致线上输出格式大变,回滚时找不到之前能用的模型版本,整整排查了一个下午。后来强制把每个版本的模型、配套提示词、对应评估报告打包成统一发布单元,这个问题才彻底解决。所以“三位一体”的版本管理不是纸上谈兵,是教训换来的经验。
还有一次,系统上线后某类敏感主题的请求量一夜之间飙升,第一反应是遭遇了攻击,后来一查日志才发现是接口被某合作方接进了他们自己的客户端,用户量直接翻倍,而我们的速率限制规则没有同步调整。这个案例说明,速率限制不是设一次就完了,每次接入新渠道、新合作方,都要重新评估阈值和配额策略。安全检查不是一次性动作,要走入常态化机制。
关于后续扩展,AI Exchange 本身也在持续更新。社区会不断补充新的攻击案例和控制项。我建议定期回来看看新版内容,特别关注新增的 LLM 供应链安全和多模态模型安全相关的控制项。同时可以把项目作为内部培训的教材,用它来培养团队的安全意识。从一份开源清单出发,逐步搭建起适合自己团队的 AI 安全体系,这条路走起来比从零开始轻松得多。说到底,AI 安全没有一劳永逸的解决方案,但有这么一份持续演进的参考框架在,至少能让你在每个阶段都知道该往哪儿发力,不会两眼一抹黑地靠运气做安全。