近年来,使用U盘作为介质完成的网络攻击屡见不鲜。
2021年,在BlackHat Europe上,安全研究员利用USB协议栈的Double Free漏洞控制了linux 系统,这个攻击同样也基于U盘触发。
以上几种方法都是通过USB设备获得了主机控制权限,本文介绍一种在不获取主机控制权限条件下对U盘文件进行读取的方法。该方法需要一个特制的U盘,在使用这个U盘进行文件的存储、拷贝过程中,可在用户不知情的情况下将U盘里的文件发送给远端的接收者。
一个U盘主要由主控板(USB控制器)、FLASH存储等组成。FLASH分为2部分,一部分是用户可见的存储区,另一部分是用户不可见的固件区域。
为了达到将U盘的内容发送到远程接收端的目的,需要修改U盘控制器的固件代码,在固件代码中添加文件传输的功能。除此之外,还需要一个支持无线通信功能的U盘控制器,该控制器同时支持WIFI功能和USB功能,通过控制器的WIFI功能,U盘能够连接周围的热点,并且将存储在FLASH中的文件内容发送到文件接收端。
为了实现这个功能,笔者选取了同时支持WIFI和USB功能的芯片作为控制器芯片,芯片同时支持向芯片刷入自定义固件。基于该芯片的开发板更便于开发U盘相关的应用,例如开发制作USB HID设备、USB存储设备等。
图1.3
该开发板中需要关注的有USB_DEV,USB-to-UART,Micro SD Card,ESP-S3-MINI-1。USB_DEV interface是一个TYPEA公口,可以连接其它USB主机,ESP-S3-MINI-1模组是通用型Wi-Fi MCU模组,具有丰富的外设接口,内部包含了ESP32S3芯片。Micro SD Card Slot可以插入TF卡,ESP32S3芯片通过4-线 SDIO和SPI接口读写TF卡里的内容。USB-to-UART接口是Micro-USB接口,可用作开发板的供电接口,可烧录固件至芯片,也可作为通信接口,通过板载USB转UART桥接器与芯片通信。
本章节介绍如何基于开发板制作一个具有WIFI联网功能的U盘,该U盘具有普通U盘的存储等功能,同时支持将U盘里文件发送给其它接收者。
安装成功之后,会在桌面生成ESP-IDF X.X CMD快捷方式,双击快捷方式如果显示如下命令行窗口,代表交叉编译环境安装成功了。
git clone --recursive https://github.com/espressif/esp-iot-solution
详细的环境配置步骤参考:
https://github.com/espressif/esp-iot-solution
esp-iot-solution中包含一个usb_msc_wireless_disk示例,该实例会生成一个具有WIFI的 U盘。
usb_msc_wireless_disk项目是一个无线U盘的示例程序,需要在编译之前进行一些基本的配置。
idf.py set-target esp32s3 //设计芯片的类型是esp32s3;
idf.py menuconfig// 配置一些选项,例如,使用内部flash还是外部sdcard,wifi的类型,AP/STA。
选择使用External SDCcard存储,U盘的存储空间比更大(接近TF卡的容量),如果使用Internal Flash,存储空间只有1.4MB,空间比较小。另外,还需要配置U盘的联网方式,STA模式代表U盘会主动连接一个周围的热点,在此模式下,需要设置WIFI的名字和密码, U盘启动会自动连接该WIFI。AP模式代表U盘会生成一个WIFI热点,可以让电脑、手机等其它设备接入。
Idf.py –p COMx flash便可以把编译好的固件刷到开发板,开发板再插入电脑之后就会被识别成一个USB存储设备,当把文件拷贝到这个U盘,该文件就会被发送出去,造成文件内容泄露。
想要制作一个具有联网功能并且外观像普通U盘的USB设备,只需通过PCB画板进行硬件设计,把芯片设计到U盘里,一个“不诚实”的U盘便诞生了。
对于普通用户来说,想要防范此类攻击需要提高个人安全意识。不要随便使用不明来源的U盘,也不要轻易接受并使用他人赠送的U盘。尽量从正规渠道购买,切忌从不可信的第三方渠道/二手市场购买U盘。
除此之外,我们在插入使用新U盘时,可以留意下周围是否有新增可疑WIFI热点,如果没有新增可疑WIFI热点,那么基本上可以确定我们并没有受到此类型攻击。
往期回顾