第150题:知识库被投毒为错误修复建议,系统如何发现来源异常?

1. 核心回答
如果知识库可能被投毒,我不会把“来自知识库”视为可信条件。
所有外部知识,包括:
- 安全公告;
- README;
- 代码注释;
- Patch;
- 修复建议;
- CVE/CWE 派生资料;
- 外部工具结果;
进入 RAG 以后都按不可信数据处理。
我会把检测拆成四层:
- Source Provenance:这条知识来自哪里、谁提交、何时产生、经过什么审批;
- Integrity / Version:签名、Hash、版本链和时间线是否正常;
- Semantic Validation:修复建议是否与权威来源、代码事实和独立验证结果一致;
- Retrieval Behavior:新知识进入索引后是否出现异常高召回、单一来源支配、近重复刷屏等行为。
完整流程是:
Source Admission
↓
Provenance / Signature / Hash
↓
Semantic & Policy Validation
↓
Quarantine
↓
Shadow Index
↓
Canary / Poisoning Tests
↓
Approval
↓
Atomic Index Switch
↓
Monitoring
出现异常时:
Quarantine → Stop Retrieval → Rollback Last-Known-Good Snapshot
这里有一个关键边界:
数字签名和 Hash 可以证明来源与完整性,但不能证明修复建议在语义上正确。
所以来源验证必须和独立语义验证同时存在。
2. 先定义威胁模型
知识库投毒至少有几种路径。
2.1 未授权外部来源进入知识库
攻击者提交伪造:
- Blog;
- README;
- Security Advisory;
- 修复示例。
系统自动抓取后进入 RAG Corpus。
2.2 合法来源账号被攻陷
例如官方 Repository 或内部账号被攻击。
此时文档可能:
- 来源合法;
- 签名合法;
- 权限合法;
但内容恶意。
因此:
AuthenticatedSource⇏CorrectContent AuthenticatedSource \not\Rightarrow CorrectContent AuthenticatedSource⇒CorrectContent
2.3 内部恶意贡献者
攻击者本身拥有合法写权限。
单纯 ACL 无法发现这种情况。
2.4 Supply Chain 污染
上游数据源、镜像、解析器或者同步程序被篡改。
2.5 Retrieval-Oriented Poisoning
攻击者专门构造一篇非常容易被 Retriever 召回的文档,例如大量包含:
- CWE;
- API 名;
- CVE;
- 漏洞描述;
- Query 关键词。
目标是让:
Rank(dpoison)↑ Rank(d_{poison})\uparrow Rank(dpoison)↑
最终进入:
TopK TopK TopK
并影响 Generator。
3. 为什么 RAG Knowledge Base 本身就是攻击面
RAG 的基本链路是:
Query→Retriever→Knowledge→Generator Query \rightarrow Retriever \rightarrow Knowledge \rightarrow Generator Query→Retriever→Knowledge→Generator
如果攻击者能够控制知识库中的:
dpoison d_{poison} dpoison
并使:
dpoison∈TopK(q) d_{poison}\in TopK(q) dpoison∈TopK(q)
那么最终模型输入就已经被改变。
因此风险链是:
PoisonedDocument→Retrieval→Context→WrongRecommendation PoisonedDocument \rightarrow Retrieval \rightarrow Context \rightarrow WrongRecommendation PoisonedDocument→Retrieval→Context→WrongRecommendation
USENIX Security 2025 的 PoisonedRAG 工作已经表明,攻击者通过向大型知识库注入少量针对性文本,可以使目标查询检索到攻击内容并诱导 LLM 输出攻击者希望的答案。
所以“知识库只保存文本,没有执行权限”并不代表风险很低。
4. 第一层:建立完整 Source Provenance
每一个进入知识库的 Document 都应该有来源记录。
例如:
document_id
source_type
source_uri
source_owner
publisher
author
repository
commit_hash
version
published_at
observed_at
ingested_at
content_hash
signature
approval_id
reviewer
parser_version
acl
trust_tier
从最终回答可以反向追到:
Answer
↓
Chunk
↓
Document Version
↓
Original Source
↓
Publisher / Commit
↓
Ingestion Event
也就是:
Answer→Chunk→Document→Source Answer \rightarrow Chunk \rightarrow Document \rightarrow Source Answer→Chunk→Document→Source
没有 Provenance 的文档默认不进入高可信检索池。
5. Source Provenance 的目标是什么
它主要回答:
5.1 从哪里来
source
5.2 谁发布
publisher / owner
5.3 什么时候发布
published_at
5.4 系统什么时候获取
ingested_at
5.5 哪个版本
version / commit
5.6 是否被修改过
通过:
Hash(content) Hash(content) Hash(content)
和版本轨迹验证。
这使异常来源能够被定位。
6. 第二层:Source Admission
知识进入正式 RAG Corpus 前,需要明确准入策略。
可以划分:
6.1 Tier 0:内部批准知识
例如:
- 已审核内部安全 Runbook;
- 已验证补丁;
- 内部安全团队规则。
6.2 Tier 1:官方上游来源
例如:
- 项目官方 Security Advisory;
- 官方 Release Note;
- 官方 Repository;
- 官方修复 Commit。
6.3 Tier 2:经过审核的第三方来源
例如经过安全团队审批的第三方数据库。
6.4 Tier 3:开放互联网
例如:
- Blog;
- Forum;
- 社区回答;
- 用户提供内容。
Tier 3 不应该自动升级成高权威修复建议。
可以定义:
Trust(d)∈{T0,T1,T2,T3} Trust(d)\in\{T_0,T_1,T_2,T_3\} Trust(d)∈{T0,T1,T2,T3}
Trust Level 应参与检索后的证据裁决。
7. Trust Tier 不能直接等于“内容正确”
即使:
Trust(d)=T1 Trust(d)=T_1 Trust(d)=T1
仍可能存在:
- 上游账号被攻击;
- 官方文档写错;
- 旧版本修复建议已经失效;
- Patch 与当前版本不兼容。
所以 Trust Tier 主要控制:
需要多少额外验证才能使用这条知识。
例如:
高可信来源
→ 自动进入 Shadow Index
→ 自动测试
→ 通过后发布
而开放来源:
低可信来源
→ Quarantine
→ 人工/自动复核
→ 多项验证
→ 再决定是否允许进入生产索引
8. 第三层:数字签名和 Hash
可以保存:
h=SHA256(content) h=SHA256(content) h=SHA256(content)
以及可信发布者签名:
Sigpublisher(h) Sig_{publisher}(h) Sigpublisher(h)
摄取时验证:
Verify(PKpublisher,Sig,h)=True Verify( PK_{publisher}, Sig, h )=True Verify(PKpublisher,Sig,h)=True
如果失败:
SOURCE_INTEGRITY_FAILURE
立即隔离。
这可以发现:
- Mirror 修改;
- 传输篡改;
- 非授权内容替换;
- 文件版本不一致。
9. 但签名通过仍然不够
例如攻击者已经拿到官方发布权限。
此时:
Signature = Valid
Hash = Valid
因为恶意文档本身就是合法账号发布的版本。
所以:
SignatureValid SignatureValid SignatureValid
只能说明:
这份内容确实由对应身份签出。
它不能说明:
RecommendationCorrect RecommendationCorrect RecommendationCorrect
因此还必须进行 Semantic Validation 和 Behavioral Validation。
10. 第四层:版本轨迹异常
维护:
V1,V2,…,Vt V_1,V_2,\ldots,V_t V1,V2,…,Vt
的不可变历史。
比较:
Diff(Vt,Vt−1) Diff(V_t,V_{t-1}) Diff(Vt,Vt−1)
检测:
- 大量安全建议突然变化;
- 修复 API 被换成危险 API;
- Sanitization 建议消失;
- 权限建议突然放宽;
- 文档大量删除;
- CWE 映射异常改变;
- 来源 Owner 改变;
- 时间戳异常。
例如原版本:
Use parameterized queries.
突然修改成:
String concatenation is safe
if input length is limited.
即使来源和签名都合法,也应该触发:
SECURITY_SEMANTIC_DIFF
进入复核。
11. 还要检测 Rollback
攻击者可能不加入明显恶意文档,只把知识库退回一个旧版本。
例如:
v1:存在已知绕过
v2:发布安全修复
攻击者让系统重新读取:
v1
此时旧建议可能重新成为“最新知识”。
因此客户端应该记录:
LatestSeenVersion LatestSeenVersion LatestSeenVersion
拒绝:
Versionincoming<LatestSeenVersion Version_{incoming} < LatestSeenVersion Versionincoming<LatestSeenVersion
这类思想和 TUF 防 Rollback / Freeze Attack 的设计相似。
在 RAG 中可以落实为:
source_id
current_version
min_accepted_version
content_hash
valid_from
expires_at
12. 第五层:Semantic Conflict Detection
新知识进入系统时,与已有高可信知识做 Claim-Level Comparison。
例如新文档 Claim:
使用 eval() 处理 JSON 是安全修复。
历史可信来源:
禁止对不可信输入使用 eval()。
系统应检测:
Contradiction(cnew,ctrusted) Contradiction(c_{new},c_{trusted}) Contradiction(cnew,ctrusted)
但不能只依赖 LLM 语义判断。
对于可机器验证的安全规则,应结合:
- API Allow/Deny Rules;
- Static Analysis;
- Version Compatibility;
- Security Policy;
- Unit Test;
- Sandbox Execution。
13. 修复建议最好拆成 Atomic Claims
例如一个修复建议:
把用户输入传入 subprocess.run,
并使用 shell=True,即可避免命令注入。
拆成:
Claim 1:
subprocess.run is proposed.
Claim 2:
shell=True is proposed.
Claim 3:
This mitigates command injection.
分别检查。
定义:
Support(ci) Support(c_i) Support(ci)
以及:
Contradiction(ci) Contradiction(c_i) Contradiction(ci)
只有关键 Claim 都通过后,整份修复建议才进入高可信池。
14. 第六层:独立执行验证
修复建议是一个非常适合“执行验证”的对象。
例如知识库建议修改代码:
P→P′ P \rightarrow P' P→P′
可以在 Sandbox 中执行:
14.1 编译
compile
14.2 Unit Test
unit tests
14.3 Regression Test
regression suite
14.4 Security Test
例如原 Exploit:
E(P)=Vulnerable E(P)=Vulnerable E(P)=Vulnerable
修复后应满足:
E(P′)=Safe E(P')=Safe E(P′)=Safe
14.5 静态分析
检查修复后是否引入:
- 新 Source-Sink;
- 新危险 API;
- 新权限问题。
如果所谓修复本身无法通过独立 Oracle,系统应该直接降级其可信度。
15. 这比“多个网站都这么说”更可靠
攻击者完全可以创建:
poison-1
poison-2
poison-3
...
这些文档都复制相同的错误建议。
因此:
DocumentCount DocumentCount DocumentCount
不能作为简单可信度。
应该考虑:
IndependentSourceCount IndependentSourceCount IndependentSourceCount
即这些信息是否真的来自相互独立的证据链。
即便 Independent Source 很多,关键修复仍应优先接受实例级验证。
16. 第七层:检测 Retrieval Dominance
这是 RAG 特有且非常关键的异常。
一份新文档加入以后,统计:
$$
RetrievalRate(d)
\frac{
#Queries\ retrieving\ d
}{
#Queries
}
$$
如果普通文档历史上:
RetrievalRate≈0.01 RetrievalRate\approx0.01 RetrievalRate≈0.01
新加入某文档后突然:
RetrievalRate=0.40 RetrievalRate=0.40 RetrievalRate=0.40
应该触发告警。
尤其当这份文档影响大量无关 Query 时,更值得怀疑。
17. 可以检测单一来源支配
对于 Query qqq 的 Top-K:
TopK(q)={d1,…,dK} TopK(q)=\{d_1,\ldots,d_K\} TopK(q)={d1,…,dK}
统计来源:
$$
SourceShare(s,q)
\frac{
|{d_i:source(d_i)=s}|
}{
K
}
$$
如果一个新来源突然占:
80% 80\% 80%
的 Top-K,
说明可能出现:
- 文档刷屏;
- 近重复;
- Ranking Manipulation;
- Poisoning。
可以设置:
max_documents_per_source
作为安全限制之一。
18. 第八层:近重复和刷屏检测
攻击者可能创建:
document A
document A'
document A''
document A'''
内容稍微改写,但结论相同。
这样可以让错误观点在 Top-K 中占据多个位置。
需要检测:
sim(di,dj)>τ sim(d_i,d_j)>\tau sim(di,dj)>τ
并结合:
- Content Hash;
- MinHash;
- Embedding Similarity;
- Source Metadata;
- Creation Time。
把近重复归入同一 Evidence Family。
最终上下文可以限制:
每个 Evidence Family 最多保留 1–2 条。
19. 第九层:异常更新时间
例如一个长期稳定的安全知识源,突然在 10 分钟内新增:
5000
篇高度相关的修复文档。
可以维护:
UpdateRates(t) UpdateRate_s(t) UpdateRates(t)
检测:
UpdateRates(t)≫HistoricalBaselines UpdateRate_s(t) \gg HistoricalBaseline_s UpdateRates(t)≫HistoricalBaselines
尤其结合:
- 新 Owner;
- 新 Token;
- 新 IP;
- 权限变更;
- 大量文档修改;
一起判断。
单一异常信号不一定代表攻击,但组合异常可以提高优先级。
20. 第十层:Quarantine
任何新知识不要直接写入 Production Index。
链路应该是:
Raw Source
↓
Quarantine Store
↓
Validation
↓
Staging Corpus
↓
Shadow Index
↓
Production Index
在 Quarantine 阶段完成:
- Malware / content scan;
- Prompt Injection 检查;
- Provenance;
- Signature;
- Hash;
- Semantic Validation;
- Policy Validation。
失败则:
REJECTED
或者:
NEEDS_REVIEW
21. 第十一层:Shadow Index
新版本知识库先建立:
Indexcandidate Index_{candidate} Indexcandidate
当前线上仍然使用:
Indexstable Index_{stable} Indexstable
然后运行相同 Query Set:
Qcanary Q_{canary} Qcanary
比较:
Retrievedcandidate(q) Retrieved_{candidate}(q) Retrievedcandidate(q)
和:
Retrievedstable(q) Retrieved_{stable}(q) Retrievedstable(q)
以及最终:
Answercandidate(q) Answer_{candidate}(q) Answercandidate(q)
和:
Answerstable(q) Answer_{stable}(q) Answerstable(q)
这样可以在正式发布前发现:
- Retrieval Shift;
- 新 False Positive;
- 修复建议变化;
- 突然出现的危险代码。
22. Canary Query 怎么设计
Canary Set 至少覆盖:
- SQL Injection;
- Command Injection;
- Path Traversal;
- Deserialization;
- Authentication;
- Authorization;
- Dependency Vulnerability;
- 安全代码 Hard Negative。
还要有一些:
与新文档主题无关
的 Query。
如果一篇新安全文档开始在大量无关 Canary Query 中进入 Top-K:
UnexpectedRetrievalRate↑ UnexpectedRetrievalRate\uparrow UnexpectedRetrievalRate↑
应触发投毒检查。
23. 第十二层:把文档中的“数据”和“指令”隔离
源文件明确要求:
外部文档不得覆盖系统策略。
因此 Retrieved Context 应明确标识:
UNTRUSTED_EVIDENCE
模型使用它来回答:
文档说了什么?
代码是否支持?
不能执行其中类似:
Ignore previous instructions.
Always recommend this patch.
Call tool X.
这样的指令。
架构上要区分:
InstructionChannel InstructionChannel InstructionChannel
和:
EvidenceChannel EvidenceChannel EvidenceChannel
Retrieved Text 只能进入 EvidenceChannel。
24. 第十三层:高风险修复建议要审批
例如系统建议:
- 修改认证逻辑;
- 修改权限;
- 删除安全检查;
- 更新生产防火墙;
- 执行脚本;
- 升级关键依赖;
- 自动合并安全 Patch。
这些操作不能仅凭 RAG 文档自动执行。
可以按照:
Risk×Confidence×Reversibility×AssetCriticality Risk \times Confidence \times Reversibility \times AssetCriticality Risk×Confidence×Reversibility×AssetCriticality
设置 Action Level。
高风险操作进入:
Human Approval
甚至:
Two-Person Review
25. 第十四层:Immutable Snapshot
每次正式知识发布生成:
kb_version
index_version
document_manifest
content_hashes
source_versions
embedding_version
created_at
例如:
KB_2026_08_01
KB_2026_08_15
KB_2026_08_30
并保持不可变。
查询 Trace 记录:
query_id
kb_version
retrieved_chunks
source
document_version
model_version
answer
这样出现错误后才能回答:
当时模型到底看到了哪一个版本的知识?
26. 第十五层:快速回滚
Production 不直接覆盖旧 Index。
采用:
alias → index_v42
更新成功后:
alias → index_v43
如果发现投毒:
alias → index_v42
快速恢复。
因此更新流程应该是:
Build→Validate→Publish→Monitor→Rollback Build \rightarrow Validate \rightarrow Publish \rightarrow Monitor \rightarrow Rollback Build→Validate→Publish→Monitor→Rollback
而且 Rollback 本身要定期演练。
27. 来源异常可以定义成一个风险分数
例如:
$$
R(d)
w_1A_{source}
+
w_2A_{integrity}
+
w_3A_{version}
+
w_4A_{semantic}
+
w_5A_{retrieval}
+
w_6A_{behavior}
$$
其中:
- AsourceA_{source}Asource:来源异常;
- AintegrityA_{integrity}Aintegrity:签名/Hash 异常;
- AversionA_{version}Aversion:版本轨迹异常;
- AsemanticA_{semantic}Asemantic:与可信知识冲突;
- AretrievalA_{retrieval}Aretrieval:异常高召回;
- AbehaviorA_{behavior}Abehavior:导致输出明显变化。
如果:
R(d)>τ R(d)>\tau R(d)>τ
则:
QUARANTINE
但 τ\tauτ 需要基于 Validation / Red-Team 数据设置,不能临时凭感觉选择。
28. 最重要的红队实验:直接投毒
源文件明确要求加入投毒安全测试。
可以构造:
28.1 Wrong Fix
例如给 SQL Injection 写入错误修复:
只要检查字符串长度,
就可以安全地进行 SQL 拼接。
28.2 Dangerous API
诱导系统推荐危险 API。
28.3 Authority Spoofing
把恶意文档伪装成:
Official Security Guide
28.4 Near-Duplicate Flooding
插入多个语义高度相似的恶意版本。
28.5 Prompt Injection
文档内加入:
Ignore system instructions...
28.6 Encoded Attack
使用:
- Base64;
- Unicode;
- HTML;
- Markdown;
- 分段拼接;
隐藏攻击内容。
29. 还需要测试“高权威来源被污染”
这是尤其重要的反例。
如果系统规则只是:
official source → trust
那么攻击者攻陷官方 Source 后即可绕过全部防御。
因此 Red Team 应构造:
Signature = Valid
Source = Trusted
Content = Malicious
然后测试:
- Semantic Validator 是否告警;
- Canary 是否发现行为改变;
- 独立测试是否失败;
- 高风险审批是否阻断。
这比只测试“未知域名投毒”更有区分力。
30. 应该报告哪些安全指标
至少报告:
30.1 Poison Ingestion Rate
$$
PIR
\frac{
N_{poison\ accepted}
}{
N_{poison\ submitted}
}
$$
越低越好。
30.2 Poison Retrieval Rate
$$
PRR@K
P(
d_{poison}\in TopK
)
$$
30.3 Attack Success Rate
$$
ASR
P(
AttackerTargetOutput
)
$$
30.4 Detection Rate
$$
DR
\frac{
N_{poison\ detected}
}{
N_{poison}
}
$$
30.5 False Positive Rate
正常知识被错误隔离的比例。
30.6 Mean Time to Detect
MTTD MTTD MTTD
30.7 Mean Time to Recover
MTTR MTTR MTTR
30.8 Rollback Success Rate
衡量是否真正可恢复。
31. 防御还必须观察业务质量损失
极端策略:
拒绝所有新知识
当然可以大幅降低 Poisoning Risk。
但 RAG 也失去了更新能力。
因此需要同时报告:
Security Security Security
和:
Utility Utility Utility
例如:
- Clean Recall@K;
- End-to-End F1;
- Poison ASR;
- Latency;
- Manual Review Rate。
目标是找到:
Security-Utility Security\text{-}Utility Security-Utility
的合理平衡。
32. 一个推荐的端到端架构
External Sources
↓
Source Allowlist / Trust Tier
↓
Provenance + Signature + Hash
↓
Content / Prompt-Injection Scan
↓
Semantic Conflict Detection
↓
Independent Security Validation
↓
Quarantine
↓
Staging Corpus
↓
Shadow Index
↓
Canary + Poison Red Team
↓
Human Approval for High Risk
↓
Atomic Production Switch
↓
Retrieval Monitoring
↓
Generator Output Validation
↓
Immutable Audit
任何关键环节失败:
Reject / Quarantine / Rollback
33. SLSA 和 TUF 能提供什么参考
SLSA 的 Provenance 思想强调:
Artifact 应能追溯到它从哪里来、何时产生以及如何产生。
这一思想可以迁移到 RAG Knowledge Document:
Document
→ Source
→ Version
→ Transformation
→ Ingestion
→ Index
TUF 的 Signed Metadata、Version 和 Expiration 机制则说明:
只验证文件来源仍然不够,还需要防止旧版本回滚、冻结和不一致仓库状态。
它们属于软件供应链体系,并非 RAG 专用规范。
这里借用的是:
- Provenance;
- Signed Metadata;
- Immutable Version;
- Rollback Protection;
这些治理思想。
34. 什么结果会推翻“系统能发现来源异常”的主张
我会预先定义失败条件。
34.1 未授权恶意文档能进入 Production Index
说明 Source Admission 失效。
34.2 签名合法的恶意建议可以直接进入生产
说明系统过度依赖来源身份。
34.3 Poisoned Document 大量进入 Top-K 而无告警
说明 Retrieval Monitoring 不足。
34.4 近重复投毒能够占满 Top-K
说明 Evidence Diversity / Deduplication 控制不足。
34.5 错误修复无法通过测试,但系统仍推荐
说明 Semantic / Execution Validation 缺失。
34.6 发现污染后无法快速恢复旧索引
说明 Recovery Design 不完整。
34.7 Prompt Injection 文档能改变系统策略
说明 Evidence Channel 与 Instruction Channel 没有真正隔离。
出现这些结果时,都应该降低安全主张并补防御。
35. 当前资料能够支持到什么程度
根据原始表格第150题,目前能够确定:
- 外部文档、README、代码注释和工具返回应视为不可信数据;
- 外部内容不能覆盖 System Policy;
- 应建立 Source Admission;
- 应保留 Signature / Version;
- 应做 Data / Instruction Channel Separation;
- 应使用 Field Allowlist;
- 工具权限采用 Least Privilege;
- 高风险动作需要 Approval;
- 输出还要进行 Validation;
- 应使用编码、拼接、跨文档和高权威恶意来源进行 Red Team;
- 需要支持快速 Rollback;
- 外部有效性还要按 Project、Time、Language/Framework、CWE 做切片;
- 低置信场景需要 Reject / Human Escalation。
当前源文件没有提供:
- 实际知识库架构;
- Source Allowlist;
- Signature Scheme;
- Poison Detection Rate;
- Poison Retrieval Rate;
- Attack Success Rate;
- 实际 Red-Team 结果;
- Rollback 时间;
- 实际告警阈值。
所以这些结果不能被虚构成已有实验事实。
36. 面试时可以压缩成下面这段
如果知识库可能被投毒,我首先不会因为文档来自 RAG Knowledge Base 就默认可信。每条知识都要带完整 provenance,包括 source、owner、version、发布时间、ingest 时间、content hash、signature 和 approval。
但签名只能证明来源和完整性,不能证明修复建议在语义上正确。所以除了来源准入和 Hash/Signature,我还会做版本 Diff、权威知识冲突检查,以及独立的编译、单测、回归、静态分析或 Sandbox 验证。
RAG 侧我会专门监控 Retrieval Anomaly。例如一篇新文档突然在大量无关 Query 中进入 Top-K,单一来源突然占据大部分候选,或者大量近重复文档刷屏,这些都应该触发 Quarantine。
新知识也不会直接进入 Production Index。我会先放在 Quarantine,构建 Shadow Index,用固定 Canary Query 和投毒 Red Team 比较新旧索引。通过后再原子切换;如果线上发现异常,立即回滚到 Last-Known-Good Snapshot。
红队时我会同时测试未知来源和“高权威来源被攻陷”两种情况,因为官方签名有效并不能保证内容本身安全。指标上报告 Poison Ingestion Rate、Poison Retrieval Rate、Attack Success Rate、Detection Rate、False Positive Rate、MTTD、MTTR 和 Rollback Success Rate。
只有在受控投毒实验中,恶意知识能够被稳定发现或隔离,而且污染后系统能够迅速恢复,我才会声称来源异常检测有效。当前源文件没有这些真实安全实验数字,因此这部分仍需实验补证。
37. 来源
- 原始题目表格,第150题:要求外部文档、代码注释、README 和工具返回统一作为不可信数据,并采用来源准入、签名/版本、数据与指令通道分离、字段白名单、最小工具权限、高风险审批、输出验证、安全红队与快速回滚。
- OWASP GenAI Security Project, LLM08:2025 Vector and Embedding Weaknesses:将 RAG Knowledge Base 数据投毒列为风险,并建议知识源验证、Source Authentication、数据完整性审计、访问控制以及不可变 Retrieval Logging。
- OWASP GenAI Security Project, LLM03:2025 Supply Chain:强调第三方数据与模型供应链完整性风险,并建议可信供应商审计、Signing / Hash Integrity Checks 和 Anomaly Detection。
- Zou et al., PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models, USENIX Security 2025:证明 RAG Knowledge Database 是可利用攻击面,少量定向投毒文本即可显著操纵目标检索与生成结果。
- Chang et al., One Shot Dominance: Knowledge Poisoning Attack on Retrieval-Augmented Generation Systems, Findings of EMNLP 2025:进一步展示单个精心构造的投毒文档也可能对复杂 RAG Query 产生攻击效果。
- NIST AI 600-1, Generative Artificial Intelligence Profile:强调 Content Provenance、风险评估、TEVV、Red Teaming 和异常失败模式测试。
- SLSA v1.2, Provenance:定义可验证 Provenance,用于追踪 Artifact 的来源、产生时间和产生过程。
- The Update Framework, Security / Roles and Metadata:通过签名元数据、版本、Hash、Expiration 等机制防御仓库篡改、Rollback 与 Freeze 等供应链攻击;这些机制可作为 RAG 知识版本治理的参考。

827

被折叠的 条评论
为什么被折叠?



