找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1908|回復(fù): 0
收起左側(cè)

TPYBoard實(shí)例之利用WHID為隔離主機(jī)建立隱秘通道

[復(fù)制鏈接]
ID:130183 發(fā)表于 2017-9-13 15:25 | 顯示全部樓層 |閱讀模式
  0引言

  從2014年BADUSB出現(xiàn)以后,USB-HID攻擊就這一直被關(guān)注,且具爭(zhēng)議。爭(zhēng)議的焦點(diǎn)是USB-HID的實(shí)戰(zhàn)效果過(guò)于“雞肋”,無(wú)論從早期的BADUSB,還是到后來(lái)的各種USB-HID設(shè)備,對(duì)于目標(biāo)機(jī)來(lái)說(shuō),都要通過(guò)彈出“運(yùn)行框”來(lái)實(shí)現(xiàn)payload的植入,由于彈框過(guò)于明顯,所以實(shí)戰(zhàn)中效果就大打折扣。于是,圍繞著如何提升實(shí)戰(zhàn)效果,很多人提出了不同的想法,我也做過(guò)多次嘗試,比如通過(guò)改善payload的存儲(chǔ)位置,通過(guò)加入BLE模塊等方法,目的只有兩個(gè),一是盡可能減少payload植入過(guò)程中的code字符數(shù),二是控制payload的植入時(shí)間。再到后來(lái),我也開(kāi)始嘗試引入wifi模塊,通過(guò)wifi進(jìn)行控制,如2017年5月,我在freebuf上發(fā)表了《利用micropython快速實(shí)現(xiàn)Badusb及手機(jī)搖控?cái)U(kuò)展》,當(dāng)時(shí)第一次通過(guò)wifi來(lái)控制usb-hid,實(shí)現(xiàn)與演示了遠(yuǎn)程關(guān)機(jī)的操作。

  WIFI與HID相結(jié)合國(guó)外有個(gè)更專業(yè)的名字就是WHID。WHID在當(dāng)前的眾多文章和應(yīng)用中,多是把它作為一個(gè)控制模塊,通過(guò)偽裝,控制HID攻擊的效果,更多呈現(xiàn)的是手機(jī)或者其它wifi下設(shè)備如何利用WHID對(duì)目標(biāo)機(jī)進(jìn)行攻擊控制。但實(shí)際上,WHID完全可以在目標(biāo)機(jī)上形成一個(gè)自定義的通道實(shí)現(xiàn)目標(biāo)機(jī)與手機(jī)或者wifi下其它攻擊設(shè)備的通訊,相當(dāng)于給目標(biāo)機(jī)安裝了一個(gè)自定義網(wǎng)卡。這一方法,對(duì)于隔離主機(jī)的信息獲取具有一定的應(yīng)用效果。

  1WHID及其構(gòu)成

  一個(gè)傳統(tǒng)的USB-HID設(shè)備,常常是用來(lái)虛擬或者仿真鍵盤、鼠標(biāo)等usb外設(shè)來(lái)完成惡意代碼的植入。最常見(jiàn)的就是通過(guò)仿真鍵盤來(lái)完成,主要流程是當(dāng)USB-HID設(shè)備插入PC后,會(huì)仿真出一個(gè)虛擬鍵盤,然后通過(guò)輸入win+R,調(diào)出系統(tǒng)的運(yùn)行框,在運(yùn)行框內(nèi)輸入code。這里常用的方法是,輸入cmd等命令,調(diào)出最小布局的cmd(也可以改變顏色,目的就是讓這個(gè)cmd不易察覺(jué)),再通過(guò)上下鍵把cmd拖出窗外,讓被攻擊者無(wú)法看到。這時(shí),開(kāi)始在cmd里輸入code。如遍歷磁盤,找到payload的存儲(chǔ)位置,植入payload。

  在植入的這個(gè)過(guò)程中,又會(huì)面臨權(quán)限、免殺、過(guò)UAC等工作,如果你有足夠的時(shí)間,都可以通過(guò)這個(gè)仿真鍵盤事前寫好代碼或者批處理命令,逐個(gè)解決。從這一點(diǎn)看,USB-HID還是很實(shí)用的,但是實(shí)際上,在插入后需要輸入的code量過(guò)大,這期間如果被攻擊機(jī)器的鍵盤操作過(guò),或者鼠標(biāo)動(dòng)過(guò),就會(huì)影響到仿真鍵盤的工作,從而使實(shí)現(xiàn)效果不盡人意。于是,有人通過(guò)在目標(biāo)機(jī)器上啟動(dòng)Empire或Meterpreter會(huì)話,將輸入的2670個(gè)字符壓縮到116個(gè)字符,輸入時(shí)間從38秒壓縮到3秒。還有人通過(guò)修改padload存儲(chǔ)位置,如存儲(chǔ)在A盤,可以將輸入的字符壓縮到8個(gè)(如a:\m.exe),輸入時(shí)間壓縮到不足1秒,但這些方法都無(wú)法控制彈出運(yùn)行框的時(shí)間,WHID可以說(shuō)是解決了這個(gè)問(wèn)題。

  WHID就是在USB-HID上加入了wifi模塊。你可以把wifi配置成AP,也可以配置成STA,然后利用你的PC或者手機(jī)來(lái)控制USB-HID的動(dòng)作及動(dòng)作時(shí)間。例如,我在《利用micropython快速實(shí)現(xiàn)Badusb及手機(jī)搖控?cái)U(kuò)展》一文中寫到的,通過(guò)手機(jī)遙控關(guān)機(jī)。

  那么WHID由哪幾部分構(gòu)成呢?

  第一,易于使用的USB-HID攻擊模塊,我們常見(jiàn)的就是teensy、arduino等。這里我選用的是支持micropython的模塊TpyboardV102,其采用python來(lái)進(jìn)行硬件控制,代碼寫起來(lái)比較簡(jiǎn)單、方便,而且這個(gè)模塊有6個(gè)串口,足夠我們進(jìn)行擴(kuò)展與使用。其缺點(diǎn)也很明顯,體積略大,不易偽裝,不像arduinonano、arduinopro、teensy、arduinolenorado那樣可以很容易的偽裝為U盤。對(duì)我來(lái)說(shuō),我覺(jué)得這不是大的缺點(diǎn),因?yàn)門PYBoard也屬開(kāi)源硬件,原理圖都是開(kāi)放的,完全可以自己再畫成適合偽裝的形態(tài)。

  第二,合適的WIFI模塊。我最初在嘗試時(shí),使用的是MT7681模塊,具體可見(jiàn)《利用micropython快速實(shí)現(xiàn)Badusb及手機(jī)搖控?cái)U(kuò)展》一文。后來(lái),在學(xué)習(xí)micropython的過(guò)程中,發(fā)現(xiàn)利用TPYBoardv202(ESP8266芯片)更加方便,可以直接形成一個(gè)AP,并建立一個(gè)WEB服務(wù)器。于是,選定用這個(gè)模塊來(lái)完成。

  第三,WIFI與USB-HID的連接。連接的接口也有很多種,可以通過(guò)I2C、SPI等接口。這里我選用的是串口,只需要將TPYBoardV102與TPYBoardV202兩個(gè)板子上的TX、RX相互交叉接線就可以了,操作非常簡(jiǎn)單。

  WHID示意圖如下:

