环境:服务端 usbipd (Linux,用的是 PVE),客户端 usbip(Linux,用的是 ubuntu 22.04虚拟机),测试设备 SanDisk U盘(一开始用的是海康的 R36C,遇到了 UAS 的问题,后边说),中间机 mac + mitmproxy。
思路:
- 服务端 usbipd 起服务
- 服务端插上 U 盘,usbip bind
- 中间机器开 mitmproxy 反向代理,加载插件
- 客户端连中间机器的端口
- 客户端挂载分区,写入文件
- 验证写入文件是否被劫持
可能用到的命令
客户端
usbip --tcp-port 2021 list -r 192.168.11.33
usbip --tcp-port 2021 attach -r 192.168.11.33 -b 6-2.1
lsblk
mount -o rw,noatime,noauto,sync /dev/sdb1 /mnt/
echo helloabcdefghijk > /mnt/1.txt
umount /mnt
usbip detach -p 8
中间机器
mitmdump --mode reverse:tcp://192.168.11.5:3240@2021 -s usbip.py
usbip.py 只做了一件事情,就是把 abcdefg 换成 xyzabcd。
结果:正常操作下来,从服务端挂载 U 盘后
root@wpve:~# cat /mnt/1.txt
helloxyzabcdhijk
证明写入的数据确实是被修改过的。
但是客户机在写入后立即读,读到的还是原始尝试写入的内容,这个缓存不知道怎么关,但是不重要了。
UAS 的问题,硬盘挂载上dmesg报错
[48408.638543] usb 14-1: USB controller vhci_hcd.0 does not support streams, which are required by the UAS driver.
[48408.638550] usb 14-1: Please try an other USB controller if you wish to use UAS.
[48408.638553] usb-storage 14-1:1.0: USB Mass Storage device detected
[48408.639125] scsi host2: usb-storage 14-1:1.0
找到了一篇文章https://leo.leung.xyz/wiki/How_to_disable_USB_Attached_Storage_(UAS)
按说明在客户端配置了 quirks,不报错,但是没有 /dev下的 sdx,手动触发 udev
udevadm trigger -v
但是看不到分区,所以换了小U盘。
Leave a Reply