BadUSB原理介紹、利用和防護

BadUSB 介紹

BadUSB攻擊是一種利用USB固件中的固有漏洞的攻擊,將一個寫入了惡意代碼的定製USB設備,例如U盤,插入受害者電腦,它會偽裝成HID設備(Human InterfaceDevice,是計算機直接與人交互的設備,例如鍵盤、鼠標等)進行操作。它由Karsten Nohl 和 Jakob Lell 在2014年BlackHat大會上提出,特點是惡意代碼存在於U盤的固件中,殺毒軟件無法訪問固件區域,也就沒有辦法查殺這些惡意代碼。應對這一攻擊最有效的方法就是不要隨意插入未知、不受信任的USB設備。

BadUSB 原理

在講解BadUSB的原理之前要先介紹一下Rubber Ducky 和Teensy,這兩種攻擊也是利用HID進行攻擊,將設備模擬成鍵盤進行按鍵操作,但這兩個設備的缺點在於需要定製硬件設備,而BadUSB的優點就是它可以使用通用的USB設備來達成攻擊。

但值得注意的是,不是所有USB設備都能製作BadUSB。由於需要將惡意代碼寫入到固件中,我們需要編寫固件並燒錄到設備中。想要編寫固件也就需要掌握USB設備中的芯片的指令規範,然而開發文檔只有部分芯片的是開放的,所以實際上能夠製作BadUSB的設備有一定的條件。

Karsten的文章中提到,首先需要在網上尋找到洩露的固件和閃存工具,通過逆向工程在固件中添加和修改新的功能,他們所逆向的是 Phison 2303芯片,具體的實驗代碼可以在他們的github中看到。逆向這一步具有較大的難度,而Teensy和Arduino的開發板由於有詳細的說明文檔和開發環境,製作難度降低了許多,其他的USB設備就需要自己查找有沒有官方的文檔。在後文的實踐環節中我們採用的就是teensy。

BadUSB 使用

本文使用的是Teensy++ 2.0開發板 首先在官網下載arduino並安裝 https://www.arduino.cc/en/Main/Software

接下來需要安裝Teensyduino 這個arduino的插件 https://www.pjrc.com/teensy/td_download.html

點擊工具-編程器,選擇USBasp,點擊工具-開發板,選擇Teensy++ 2.0,將程序寫入代碼框內,先選擇驗證代碼,再選擇上傳代碼。(上傳前先連接好開發板)

接下來就是代碼部分了 下面是一個啟動cmd並輸入helloworld的demo


星期五實驗室 | BadUSB原理介紹、利用和防護

代碼的主體是setup,和loop,分別代表的是執行一次和循環執行,當然loop裡也可以通過while(1)這種方式阻止它的循環執行。這個demo首先會閃爍4次然後開始通過運行調用cmd,輸出helloworld。這裡我們調用了Teensy的Keyboard庫(和Arduino自帶的Keyboard庫略有不同),通過這個庫的函數我們可以模擬鍵盤的各種操作,比如按下按鍵,釋放按鍵,輸入字符串。我們也可以自己寫一些函數將其組合起來便於我們的使用,例如demo中的AltF4(),CommandAtRunBar()

基礎操作


星期五實驗室 | BadUSB原理介紹、利用和防護

組合鍵

使用修飾鍵,共有4個修飾鍵,shift,alt,ctrl,GUI(windows key) 最多可以同時發送6個普通鍵和4個修飾鍵,先用setmodifier和setkey1選擇想按的鍵,再用send_now()發送組合。使用後記得重置為0

星期五實驗室 | BadUSB原理介紹、利用和防護

具體各個按鍵對應的代碼可以查看庫中的表格 teensy Keyboard庫介紹https://www.pjrc.com/teensy/td_keyboard.html

需要注意的是開啟中文輸入法的時候,badusb的一些模擬輸入可能會失敗,可以通過關閉輸入法或先用badusb按下大寫鍵(capslock)解決

模擬鼠標

badusb也可以模擬鼠標進行操作

下面的demo可以操控鼠標畫三角形

星期五實驗室 | BadUSB原理介紹、利用和防護

也可以操控鼠標點擊

星期五實驗室 | BadUSB原理介紹、利用和防護

Teensy LC 和3.x 支持鼠標定位到屏幕的某一位置

星期五實驗室 | BadUSB原理介紹、利用和防護

防範措施

打開本地組策略編輯器,選擇計算機配置->管理模版->系統->設備安裝->設備安裝限制

可以看到這裡一共有十二條設置,可以根據我們的實際需要來進行設置。

星期五實驗室 | BadUSB原理介紹、利用和防護

首先我們啟用允許管理員忽略設備安裝限制策略,這一條可以讓我們有確定需要使用的新設備一直被阻止安裝時用管理員權限安裝。

接著我們可以根據需要設置白名單或者黑名單,比如阻止使用與下列設備安裝程序類相匹配的驅動程序安裝設備,然後添加鍵盤的GUID,這一條可以用來禁止安裝新的鍵盤類設備。

keyboard GUID<4d36e96b-E325-11CE-BFC1-08402BE10318>

我們也可以選擇禁止安裝可移動設備,這樣任何新設備插入時都會被阻止安裝。當然這樣的限制可能會對日常使用造成很多麻煩。

還有一種防範措施就是不要隨便使用未知來源的USB設備,良好的安全意識可以減少很多風險和麻煩。


引用

teensy網址 https://www.pjrc.com/teensy/

BadUSB github https://github.com/brandonlw/Psychson

防範措施 https://heimdalsecurity.com/blog/badusb-exploit-vulnerability-fix/


星期五實驗室 出品


分享到:


相關文章: