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

同時,桌面和C盤根目錄會生成一個txt文件“Crypted.txt”,如圖:

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

我們打開了惡意作者提供的網站,原文為俄語,通過翻譯后,發現如下信息:

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

通過Dephi反編譯工具DeDe 進行反編譯后,如圖:

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

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

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

將以上的代碼,轉化為Python代碼,如圖:

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

轉化為Python代碼,如圖:

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

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

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

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

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


通過MD5算法生成的新密鑰,用來加密文件。根據之前反編譯代碼,加密算法密鑰長度,反匯編代碼,等,我們確定加密算法為3DES。更確切的說算法是 3DES-128。
下面簡單介紹下3DES算法:
3DES(又叫Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當于是對每個數據塊應用三次DES加密算法。密鑰長度是128位,192位(bit),如果密碼位數少于等于64位,加密結果與DES相同。原版DES容易被破解,新的3DES出現,增加了加密安全性,避免被暴力破解。它同樣是對稱性加密,同樣涉及到加密編碼方式,及填充方式。包括3DES-ECB,3DES-CBC,3DES-CTR,3DES-OFB,3DES-CFB
因為只使用了一種加密算法,并且是對稱加密算法,我們可以編寫代碼進行解密。如圖:

編寫解密代碼,并運行,如圖:

運行結果,如圖:

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