1.png

  利用micropython完成WHID的簡(jiǎn)易拼裝:

2.png

  利用WHID為隔離主機(jī)建立隱秘通道

  2WHID通道搭建原理

  對(duì)于一個(gè)WHID來(lái)說(shuō),由于其帶有的WIFI模塊,構(gòu)建了一個(gè)無(wú)線網(wǎng)絡(luò),所以我們完全可以考慮利用這個(gè)WIFI網(wǎng)絡(luò)實(shí)現(xiàn)與PC之間的隱蔽通訊,從而建立一套自定義的無(wú)線網(wǎng)卡。如果說(shuō),對(duì)于互聯(lián)網(wǎng)主機(jī),USB-HID可以實(shí)現(xiàn)payload的植入,利用payload反彈一個(gè)shell的話,那么對(duì)于隔離主機(jī),WHID一樣可以反彈一個(gè)shell給攻擊者,實(shí)現(xiàn)對(duì)隔離主機(jī)的攻擊。從原理來(lái)說(shuō),就是WHID通過(guò)HID在隔離主機(jī)內(nèi)植入一個(gè)payload,也可以認(rèn)為是WHID自定義網(wǎng)卡的驅(qū)動(dòng),然后隔離主機(jī)會(huì)通過(guò)串口等接口與WHID進(jìn)行交互,WHID再將交互內(nèi)容通過(guò)WIFI模塊傳遞給遠(yuǎn)端的控制者。

  第一,實(shí)現(xiàn)USB-HID設(shè)備與隔離主機(jī)的通訊。其實(shí),USB-HID負(fù)責(zé)與PC進(jìn)行通訊的就是一個(gè)單片機(jī),其與PC的通訊方式有很多種,最為常見(jiàn)的就是串口通訊,往往在單片機(jī)與pc之間會(huì)有一個(gè)TTL轉(zhuǎn)USB的芯片,如CH340等。一般串口通訊的最大速度為115200bps,約相當(dāng)于每秒14KB。如果在通訊中覺(jué)得這個(gè)速度過(guò)于有限,那也可以嘗試使用SPI轉(zhuǎn)USB,這樣速度可以達(dá)到每秒10MB以上。TPYBoardv102開(kāi)發(fā)板自帶了TTL轉(zhuǎn)USB模塊,所以本文中的研究過(guò)程全部采用串口通訊。

  第二,實(shí)現(xiàn)USB-HID與WIFI模塊之前的通訊,由于TPYBoardv102本身帶有SD卡存儲(chǔ),可以作為緩存存放,這樣在速度上要求不是很高,所以TPYBoardv102與TPYBoardv202(ESP8266)之間完全可以采用串口通訊,連接簡(jiǎn)單,操控方便。

  第三,實(shí)現(xiàn)WIFI模塊與控制終端之間的通訊,這一點(diǎn)對(duì)于WIFI來(lái)說(shuō)一定是通過(guò)無(wú)線網(wǎng)絡(luò)。本研究中,利用TPYBoardv202建立了一個(gè)AP及web服務(wù)器,提供WEB網(wǎng)頁(yè)服務(wù)做為控制平臺(tái)。

  于是,WHID與隔離主機(jī)之間的通道傳輸如下圖所識(shí):

