Black Hat USA 2018 Arsenal | GhostTunnel解讀
今年是360無(wú)線電安全研究院第四次登上世界頂級(jí)的安全會(huì)議Black Hat,繼4月份的HITB阿姆斯特丹站后,來(lái)自天馬安全團(tuán)隊(duì)的柴坤哲、曹鴻健,王永濤帶來(lái)的GhostTunnel再次入選了以“議題審核嚴(yán)苛”著名的 Black Hat USA 2018,據(jù)悉,該會(huì)議議題接受率不足20%。
Ghost Tunnel是一種可適用于隔離環(huán)境下的后門傳輸方式。一旦payload在目標(biāo)設(shè)備釋放后,可在用戶無(wú)感知情況下對(duì)目標(biāo)進(jìn)行控制及信息回傳。相比于現(xiàn)有的其他類似研究(如WHID,一種通過(guò) Wi-Fi 進(jìn)行控制的 HID 設(shè)備),
Ghost Tunnel不創(chuàng)建或依賴于任何有線、無(wú)線網(wǎng)絡(luò),甚至不需要外插任何硬件模塊。
在BlackHat的演講中,我們對(duì)之前的Ghost Tunnel版本進(jìn)行了更新,并將源碼進(jìn)行了開(kāi)源。為了便于新來(lái)的讀者,我依然會(huì)在第2,3小節(jié)中進(jìn)行基礎(chǔ)的介紹,便于理解Ghost Tunnel的使用場(chǎng)景及技術(shù)原理。在第3小節(jié)的末尾部分(3.3,3.4),我將會(huì)補(bǔ)充之前未詳細(xì)介紹的實(shí)現(xiàn)部分及本次更新內(nèi)容。
一、 背景
在本節(jié)中將會(huì)介紹“遠(yuǎn)控木馬上線方式”、“網(wǎng)絡(luò)隔離”、“HID攻擊”等相關(guān)知識(shí),部分內(nèi)容引用自其他文章,在小節(jié)末將給出原文以便于大家擴(kuò)展閱讀。
1.1 遠(yuǎn)控木馬上線方式
說(shuō)起遠(yuǎn)控木馬,大家可能會(huì)想到一大堆耳熟能詳?shù)拿Q,如灰鴿子、冰河、PCshare、Gh0st、白金、鳳凰ABC以及Poison Ivy等,在此我們以上線方式的角度對(duì)遠(yuǎn)控木馬進(jìn)行一個(gè)簡(jiǎn)單分類。
– 主動(dòng)連接型
被控端開(kāi)啟特定端口,主控端通過(guò)該主機(jī)IP及端口連接到被控端,如3389遠(yuǎn)程桌面、VNC遠(yuǎn)程桌面等。
– 反彈連接型
由于主動(dòng)連接的方式不適用于攻擊目標(biāo)處在內(nèi)網(wǎng)的環(huán)境,許多木馬采用反彈型進(jìn)行上線。與主動(dòng)連接的方式相反,由主控端監(jiān)聽(tīng)特定端口,被控端執(zhí)行木馬后反連回主控端。由于該種方式的適用性更廣,大部分的木馬都采用該方式上線,如利用FTP上線、DNS域名解析上線等。
– 通過(guò)第三方域名型
出于隱蔽性或者反追蹤的目的,有些新型的木馬采用第三方網(wǎng)站來(lái)進(jìn)行上線。比如通過(guò)知名博客類網(wǎng)站的文章內(nèi)容及評(píng)論區(qū),利用QQ空間、微博、推特的推送內(nèi)容,甚至筆者還見(jiàn)過(guò)利用QQ個(gè)性簽名來(lái)作為上線地址。八仙過(guò)海各顯神通,利用知名網(wǎng)站的好處是可以繞過(guò)某些防火墻的白名單限制。

