AI安全实战系列(三):(待解决问题)Lab03 RAG Exploitation RAG 检索增强攻击
·
随着大模型应用快速落地,RAG(Retrieval-Augmented Generation,检索增强生成)架构已经成为企业知识库、智能客服、AI Agent 等场景中的核心技术。然而,RAG 并不是简单地“接入知识库即可安全运行”,其在数据检索、文档管理、上下文拼接以及模型生成环节均存在新的攻击面。
- 本文基于 AIRT Lab03 - Breaking RAG Systems 靶场,深入分析 RAG 系统中的典型安全问题,通过搭建一个存在漏洞的 RAG 环境,实战演示知识库投毒(Knowledge Base Poisoning)、间接提示词注入(Indirect Prompt Injection)、向量数据库未授权访问、敏感信息泄露等攻击方式。
文章介绍
- 靶场下载:「airt-labs.zip」
- 链接:https://pan.quark.cn/s/534b8cbc2b24?pwd=8nEn
提取码:8nEn
完成实验环境搭建后,正式进入 AIRT 八大靶场实战。本篇从 Lab01 Foundations 开始,围绕 LLM 基础漏洞与信息泄露场景,结合真实靶场环境,演示系统 Prompt 泄露、调试接口暴露、配置泄露等典型问题,并分析漏洞成因、利用方式及防护思路,为后续 Prompt Injection、RAG 攻击、多智能体攻击等高级实战打下基础。
概述
构建并系统地破坏检索增强生成(RAG)应用程序。毒害其知识库,劫持数据,并通过大型语言模型(LLM)窃取敏感数据。本实验室展示了为什么RAG系统需要端到端安全。
学习目标
- 部署使用ChromaDB和LangChain的易受攻击RAG应用程序
- 用恶意文档毒害知识库通过检索的上下文执行间接提示注入
- 通过LLM的响应泄露敏感数据
- 测试未认证的矢量数据库访问
- 了解完整的RAG攻击面
话不多说,我们直接开始;
lab03----RAG 检索增强系统攻击
靶场搭建
这里我们执行下述命令,创建我们的靶场环境:
# 修改pip源镜像
# 1. 进入 lab03 所在的工作目录
cd ~/Sec_tools/airt/labs/lab03
# 2. 将所有用到大模型的地方换成 qwen2.5:0.5b
sed -i 's/mistral:7b-instruct-q4_0/qwen2.5:0.5b/g' docker-compose.yml
sed -i 's/mistral:7b-instruct-q4_0/qwen2.5:0.5b/g' agents/app.py
# 3. 优化构建速度:为 Python 容器添加清华镜像源
sed -i 's/pip install/pip install -i https:\/\/pypi.tuna.tsinghua.edu.cn\/simple/g' agents/Dockerfile
# 4. 修复容器启动死锁:移除健康检查、降级依赖条件、为 curl 拉取模型预留 15 秒缓冲
sed -i '/healthcheck:/,/retries: 5/d' docker-compose.yml
sed -i 's/condition: service_healthy/condition: service_started/g' docker-compose.yml
sed -i 's/curl -X/sleep 15 \&\& curl -X/g' docker-compose.yml
# 5. 重新构建并后台启动所有服务
docker compose up -d --build
如果还是显示失败,可以看前几篇文章的解决内容:”直接去容器内拉取大模型“

效果如下:


随后我们访问到 http://localhost:5000,成功得到页面:


本关要点:了解RAG的攻击常见方式
靶场结构
从上述页面我们可以得知:RAG助手可以访问公司的文件(里面可能包含我们感兴趣的东西,所以我们需要想办法拿到手)
# 具体流程
用户提问 ➟ LLM理解分析 ➟ 向量数据库检索 ➟ 知识库内容匹配 ➟ AI生成回复
┌──────────────┐
User Query ──▶│ RAG App │
│ :5000 │
│ (Flask) │
└───┬──────┬───┘
Retrieve │ │ Generate
▼ ▼
┌─────────┐ ┌─────────┐
│ChromaDB │ │ Ollama │
│ :8000 │ │ :11434 │
│(Vectors)│ │ (LLM) │
└─────────┘ └─────────┘
▲
│ Ingest (VULNERABLE)
│
┌─────────┐
│Poisoned │
│Documents│
└─────────┘
这里我首先尝试问了一下AI问题,但是发现没有回答:

那么是不是需要我先上传文档,让AI去理解,然后才能进行输出?
遇到的问题
这里我尝试了五六次,修改app.py文件还是重新搭建靶场,发现无论是我“上传文档”还是“提问”,模型都返回响应码500
- 提问:
/query - 上传文档:
/injest

这里要是大家有什么解决的方法可以评论区,私聊我都行;
更多推荐



所有评论(0)