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