审计 Ask Astro LLM 问答应用:四大安全漏洞与防御实践
审计 Ask Astro LLM 问答应用 - Trail of Bits 博客
今天,我们发布第二个开源 AI 安全审计项目:针对开源检索增强生成(RAG)应用的安全漏洞分析,这些漏洞可能导致聊天机器人输出投毒、文档摄取不准确及潜在拒绝服务。本次审计延续了我们早前在流行计算机视觉框架 YOLOv7 中发现 11 个安全漏洞的工作。
具体而言,我们在 Ask Astro 中发现四个问题。该应用是基于风投公司 A16Z 的 RAG 参考架构构建的开源聊天机器人。RAG 是通过上下文知识库为大型语言模型(LLM)增强训练数据集外信息的最有效技术之一。
架构问题与实现缺陷
审计发现可分为两大类:
架构问题:缺乏人工审核或文档删除功能,攻击者可通过有害信息投毒聊天机器人输出
实现故障:多个实现漏洞可能影响文档摄取准确性(通过 GitHub 问题的分割视图投毒、Weaviate 客户端中的 GraphQL 注入)或导致财务拒绝服务(问题扩展提示中的提示词注入)
Ask Astro 技术架构
Ask Astro 是为 Apache Airflow 编排工具 Astronomer 提供技术支持的开源聊天机器人。其采用现代 ML 开发栈构建,包含三大核心组件:
Weaviate:存储文档嵌入向量的向量数据库
Langchain:基于 Python 的 LLM 编程框架
Apache Airflow:用于管理文档检索和处理的工作流编排系统
数据流与攻击面
应用攻击面相对狭窄,包含两个主要工作流(图 1):
文档摄取:通过 Apache Airflow 工作流从多个来源获取文档
Apache Airflow 官方文档
Astronomer 博客及 GitHub 仓库
StackOverflow 带 airflow 标签的线程
答案生成:多步骤检索相关文档并生成答案
LLM 生成问题重述版本
Weaviate 余弦相似度搜索
Cohere Reranker API 文档重排序
LLM 过滤器去除无关文档
审计发现的技术漏洞
[TOB-ASTRO-0001] 通过源材料删除的数据投毒
严重性:高
攻击者可在摄取运行前在社区论坛发布完整讨论线程,摄取完成后立即删除线程。由于缺乏源材料删除同步机制,攻击者可向知识库注入任意文本。
[TOB-ASTRO-0002] 通过 GitHub 问题的分割视图投毒
严重性:低
文档摄取例程在处理 GitHub 问题时存在两个漏洞:
贪婪正则表达式(
re.DOTALL
标志)过度匹配文本Markdown 模板拼接漏洞允许伪造完整问题线程
[TOB-ASTRO-0003] Weaviate 客户端中的 GraphQL 注入
严重性:中
Weaviate Python 客户端 v3 版本的_sanitize_str
函数存在转义漏洞:
该正则表达式无法正确处理连续反斜杠情况(如\\"
),导致 GraphQL 查询注入。
[TOB-ASTRO-0004] 问题扩展提示中的提示词注入
严重性:低
攻击者可通过提示词注入技术使模型生成超过两个重述问题,导致资源过度消耗或财务拒绝服务。
防御建议与最佳实践
数据库审计工具:建立向量数据库审计和维护流程
自动化同步机制:源内容删除时应自动同步至数据库
人工持续审核:定期审核数据库中的不准确或无关内容
威胁建模:针对多组件系统进行上下文相关的攻击向量分析
技术栈安全启示
本次审计揭示了 ML 系统安全的关键原则:
每个系统组件接口都携带必须缓解的攻击向量
文本解析和数据处理步骤需使用真实数据、边界案例和攻击载荷进行测试
RAG 系统的核心挑战在于确保向量数据库信息完整性
审计发现已通过相应 PR 修复(#325, #1134),完整技术细节欢迎联系我们的安全工程团队。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

评论