近日,蘭云科技銀河實驗室通過“蘭眼下一代威脅感知系統(tǒng)”發(fā)現(xiàn)一款新型勒索軟件 —— MZP 勒索軟件,也可叫作 Dot 勒索軟件,最早由 AmigoA 和 AkhmendTaia 在 2019 年 12 月 31 日首次發(fā)現(xiàn)。在勒索軟件的開頭前三個字節(jié)為 4D 5A 50,即 MZP,所以稱為 MZP(這個 P 代表的是 Pascal) 勒索軟件,其特征為附加到加密文件的擴展名為一個長度為 8 的隨機字符串?!碧m眼下一代威脅感知系統(tǒng)”對其檢測結(jié)果如圖 1-1 所示:
圖 1-1
勒索軟件的圖標(biāo)為一個卡通人物 Dot(20 世紀(jì) 90 年代中期流行的華納兄弟卡通系列《Animaniacs》中的人物)的樣子,這也就是為什么把它稱作 Dot 勒索軟件,如圖 2-1 所示:
圖 2-1
勒索后桌面出現(xiàn)如圖 2-2 所示情況:
圖 2-2
勒索信息文本如圖 2-3 所示:
圖 2-3
勒索后加密文件的后綴名為:przfqehd(隨機的一個 8 位的字符串)
經(jīng) DIE 查殼可知,該勒索病毒加了 UPX 殼(3.91),且為 Delphi 編譯的 Win32 程序,如圖 3-1-1 所示:
這也證實了 MZP 中的 P,Delphi 的前身就為 Pascal,MZP 勒索軟件二進(jìn)制數(shù)據(jù)如圖 3-1-2 所示:
既然有殼,則先脫之,如圖 3-1-3 所示:
在對其反編譯后,發(fā)現(xiàn)使用了 KOL 。眾所周知,對于用 Delphi 開發(fā)的程序(GUI)來說,體積都比較大,為了盡可能減少體積,可使用 KOL,如圖 3-2-1 所示:
除此之外,在類的名字里發(fā)現(xiàn)有 AES 字樣,從這可猜測用了 AES 算法加密,如圖 3-2-2 所示:
那這個類是在哪個單元呢,通過列舉出的單元列表中,發(fā)現(xiàn) Unit_0040E340 單元處的類信息顯示出 ThiAESCipher,起始地址為 0x0040E340,如圖 3-2-3 所示:
由于沒有重定位,所以可以直接定位到加密算法處,如圖 3-2-4 所示:
同時 HiAsm 這個字符串也引起了我的注意,HiAsm 是一個用于 Delphi 開發(fā)的舊 IDE,這個 IDE 是由俄羅斯人開發(fā)的,包括上面提到的 KOL,這款勒索軟件可能由這個 IDE 開發(fā)的,如圖 3-2-5 所示:
我們再來看看字符串,通過字符串一般能夠猜測出程序需要做哪些操作,如圖 3-2-6 所示:
比如 comctl32.dll 中的 InitCommonControlEx 和 _TrackMouseEvent,用于初始化控件和捕獲鼠標(biāo)的位置,可能存在反沙箱,也可能是繞過 UAC(UACME 中的 #21 和 #22)。除了這個,還有與注冊表和加密文本有關(guān)。
勒索軟件最開始會去嘗試打開 HKEY_CURRENT_USER\Software\Borland\Locales 和 HKEY_CURRENT_USER\Software\Borland\Delphi\Locales 注冊表項來探測環(huán)境,如圖 3-3-1 所示:
只需兩者中的一個存在,就會去查詢相關(guān)環(huán)境配置信息,如圖 3-3-2 所示:
除了上述兩個注冊表項外,它還會去 HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Delphi\RTL 下讀取 FPUMaskValue,來確定此環(huán)境下是否能支持 Delphi 程序的運行,如圖 3-3-3 所示:
在完成上述操作后,緊接著是獲取語言版本信息,并以此作為擴展名將自身加載為數(shù)據(jù)文件,如圖 3-4-1 所示:
在測試環(huán)境中,獲取到的語言為 CHS,具體信息如圖 3-4-2 所示:
以上總的流程如圖 3-4-3 所示:
勒索核心主要是位于 sub_410BB4 中,如圖 3-5-1 所示:
還記得最開始提到的 MZP 嗎?其實可以用壓縮軟件解壓出來,這里用 7-ZIP 對其進(jìn)行解壓,如圖 3-5-2 所示:
在上述解壓出來的資源文件中,發(fā)現(xiàn)有個 STR1,這個就為勒索信息文本字符串,%1 表示的是 Key,如圖 3-5-3 所示:
將資源全部拷貝到內(nèi)存中,這是通過 sub_403218 實現(xiàn),如圖 3-5-4 和 3-5-5 所示:
圖3-5-5
循環(huán)遍歷目錄下的文件,并對其進(jìn)行加密,如圖 3-5-6 所示:
加密操作主要是在 sub_40CE00 當(dāng)中進(jìn)行,每當(dāng)加密完后會對原文件進(jìn)行刪除操作,如圖 3-5-7 所示:
在加密的過程中會以字符串 QWAHNJZCUF 為基礎(chǔ),經(jīng)過 sub_004026F4 和 sub_00403430 算出一個 0×258 大小的字符串存儲在起始地址為 0x004221AC 的內(nèi)存中,這個就是密鑰,如圖 3-5-8 和 3-5-9 所示:
這塊大小為 0×258 的字符串密鑰生成取決于 EDX 中的值,EDX 的值是通過 GetSystemTime 獲取當(dāng)前時間得到的,它會把毫秒的值給到 EDX,并做下一步計算(sub_004026F4),先來看下 SYSTEMTIME 結(jié)構(gòu)體的定義,如下:
// System time is represented with the following structure:typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
SYSTEMTIME 結(jié)構(gòu)體里有 8 個成員,全部為 WORD 類型,占 2 個字節(jié),分別為年、月、周、天、時、分、秒、毫秒,如圖 3-5-10 所示:
在上面需要注意一個地方,那就是時,因為現(xiàn)在處在東八區(qū),所以這里的時需要加上 8 才會等于當(dāng)前時間表示的時。我們再轉(zhuǎn)到 0x004026F4 處,在運算過程中,EDX 與 EAX 相乘后結(jié)果存放在 EAX 會發(fā)生溢出,溢出的最高位會存放在 EDX 中,如圖 3-5-11 所示:
結(jié)果如圖 3-5-12 所示:
此時 EDX 的值是 0×5,它代表的是字符串 QWAHNJZCUF 下標(biāo)的索引,從 0 開始,所以該處會去索引 J,如圖 3-5-13 所示:
一共會循環(huán) 0×258 次,將此次過程用 C 來描述,相關(guān)代碼如下:
#include <stdio.h>#include <windows.h>int main(void){char BaseStr[] = "QWAHNJZCUF";char TargetStr[601] = ""; SYSTEMTIME SystemTime; GetSystemTime(&SystemTime); DWORD EDX = 0; DWORD EAX = (SystemTime.wHour * 0x3C + SystemTime.wMinute) * 0x3C; EAX = (EAX + SystemTime.wSecond) * 0x3E8; EDX = SystemTime.wMilliseconds; EAX = EAX + EDX; // 取開始計算的 EAX 的初始值DWORD Temp = EAX; __int64 EAX64 = 0;// 0x258for (int n = 0; n < 600; ++n) {// EDX 為 UTC 時間的毫秒數(shù),EAX 為上面計算出來的數(shù)EDX = Temp * 0x8088405; EDX = EDX + 1; // 將 EDX 的值臨時保存起來以便下一次運算Temp = EDX; EAX64 = (__int64)EDX * 0xA;// 將高位的數(shù)保存到 EDX 中,并將其右移 32 位作為下標(biāo)索引值EDX = (EAX64 & 0x0000000F00000000) >> 32; TargetStr[n] = BaseStr[EDX]; } printf("%s\n", TargetStr);return 0; }
根據(jù)當(dāng)前時間的毫秒數(shù)生成一個密鑰,如圖 3-5-14 所示:
生成的 8 位隨機后綴名為 przfqehd,這是 MZP 勒索軟件特征之一,與之過程涉及到的字符串跟圖 3-2-6 最后圈出來的 qwertyuiopasdfghjklzxcvbnm 有關(guān),這看起來是鍵盤上鍵的排列順序。同樣也是算出下標(biāo)來索引,通過索引出來的值組成后綴名,也是通過 GetSystemTime 來獲取當(dāng)前時間的毫秒數(shù)來決定,不過需要注意一下數(shù)據(jù)類型, 索引可超 10,生成的后綴如圖 3-5-15 所示:
MZP 勒索軟件采用 AES-256 加密,首次加密時,會將文件內(nèi)容的 16 字節(jié)以每 4 字節(jié)一組進(jìn)行反轉(zhuǎn)再與反轉(zhuǎn)后的密鑰進(jìn)行異或,最后開始多次輪循加密(每次加密輪數(shù) 0xE),如圖 3-5-1 所示:
根據(jù) AES 算法的輪函數(shù),可以建立 4 張置換表,通過查詢這 4 張表,并與該輪的密鑰進(jìn)行異或,可以直接得到該輪加密的結(jié)果,偽代碼如圖 3-5-17 所示:
提取其加密的輪函數(shù)如圖 3-5-18 所示:
經(jīng)多輪加密后將區(qū)塊內(nèi)容寫到以 przfqehd 為后綴的文件中,如圖 3-5-18 所示:
待所有文件加密完成后,又會重新開始遍歷文件(回跳到圖 3-5-6 中),將生成的勒索信息寫入到文本文件中,并放到每個目錄下面,寫入的勒索信息如圖 3-5-19 所示:
上圖出現(xiàn)的一串 key 的長度為 0×258,這個 key 為是通過如圖 3-5-20 對應(yīng)關(guān)系生成的:
關(guān)于解密,黑客可通過圖 3-5-19 勒索信息中給出的 key,再用圖 3-5-20 對應(yīng)的字母關(guān)系表轉(zhuǎn)換成密鑰,而沒再通過非對稱加密對密鑰進(jìn)行進(jìn)一步處理,黑客不需要當(dāng)時加密文件的時間來獲取 0×258 大小的密鑰。最后,可通過上述 AES 算法的逆運算就可解出。
在分析過程中,還發(fā)現(xiàn)有一個特殊操作,MZP 勒索軟件會通過 GetKeyboardType 來獲取鍵盤的信息,如圖 4-1 所示:
第一個傳入的參數(shù)為 0,代表獲取鍵盤類型信息,然后用返回值與 0×7 作比較,判斷是否為日語鍵盤布局;第二個傳入的參數(shù)為 1,代表獲取鍵盤子類型信息,即鍵盤的 OEM 信息,通過該函數(shù)的返回值的高位再去和 0xD00 和 0×400 作比較,如圖 4-2 所示:
現(xiàn)在大多數(shù)勒索軟件會通過區(qū)域語言 ID 或者鍵盤布局來判斷所處的地區(qū),然后再決定是否執(zhí)行惡意操作,但是在這個 MZP 勒索軟件中,發(fā)現(xiàn)并不是,雖然說這段可疑,但依然阻止不了我的好奇心,在一家***論壇,發(fā)現(xiàn)與之有關(guān),如圖 4-3 所示:
但這位壇友并未透露意圖,看函數(shù)名稱發(fā)現(xiàn),_isNECWindows,這個 NEC 和注釋 wordaround a Japanse Win95 bug 引起了我的注意,NEC 為日本一家跨國信息技術(shù)公司,其中出產(chǎn)的產(chǎn)品就有 NEC 鍵盤,似乎與這個有關(guān),后來發(fā)現(xiàn),這一段其實是來自于 KOL 源碼中的 system.pas 中的一部分,至于用途,不得而知!
近年勒索病毒頻繁出現(xiàn),我們每一個人都應(yīng)該提高警惕,切勿打開來自可疑郵箱的附件,避免使用來源不明的第三方軟件資源;同時,建議提前部署具備高級威脅檢測能力的安全產(chǎn)品進(jìn)行及時監(jiān)控、防范,降低安全隱患。
MD5:
d00c79e8e9a7552aee66db55c855f26b
Email:
recover_24_7@protonmail[.]com
*本文作者:蘭云科技銀河實驗室
---------------------------------------------------------------------------------
解密/數(shù)據(jù)恢復(fù)協(xié)助說明:
新的勒索型病毒幾乎每天都會出現(xiàn), 沒有任何技術(shù)可以對每種病毒解密. 在這種情況下, 通過破解加密KEY來救援. 盡管這是在沒有解密工具前提下的最有效的方法之一, 雖然不能確保 100 %恢復(fù),但未嘗不是可以嘗試的一種方法。
使用我們的服務(wù)試探性解密測試:
您可以嘗試與我公司聯(lián)系通過勒索型病毒破壞的文件進(jìn)行解密. 數(shù)據(jù)的分析需要 3-5 天, 之后, 我們將通知您解密的難易程度以及費用(不成功不收任何費用).為了提高加密文件的分析效率和真實度,煩請按照以下要求進(jìn)行加密文件的提供:
文件的數(shù)量應(yīng)不超過 4;
文件大小不超過 8 兆字節(jié);
文件必須從不同的文件夾;
文件必須是唯一的;
測試接受郵箱gjsec@guangjusec.com;
郵件中務(wù)必留有可直接聯(lián)系上手機號碼,如果未收到信息可能首次未聯(lián)系到本人,可直接電話咨詢進(jìn)度;
-------------------------------------------
青島廣聚信息科技有限公司
專攻術(shù)業(yè) 成就所托
24小時服務(wù)電話:400-001-9776-2線
商務(wù)合作:gjsec@guangjusec.com
山東省青島高新區(qū):山東省青島市高新區(qū)錦業(yè)路1號藍(lán)貝智造工場D5-1
Gaoxin Zone:D5-1,Lanbei Labs ,No.1, Jinye Road, high tech Zone, Qingdao, Shandong Province
山東省青島嶗山區(qū):山東省青島市嶗山區(qū)秦嶺路15號海韻東方1006室
Laoshan Zone: room 1006, Haiyun Dongfang, No. 15, Qinling Road, Laoshan District, Qingdao, Shandong Province
7*24小時 1V1專業(yè)顧問咨詢 年度安全免費巡檢 專家安全咨詢