前沿拓展:
2018 年 4 月,在荷蘭阿姆斯特丹 Hack In The Box 安全會議上,我們分享了一個關于隔離網攻擊技術的議題——Ghost Tunnel: Covert Data Exfiltration Channel to Circumvent Air Gapping(適用于隔離網絡的 Wi-Fi 隱蔽傳輸通道)。
Ghost Tunnel 是一種可適用于隔離環(huán)境下的后門傳輸方式。一旦 payload(攻擊載荷)在目標設備釋放,Ghost Tunnel 可在用戶無感知情況下對目標進行控制并將信息回傳到攻擊者的設備。相比于現(xiàn)有的其他類似研究(如 WHID,一種通過 Wi-Fi 進行控制的 HID 設備),Ghost Tunnel 不創(chuàng)建或依賴于任何有線、**網絡,甚至不需要外插任何硬件模塊。
繼該會議上分享后,同年 8 月 Ghost Tunnel 再次入選了 Black Hat USA 2018 Arsenal。
1. 常見的遠控木馬上線方式
說起遠控木馬,大家可能會想到一串耳熟能詳?shù)拿Q,如灰鴿子、冰河、byshell、PCShare、gh0st等。在此,我們以上線方式的不同來對遠控木馬進行簡單分類,詳見《木**前世今生:上線方式的發(fā)展及新型上線方式的實現(xiàn)》(網址為 http://www.freebuf.com/articles/terminal/77412.html)。
主動連接型。被控端開啟特定端口,主控端通過被控端的 IP 及端口連接到被控端,該類型有3389 遠程桌面、VNC 遠程桌面等遠控方式。反彈連接型。由于主動連接方式不適用于許多攻擊目標所處的內網環(huán)境,因此許多木馬采用反彈連接的方式進行上線。與主動連接的方式相反,反彈連接是由主控端**特定端口,被控端執(zhí)行木馬后反向連接主控端。由于該方式的適用性更廣,因此大部分木馬都采用這種方式上線,如利用 FTP 上線、DNS 上線等,如圖 2-118 所示。
通過第三方域名型。出于隱蔽性或反**的目的,有些新型木馬采用第三方網站來進行上線,例如將知名博客類網站的文章內容及評論區(qū)、QQ 空間、微博、推特的推送內容甚至 QQ 個性簽名作為上線地址,如圖 2-119 所示。利用知名網站的好處是可以繞過某些防火墻的白名單限制。
其實,Ghost Tunnel 也可以理解為一種木**上線方式,只是它更針對于隔離網絡的場景。
2. 什么是隔離網閘
簡單來說,隔離網閘(air gapping)是一種用于保護特定網絡的物理隔離安全措施,被用來防止利用網絡連接實施入侵行為的發(fā)生。
隔離網閘的常見原理為:① 切斷網絡之間的通用協(xié)議連接;② 將數(shù)據(jù)包分解或重組為靜態(tài)數(shù)據(jù);③ 對靜態(tài)數(shù)據(jù)進行安全審查,包括網絡協(xié)議檢查和代碼掃描等;④ 確認后的安全數(shù)據(jù)流入內部單元; ⑤ 內部用戶通過嚴格的身份認證機制獲取所需數(shù)據(jù)。隔離網閘經常被使用在涉密網與非涉密網之間。
攻擊者無論是想利用**作系統(tǒng)、應用軟件還是想利用通信協(xié)議的漏洞,都需要通過網絡觸碰目標主機,因此攻擊者在網絡隔離的環(huán)境中就很難實施攻擊了。不過凡事沒有絕對,利用惡意 U** 就是一種具有可**作性的攻擊方式,如震網**(Stuxnet Worm)、水蝮蛇一號(COTTONMOUTH-I)就是針對隔離網攻擊的經典案例。
(1) 震網**
著名的震網**利用 U** 將**傳入隔離網絡。**隨后會逐漸傳播到網絡中的其他設備上,并在適當?shù)臅r候給工控設備(用于工業(yè)自動化控制的設備)下發(fā)錯誤指令,導致設備異常直至報廢。據(jù)相關媒體披露,震網**導致伊朗的核計劃被迫延遲至少兩年。
(2) 水蝮蛇一號
在**登披露的 NSA 秘密武器中包含了該工具,水蝮蛇一號的內部包含了一套 ARMv7 芯片和**收發(fā)裝置。當它插入目標主機后會植入惡意程序并創(chuàng)建一個**網橋,配套的設備可通過 RF 信號與其進行交互并傳輸命令和數(shù)據(jù)。同樣,它被 NSA 用于攻擊伊朗的秘密機構,從物理隔離的設備中竊取數(shù)據(jù)長達數(shù)年。
3. Ghost Tunnel 的應用
對于隔離網絡的攻擊一般有兩個步驟:
① 在目標系統(tǒng)中植入惡意軟件;
② 建立數(shù)據(jù)通道(infiltrate 和exfiltrate),以便執(zhí)行命令和竊取數(shù)據(jù)。
根據(jù)之前的案例可以知道,任何可承載數(shù)據(jù)的媒介都可以用來建立數(shù)據(jù)通信的通道。Ghost Tunnel便是一個利用 Wi-Fi 信號的隱蔽傳輸通道。
以 HID 攻擊為例,可以使用 BashBunny 或 DuckHunter 等 HID 工具(將在 6.1 節(jié)中介紹)將惡意程序植入受害者設備,隨后惡意程序將使用受害者設備的內置**通信模塊與另一臺由攻擊者控制的設備建立端到端的 Wi-Fi 傳輸通道。此時,攻擊者就可以遠程執(zhí)行命令并竊取數(shù)據(jù)。
值得注意的是,Ghost Tunnel 并不僅局限于使用 HID 攻擊來植入惡意程序,用其他方式植入也是可行的。
Ghost Tunnel 的實現(xiàn)方式具有以下幾個優(yōu)勢。
HID 設備只用于植入攻擊代碼,當植入完成后就可以移除了(HID 攻擊外的其他植入形式也是可以的)。沒有正常的網絡連接,可以繞過防火墻。不會對現(xiàn)有的網絡通信及連接狀態(tài)造成影響??缙脚_支持。該攻擊可用于任何擁有Wi-Fi 模塊的設備,已在Windows 7、Windows 10、Mac OS X上進行測試??稍趲资變裙ぷ?,配合信號橋接設備后,理論上可做到無限遠。
(1) 原理
在正常的 Wi-Fi 通信中,一個站點必須經歷 Beacon、Probe、Authentication 及 Association 等過程后才能建立與接入點的連接,其整個流程如圖 2-120 所示。
Ghost Tunnel 并沒有使用正常的 Wi-Fi 連接,而只用到了其中前三步,如圖 2-121 所示。
為什么用這 3 個幀呢?在 802.11 的狀態(tài)機中,取決于認證和關聯(lián)所處的狀態(tài)一共分為 3 個階段,如圖 2-122 所示。
在階段 1(State 1)時,客戶端處于 unauthenticated 和 unassociated 狀態(tài)。而該階段可以使用的 802.11 幀有如圖 2-123 列舉的幾種,其中就包括了 Probe Request 幀、Probe Response 幀和 Beacon 幀。
總而言之,Ghost Tunnel 通過 Probe 幀和 Beacon 幀進行通信,并不建立完整的 Wi-Fi 連接。第一攻擊者創(chuàng)建一個具有特殊 SSID 的 AP,攻擊者和受害設備都使用它作為通信的標識符(而不是常規(guī)Wi-Fi 通信中的 MAC)。此時,攻擊者通過解析受害者設備所發(fā)出的 Probe Request 幀得到數(shù)據(jù),受害者設備上的惡意程序將解析攻擊者發(fā)出的 Beacon 幀及 Probe Response 幀來執(zhí)行命令并返回數(shù)據(jù),如圖 2-124 所示。這便是 Ghost Tunnel Wi-Fi 隱蔽傳輸通道的秘密。
(2) 實現(xiàn)
前面提到,控制端與被控端采用 Beacon 幀和 Probe Request 幀進行通信,通信數(shù)據(jù)嵌入到 Information Elements 的 SSID 或 Vendor Specific 元素中,使用 1 字節(jié)的標識符進行數(shù)據(jù)識別,如圖 2-125 和圖 2-126所示。
在控制端,使用了 Aircrack-ng 項目中的 osdep 模塊,并利用一塊具有“**模式”和“包注入” 功能的**網卡進行數(shù)據(jù)收發(fā)。相關底層原理可參考圖 2-127。
在 Windows 被控端,通過 Windows Native WiFi API 來**作 Windows 設備的**網卡進行數(shù)據(jù)收發(fā)。關于 Windows 的 802.11 軟件架構可參考圖 2-128。
(3) 代碼架構設計
配合著在 Black Hat 會議上的分享,我們將 Ghost Tunnel 的服務端與 Windows 受控端進行了開源(地址為 https://github.com/PegasusLab/GhostTunnel),讀者可自行下載、編譯、安裝并搭建實驗環(huán)境,命令行界面如圖 2-129 所示。
控制端和被控端依照數(shù)據(jù)的流向按照模塊化的方式進行設計,如圖 2-130 所示。
控制端和被控端的代碼文件及目錄說明如下:
控制端
gt_common.h:負責數(shù)據(jù)格式等相關定義。gt_server 類:負責初始化及總體功能控制。gt_console 類:負責控制臺的輸入輸出。edit 目錄:hostapd 項目關于console 的**作功能。packet 目錄:mdk4 項目關于802.11 數(shù)據(jù)幀組裝部分的功能。libwifi 目錄:Aircrack-ng 中osdep 數(shù)據(jù)收發(fā)功能,以及Ki**et WiFi 網卡控制功能。
Windows 被控端
wtunnel 類:數(shù)據(jù)收發(fā)功能。data_handler 類:數(shù)據(jù)處理功能。
通信數(shù)據(jù)格式如下:
typedef struct _tunnel_data_header
{
unsigned char flag; // 數(shù)據(jù)標志
unsigned char data_type; // 數(shù)據(jù)類型
unsigned char seq; // 發(fā)送數(shù)據(jù)包編號
unsigned char client_id; // 被控端ID
unsigned char server_id; // 控制端ID
unsigned char length; // 數(shù)據(jù)長度
}tunnel_data_header;
基于傳輸效率的考慮,代碼中并沒有對數(shù)據(jù)進行確認及校驗,只是對重復的數(shù)據(jù)進行了過濾。數(shù)據(jù)類型定義如下:
#define TUNNEL_CON 0x10 // 建立連接
#define TUNNEL_SHELL 0x20 // shell 功能
#define TUNNEL_FILE 0x30 // 文件下載功能
#define DATA_IN_VENDOR 0x80 // 發(fā)送數(shù)據(jù)不超過32 字節(jié),只填充SSID
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;
U** 攻擊平臺——P4wnP1 項目(https://github.com/mame82/P4wnP1)受到了Ghost Tunnel 啟發(fā),在新版本種加入了類似的利用方式,如圖2-131 所示。
本文節(jié)選自《黑客大揭秘:近源滲透測試》
本書主要講解了當滲透測試人員靠近或位于目標建筑內部,如何利用各類**網絡、物理接口、智能設備的安全缺陷進行近源滲透測試。書中第一以Wi-Fi舉例,介紹基于**網絡的安全攻防技術及實例測試,包含對家庭、企業(yè)級**環(huán)境的常見滲透測試方法,**入侵防御解決方案等。
拓展知識:
原創(chuàng)文章,作者:九賢生活小編,如若轉載,請注明出處:http://m.xiesong.cn/128567.html