3.png

  3利用隔離主機(jī)WHID通道讀取文件

  為了說(shuō)明如何利用WHID從隔離主機(jī)中獲取信息,這里我們以獲取文件為例進(jìn)行講解。命題為獲取D盤根目錄下test.txt的內(nèi)容。具體步驟為:

 。1)準(zhǔn)備一套可供使用的Payload代碼。根據(jù)命題,payload需要解決兩個(gè)問(wèn)題,一是類似上位機(jī),獲取WHID所在串口,并通過(guò)握手包來(lái)確認(rèn)其工作正常;二是讀取D盤下的test.txt文件內(nèi)容,并通過(guò)串口向WHID進(jìn)行傳送。

 。2)利用WHID完成payload植入。植入是打通通道的最關(guān)鍵一步,第一步中準(zhǔn)備的payload相當(dāng)于給WHID安裝了驅(qū)動(dòng),從而保障PC與WHID的通訊暢通。這里的植入過(guò)程,依然還是依賴于HID。常見(jiàn)的使用方法為將Payload存在特定存儲(chǔ)位置,HID仿真鍵盤運(yùn)行payload。

 。3)payload運(yùn)行后,查找WHID所在的串口,與WHID進(jìn)行握手,確認(rèn)通訊正常,然后讀取D盤根目錄下的test.txt文件,將內(nèi)容通過(guò)串口傳送給WHID設(shè)備。

 。4)WHID實(shí)現(xiàn)一個(gè)AP,并建立一個(gè)WEB服務(wù)器,將獲取到的串口數(shù)據(jù)在自身實(shí)現(xiàn)的web上進(jìn)行呈現(xiàn)。此時(shí)手機(jī)或者其它終端連接到這個(gè)AP上,通過(guò)Web就能查看結(jié)果。

  實(shí)現(xiàn)的攻擊效果為,通過(guò)手機(jī)連入WHID建立的無(wú)線網(wǎng)絡(luò),然后輸入WHID預(yù)定的web地址,會(huì)呈現(xiàn)上圖中的WEB控制頁(yè)面,當(dāng)點(diǎn)擊“植入”后,電腦中會(huì)閃過(guò)“運(yùn)行”框,從而完成payload植入,然后點(diǎn)擊“查看”,就能獲取到文件內(nèi)容。如下圖:

4.png

  如果攻擊者,把WHID與一個(gè)USB設(shè)備進(jìn)行偽裝,其攻擊就很具有迷惑性。如與USB小音箱封裝到一個(gè)盒子里,從外表看,就是一個(gè)略大點(diǎn)的USB音箱,但實(shí)際上已經(jīng)可以進(jìn)行WHID攻擊了。當(dāng)然攻擊者也完成可以通過(guò)payload從隔離主機(jī)中反彈出一個(gè)shell,從而再進(jìn)行進(jìn)一步的滲透。

  【效果視頻】



  【部分代碼】

  僅包含硬件固件,未包含Payload。

  http://pan.baidu.com/s/1qXVhfWg

  【免責(zé)聲明】

  請(qǐng)不要在非合法情況下利用TPYboard實(shí)施攻擊,這種行為將會(huì)被視作非法活動(dòng)。由本軟件所造成的任何不良后果,作者將不承擔(dān)任何責(zé)任,請(qǐng)各位謹(jǐn)慎使用。



回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表