
前言
最近,我們發(fā)現(xiàn)了一種新型的勒索軟件,因其使用了gmail作為郵箱服務(wù)器,故被命名為Gomasom。當(dāng)用戶運(yùn)行了該勒索軟件時(shí),用戶的文件會(huì)被加密,加密后的文件后綴名為”.crypt”。加密完成后會(huì)在桌面生成文件”Crypted.txt”,提示用戶通過惡意軟件作者提供的網(wǎng)址支付100歐元贖金。
通過谷歌搜索Gomasom勒索軟件并且初步分析后發(fā)現(xiàn),這是該家族的一個(gè)新變種,其加密方式與網(wǎng)上所描述的加密方式及癥狀并不完全相同,并且也不能通過網(wǎng)上的解密工具來解密加密后的文件。因此我決定逆向分析其算法并寫出它的解密工具。
感染癥狀
當(dāng)惡意程序運(yùn)行后,桌面會(huì)顯示如下的勒索信息界面:

同時(shí),桌面和C盤根目錄會(huì)生成一個(gè)txt文件“Crypted.txt”,如圖:

其中有一段字符串值得引人注意”S/N \dvwclF10U!)3p7“,初步猜測(cè)可能與密鑰有關(guān)。
文件被加密,文件后綴名被更改為“.crypt”,如圖:

我們打開了惡意作者提供的網(wǎng)站,原文為俄語,通過翻譯后,發(fā)現(xiàn)如下信息:

作者聲稱使用了3DES加密算法,并且“有許多的唯一的密鑰被用來加密文件,想要解密是不可能的事情”。作者是否真的用了3DES算法加密文件?是否真的沒辦法恢復(fù)加密后的文件?帶著疑問我們接下去通過逆向進(jìn)行分析。
樣本分析
我們發(fā)現(xiàn)樣本使用了upx殼,脫完殼我們發(fā)現(xiàn)程序是用delphi語言寫的,在動(dòng)態(tài)分析之前,我使用分析軟件PEID和 DeDe 來嘗試獲得一些有價(jià)值的信息。
通過PEID的Krypto Analyzer插件,我們發(fā)現(xiàn)使用了三種算法:base64, DES, MD5。如圖:

通過Dephi反編譯工具DeDe 進(jìn)行反編譯后,如圖:

通過上圖可以發(fā)現(xiàn),病毒樣本使用了名為”TDCP”的一個(gè)封裝過的加密算法的類。通過搜索發(fā)現(xiàn),這是一個(gè)開源的Dephi的加密算法類,名為DCPcrypt。粗略的看了下源碼,由于源碼中使用到的算法種類比較多,從源碼中無法準(zhǔn)確得知病毒樣本使用了哪種算法,因此接下來進(jìn)行動(dòng)態(tài)分析。
判斷文件”C:\crypted.txt”是否存在,若存在則退出程序。如圖:

S/N生成算法
通過調(diào)用Windows API函數(shù) QueryPerformanceCounter,來獲得隨機(jī)數(shù)種子。隨機(jī)種子seedl 接下去通過一個(gè)自定義碼表生成一段長(zhǎng)為14(0xe)字節(jié)的隨機(jī)的字符串;隨機(jī)種子seed0 被用作初始密鑰的索引。
_rand生成種子seed

_srand()通過seed種子,進(jìn)一步運(yùn)算生成新的種子。如圖:

將以上的代碼,轉(zhuǎn)化為Python代碼,如圖:

利用種子seedl,通過自定義碼表獲得隨機(jī)字符,如圖:

轉(zhuǎn)化為Python代碼,如圖:

待加密文件后綴
初始化后綴名列表,如圖:

通過Python代碼重新整理后,待加密的文件后綴名名列表如圖:

從上面的拓展名加密列表中發(fā)現(xiàn),不僅用戶的文檔數(shù)據(jù)等會(huì)被加密,用戶的程序源碼(C語言,Delphi語言)也會(huì)被加密。看來對(duì)程序員有著深深的惡意! 同時(shí)猜測(cè)病毒作者可能習(xí)慣于使用C語言和Delphi語言。
加密算法
初始密鑰一共有10組,全部硬編碼在程序中,S/N的最后一位數(shù)字seed0作為索引值,對(duì)應(yīng)取出其中一組初始密鑰(長(zhǎng)度為0×18),如圖:

整理后的全部十組硬編碼的密鑰,如圖:

通過MD5加密這組密鑰后生成新的密鑰,長(zhǎng)度為16字節(jié),MD5加密算法部分代碼如圖:


通過MD5算法生成的新密鑰,用來加密文件。根據(jù)之前反編譯代碼,加密算法密鑰長(zhǎng)度,反匯編代碼,等,我們確定加密算法為3DES。更確切的說算法是 3DES-128。
下面簡(jiǎn)單介紹下3DES算法:
3DES(又叫Triple DES)是三重?cái)?shù)據(jù)加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當(dāng)于是對(duì)每個(gè)數(shù)據(jù)塊應(yīng)用三次DES加密算法。密鑰長(zhǎng)度是128位,192位(bit),如果密碼位數(shù)少于等于64位,加密結(jié)果與DES相同。原版DES容易被破解,新的3DES出現(xiàn),增加了加密安全性,避免被暴力破解。它同樣是對(duì)稱性加密,同樣涉及到加密編碼方式,及填充方式。包括3DES-ECB,3DES-CBC,3DES-CTR,3DES-OFB,3DES-CFB
因?yàn)橹皇褂昧艘环N加密算法,并且是對(duì)稱加密算法,我們可以編寫代碼進(jìn)行解密。如圖:

編寫解密代碼,并運(yùn)行,如圖:

運(yùn)行結(jié)果,如圖:

樣本:
f77e7569b2b2c54c006821b02ef76cd5f3826a37
解密器代碼下載地址:https://github.com/Voraka/Gomasom_Decryptor
總結(jié)
該勒索軟件的確使用了128位的3DES加密算法,但并不是不可解密的,因?yàn)槠涿荑保存在本地,甚至就保存在程序本身,而且密鑰只有10組,即使用戶刪除了保存著密鑰編號(hào)的文件“crypted.txt”,然而也可以遍歷這些密鑰來逐一嘗試解密。因此勒索軟件設(shè)計(jì)存在較大缺陷,也正是這個(gè)缺陷幫助我們恢復(fù)了被加密的文件。看似存在多個(gè)”加密芯片“,但本身設(shè)計(jì)就是不安全的,有缺陷的,被加密后仍然可能不安全。
|