近期,觀成科技安全研究團隊在現網中檢測到了利用Gost工具實現加密隧道的攻擊行為。Gost是一款支持多種協議的隧道工具,使用go語言編寫。該工具實現了多種協議的隧道通信方法,例如TCP/UDP協議,Websocket,HTTP/2,QUIC,TLS等。
2022年11月,Gost更新了V3新版本,在新版本中新增了ICMP隧道功能。ICMP隧道是利用ICMP協議的Echo類型報文(ping命令所采用)進行數據傳輸,Gost在ICMP之上利用QUIC協議來實現安全可靠的數據傳輸,因此該ICMP隧道可以看作是QUIC-over-ICMP數據通道。QUIC協議是一種加密協議,所以該隧道也是一種加密隧道。
隧道原理分析
隧道的搭建需要客戶端和服務端兩端,客戶端負責接收socks5代理協議,解析后將數據封裝成ICMP協議發送到服務端,服務端接收后解析成原始流量并轉發。
圖1:隧道示意圖
ICMP隧道傳輸的數據,由兩部分構成:MessageHeader和QUIC數據。MessageHeader的長度固定10個字節,前四個字節存放magicNumber,默認為固定字符串“GOST”,最后兩字節存放后續載荷的長度。
圖2:MessageHeader構成
QUIC協議是一種基于UDP的低時延的互聯網傳輸層加密協議,和TLS類似,使用加密握手來完成密鑰交換。ICMP隧道中的QUIC數據是基于quic-go包實現的。
圖3:QUIC實現
在ICMP隧道的流量數據中,緊隨MessageHeader之后,就是QUIC數據。隧道中傳輸的QUIC數據舍棄了QUIC協議的公共包頭,直接傳輸QUIC協議的幀包。根據幀包的格式解析,第一個字節為幀類型,用來解釋幀包的屬性。下圖流量中,幀類型為0xC3(11000011B),最高位“1”表示這是一個STREAM幀,用來進行數據傳輸。
圖4:STREAM幀包
下圖數據包中的幀類型為0x4D(01001101B),最高兩位“01”表示這是一個ACK幀,用來保證數據傳輸的可靠性。
圖5:ACK幀包
QUIC協議是一種加密協議,通過流量無法直接觀察數據內容。但是從流量數據包的長度上看,ACK幀的長度遠小于STREAM幀,而常規的ICMP協議的Echo類型報文數據長度往往都是相同的。
圖6:數據包長度特征
總結
利用Gost工具搭建ICMP隧道,攻擊者可以將攻擊流量隱藏在隧道之中,從而規避流量監測設備,大幅度降低被發現的可能性。目前,越來越多的攻擊者利用ICMP、DNS等協議來實現隱蔽隧道加密通信,我們將會保持對此類工具的密切跟蹤和研究。