郭永帥 王勝和 滿超 安徽公安職業(yè)學(xué)院
隨著硬件技術(shù)的飛速發(fā)展,USB設(shè)備以其靈活性高、兼容性廣深受人們的喜愛,USB接口是計(jì)算機(jī)系統(tǒng)上使用最多、最通用的接口,這也因此受到黑客們的關(guān)注,從早期的在USB設(shè)備根目錄存放autorun.inf文件傳播病毒,到HID攻擊及現(xiàn)在的BadUSB,USB設(shè)備一直都是黑客們研究的重點(diǎn)對象。USB設(shè)備的低成本、低門檻已經(jīng)使得HID攻擊隨處可見,不難預(yù)見BadUSB亦會飛速發(fā)展,所以對BadUSB的研究十分有必要。
在早期的互聯(lián)網(wǎng)發(fā)展中,計(jì)算機(jī)之間的數(shù)據(jù)交換受限于網(wǎng)絡(luò)帶寬和存儲介質(zhì)容量,為了方便應(yīng)用,在可移動存儲介質(zhì)(軟盤、U盤等)中加入自動運(yùn)行的功能,在可移動存儲介質(zhì)根目錄下添加autorun.inf 和setup.exe文件,實(shí)現(xiàn)自動播放的功能。基于此,將正常的autorun.inf文件和setup.exe 的病毒文件存放在USB根目錄,實(shí)現(xiàn)對計(jì)算機(jī)系統(tǒng)的入侵。2011年,微軟發(fā)布補(bǔ)丁修復(fù),阻斷USB自動運(yùn)行功能,而后USB自動運(yùn)行攻擊進(jìn)化為USB偽裝光盤自動運(yùn)行入侵。制作方法是將USB量產(chǎn)偽裝為CD-ROM光驅(qū),將autorun.inf文件和病毒文件制作成ISO文件寫入U盤,這即是BadUSB的雛形。
隨著信息技術(shù)的發(fā)展,自動播放功能逐漸退出歷史舞臺,可移動存儲介質(zhì)飛速發(fā)展,HID協(xié)議成為USB設(shè)備常用的協(xié)議,HID協(xié)議是一種計(jì)算機(jī)協(xié)議,約定了計(jì)算機(jī)在完成通訊過程時所要遵守的規(guī)則,HID協(xié)議使得設(shè)備之間無需安裝驅(qū)動就能進(jìn)行交互。USB HID(Human Interface Device,人機(jī)交互設(shè)備,如鍵盤、鼠標(biāo)等)攻擊即是將U盤模擬成鼠標(biāo)或者鍵盤,并通過虛擬鍵盤輸入集成到U盤固件中的指令和代碼進(jìn)行攻擊,插入U盤后便有一個無形的鍵盤輸入指令進(jìn)行惡意操作。USB HID攻擊最大的特點(diǎn)就是惡意代碼隱藏在固件之中,且具有固定的設(shè)備,如Arduino、USB RUBBER DUCKY和Teensy USB。
在2014年美國黑帽大會上,BadUSB由安全研究人員JakobLell和Karsten Nohl提出,并展示了攻擊方法,可以說現(xiàn)如今幾乎所有USB設(shè)備都有成為BadUSB的風(fēng)險。不同于HID攻擊將惡意代碼寫入Tennsy或者Arduino leonardo U盤芯片,BadUSB則是通過利用USB協(xié)議的漏洞,對USB設(shè)備的固件反編譯,改寫USB設(shè)備的固件系統(tǒng)進(jìn)行攻擊,并不需要特別定制,只要是可編譯的USB設(shè)備都有成為BadUSB 的可能,BadUSB與HID攻擊特點(diǎn)的對比如圖1所示。

以U盤為例,U盤是由USB端口、主控芯片、FLASH(閃存芯片)、底板及外殼構(gòu)成。其中主控芯片相當(dāng)于U盤的大腦,負(fù)責(zé)管理部件和下達(dá)指令,與計(jì)算機(jī)交互,主控芯片實(shí)際上是一個低功耗計(jì)算機(jī),它通過從內(nèi)存芯片加載基本的引導(dǎo)程序來啟動,類似于計(jì)算機(jī)系統(tǒng)的硬盤驅(qū)動器包含一個隱藏的主引導(dǎo)記錄,如圖2所示。

