ICMP Backdoor 逆向分析

Xtutlab
5 min readOct 13, 2020

--

之前有討論過關於後門(Backdoor)/木馬(Trojan)的分析,也說明它有兩種運行的方式,大多數惡意程式會使用Reverse Backdoor來建立未授權的遠端連線到駭客的中繼站,那麼它並不會馬上建立Reverse Backdoor的連線,所以需要使用HTTP(80)或SSL(443)來當作媒介,只要駭客傳遞給惡意程式指令,就能建立Reverse Sell(未授權的遠端連線),這樣就很難發現當前系統有被執行Reverse Sell,那麼最常當作媒介不外乎就是HTTP和SSL,這兩種網路協定,因此這篇就討論另一個有趣的協定ICMP,透過它來當作傳遞執行Reverse Sell的指令。

ICMP(Internet Control Message Protocol)的實作就是ping指令,它是為了確認遠端系統是否有正常的網路連線,如果連線正常,它就會回應一個活著的訊息給發送端。

一、ICMP Protocol

首先建立socket連線,那麼選擇的協定就是ICMP,代表值是1。

二、獲取要側錄的網卡IP位址

要在側錄封包(Packet)前需要綁定網卡上的IP,這樣就能側錄此張網卡上的封包(Packet),可以透過gethostbyname(藉由電腦名稱獲取網卡上的IP位址)獲取網卡上的IP,參數name是傳入電腦名稱。

三、bind IP and Port

bind的第二個參數name是儲存sockaddr結構,裡面是存放要綁定的IP和Port,那麼IP就是剛才利用gethostbyname獲取的,如果只是側錄封包(Packet),因此Port就填0就好。

四、WSAIoctl設置監控網卡上所有ICMP封包(Packet)

將WSAIoctl的第二個參數 dwIoControlCode設置為SIO_RCVALL,代表值是0x98000001,這樣設置完成就能攔截網卡上的所有ICMP封包(Packet)。

五、ICMP Packet Structure

從IP封包(Packet)的Source Address能獲取駭客中繼站的來源IP,然後Port可以利用ICMP的緩衝區長度來取決於連線到中繼站的Port(ping能設置ICMP的緩衝區長度要多少,就能達到連線任意Port)。

在Linux環境下要設定ICMP的緩衝區長度,要透過ping指令的-s參數,就能設置想要的長度。

六、獲取ICMP緩衝區長度

全部的封包(Packet)長度減去IP和ICMP的長度就是緩衝區的長度。

七、ReverseShell

獲取駭客中繼站IP和緩衝區長度(當作Port),然後傳入ReverseShell,就能成功連線到駭客的中繼站。

八、實作結果

駭客中繼站系統 — remnux (Linux環境)

駭客中繼站IP — 192.168.65.6

受害者系統 — Windows 7 x64

受害者IP — 192.168.65.5

受害者的電腦有被植入ICMP Backdoor,只要我們使用ping指令就能觸發Reverse Sell連線到駭客中繼站。參數-s 9999使設置緩衝區的長度(連線Port),另一個參數192.168.65.5是受害者的IP。

Reverse Sell成功連線到nc上的Port 9999了,並且獲取Windows nt authority\system權限。

更多技術文章

https://xtutlab.blogspot.com

https://www.facebook.com/Xtutlab-%E6%95%99%E5%AD%B8%E5%AF%A6%E9%A9%97%E5%AE%A4-345668095840741/

--

--

Xtutlab
Xtutlab

Written by Xtutlab

大家好,我是Shin,曾任職於行政院國家資通安全會報技術服務中心(NCCST),參與106金盾獎決賽出題以及在HoneyCon 2015、2016擔任Workshop講師,熱愛駭客技術、程式設計以及電腦科學,並且會不定期發表駭客技術教學文章,希望大家會喜歡!

No responses yet