>《木馬的前世今生:上線方式的發(fā)展及新型上線方式的實(shí)現(xiàn)》 http://www.freebuf.com/articles/terminal/77412.html
其實(shí),Ghost Tunnel也可以理解為一種木馬的上線方式,只是它更針對(duì)于攻擊目標(biāo)處在隔離網(wǎng)絡(luò)中的場(chǎng)景。
1.2 什么是Air Grapping
> Wikipedia: “An air gap, air wall or air gapping is a network security measure employed on one or more computers to ensure that a secure computer network is physically isolated from unsecured networks, such as the public Internet or an unsecured local area network.”
簡(jiǎn)單來(lái)說(shuō),Air Grapping是一種用于保護(hù)特定網(wǎng)絡(luò),采用物理隔離的安全措施,通常被用來(lái)防止利用網(wǎng)絡(luò)連接途徑造成的入侵及信息泄漏事件。
隔離網(wǎng)閘是常見(jiàn)的一種形態(tài),其原理為:切斷網(wǎng)絡(luò)之間的通用協(xié)議連接;將數(shù)據(jù)包進(jìn)行分解或重組為靜態(tài)數(shù)據(jù);對(duì)靜態(tài)數(shù)據(jù)進(jìn)行安全審查,包括網(wǎng)絡(luò)協(xié)議檢查和代碼掃描等;確認(rèn)后的安全數(shù)據(jù)流入內(nèi)部單元;內(nèi)部用戶通過(guò)嚴(yán)格的身份認(rèn)證機(jī)制獲取所需數(shù)據(jù)。其經(jīng)常被使用在涉密網(wǎng)與非涉密網(wǎng)間。
攻擊者無(wú)論是想利用操作系統(tǒng)、應(yīng)用軟件、通信協(xié)議的漏洞,都需要通過(guò)網(wǎng)絡(luò)觸碰目標(biāo)機(jī)器,而網(wǎng)絡(luò)隔離環(huán)境中就將這條路給封住了。不過(guò)凡事沒(méi)有絕對(duì),一些大新聞告訴我們利用惡意USB就是一種具有可操作性的攻擊方式,以下就是幾個(gè)針對(duì)隔離網(wǎng)攻擊的案例。
震網(wǎng)病毒 Stuxnet Worm
著名的震網(wǎng)病毒便利用了USB的方式將病毒傳入隔離網(wǎng)絡(luò),隨后將病毒傳播到網(wǎng)絡(luò)中的其他設(shè)備。在適當(dāng)?shù)臅r(shí)候給工控機(jī)器下發(fā)錯(cuò)誤指令,導(dǎo)致機(jī)器異常直至報(bào)廢。最終震網(wǎng)病毒導(dǎo)致伊朗的核計(jì)劃被迫延遲至少兩年。
水蝮蛇一號(hào) COTTONMOUTH-I
在斯諾登披露的NSA秘密武器中包含了該工具,其內(nèi)部包含了一套 ARMv7 芯片和無(wú)線收發(fā)裝置。當(dāng)它插入目標(biāo)主機(jī)后,植入惡意程序并創(chuàng)建一個(gè)無(wú)線網(wǎng)橋,配套的設(shè)備可通過(guò)RF信號(hào)與其進(jìn)行交互,傳輸命令及數(shù)據(jù)。同樣,它被NSA用于攻擊伊朗的秘密機(jī)構(gòu),從物理隔離的設(shè)備中竊取數(shù)據(jù)長(zhǎng)達(dá)數(shù)年。
1.3 HID攻擊
HID是Human Interface Device的縮寫,由其名稱可以了解HID設(shè)備是直接與人交互的設(shè)備,例如鍵盤、鼠標(biāo)與游戲桿等。不過(guò)HID設(shè)備并不一定要有人機(jī)接口,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備。一般來(lái)講針對(duì)HID的攻擊主要集中在鍵盤鼠標(biāo)上,因?yàn)橹灰刂屏擞脩翩I盤,基本上就等于控制了用戶的電腦。攻擊者會(huì)把攻擊隱藏在一個(gè)正常的鼠標(biāo)鍵盤中,當(dāng)用戶將含有攻擊向量的鼠標(biāo)或鍵盤,插入電腦時(shí),惡意代碼會(huì)被加載并執(zhí)行。
Teensy
攻擊者在定制攻擊設(shè)備時(shí),會(huì)向USB設(shè)備中置入一個(gè)攻擊芯片,此攻擊芯片是一個(gè)非常小而且功能完整的單片機(jī)開(kāi)發(fā)系統(tǒng),它的名字叫TEENSY。通過(guò)TEENSY你可以模擬出一個(gè)鍵盤和鼠標(biāo),當(dāng)你插入這個(gè)定制的USB設(shè)備時(shí),電腦會(huì)識(shí)別為一個(gè)鍵盤,利用設(shè)備中的微處理器與存儲(chǔ)空間和編程進(jìn)去的攻擊代碼,就可以向主機(jī)發(fā)送控制命令,從而完全控制主機(jī),無(wú)論自動(dòng)播放是否開(kāi)啟,都可以成功。
USB Rubber Ducker
簡(jiǎn)稱USB橡皮鴨,是最早的按鍵注入工具,通過(guò)嵌入式開(kāi)發(fā)板實(shí)現(xiàn),后來(lái)發(fā)展成為一個(gè)完全成熟的商業(yè)化按鍵注入攻擊平臺(tái)。它的原理同樣是將USB設(shè)備模擬成為鍵盤,讓電腦識(shí)別成為鍵盤,然后進(jìn)行腳本模擬按鍵進(jìn)行攻擊。
BadUSB
Teensy和橡皮鴨的缺陷在于要定制硬件設(shè)備,通用性比較差。但是BadUSB就不一樣了,它是在“USB RUBBER DUCKY”和“Teensy”攻擊方式的基礎(chǔ)上用通用的USB設(shè)備(比如U盤)。BadUSB就是通過(guò)對(duì)U盤的固件進(jìn)行逆向重新編程,相當(dāng)于改寫了U盤的操作系統(tǒng)而進(jìn)行攻擊的。
BashBunny
可以發(fā)動(dòng)多種payload是這款設(shè)備的一大特色。將開(kāi)關(guān)切換到相應(yīng)payload選擇(上圖中的Switch Position 1/2),將Bash Bunny插入目標(biāo)設(shè)備,觀察LED燈的變化就能了解攻擊狀態(tài)。在硬件方面,設(shè)備中包含1顆四核CPU和桌面級(jí)SSD,Hak5介紹說(shuō)此設(shè)備從插入到攻擊發(fā)動(dòng)只需要7秒。此外,這款Bash Bunny設(shè)備實(shí)際上擁有Linux設(shè)備的各種功能,通過(guò)特定串口可訪問(wèn)shell。絕大部分滲透測(cè)試工具的功能都能在其中找到。
DuckHunter
在Kali Linux NetHunter中提供了該工具。它可以將USB Rubber Ducky的腳本轉(zhuǎn)化為NetHunter 自有的HID Attacks格式,由此我們將刷有Nethunter的Android設(shè)備通過(guò)數(shù)據(jù)線與電腦相連便能模擬鍵盤進(jìn)行輸入。
WHID
WHID就是WiFi +HID的組合,WHID注入器顧名思義就是對(duì)HID攻擊進(jìn)行無(wú)線化攻擊時(shí)的一種注入工具,通過(guò)在USB設(shè)備上提供WiFi功能以供遠(yuǎn)程控制。
>《HID攻擊之TEENSY實(shí)戰(zhàn)》
http://blog.topsec.com.cn/ad_lab/hid%E6%94%BB%E5%87%BB%E4%B9%8Bteensy%E5%AE%9E%E6%88%98/
>《新的U盤自動(dòng)運(yùn)行——BadUSB原理與實(shí)現(xiàn)》
https://security.tencent.com/index.php/blog/msg/74
>《據(jù)說(shuō)是“最先進(jìn)的USB攻擊平臺(tái)”》
http://www.freebuf.com/news/128788.html
> 《DuckHunterHID for mac》
http://www.ggsec.cn/DuckHunterHID.html
> 《WHID注入器:在無(wú)線環(huán)境下實(shí)現(xiàn)HID攻擊的最新利器》
http://www.4hou.com/technology/4565.html
二、 Ghost Tunnel
對(duì)于隔離網(wǎng)絡(luò)的攻擊一般有兩個(gè)步驟:
1. 在目標(biāo)系統(tǒng)植入惡意軟件
2. 建立數(shù)據(jù)通道,(infiltrate & exfiltrate),以便執(zhí)行命令和竊取數(shù)據(jù)。
根據(jù)之前的案例可以看到,任何可以承載數(shù)據(jù)的媒介都是可以用來(lái)建立數(shù)據(jù)通信的通道。Ghost Tunnel便是一個(gè)利用WiFi信號(hào)的隱蔽傳輸通道。
首先,以HID攻擊為例:我們使用BashBunny或者DuckHunter等HID工具將惡意程序植入受害者設(shè)備,比如一臺(tái)Windows筆記本。隨后惡意程序?qū)⑹褂檬芎φ咴O(shè)備的**內(nèi)置無(wú)線通信模塊**與另一臺(tái)由攻擊者控制的設(shè)備建立端到端的WiFi傳輸通道。此時(shí),攻擊者就可以遠(yuǎn)程執(zhí)行命令并竊取數(shù)據(jù)。
演示效果如下:
https://v.qq.com/x/page/a0647p75qrp.html
值得注意的是,Ghost Tunnel指的是通過(guò)利用受害者設(shè)備自身的無(wú)線模塊來(lái)建立傳輸通道的一種方式,其并不僅局限于使用HID攻擊來(lái)植入惡意程序,實(shí)際上以其他方式植入也是可行的。
2.1 優(yōu)勢(shì)
Ghost Tunnel的實(shí)現(xiàn)方式具有這幾個(gè)優(yōu)勢(shì):
– HID設(shè)備只用于植入攻擊代碼,當(dāng)植入完成就可以移除了。(HID攻擊外的其他植入方式也是可以的)
– 沒(méi)有正常的網(wǎng)絡(luò)流量,可以繞過(guò)防火墻檢測(cè)。
– 不會(huì)對(duì)現(xiàn)有的網(wǎng)絡(luò)通信及連接狀態(tài)造成影響。
– 跨平臺(tái)支持。該攻擊可用于任何擁有WiFi模塊的設(shè)備,我們?cè)赪in7、Win10、Mac OSX、Linux上進(jìn)行了測(cè)試。
– 可支持最高256個(gè)受控端.
– 可在50米內(nèi)工作,配合信號(hào)橋接設(shè)備理論上可做到無(wú)限遠(yuǎn)。
2.2 原理
在正常的Wi-Fi通信中,一個(gè)站點(diǎn)必須經(jīng)歷Beacon,Probe,Authentication,Association等過(guò)程后才能建立與接入點(diǎn)的連接,其整個(gè)流程如下圖。
而Ghost Tunnel并沒(méi)有使用正常的Wi-Fi連接,而只用到了Beacon、Probe 幀,如下圖。
為什么用這三個(gè)幀呢?在802.11的狀態(tài)機(jī)中,取決于認(rèn)證和關(guān)聯(lián)的狀態(tài),一共有三個(gè)階段。
在State 1時(shí),客戶端處于Unauthenticated、Unassociated狀態(tài)。而該階段可以使用的802.11幀有以下具體幾種,其中就包含了Probe Request,Probe Response,Beacon幀。
原本它們被使用在無(wú)線網(wǎng)絡(luò)掃描階段。當(dāng)802.11客戶端在掃描可用無(wú)線網(wǎng)絡(luò)時(shí),有兩種掃描方式:
– 主動(dòng)掃描,客戶端主動(dòng)發(fā)送Probe Request,接收由接入點(diǎn)返回的Probe Response。
– 被動(dòng)掃描,客戶端在每個(gè)頻道監(jiān)聽(tīng)AP周期性發(fā)送的Beacon。
總而言之,Ghost Tunnel通過(guò)Probe,Beacon幀來(lái)進(jìn)行通信,并不建立完整的WiFi連接。
首先攻擊者創(chuàng)建一個(gè)具有特殊SSID的AP,攻擊者和受害設(shè)備都使用它作為通信的標(biāo)識(shí)符(而不是常規(guī)WiFi通信中的MAC)。此時(shí),攻擊者通過(guò)解析受害者設(shè)備發(fā)出的Probe幀得到數(shù)據(jù);受害者設(shè)備上的惡意程序?qū)⒔馕龉粽甙l(fā)出的Beacon幀來(lái)執(zhí)行命令并返回?cái)?shù)據(jù)。這便是Ghost Tunnel WiFi隱蔽傳輸通道的秘密。
2.3 更新及開(kāi)源
配合著本次在Black Hat上的分享,我們對(duì)Ghost Tunnel進(jìn)行了以下更新:
– 除了遠(yuǎn)程shell外,還添加了文件下載功能
– 優(yōu)化了傳輸效率
– 可自行添加其他需要的功能
同時(shí),我們將Ghost Tunnel的服務(wù)端與Windows受控端部分進(jìn)行了開(kāi)源:
https://github.com/360PegasusTeam/GhostTunnel,讀者可自行下載編譯安裝,搭建實(shí)驗(yàn)環(huán)境。
2.4 實(shí)現(xiàn)
前面提到,控制端與被控端采用Beacon和Probe Request幀進(jìn)行通信,通信數(shù)據(jù)嵌入到Information Elements 的SSID和Vendor Specific元素中,使用一個(gè)字節(jié)的標(biāo)識(shí)符進(jìn)行數(shù)據(jù)識(shí)別。
在控制端,使用到了aircrack-ng項(xiàng)目中的osdep模塊,并利用一塊具有“監(jiān)聽(tīng)模式”和“包注入”功能的無(wú)線網(wǎng)卡進(jìn)行數(shù)據(jù)收發(fā)。相關(guān)底層原理可參考下圖進(jìn)行了解:
在Windows被控端中,通過(guò)Windows Native WiFi API來(lái)操作Windows設(shè)備的無(wú)線網(wǎng)卡進(jìn)行數(shù)據(jù)收發(fā)。關(guān)于windows的802.11軟件架構(gòu)可參考此圖:
代碼架構(gòu)設(shè)計(jì)
控制端和被控端總體依照數(shù)據(jù)流向采用模塊化設(shè)計(jì)。
控制端:
“`
gt_common.h:數(shù)據(jù)格式等相關(guān)定義
gt_server類:負(fù)責(zé)初始化及總體功能控制
gt_console類:負(fù)責(zé)控制臺(tái)的輸入輸出
edit目錄:hostapd項(xiàng)目關(guān)于console的操作功能
packet目錄:mdk4項(xiàng)目(自家項(xiàng)目)關(guān)于802.11數(shù)據(jù)幀組裝部分的功能
libwifi目錄:aircrack-ng中osdep數(shù)據(jù)收發(fā)功能,kismet wifi網(wǎng)卡控制功能
“`
Windows被控端:
“`
wtunnel類:數(shù)據(jù)收發(fā)功能
data_handler類:數(shù)據(jù)處理及功能
“`
通信數(shù)據(jù)格式如下:
基于傳輸效率的考慮,代碼中并沒(méi)有對(duì)數(shù)據(jù)進(jìn)行確認(rèn)及校驗(yàn),只是對(duì)重復(fù)的數(shù)據(jù)進(jìn)行了過(guò)濾。
數(shù)據(jù)類型定義:
- ```
- #define TUNNEL_CON 0x10 // 建立連接
- #define TUNNEL_SHELL 0x20 // Shell功能
- #define TUNNEL_FILE 0x30 // 文件下載功能
- #define DATA_IN_VENDOR 0x80// 發(fā)送數(shù)據(jù)不超過(guò)32字節(jié),只填充SSID,超過(guò)32字節(jié)會(huì)填充Vendor Specific
- typedef enum _TUNNEL_DATA_TYPE
- {
- TUNNEL_CON_CLIENT_REQ = 0x11,
- TUNNEL_CON_SERVER_RES,
- TUNNEL_CON_HEARTBEAT,
- TUNNEL_SHELL_INIT = 0x21,
- TUNNEL_SHELL_ACP,
- TUNNEL_SHELL_DATA,
- TUNNEL_SHELL_QUIT,
- TUNNEL_FILE_GET = 0x31,
- TUNNEL_FILE_INFO,
- TUNNEL_FILE_DATA,
- TUNNEL_FILE_END,
- TUNNEL_FILE_ERROR,
- }TUNNEL_DATA_TYPE;
- ```
四、 后記
在Ghost Tunnel的實(shí)現(xiàn)中,我們使用到了以下項(xiàng)目的部分代碼,在此對(duì)它們表示感謝。
– Aircrack-ng https://github.com/aircrack-ng/aircrack-ng
– hostapd http://w1.fi/hostapd
– Kismet https://github.com/kismetwireless/kismet
– MDK4 https://github.com/aircrack-ng/mdk4
> PS:MDK4是MDK3項(xiàng)目的新版本,增加了對(duì)5GHz WiFi及其他功能的支持,目前由PegasusTeam維護(hù)。
原文地址: https://www.anquanke.com/post/id/155294