USB設(shè)備插入計(jì)算機(jī)系統(tǒng)之后,需要經(jīng)過枚舉過程才能與計(jì)算機(jī)進(jìn)行通信,枚舉過程即是向主機(jī)申請端口地址,發(fā)送設(shè)備描述符的過程。在這個過程中,USB設(shè)備的信息是由自己提供的,具有可變性。
USB設(shè)備漏洞原理:(1)由于USB設(shè)備枚舉過程中,USB設(shè)備信息具有可變性,即存在USB設(shè)備具有多個輸入輸出的特征,并可以注銷再次描述為其他的設(shè)備。(2)枚舉過程中,有數(shù)據(jù)通信交換的過程,在USB協(xié)議中并沒有校驗(yàn)過程,這會導(dǎo)致黑客可以隨意的添加惡意數(shù)據(jù)來攻擊計(jì)算機(jī)系統(tǒng),如圖3所示。
根據(jù)USB設(shè)備的漏洞原理,黑客將惡意代碼添加至USB設(shè)備的固件之中,而安全防護(hù)軟件對USB設(shè)備的正常通信沒有任何防御,致使黑客可以輕而易舉的入侵計(jì)算機(jī)系統(tǒng),造成巨大的損失,如圖4所示。


BadUSB屬于硬件設(shè)施,入侵計(jì)算機(jī)系統(tǒng)需要對目標(biāo)進(jìn)行物理接觸,而這種物理接觸一般都是利用社會工程學(xué)的方式,如掃碼贈送BadUSB設(shè)備,向目標(biāo)郵寄BadUSB設(shè)備,在目標(biāo)附近丟棄BadUSB設(shè)備誘使其撿到,假裝上門維修等等方式,方式多種多樣,但目的都是和目標(biāo)計(jì)算機(jī)接觸,入侵計(jì)算機(jī)系統(tǒng)。
利用社會工程學(xué)的方式將鍵盤模擬方式的BadUSB設(shè)備接入計(jì)算機(jī),此時計(jì)算機(jī)系統(tǒng)會將BadUSB識別成一個鍵盤,從而執(zhí)行從BadUSB輸入的惡意指令,并免疫病毒查殺,從而在計(jì)算機(jī)系統(tǒng)內(nèi)開后門提升權(quán)限。
將USB設(shè)備偽裝成交換機(jī),包含DNS服務(wù)器地址,但沒有默認(rèn)網(wǎng)關(guān),會使得網(wǎng)絡(luò)流量仍然能通過正常的Wi-Fi連接,但是所有的DNS查詢會發(fā)送到USB制定的服務(wù)器,導(dǎo)致重定向攻擊。
當(dāng)U盤被改寫成啟動盤時,在U盤的固件中反編譯一個集成引導(dǎo)扇區(qū)病毒的系統(tǒng)鏡像,在使用BIOS啟動U盤的系統(tǒng)時,先啟動固件中隱藏的病毒系統(tǒng),從而感染引導(dǎo)計(jì)算機(jī)系統(tǒng)。
首先尋找已知的具有BadUSB漏洞的USB型號,重復(fù)重置更新USB固件過程,使用抓包軟件獲取其通信過程,獲取USB設(shè)備固件命令。其次對USB設(shè)備固件進(jìn)行反編譯得到固件的源代碼。最后將寫好的惡意代碼腳本編譯為二進(jìn)制文件.bin,使用燒錄器將USB設(shè)備鏡像同惡意代碼文件一同燒錄至固件,具體流程如圖5所示。

