1.隧道介紹
Chisel是一個快速穩定的TCP/UDP隧道工具,該工具基于HTTP實現,并通過SSH加密保證通信安全。Chisel可以進行端口轉發、反向端口轉發以及SOCKS流量代理,使用Go語言編寫,具備較好的跨平臺特性。該工具的主要用于繞過防火墻,也可以用于向網絡中提供安全終端節點。
實戰對抗中,攻擊者獲得資產控制權后,需要建立失陷資產與外部控制端的通信通道,為了有效躲避IPS、WAF、全流量檢測等安全設備,常使用加密通道、隱蔽隧道等。Chisel可以將木馬回連的通信流量隱藏在HTTP協議中,并通過SSH進行加密,保證了通信流量的隱蔽性和安全性。該工具還支持websocket協議,有效地提升了通信信息的交換效率。
2.隧道原理分析
隧道的搭建需要客戶端和服務端兩端,客戶端負責接收待轉發的數據,解析后將數據利用ssh進行加密、封裝成HTTP/WebSocekt(s)協議發送到服務端,服務端接收后解析成原始流量并轉發。
圖 1 隧道示意圖
隧道搭建時,客戶端會率先向服務端建立WebSocket連接,在WebSocket協議升級中,包含隧道工具的版本信息“chisel-v3”。利用該特征可以對隧道流量進行有效檢出,但有經驗的攻擊者往往會抹除該特征,規避檢測。
圖 2 WebSocket協議升級
WebSocket協議是Http協議的補充,相較于Http協議,WebSocekt實現了長連接、全雙工通信通道,具有更高效的通信效率。chisel隧道中的WebSocket協議是基于”Github.com/gorilla/websocket”包實現的。
圖 3 WebSocket實現
WebSocke連接建立后,chisel工具會在WebSocket信道內進行SSH加密協商,協商中SSH的版本信息為“SSH-chisel-v3-server”。和WebSocke升級協議類似,其中包含了chisel工具的特征字符串,可以通過該特征實現檢測,但該特征也較易被攻擊者抹去。
chisel工具中實現SSH協商是基于GO語言的默認庫”golang.org/x/crypto/ssh”,這也導致SSH協商產生的指紋為GO語言的默認指紋。
圖 4 SSH加密協商
SSH加密協商后,chisel客戶端會持續監聽,接收待轉發流量,ssh加密后發送到服務端。目前該工具支持的轉發協議包括:SOCKS、UDP、TCP。
圖 5 等待轉發流量
3.隧道檢測
根據分析結果,我們通過利用主動探測、特征匹配、異常HTTP協議篩查、SSH指紋篩查等多種檢測方法,實現了對chisel隧道的有效檢測。
圖 6 chisel檢出結果
4.總結
利用chisel工具搭建HTTP隧道,攻擊者可以將攻擊流量加密隱藏在隧道之中,從而規避流量監測設備,大幅度降低被發現的可能性。目前,越來越多的攻擊者開始利用隱蔽隧道,來提高攻擊的隱蔽性。建議安全人員保持對此類工具的密切跟蹤研究,持續更新和學習新的檢測技術和工具,力爭在這類隱蔽隧道流量檢測方面做出突破。