iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
1
Security

逆向工程 – 從入門到放棄系列 第 30

Day30 - 逆向 WannaCry 病毒,想哭病毒?

惡名昭彰的 WannaCry 讓 Windows 使用者欲哭無淚。今天來逆向 WannaCry,看這隻病毒到底有什麼實際行為?為什麼新聞說有人買下特定的網域,就可以停止 Windows 免於被 WannaCry 加密?今天,就讓我們來一探究竟!

實際感染

透過 VMWare 建立一台 Windows (Windows 8.1) 虛擬機,跑跑看 WannaCry。
把它封閉在內網裡(這裡直接將 Network Adapter 關閉)。WannaCry 差不多30秒就把檔案加密完畢。

WannaCry 跳出的視窗(如下圖):
2020/10/21 16:27:21 前若沒有付錢,檔案就會被刪光。

所有檔案都被加密(如下圖):

居然還有貼心小服務,點下去後可以幫你解密部分檔案。

分析行為

VirusTotal

先丟上 VirusTotal,果不其然紅色警報大作。基本上大部分防毒軟體都能偵測到。

網路流量

發現它對 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/ 發起 DNS 解析與 HTTP request。

被修改的檔案

被修改的 Registry Keys Set

逆向 WannaCry

透過 IDA Pro 進行逆向。

F5 一鍵逆向

反組譯後,下圖就可以回答上述新聞的問題。(為什麼有人買下特定的網域,就可以停止 Windows 免於被 WannaCry 加密?)

我們可以發現,病毒執行後開始請求網路(第23行的 InternetOpenUrlA,而請求網址為 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/[攻擊者預設無此網址,因此若有網路流量,惡意程式自身判定自己在沙箱被分析,因此不執行惡意行為。] Why 有網路流量就不攻擊?為了觀察惡意程式的網路行為,資安人員會 response 惡意程式網路流量)

所以我們不難發現,若有人購買http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com/並對 HTTP Request 提供 Response。那惡意程式成功連線後,就會執行以下 InternetCloseHandle(v4)、InternetCloseHandle(v5),因而不執行攻擊。

實際連接後,如下圖:
發現被 Sinkholed 了XD

Sinkholed 是什麼?

A sinkhole is basically a way of redirecting malicious Internet traffic so that it can be captured and analysed by security analysts.

簡單來說,這個網址已經受到資安人員的監控。

Reference

我們好奇的是,WannaCry 到底是如何感染受害者電腦?因此我們點進去 sub_408090 這個 function (如下圖) 準備一探究竟並拿出核心的行為出來講解。發現它開啟了一些服務(如第14、18行),並且呼叫了其他 function(如第13 、第28行)

我們可以看到第12行有個判斷式(如下圖),若輸入參數小於2,回傳 sub_407F20 的函式。若否,開始執行第13行以下的行為(執行 WannaCry 病毒的主要惡意行為)。

我們好奇上述輸入參數小於2的時候之行為,於是進去 sub_407F20 該 function 後,發現它又呼叫了兩個 function。分別是:sub_407C40 與 sub_407CE0。我們先來觀察 sub_407C40的行為(如下圖)

透過組合語言(如下圖)來觀察 sub_407C40。可以看到一些可視字串比方說 %s -m security、mssecsvc2.0 等關鍵字。簡單來說,若上述輸入參數小於2,WannaCry 會安裝一個名為 mssecsvc2.0 的服務,而其顯示的名稱為 Microsoft Security Center(2.0) Service,接著 WannaCry 自帶兩個參數並執行它。

接著觀察 sub_407CE0的行為(如下圖)。從下圖第可以發現,該函式釋出 tasksche.exe,而 tasksche.exe 為主要加密程式。第48行為讀取編號1831(0x727)的資源檔案,並在第72行建立taskshe.exe 之檔案,並在第75行將資源檔案寫入tasksche.exe。

下圖為上圖之延續

透過組合語言(如下圖),能看到該程式執行 tasksche.exe 的過程。

接著觀察 sub_408000的行為(如下圖)。我們有興趣的是其呼叫的程式:sub_407BD0。(第5至11行是設定)

觀察下圖:sub_407BD0,發現又有三個函式被呼叫。分別是 sub_407B90、sub_407720、sub_407840。

我們首先觀察 sub_407720。該函式做的是內網擴散。下圖第27行 的sub_409160 即建立內網所屬網段之目標清單。第40行開始攻擊目標清單。

接著觀察 sub_407840(如下圖)。該函式做的是外網擴散。該函式隨機產生外網網址、並對該 445 port 進行練線。若連線成功,則發動 SMB 弱點攻擊。

接著觀察 sub_407480(如下圖),發現它在掃描 445 port 並攻擊。

以上是逆向 WannaCry 前置作業與執行內、外網網路擴散的惡意行為。加密行為等等因篇幅有限,就不放上來了。若讀者有興趣,歡迎參考下列 Reference。

WannaCry 實際行為

WannaCry 的程式邏輯還蠻複雜的。透過下張圖,可以更清楚它的完整運作邏輯與感染途徑。

Reference-1
Reference-2
Reference-3

結論

今天是鐵人賽最後一天,希望這30天的分享對讀者有所幫助。我們再見!


上一篇
Day29 - 總結推薦逆向資源
系列文
逆向工程 – 從入門到放棄30

尚未有邦友留言

立即登入留言