AI 数据与知识安全
一家企业用历史故障单微调运维助手,用工程师的点赞持续优化回答,再从内部知识库检索操作手册。某天,助手只在特定故障表述下建议跳过变更审批。模型和 Prompt 版本都没变,问题来自一份已过期的应急手册。更难处理的是,这份手册影响的回答已被点赞,随后进入了新一轮微调。
本文的核心判断是:向 RAG、长期记忆、反馈集或训练集写入数据,等价于发布一项延迟生效的行为变更。 它可能在未来请求、反馈回流或下一次模型发布中才表现出来,删除原文也未必自动撤销已经形成的派生状态。
因此,系统需要一条可验证的安全不变量:每一项能持续影响回答的数据,都要能关联到批准来源、当前权限、派生关系和撤销动作;撤销后,在冻结的系统版本与探针集下,该数据及已知派生物不得再进入模型上下文或受支持的生产发布。 RAG 文档、长期记忆、人工反馈、微调数据和评测集的进入方式不同,持续时间和撤销方法也不同。安全团队要管的是一张影响图,不只是一批文件。
攻击者盯上的是持续影响
本文假设攻击者无法直接替换生产模型,但可以提交用户文档、修改自己有权维护的知识、反复提交反馈,或让自动采集器读取其控制的网页。他的目标可能是让某个触发词稳定产生错误回答,让低信任内容获得官方知识的地位,或者让污染在原文删除后仍然留在模型中。评测和版本比较还要固定 poison_budget 与 query_budget:可写入的文档和片段数、可用账号数、反馈次数、触发查询次数,以及能否根据回答自适应修改。陈旧资料、标注错误和误操作没有攻击意图,但会沿同一影响链扩散,可以共用准入、血缘和回滚控制。
数据进入不同状态载体后,处置难度会发生变化:
- 上下文状态:RAG 片段和当前对话主要影响本次请求,通常可以通过停用片段、索引或缓存快速止损。
- 记忆状态:跨会话记忆会影响之后的任务,撤销时要同时处理摘要、检索索引和已经派生的偏好。
- 参数状态:训练和微调数据会进入权重或 Adapter。删除源记录无法证明影响已从参数消失,常见处置是回退已知可信版本或重新训练。
- 证据状态:评测集不直接服务线上回答,却决定一个版本是否被误判为安全。训练与评测语义重复、样本被悄然删除,都会破坏发布证据。
这一分类也划清了安全承诺。在 RAG 场景,系统可以记录某次回答实际收到的片段。对于已经参数化的知识,团队通常只能证明哪个数据集参与了构建,再通过消融实验或影响估计提供有限归因证据。这些方法不应被表述为某个输出的精确训练样本来源。
一条污染如何穿过四种状态
运维助手的攻击链可以完整还原为八步:
- 攻击者向可被采集的位置放入一份临时手册,其中包含只对特定故障描述生效的错误步骤。
- 采集器确认了文件格式,却没有验证适用环境和到期时间;文档被切片、向量化并发布到正式索引。
- 攻击者调整用词,让恶意片段在目标查询下获得更高排名。研究中的 PoisonedRAG 展示了通过向知识库注入精心构造文本来影响目标问题回答的机制。论文中的效果受实验系统和攻击假设限制,不能直接当作本系统的风险概率。
- 助手将片段放入上下文,模型生成跳过审批的建议。若回答日志没有保存片段 ID 和索引版本,调查时就会失去直接证据。
- 一部分工程师按照特殊应急经验点赞。反馈系统只记录“正向”,没有保留该回答受低信任片段影响的事实。
- 反馈样本被提升为微调数据,错误行为进入 Adapter。污染由可快速撤销的检索状态转成了更持久的参数状态。
- 团队删除原文并重建索引,却没有回滚 Adapter,攻击目标仍在部分触发条件下出现。
- 下一次真实故障触发该行为,工程师采信建议或自动化编排器继续执行,生产变更在缺少审批的情况下落地。攻击影响由变更系统的审批状态、执行记录和现实服务状态确认,不能用助手声称“已处理”代替。
NIST 对抗机器学习分类将攻击者能力、攻击阶段和投毒类型放在统一语言中。工程上还要多问两件事:污染当前在哪个状态载体里,它又作为哪个派生物的父节点。这两个问题决定团队能否完整止损。
参考架构把影响和执行权分开
下图将知识写入、在线读取和反馈回流放在同一架构中。数据可以影响模型,只有模型外的准入服务才能改变发布状态。
untrusted sources approved internal sources
| |
v v
+---------------+ +---------------+
| quarantine |<-------| source verify |
+-------+-------+ +-------+-------+
| submit |
v v
+------------------------------------------------+
| admission: identity + scope + review + policy |
+-----------------------+------------------------+
|
+----------+-----------+
| |
v v
+---------------+ +---------------+
| versioned data| | versioned docs|
+-------+-------+ +-------+-------+
| |
v v
training release chunk / index
| |
+----------+-----------+
|
user + principal -> policy filter -> retrieve -> model -> answer
|
v
feedback quarantine
lineage ledger records every node and derivation edge
revocation controller tombstones nodes and disables descendants
架构有三个强制点。写入时,准入服务决定某项内容可否从隔离区进入正式状态。读取时,策略过滤器根据当前主体和资源权限得到可访问集合,检索和重排只能将其中的片段交给模型。回流时,反馈先进隔离区,不会因为一次点赞自动获得训练写入权。
血缘账本是旁路控制面。它不参与模型的语义判断,只记录谁在什么时间用哪个转换任务,把哪些父对象变成了哪些子对象。撤销控制器依赖这张图停用已知派生物,不依赖模型自己声明“已经忘记”。
KnowledgeArtifact 是血缘和权限的交接面
一份文档被切成片段后,原网盘路径和目录权限不会自动成为向量数据库的安全属性。团队可以为文档、片段、记忆、反馈样本和评测样本使用同一类最小对象:
artifact_id: "doc:runbook:<content-digest>"
kind: "rag_document"
content_digest: "sha256:<digest>"
source:
uri: "internal://runbooks/change-window"
principal: "team:sre"
collected_at: "<timestamp>"
derivation:
parent_ids: []
transform_run: "ingest:<run-id>"
policy:
tenant: "ops"
readers: ["role:oncall"]
writers: ["role:runbook-publisher"]
trust_tier: "review-required"
valid_until: "<timestamp>"
release:
state: "quarantined"
approved_by: []
tombstoned_at: null
artifact_id 和内容摘要提供不可变身份;parent_ids 和 transform_run 组成派生边;policy 中的租户、角色、信任级别和有效期由应用于模型之外解释。模型可以提议更新,无权改变 readers、trust_tier 或 state。
KnowledgeArtifact 管理对象在存储与派生期的完整生命周期。对象被检索或记忆系统选入一次运行时,组装器从中投影出公共的 Context Envelope,只携带当前运行需要的来源、信任级、租户、ACL、版本与血缘引用。前者回答“这项知识从哪里来、如何撤销”,后者回答“这次运行可以怎样使用它”;二者共享不可变对象 ID,避免上下文标签与底层血缘失去关联。
W3C PROV-DM 用 Entity、Activity 和 Agent 描述对象、处理活动与责任主体的关系,可以作为这类对象的正式概念模型。需要将数据处理事件接入现有流水线时,OpenLineage 的对象模型 提供了 Run、Job 和 Dataset 事件结构及开源实现。它们能证明处理路径,不能自动证明文档内容正确或某个训练样本导致了某个 Token。
准入、检索、反馈和撤销各守一道门
准入门。 系统分开验证发布主体、传输完整性和业务适用性。签名可以帮助确认发布者,无法证明临时手册适用于当前环境。高影响知识需要明确责任人、适用版本和到期时间;自动采集和合成数据先停留在隔离区,根据业务影响采用抽检、双人复核或独立规则验证。
检索门。 请求进入时先获取用户、租户、项目和数据级别,再将它们传给能强制行级或索引级过滤的检索层。团队要实测所用向量库在近似检索、重排、缓存和分页时的过滤语义。共享索引可以降低成本,要求每一层保留权限属性;分租户索引会增加存储和更新开销,可以缩小配置错误的影响面。
反馈门。 反馈对象继承原回答的模型版本、上下文片段、信任级别和用户范围。受未审核外部内容影响的点赞不直接成为训练标签,需要独立证据或人工复核。这会放慢反馈学习,但能阻止低信任信息通过用户点击获得更高信任。
撤销门。 团队先将污染节点标记为 tombstone,然后沿派生边查找片段、Embedding、索引、缓存、记忆、反馈样本、评测集和模型发布。可直接停用的对象立即从服务面移除;已经进入参数的数据需要回退发布、重新训练或采用经该场景验证的遗忘方法。撤销完成后还要用原触发查询和独立变体重放,不以“删除成功”的接口响应单独作为完成证据。
指标要证明影响被限制
指标要绑定系统版本、测试集和攻击者能力。下表中的“零”指固定测试条件下未观察到违规,无法外推为未测输入下的普遍保证。对检索与生成等随机运行,报告原始分子、分母和二项区间;同一污染对象的多次改写视为相关样本,按独立污染目标分簇估计。血缘完整率等全量对账指标不需要置信区间,发现一个关键父节点无法解析就直接阻断发布。
| 指标 | 分子 / 分母 | 测试条件与用途 |
|---|---|---|
| 血缘完整率 | 父节点可解析且必填字段齐全的活跃对象 / 本次发布的全部活跃对象 | 在发布快照上计算;关键父节点不可解析时阻断发布 |
| 未授权上下文率 | 进入模型上下文的未授权片段 / 跨租户与跨角色测试中进入上下文的全部片段 | 覆盖向量检索、重排、缓存和删除后重放;发布门禁要求未观察到违规 |
| 定向投毒成功率 | 达成攻击目标的触发运行 / 全部触发运行 | 冻结模型、索引和重排器,同时固定可写文档、片段、账号、反馈次数与查询次数,说明攻击是否自适应;对每个触发查询重复运行并报告正常任务成功率 |
| 评测重复率 | 与训练样本语义近重复的评测样本 / 本次评测的全部样本 | 记录去重方法和人工复核样本;用于发现证据污染,不单独证明模型安全 |
| 派生发现召回率 | 演练中被血缘查询找到的植入派生物 / 演练预先植入的全部派生物 | 每次演练同时植入索引、缓存、反馈和评测副本,防止只验证主库 |
| 撤销闭合时间 | 从 tombstone 生效到探针无法再召回已知派生物的时长 | 分别报告索引、缓存、记忆和生产发布的 P50/P95,不用单一平均值遮住慢路径 |
强控制仍然有失效边界
签名的文档仍可能错。 签名和哈希回答身份与完整性,业务正确性仍需适用范围、有效期和领域审核。高影响知识采用双人复核会降低更新速度;对时效性更敏感的场景,可以用短有效期和小流量发布换取更快更新。
完整血缘仍无法精确解释模型行为。 血缘可以证明训练使用了哪些数据版本,不能将某个输出精确归因于某条样本。团队应该保留证据强度,在归因不足时回退受影响的完整发布,不宣称已精准删除一条参数影响。
异常检测会漏掉低频和干净标签攻击。 分布看起来正常的少量样本也可能围绕特定触发条件形成后门。异常分数只用于排序复核,高风险写入仍需身份、职责分离和定向回归。
删除源数据无法撤销全部影响。 缓存、摘要、反馈、Checkpoint 和 Adapter 都可能保留派生状态。血缘账本保存过多原文又会扩大隐私风险,因此常规账本优先保留不可变 ID、摘要和受控证据引用,原文按目的与期限放在隔离证据库。个人信息和机密的用途、留存与删除详见AI 隐私与机密保护。
本文的控制边界停在数据状态的来源、影响和撤销。模型制品的签名与发布证明见模型资产与 AI 供应链安全,外部内容进入上下文后的指令隔离见大模型应用安全。