天天看點

蠕蟲勒索軟體WannaCrypt0r的行為分析

來科銳學習一年出頭,x86 平台剛好學完,這個周末遇到這個病毒爆發,花了點時間分析了下這個樣本,發出來與看雪壇友分享。

一) 樣本大緻行為預覽

該樣本執行後會随機向網際網路計算機發送eternalblue緩衝區溢位程式,并釋放勒索加密程式,加密計算機上.doc 、.ppt、.jpg、.sqlite3、.mdb、.bat、.der等多種類型的檔案,修改檔案字尾為.wncry類型,彈出視窗勒索使用者,要求一定時間内交出贖金,才能恢複檔案。

二) 樣本行為分析

2.1 原始樣本分析

定位到winmain後,可以發現在winmain入口處發現,原始樣本會嘗試連接配接一個非常沒有規律的域名:http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com。

蠕蟲勒索軟體WannaCrypt0r的行為分析

樣本會通過是否能成功連接配接該域名,來決定是否展開後續行為。

蠕蟲勒索軟體WannaCrypt0r的行為分析

如上圖所示,若能夠成功連結,則程式不展開相關行為,直接退出。否則,展開相關行為。

其中的sub_408090函數内部,在一個條件判斷中分了兩個功能子產品:

蠕蟲勒索軟體WannaCrypt0r的行為分析

其中,條件成立的代碼塊是啟動服務功能等行為展開,程式第一輪并不會進入;當程式第一次啟動時,執行的是條件不成立時的子產品(上圖中的sub_407f20),其功能主要為建立服務、釋放并執行勒索的主體程式tasksche.exe /i。

建立服務過程:

蠕蟲勒索軟體WannaCrypt0r的行為分析

該樣本建立一個服務名為"mssecsvc2.0",服務說明為"microsoft security center (2.0) service"的服務。

并在後續的行為中啟動自身。

該服務的功能為:随機掃描網際網路ip,利用smb的核心級漏洞(cve-2017-0143~cve-2017-0148),傳播自身。這個漏洞的利用我自己還在分析,分析出來後會放在後續文章中。

原始樣本,會從資源中加載、釋放一個名為tasksche.exe的檔案,并且以tasksche.exe /i的方式啟動。

蠕蟲勒索軟體WannaCrypt0r的行為分析
蠕蟲勒索軟體WannaCrypt0r的行為分析

接着,我分析了 tasksche.exe,它的行為如下

2.2 tasksche.exe 的行為分析

tasksche.exe 啟動後,首先,會将自身拷貝到 c:\intel\lgxbrzjmuzoytl531。

蠕蟲勒索軟體WannaCrypt0r的行為分析

接着,tasksche.exe 會建立服務,服務名及說明均為"lgxbrzjmuzoyt1531",然後以服務的方式再啟動自身。

蠕蟲勒索軟體WannaCrypt0r的行為分析
蠕蟲勒索軟體WannaCrypt0r的行為分析

以服務的方式啟動後,tasksche.exe 會以建立程序的方式執行指令:

蠕蟲勒索軟體WannaCrypt0r的行為分析

attrib.exe +h

icacls.exe . /grant everyone:f /t /c /q

這兩個指令用于修改檔案屬性相關的權限。

接着,會讀取前期釋放的一個名為 t.wnry 檔案,并對其中的内容進行解密,解密後的内容為一個 dll 檔案,但是該dll檔案并不會被寫入磁盤中,而是在記憶體中直接執行。

蠕蟲勒索軟體WannaCrypt0r的行為分析
蠕蟲勒索軟體WannaCrypt0r的行為分析

我将該 dll 從記憶體中 dump 出(取名為 crypt.dll),發現包含了勒索軟體的加密功能。對其進行了分析。

2.3 crypt.dll 樣本分析

crypt.dll 隻有一個自定義的導出函數 taskstart,該導出函數是其行為展開的入口。

蠕蟲勒索軟體WannaCrypt0r的行為分析

 進入taskstart後,該樣本會先加載kernel32,動态擷取後續需要的api。

蠕蟲勒索軟體WannaCrypt0r的行為分析

建立互斥體"mswinzonescachecountermutex",用于判斷自身重入問題。

蠕蟲勒索軟體WannaCrypt0r的行為分析

接着,該樣本連續建立了多個線程,

蠕蟲勒索軟體WannaCrypt0r的行為分析

他們的功能分别為:

l 将tasksc.exe加入到hkcu\software\microsoft\windows\currentversion\run項,用于開機自啟動

l 周遊驅動器,并檢查是否有u盤等移動存儲插入

l 循環調用taskdl.exe,暫未詳細分析

l 寫入并執行vbs腳本,暫未詳細分析

周遊磁盤并加密檔案。

蠕蟲勒索軟體WannaCrypt0r的行為分析

該樣本不會加密所有的檔案或檔案夾(否則可能會破壞系統導緻系統無法啟動,或者有些檔案的價值并不大)。其将要感染的檔案,以字尾名判斷,集中放在程式中,以下是部分截圖:

蠕蟲勒索軟體WannaCrypt0r的行為分析

過濾掉特定的檔案夾及非指定字尾名的檔案之後,程式會對檔案進行加密。其加密流程如下,它的加密思路并不是直接用長密鑰的rsa進行全部加密,可能處于效率的考慮,它的加密思路如下:

1. 被感染使用者的檔案,被aes加密,aes加密所使用的key,是根據每個檔案随機生成的。随機生成的key,之後會被下一步的rsa 2048加密。

2. 樣本在針對每一台機器上,會随機生成一對rsa 2048密鑰,其中公鑰(儲存在00000000.pky中)用于加密上一步的aes key,私鑰将被加密後存在檔案(00000000.eky)中,具體加密方式見下一步。

3. 上一步的rsa私鑰,會被另一個rsa 2048公鑰加密(記作 rsa2),該rsa2的私鑰僅勒索者本人知道。

蠕蟲勒索軟體WannaCrypt0r的行為分析

知道以上思路後,就比較容易了解該樣本的加密流程了:

1. 建立檔案,新檔案名為原始檔案名.wanacryt(t表示臨時檔案,用于臨時處理檔案加密)

2. 在新的檔案頭部先寫入8位元組的wanacry!加密标志

3. 寫入4位元組的長度辨別,表示後面緊跟的加密後的檔案加密密鑰的長度

4. 寫入256位元組長度的加密後的檔案加密密鑰(該密鑰解密後為16位元組長度的字元串,使用該字元串aes加密檔案)

5. 寫入4位元組長度的 勒索者作者定義的類型,不為4的檔案類型記錄到f.wnry檔案中,用于後期免費解密。

6. 寫入8位元組長度的原始檔案長度

7. 使用随機生成的16位位元組的密鑰利用aes加密算法進行加密,并寫到上述内容之後。

8. 修改新檔案的檔案時間為源檔案的時間。

9. 删除原檔案,并将新檔案重命名為wanacry。

10. 若檔案為可免費恢複的檔案,則将檔案名記錄到f.wnry檔案中。

因為涉及到的代碼量較多,不友善截圖,感興趣的可以去看我附帶的idb檔案。我自己也對該樣本的算法進行了還原,寫成了cpp檔案,供大家參考。

本文轉自看雪學院,作者是白小菜

繼續閱讀