1. 程式人生 > 其它 >MBR勒索木馬再度來襲:GoldenEye分析

MBR勒索木馬再度來襲:GoldenEye分析

早在今年上半年,破壞力極強的修改MBR並加密MFT (Master File Table)的勒索木馬Petya就引起了防毒廠商的高度關注,然而在今年下半年360白名單分析組又捕獲了該作者最新的勒索木馬“GoldenEye”。 半年以來該木馬作者與防毒軟體的對抗持續升級,新的勒索木馬的查殺難度顯著增強。

一、 主要流程

圖1 GoldenEye木馬流程圖

二、 Shellcode部分

GoldenEye為了偽裝自己,在微軟的開原始碼ZoomIt中嵌入了惡意的ShellCode。

圖2 GoldenEye中微軟開源的ZoomIt相關字串

ShellCode經過多層SMC解密出GoldenEye主體,並PE Loader執行。

圖3 ShellCode解密出GoldenEye的程式碼

接著解密Loader的xxxx區段,裡面包含Petya以及提權DLL(elevate_x86.dll/elevate_x64.dll),並動態載入API。

圖4 解密Loader的xxxx區段

三、 偽裝功能

如果主程式不處於%AppData%目錄下,則執行偽裝功能,否則執行加密功能。

圖5 判斷程式路徑執行不同功能

通過將自己偽裝成系統檔案來迷惑使用者。

圖6 將自身複製到%appdata%UUIDrsvp.exe中

其中rsvp.exe是由FindFirstFileA匹配以下模式來獲得的任一系統檔名:

system32w*w.exe、 l*x.exe、m*p.exe、l*h.exe、a*r.exe、g*d.exe、f*i.exe、a*v.exe、o*i.exe、y*n.exe、l*h.exe、h*q.exe、p*b.exe、m*d.exe

圖7 FindFirstFileA查詢匹配的任一系統檔案

UuidCreate建立隨機Uuid,如圖6中的{0a993d81-16ef-454e-84a0-4cf182e67159}。

圖8 UuidCreate建立隨機UUID

呼叫UpdateResourse將正常系統檔案版本資源資料替換給GoldenEye,設定GoldenEye檔案時間和kernel32.dll一致。

圖9 GoldenEye獲取正常系統檔案版本資源更新到拷貝的檔案

建立程序執行偽裝後的GoldenEye。

圖10 呼叫偽裝後的GoldenEye

四、 選擇Payload

首先解密出暗網的網址以及使用者標識KEY,暗網網址+使用者標識Hash的前8位就是使用者支付贖金的網址。

圖11 GoldenEye暗網網址的相關生成演算法

然後通過VerifyVersionInfoW(系統版本)以及GetTokenInformation(管理員許可權)來決定執行流程,如果擁有管理員許可權則執行Petya,否則執行Mischa。

通過硬碟物理序列會生成兩個hash字串,作為互斥量的名稱。

互斥量的作用是為了防止同一加密流程被重複執行。

圖12 判斷執行流程

五、 Petya模組

圖13 Petya執行流程

Petya通過向MBR寫入資料並呼叫NtRaiseHardError強制重啟來觸發加密流程。

圖14 Petya部分寫入MBR以及強制重啟的關鍵程式碼

petya感染之後惡意資料在系統磁碟的分佈如下:

圖15 Petya感染後扇區佈局

其中0×20扇區寫入的是配置檔案,裡面包含Salsa20的相關金鑰。

圖16 Petya配置資訊

其中Salsa20的加密Key會在加密後抹去,IV向量保持不變。

圖17 清除Salsa20的加密Key

0×22儲存著是加密過的原始MBR,Petya會通過其定位MFT表,然後進行加密,每次加密2個扇區,並且每加密0×40個扇區時會更新進度條。

圖18 加密MFT關鍵程式碼

老版本的Petya使用了簡化的Salsa20演算法來加密MFT(主檔案表),存在暴力破解金鑰的漏洞,所以新版本的Petya修復暴力破解的漏洞,並提升了Salsa20的演算法強度,密碼的長度驗證擴充為32位元組。

圖19 密碼的長度驗證

Salsa20用輸入的key對0×21扇區進行解密後,如果解密後的資料都為0×7則表示驗證通過。

圖20 對0×21扇區資料進行驗證

Petya只會針對分割槽格式為MBR且檔案系統為NTFS的MFT(主檔案表)進行加密,否則只修改MBR,顯示黃色骷髏頭,這就意味著我們可以通過直接修復MBR來恢復系統。因為Petya只對MFT表進行加密,並不加密檔案內容,所以我們也可以直接通過相關的分割槽工具直接對檔案進行恢復。

圖21 判斷磁碟分割槽格式

圖22 判斷檔案系統格式

六、 Mischa模組

圖23 Mischa模組基本流程圖

從程式碼中我們可以看出Mischa能夠加密硬碟以及可移動磁碟。

圖24遍歷硬碟和可移動磁碟

加密以下固定字尾的檔案:

圖25 加密檔案的字尾

MisCha會對檔案大小進行判斷,如果檔案大於32MB,只加密5MB大小的資料。

圖26 判斷檔案大小

Mischa的檔名由原始檔名和使用者標識Key的前8位組成:

圖27 修改檔名

Mischa使用AES256演算法對檔案內容進行加密,每次加密0×400位元組。對於每一個需要加密的檔案來說,AES256的KEY是固定不變的,唯一不同的是隨機生成的IV向量。

圖28 加密檔案內容

對檔案加密完成後,會在檔案末尾寫入長度為0×76位元組的解密相關的配置資訊。

圖29配置資訊的記憶體佈局

最後釋放YOUR_FILES_ARE_ENCRYPTED.TXT,提醒使用者檔案已被加密。

值的一提的是,當Mischa加密完成之後, GoldenEye並沒有善罷甘休,重新執行Petya流程,對MFT進行加密。

在高版本的系統中,讀寫MBR需要管理員許可權,所以GoldenEye就會利用xxxx區段解密出的elevate_x86.dll/elevate_x64.dll進行提權,從而順利的執行Petya。

提權的原理主要是通過查詢系統白名單檔案,對其進行dll劫持實現的。

圖30 DLL劫持後的入口點程式碼

圖31 重新執行GoldenEye

七、 GoldenEye勒索提示

惡意程式碼執行完之後就開始強制重啟電腦,進行勒索提示:

圖32 GoldenEye木馬勒索提示畫面

GoldenEye木馬的贖金為1.3個比特幣,且勒索方式相比Petya顯得溫和的多,不再因錯過截止時間就翻倍贖金。GoldenEye木馬會對輸入的加密串進行簡單的校驗,如果出現大小寫錯誤或者其他錯誤都會提示,直至輸入正確的資料。

圖33 提示輸入識別碼

輸入正確的識別碼之後提示使用者勒索贖金的金額。

圖34 提示比特幣數額

最後提供支付贖金的賬戶。

圖35 提示比特幣收款賬戶

八、 360防毒可以完美查殺

GoldenEye主要通過傳送“求職垃圾郵件”的形式進行傳播,並引誘受害者點選其中包含的惡意附件。首個附件是一個PDF文件,它將自己偽裝成一封正經的求職信,而後還跟著一個包含了巨集惡意軟體的Excel文件。提醒廣大網友:重要資料應定期備份。此外,他人發來的可疑程式或指令碼(如exe、scr、js等)不要雙擊執行,這樣就能最大限度的避免中招。

圖36 2016年12月6日GoldenEye在VT上查殺的情況

* 本文作者:360安全衛士(企業帳號),轉載請註明來自FreeBuf.COM