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

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