NimaDorzh/RIPA
GitHub: NimaDorzh/RIPA
RIPA是一个用于评估LLM控制机器人安全性的攻击模拟工具。
Stars: 0 | Forks: 0
# RIPA:通过管道攻击的机器人注射
**对LLM控制的ROS 2机器人进行感官提示注射攻击的实证研究**
RIPA评估了通过机器人的物理传感器(摄像头、麦克风、激光雷达)注入的对抗性文本如何通过ROS 2管道传播并操纵LLM驱动的运动命令。该项目涵盖了三个攻击通道、五个LLM、一个混合语义防火墙以及19个混淆有效载荷的防火墙绕过分类法。
## 关键结果
| 通道 | 向量 | 测试模型 | ASR |
|------|------|----------|-----|
| 通道 1 | 视觉(OCR) | DeepSeek, Llama 3.1 8B, Llama 3.3 70B, Qwen 2.5 7B, Gemma-3n-4B | 67–100% |
| 通道 2 | 音频(Whisper STT) | DeepSeek-chat | 97–100% per variant |
| 通道 3 | LiDAR传感器上下文 | DeepSeek-chat | 100% |
| 防火墙(已知模式) | — | 两个模型 | 0% ASR,0%假阳性 |
| 防火墙绕过(混淆) | 19个有效载荷,N=30 | Llama 3.3 70B(控制器) | 10.2%绕过率 |
**多模型扫描(通道 1,N=100每个变体通过Together AI):**
| 模型 | 参数 | A1 | A2 | A3 | 总体 |
|------|------|----|----|----|---------|
| DeepSeek-chat | ~67B (MoE) | 100% | 100% | 100% | 100% |
| Llama-3.3-70B | 70B | 100% | 100% | 100% | 100% |
| Qwen-2.5-7B | 7B | 100% | 100% | 100% | 100% |
| Gemma-3n-4B | 4B | 100% | 100% | 100% | 100% |
| Llama-3.1-8B | 8B | 60% | 80% | 60% | 66.7% |
## 架构
### 通道 1 — 视觉(OCR)
```
[Camera / Image] → [ocr_node] → /object_label → [firewall_node] → /object_label_safe → [controller_node] → [LLM] → /cmd_vel
```
### 通道 2 — 音频(Whisper STT)
```
[Microphone / WAV] → [audio_listener_node] → Whisper base → /object_label → [controller_node] → [LLM] → /cmd_vel
```
### 通道 3 — LiDAR传感器上下文中毒
```
[sensor_spoof_node] → /scan (fake LaserScan) → [sensor_context_node] → /sensor_context → [sensor_controller_node] → [LLM system prompt] → /cmd_vel
```
## 技术栈
| 组件 | 值 |
|------|-------|
| OS | Ubuntu 24.04 (WSL2) |
| ROS | ROS 2 Jazzy + Cyclone DDS |
| 模拟器 | Gazebo Harmonic |
| 机器人 | TurtleBot3 Waffle |
| LLMs | DeepSeek-chat(平台API + Together AI),Llama 3.1 8B,Llama 3.3 70B,Qwen 2.5 7B,Gemma-3n-4B |
| Python | 3.12 |
| GPU | NVIDIA RTX 4060笔记本电脑 + CUDA 12.3 |
| OCR | Tesseract 5 + pytesseract |
| STT | OpenAI Whisper基础 |
| LiDAR | sensor_msgs/LaserScan(模拟,TurtleBot3 Waffle) |
| 关键包 | openai,python-dotenv,gtts,pydub,openai-whisper,Pillow,pytesseract,matplotlib |
## 仓库结构
```
robotics_ws/
├── README.md
├── results/
│ ├── csv/ # all experiment outputs
│ ├── png/ # charts and visualizations
│ └── pdf/
├── test_images/ # OCR test fixtures
├── test_cards/
│ └── generate_test_cards.py # printable adversarial cards
└── src/llm_robot_controller/
└── llm_robot_controller/
├── controller_node.py # Channel 1 LLM controller
├── firewall_node.py # hybrid semantic firewall
├── ocr_node.py # OCR → /object_label
├── injection_test.py # Channel 1 baseline experiment
├── multi_model_sweep.py # 5-model sweep via Together AI
├── firewall_test.py # firewall validation
├── firewall_bypass_test.py # 19-payload bypass taxonomy (N=30)
├── ocr_test.py # visual injection experiment
├── real_camera_test.py # live webcam injection
├── audio_listener_node.py # Channel 2: Whisper STT node
├── audio_injection_test.py # Channel 2: end-to-end audio experiment
├── sensor_spoof_node.py # Channel 3: fake LaserScan publisher
├── sensor_context_node.py # Channel 3: LaserScan → text context
├── sensor_controller_node.py # Channel 3: LLM controller
└── sensor_injection_test.py # Channel 3: experiment runner
```
## 设置
```
git clone https://github.com/NimaDorzh/RIPA.git ~/robotics_ws
cd ~/robotics_ws
python3 -m venv venv
source venv/bin/activate
pip install -U pip
# 系统依赖
sudo apt update
sudo apt install -y tesseract-ocr ros-jazzy-usb-cam
# Python 依赖
pip install openai python-dotenv pytesseract pillow matplotlib \
gtts pydub openai-whisper --break-system-packages
# ROS 2 构建
source /opt/ros/jazzy/setup.bash
colcon build --packages-select llm_robot_controller
source install/setup.bash
# 配置
cp .env.example .env
# 将您的 API 密钥添加到 .env
```
### .env配置
```
DEEPSEEK_API_KEY=your_key_here
TOGETHER_API_KEY=your_key_here
LLM_PROVIDER=together
LLM_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo
INJECTION_DIRECT_MODE=false
```
### WSL2 DDS修复
```
sudo apt install -y ros-jazzy-rmw-cyclonedds-cpp
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
source ~/.bashrc
```
## 运行实验
### 通道 1 — 基线注射(文本)
```
source venv/bin/activate && source /opt/ros/jazzy/setup.bash && source install/setup.bash
python3 src/llm_robot_controller/llm_robot_controller/injection_test.py
```
### 通道 1 — 多模型扫描(5个模型,N=100)
```
python3 src/llm_robot_controller/llm_robot_controller/multi_model_sweep.py --runs 100
```
### 通道 1 — 防火墙绕过分类法(19个有效载荷,N=30)
```
python3 src/llm_robot_controller/llm_robot_controller/firewall_bypass_test.py --runs 30
```
### 通道 2 — 音频注射
```
python3 src/llm_robot_controller/llm_robot_controller/audio_injection_test.py
```
### 通道 3 — LiDAR传感器上下文中毒
```
python3 src/llm_robot_controller/llm_robot_controller/sensor_injection_test.py
```
### 通道 1 — 完整视觉管道(OCR + 防火墙 + 控制器)
在单独的终端中启动节点:
```
ros2 run llm_robot_controller firewall_node
ros2 run llm_robot_controller controller_node
ros2 run llm_robot_controller ocr_node
ros2 run llm_robot_controller ocr_test
```
## 实验结果(CSV)
所有原始结果都在`results/csv/`:
| 文件 | 描述 |
|------|-------------|
| `experiment_deepseek_flash_100runs_*.csv` | 通道 1 基线,DeepSeek 平台API,N=100 |
| `experiment_together_lite_100runs_*.csv` | 通道 1 基线,Llama 3.1 8B,N=100 |
| `multi_model_sweep_*.csv` | 5模型扫描,N=100每个变体 |
| `firewall_bypass_*.csv` | 绕过分类法,19个有效载荷,N=30 |
| `audio_injection_*.csv` | 通道 2 结果,N=30 |
| `channel3_sensor_injection_*.csv` | 通道 3 结果,N=30 |
## 完成工作
- [x] 通道 1:通过OCR进行视觉注射(5个模型,N=100)
- [x] 通道 2:通过Whisper STT进行音频注射(DeepSeek,N=30)
- [x] 通道 3:LiDAR传感器上下文中毒(DeepSeek,N=30)
- [x] 混合语义防火墙(0% ASR,0%假阳性)
- [x] 防火墙绕过分类法(19个有效载荷 × N=30,10.2%绕过率)
- [x] 实际摄像头OCR验证(Logitech C920e,WSL2)
- [x] 音频通道的WER/CER指标
- [ ] arXiv预印本
## 引用
```
@misc{dorzhiev2026ripa,
title = {RIPA: Robotic Injection via Pipeline Attack - Empirical Study of Sensory Prompt Injection Attacks on LLM-Controlled ROS 2 Robots},
author = {Dorzhiev, Nima},
year = {2026},
note = {Preprint. https://github.com/NimaDorzh/RIPA}
}
```
标签:C2, 逆向工具