作者:moyun@墨云科技VLab Team
原文鏈接:https://mp.weixin.qq.com/s/LcgSc2lNBS6iQgHO88vmKg

近年來,使用U盤作為介質完成的網絡攻擊屢見不鮮。

  1. 2010年的震網病毒事件,使用了基于U盤來觸發的windows 快捷方式漏洞;
  2. 2014年安全研究員在BlackHat上公布了基于U盤的BadUsb攻擊,該攻擊也基于U盤這個介質;
  3. 2021年,在BlackHat Europe上,安全研究員利用USB協議棧的Double Free漏洞控制了linux 系統,這個攻擊同樣也基于U盤觸發。

以上幾種方法都是通過USB設備獲得了主機控制權限,本文介紹一種在不獲取主機控制權限條件下對U盤文件進行讀取的方法。該方法需要一個特制的U盤,在使用這個U盤進行文件的存儲、拷貝過程中,可在用戶不知情的情況下將U盤里的文件發送給遠端的接收者。

原理

一個U盤主要由主控板(USB控制器)、FLASH存儲等組成。FLASH分為2部分,一部分是用戶可見的存儲區,另一部分是用戶不可見的固件區域。

圖片

當U盤插入電腦后,固件區域的代碼便開始運行,固件區域的代碼主要為USB協議棧代碼,這些代碼用來響應主機端(HOST端)發起的各種請求,請求包括查看設備信息、設備容量、讀寫文件等。如下圖1.2所示,U盤接入電腦后,電腦主機會向U盤發起一些請求,U盤的固件代碼會對這些請求做出響應。

圖片

當主機端向設備端發起請求時,一個“誠實”的U盤(設備端固件)會如實地回答自己的設備信息及其狀態,例如,設備名字、設備類型(存儲設備,鍵盤鼠標設備)、設備容量等,而一個“不誠實”的U盤會偽造這些內容來欺騙主機端。用于HID攻擊,BADUSB攻擊的U盤便屬于”不誠實”的U盤,它們在響應主機的請求時,都欺騙了主機設備,把自己偽造成了鍵鼠設備,在獲取主機的信任后,通過執行任意鍵鼠操作來完成一些惡意操作。

為了達到將U盤的內容發送到遠程接收端的目的,需要修改U盤控制器的固件代碼,在固件代碼中添加文件傳輸的功能。除此之外,還需要一個支持無線通信功能的U盤控制器,該控制器同時支持WIFI功能和USB功能,通過控制器的WIFI功能,U盤能夠連接周圍的熱點,并且將存儲在FLASH中的文件內容發送到文件接收端。

為了實現這個功能,筆者選取了同時支持WIFI和USB功能的芯片作為控制器芯片,芯片同時支持向芯片刷入自定義固件。基于該芯片的開發板更便于開發U盤相關的應用,例如開發制作USB HID設備、USB存儲設備等。

圖片

該開發板中需要關注的有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盤里文件發送給其它接收者。

1.下載安裝基于ESP-IDF的交叉編譯環境

參考鏈接如下:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/windows-setup.html#get-started-windows-first-steps

安裝成功之后,會在桌面生成ESP-IDF X.X CMD快捷方式,雙擊快捷方式如果顯示如下命令行窗口,代表交叉編譯環境安裝成功了。

圖片

2.下載esp-iot-solution

esp-iot-solution是專門針對物聯網應用的示例程序。

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盤。

3.對無線U盤進行一些配置工作

切換到C:\Espressif\frameworks\esp-idf-v4.4\esp-iot-solution\examples\usb\device\usb_msc_wireless_disk>目錄;

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熱點,可以讓電腦、手機等其它設備接入。

圖片

4.編程將U盤文件發送到服務端

在完成上面配置之后,還需要修改源程序的代碼。在U盤初始化完成之后,遍歷U盤文件,將U盤里的文件發送給接收端。usb_msc_wireless_disk源程序代碼通過運行一個file server來實現文件共享的功能,其它電腦可以經由這file server可以查看U盤的文件內容。可以通過修改源程序邏輯,使其主動向遠端接收者發送文件。

5.編譯程序并將固件刷入開發板

完成源程序的編碼后,接下來就是執行idf.py build 編譯固件。

圖片

Idf.py –p COMx flash便可以把編譯好的固件刷到開發板,開發板再插入電腦之后就會被識別成一個USB存儲設備,當把文件拷貝到這個U盤,該文件就會被發送出去,造成文件內容泄露。

想要制作一個具有聯網功能并且外觀像普通U盤的USB設備,只需通過PCB畫板進行硬件設計,把芯片設計到U盤里,一個“不誠實”的U盤便誕生了。

防護手法

對于普通用戶來說,想要防范此類攻擊需要提高個人安全意識。不要隨便使用不明來源的U盤,也不要輕易接受并使用他人贈送的U盤。盡量從正規渠道購買,切忌從不可信的第三方渠道/二手市場購買U盤。

除此之外,我們在插入使用新U盤時,可以留意下周圍是否有新增可疑WIFI熱點,如果沒有新增可疑WIFI熱點,那么基本上可以確定我們并沒有受到此類型攻擊。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1972/