由於ICMP報文自身可以攜帶資料,而且ICMP報文是由系統核心處理的,不佔用任何埠,因此具有很高的隱蔽性。
通過改變作業系統預設填充的Data,替換成自己構造的資料,這就是ICMP隱蔽隧道的原理。
通常ICMP隧道技術採用ICMP的ICMP_ECHO和ICMP_ECHOREPLY兩種報文,把資料隱藏在ICMP封包的資料域中,利用ping命令建立隱蔽通道。
進行隱蔽隧道傳輸的時候,被控端(防火牆內部)執行並接受外部攻擊端的ICMP_ECHO封包,攻擊端把需要執行的命令隱藏在ICMP_ECHO封包中,被控端接收到該封包,解出其中隱藏的命令,並在防火牆內部主機上執行,再把執行結果隱藏在ICMP_ECHOREPLY封包中,傳送給外部攻擊端。(本質上就是利用防火牆不禁止ICMP協定的安全漏洞,通過ICMP的請求和應答封包,偽造Ping命令的封包形式,實現繞過防火牆和入侵檢測系統的阻攔。)
優點:
缺點:
這一工具簡單並且便攜。受控端(使用者端)使用C語言實現。只能執行在目標Windows機器上,而主控端(伺服器端)由於已經有C和Perl實現的版本,而且之後又移植到了Python上,因此可以執行在任何平臺的攻擊者機器中。
攻擊機:172.16.159.129/24
靶機:172.16.159.153/24
攻擊機執行命令建立隱蔽隧道連線
靶機執行命令建立隱蔽隧道連線
執行" whoami "命令抓包檢視
Wireshark抓包分析
攻擊機:172.16.159.2/24
靶機:172.16.159.3/24
整體架構:
攻擊機執行命令建立隱蔽隧道連線
觀察路由表
靶機執行命令建立隱蔽隧道連線
觀察路由表
此時攻擊機和靶機之間通過虛擬網路卡tun0建立連線,IP地址為:
攻擊機:10.0.1.1/24
靶機:10.0.1.2/24
在攻擊機執行ssh登陸靶機
抓包物理網路卡eth0,可以發現通訊連線全部變成ICMP協定,所有通訊流量都被封裝在ICMP協定中傳輸
抓包虛擬網路卡tun0,流量仍然為正常的協定通訊
ptunnel 全稱 PingTunnel,Kali下自帶該工具
假設場景,當前已經拿下了一臺外網 Web Linux 伺服器,想通過它利用 ICMP 協定連線內網的一臺已經開啟遠端桌面的 Windows ,網路結構簡化如下:
PC 本機 || || || Kali 攻擊機 172.16.159.2 (外網) || || || Linux Web 跳板機 172.16.159.3 (外網) || 172.16.30.3 (內網) || || Win RDP 目標機 172.16.30.2 (內網)
在 Kali 攻擊機上執行以下命令
ptunnel -p 172.16.159.3 -lp 3389 -da 172.16.30.2 -dp 3389 -x pass
-p 指定跳板機外網IP
-lp 指定本機的監聽埠
-da 指定目標機的內網IP
-dp 指定目標機的埠
-x 設定隧道密碼
在 Linux Web 跳板機上執行以下命令
ptunnel -x pass
之後存取 Kali 攻擊機 172.16.159.2 的 3389 埠就會連線到 Windows RDP 目標機 192.168.30.2 的 3389 埠了,不過實測發現此ICMP隧道建立的通訊速度慢且不夠穩定
抓取 Linux Web 跳板機和 Windows RDP 目標機之間的流量,可以發現流量傳輸的是TPKT協定
(TPKT協定是一個傳輸服務協定,我們常用的RDP協定(Remote Desktop Protocol,Windows的遠端桌面協定)就是基於TPKT)
抓取 Kali Linux 攻擊機和 Linux Web 跳板機之間的流量,可以發現流量傳輸已經變成ICMP協定
2022年HW病毒木馬在反連C2過程中使用的協定呈現出多樣化的趨勢,不再侷限於經典的TCP、HTTP和HTTPS,少量樣本開始使用ICMP隧道和DNS隧道進行通訊。
樣本描述
|
樣本資訊
|
---|---|
Sha256 |
d145e9a2a6e9e904aa2984ae9282d384631f757a978adf24a09dd2600011834a |
SHA1 |
44bacb493e84a14f9f0dc384b0f9648b50dade8e |
MD5 |
70804a1efac34e4f0e24fd0af5286692 |
檔案型別 |
EXE |
檔案大小 |
4.67MB |
檔名稱 |
投訴舉報證據.dоcxㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ ...ㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ .exe |
功能描述 |
後門木馬 |
技術特點 |
Go語言載入器,會將後門樣本釋放本地執行,樣本可進行icmp通訊 |
這是一個使用ICMP協定進行通訊的樣本。樣本外層使用Go語言編寫的載入器,負責將誘餌Word檔案和木馬模組釋放執行。
之後,木馬將在C:\Users\Public目錄下釋放名為svchost.exe木馬並啟動執行。
樣本利用ICMP協定同C2進行通訊,ICMP協定中的data欄位可寫入任意自定義資料,樣本會將上線資料填充1024個位元組放在ICMP協定的data欄位,並且返回的ICMP封包的data欄位也是固定的1024個位元組。
C2會對接收的ICMP流量進行判斷,如果data資料不符合其格式,將不會發迴響應包。在接收到到響應後,樣本會基於C2返回的資料執行不同的功能。