RAG(Retrieval-Augmented Generation)系统作为当前大模型领域的重要技术架构,其核心优势在于能够动态检索外部知识库来增强生成内容的准确性和时效性。但正是这种开放性设计,使其面临着一个致命弱点——投毒攻击。
这种攻击的本质是"认知劫持"。攻击者不需要直接入侵模型参数,而是通过污染知识源的方式,间接操控模型的输出结果。就像在图书馆的特定分类中混入几本精心伪造的书籍,当读者(模型)查阅这些资料时,就会吸收错误的知识。
从技术实现层面来看,一次成功的RAG投毒需要突破三重防线:
分析示例中的投毒文档,攻击者采用了经典的"三明治结构":
这种结构的精妙之处在于:
攻击者会精心设计文档的以下特征以提高检索排名:
实测发现,在示例中投毒文档的BM25检索得分比真实新闻高出17%,这正是因其刻意强化了关键词共现频率。
建议建立三级可信度评估体系:
| 等级 | 来源类型 | 验证要求 | 使用场景 |
|---|---|---|---|
| 核心层 | 官方数据库/API | 数字签名+时效验证 | 关键事实判定 |
| 缓冲层 | 权威媒体存档 | 多方交叉验证 | 背景信息补充 |
| 边缘层 | 开放网络内容 | 实时可信度扫描 | 长尾信息检索 |
我们开发了基于不一致性检测的防御方案:
python复制def consistency_check(response, sources):
# 事实性声明提取
claims = NLP.extract_claims(response)
# 多源验证
for claim in claims:
if not any(source.validate(claim) for source in sources):
trigger_revision(claim)
# 逻辑矛盾检测
if detect_contradictions(response):
flag_as_suspicious()
在模型微调阶段加入对抗样本:
关键提示:永远不要完全信任单一检索结果。我们在实际系统中设置了至少三个独立信源的交叉验证机制。
当检测到可能的投毒攻击时,建议按以下流程处置:
最近我们在客户系统中检测到的一次攻击显示,攻击者已经开始使用生成式AI批量制造高可信度投毒文档。这要求防御方必须升级到基于大模型的内容真伪鉴别体系。