所需U盤芯片: Chip 2303、Chip 2307、Chip 2309;U盤類型:東芝TOSHIBA THV3SZK-16G-BK;U盤制作環(huán)境:.NET 4.0,編譯工具Visual Studio 2010 Express,SDCC(Small Device C Compiler,U盤單片機(jī)編譯器),Psychson項(xiàng)目文件。制作步驟如下:
1. 編寫腳本
因已知芯片類型,直接編寫惡意代碼,惡意代碼腳本語言為Ducky Script。Ducky Script腳本語法的每個命令駐留在一個新的行上,命令均為大寫字母,大多數(shù)命令調(diào)用擊鍵、鍵組合或文本串,而有些則提供延遲或暫停。關(guān)鍵代碼如下:
STRING M DOWNARROW REPEAT100 //隱藏命令行
STRING takeown /f "%systemroot%System32 Utilman.exe"
STRING icacls "%systemroot%System32Utilman.exe" /grant administrators:F/T
STRING cd %systemroot%System32
STRING mkdir util
STRING xcopy cmd.exe util
STRING ren Utilman.exe Utilman.exe.bak
STRING cd util
STRING ren cmd.exe Utilman.exe
STRING cd ..
STRING xcopy util/Utilman.exe
STRING rmdir /s /q util //獲取管理員權(quán)限
STRING net user Local000 /add
STRING net localgroup administrators Local000 /add
STRING net user Local000 *
STRING badusb
STRING badusb //添加管理員賬戶
2. 編譯燒錄
將惡意代碼,寫入自定義鏡像文件,附加正常的鏡像寫入閃存中,關(guān)鍵代碼如下:
java -jar duckencoder.java -i code.txt -o inject.bin //將腳本編譯為二進(jìn)制文件,code.txt為惡意代碼;
copy CFW.bin hid.bin toolsEmbedPayload.exe inject.bin hid.bin //將腳本寫入hid.bin文件;
ToolsDriveCom.exe/drive=E/action=SendFirmware/burn er=BN03V104M.BIN /firmware=hid.bin//把固件寫入USB,其中E為U盤的盤符,BN03V104M.BIN是燒錄器的鏡像。
3. 實(shí)驗(yàn)驗(yàn)證
實(shí)驗(yàn)環(huán)境:Windows7操作系統(tǒng),i3處理器PC電腦兩臺,BadUSB一個。在靶機(jī)上插入BadUSB,便獲得管理員賬號Local000,badusb。打開靶機(jī)的控制面板-用戶賬戶,發(fā)現(xiàn)已有Local000的管理員賬戶,說明BadUSB入侵成功。
根據(jù)BadUSB的制作過程分析,驗(yàn)證了BadUSB是通過利用USB協(xié)議的漏洞,對USB設(shè)備的固件反編譯,改寫USB設(shè)備的固件系統(tǒng)進(jìn)行攻擊。同時在攻防練習(xí)中,BadUSB拿下目標(biāo)主機(jī)只需要5秒鐘,危害不言而喻。

