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, 逆向工具