2019年10月30日 星期三

ICMP Backdoor 逆向分析

之前有討論過關於後門(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權限。