1. 追根溯源
BadUSB的產(chǎn)生必定是人為制作,USB設(shè)備的來源可以提供許多有效線索。BadUSB設(shè)備以U盤為主,一般在購物網(wǎng)站購買,因BadUSB具有消耗品性質(zhì),故并非單個購買,且U盤芯片具有固定的型號,芯片具有可編譯的特性,如Phison 2303(2251-03),由此可根據(jù)購物網(wǎng)站的商家調(diào)查收貨地址,以犯罪嫌疑人居住地為收貨地址展開調(diào)查,鎖定嫌疑人。
2. 查找痕跡
BadUSB在受害者計(jì)算機(jī)系統(tǒng)上使用,必定會安裝相應(yīng)的USB驅(qū)動,可通過查找受害者計(jì)算機(jī)系統(tǒng)U盤驅(qū)動來確定BadUSB驅(qū)動型號以及安裝時間,32位的計(jì)算機(jī)系統(tǒng)USB驅(qū)動地址為:C:WindowsSystem32drivers,如圖6所示,并通過右鍵屬性查看時間戳、數(shù)字簽名等信息,以此可查找犯罪嫌疑人計(jì)算機(jī)系統(tǒng)相應(yīng)的USB驅(qū)動及其U盤來固定證據(jù),鎖定嫌疑人。
3. 日志查看
Windows日志文件記錄著Windows系統(tǒng)運(yùn)行的每一個細(xì)節(jié),可以此尋找犯罪嫌疑人的信息,從安全日志中尋找管理員賬戶的增加和刪除;在系統(tǒng)日志可查詢計(jì)算機(jī)系統(tǒng)上傳文件的信息和端口的開啟信息;在FTP日志中尋找上傳FTP的地址信息;在程序日志中尋找郵件發(fā)送的地址信息等,可將系統(tǒng)日志導(dǎo)出至日志管理軟件,方便查找線索,同時可從防火墻查看出端口訪問記錄,找出線索。
4. 取證偵查
BadUSB入侵計(jì)算機(jī)系統(tǒng)后,使用取證軟件對計(jì)算機(jī)系統(tǒng)進(jìn)行數(shù)據(jù)恢復(fù)、偵查取證。查看郵件程序收發(fā)信息、DNS的篡改信息、服務(wù)器上傳文件信息等,對之前的偵查措施有查遺補(bǔ)缺的作用,也可對犯罪嫌疑人的計(jì)算機(jī)系統(tǒng)進(jìn)行取證,查找網(wǎng)頁歷史記錄、購物軟件等是否存在關(guān)于BadUSB的相關(guān)信息。
5. 手印視頻偵查
BadUSB入侵計(jì)算機(jī)系統(tǒng)必須要和計(jì)算機(jī)接觸,顯示器、機(jī)箱都容易留下手印痕跡,可使用磁性指紋刷顯現(xiàn)指紋,再進(jìn)行指紋對比,查找犯罪嫌疑人。同時,調(diào)取相應(yīng)監(jiān)控,以計(jì)算機(jī)系統(tǒng)BadUSB驅(qū)動安裝時間為基數(shù),核查監(jiān)控錄像,縮小范圍,尋找嫌疑人線索。
1. 停用命令提示符
BadUSB的入侵都是在命令行上運(yùn)行惡意腳本,停用命令行可以阻斷BadUSB對惡意腳本的調(diào)用,從而在根源上防范BadUSB。停用命令提示符步驟如下:打開“運(yùn)行”窗口,輸入命令“gpedit.msc”并按回車,從打開的“組策略編輯”界面中,依次展開“用戶配置”-“管理模塊”-“系統(tǒng)”項(xiàng),從右側(cè)找到“阻止訪問命令提示符”項(xiàng),右擊并選擇“編輯”項(xiàng)。從打開的“阻止訪問命令提示符”界面中,勾選“已啟動”項(xiàng),同時設(shè)置“禁用命令提示符腳本處理”,點(diǎn)擊“確定”即可完成設(shè)置。
2. 命令行記錄工具
Win10下命令行工具PowerShell自帶記錄命令行命令功能,命令行記錄功能雖然不能起到防范作用,但可以做到最大程度的挽回?fù)p失,并根據(jù)BadUSB腳本反追蹤黑客。由此可以將啟動CMD命令行設(shè)置為啟動PowerShell,并輸入命令$MaximumHistoryCount = 10000,使其記錄PowerShell輸入的10000行命令,并通過Invoke-History來查看已經(jīng)輸入的命令,由此實(shí)現(xiàn)命令行記錄功能。
3. USB設(shè)備白名單
USB設(shè)備通常沒有唯一的序列號,但可使用市場上的設(shè)備防護(hù)軟件如Endpoint Protector、USB Block等對USB設(shè)備進(jìn)行授權(quán)設(shè)置白名單并進(jìn)行防護(hù)。例如USB Block可以針對每一個USB設(shè)備進(jìn)行授權(quán),只有在白名單中的設(shè)備才能正常使用。而未經(jīng)授權(quán)的USB存儲設(shè)備則無法使用,同時也可以阻止其他USB設(shè)備的插入,當(dāng)其他USB設(shè)備插入時,需要手動允許,由此可防范BadUSB的入侵。
4. 磁盤加密
磁盤加密可以防止計(jì)算機(jī)系統(tǒng)上的數(shù)據(jù)泄露,也可以一定程度上阻止BadUSB的入侵。如Windows自帶的BitLocker軟件,使用TPM芯片加密保護(hù)Windows操作系統(tǒng)和用戶數(shù)據(jù),使得計(jì)算機(jī)系統(tǒng)上的數(shù)據(jù)無法被上傳以及篡改。
5. 禁止USB固件更新
BadUSB就是利用USB設(shè)備固件更新的漏洞制作,禁止對USB設(shè)備的更新及使用時檢查USB設(shè)備的固件可以簡單有效的對BadUSB進(jìn)行防護(hù)。
6. 安裝安全防護(hù)軟件
安全防護(hù)軟件如防火墻、360安全衛(wèi)士、金山毒霸等能有效的限制計(jì)算機(jī)軟件權(quán)限提升以及DNS的篡改,安裝安全防護(hù)軟件非常有必要。
BadUSB是一種新型的惡意軟硬件結(jié)合的USB設(shè)備攻擊技術(shù),有多種入侵路徑,比之HID攻擊威脅更大。一旦通過USB外設(shè)或其他途徑感染,惡意代碼可以隱藏在外設(shè)中,避免被系統(tǒng)清除,危害巨大,但并不是無法防范和偵查的,只要提高安全意識,就能防范于未然。與此同時,BadUSB也有很多積極的用法,如U盾、共享加密U盤等等,更值得去研究。