解碼內置不安全“加密芯片”的勒索軟件Gomasom

編程語言 軟件 Delphi Python BIT澤清 2017-05-13

解碼內置不安全“加密芯片”的勒索軟件Gomasom

前言

最近,我們發現了一種新型的勒索軟件,因其使用了gmail作為郵箱服務器,故被命名為Gomasom。當用戶運行了該勒索軟件時,用戶的文件會被加密,加密後的文件後綴名為”.crypt”。加密完成後會在桌面生成文件”Crypted.txt”,提示用戶通過惡意軟件作者提供的網址支付100歐元贖金。

通過谷歌搜索Gomasom勒索軟件並且初步分析後發現,這是該家族的一個新變種,其加密方式與網上所描述的加密方式及症狀並不完全相同,並且也不能通過網上的解密工具來解密加密後的文件。因此我決定逆向分析其算法並寫出它的解密工具。

感染症狀

當惡意程序運行後,桌面會顯示如下的勒索信息界面:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

其中有一段字符串值得引人注意”S/N \dvwclF10U!)3p7“,初步猜測可能與密鑰有關。

文件被加密,文件後綴名被更改為“.crypt”,如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

作者聲稱使用了3DES加密算法,並且“有許多的唯一的密鑰被用來加密文件,想要解密是不可能的事情”。作者是否真的用了3DES算法加密文件?是否真的沒辦法恢復加密後的文件?帶著疑問我們接下去通過逆向進行分析。

樣本分析


我們發現樣本使用了upx殼,脫完殼我們發現程序是用delphi語言寫的,在動態分析之前,我使用分析軟件PEID和 DeDe 來嘗試獲得一些有價值的信息。

通過PEID的Krypto Analyzer插件,我們發現使用了三種算法:base64, DES, MD5。如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

通過上圖可以發現,病毒樣本使用了名為”TDCP”的一個封裝過的加密算法的類。通過搜索發現,這是一個開源的Dephi的加密算法類,名為DCPcrypt。粗略的看了下源碼,由於源碼中使用到的算法種類比較多,從源碼中無法準確得知病毒樣本使用了哪種算法,因此接下來進行動態分析。

判斷文件”C:\crypted.txt”是否存在,若存在則退出程序。如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

S/N生成算法

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

_rand生成種子seed

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

轉化為Python代碼,如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

待加密文件後綴

初始化後綴名列表,如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

從上面的拓展名加密列表中發現,不僅用戶的文檔數據等會被加密,用戶的程序源碼(C語言,Delphi語言)也會被加密。看來對程序員有著深深的惡意! 同時猜測病毒作者可能習慣於使用C語言和Delphi語言。

加密算法

初始密鑰一共有10組,全部硬編碼在程序中,S/N的最後一位數字seed0作為索引值,對應取出其中一組初始密鑰(長度為0×18),如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

解碼內置不安全“加密芯片”的勒索軟件Gomasom

通過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

因為只使用了一種加密算法,並且是對稱加密算法,我們可以編寫代碼進行解密。如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

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

解碼內置不安全“加密芯片”的勒索軟件Gomasom

運行結果,如圖:

解碼內置不安全“加密芯片”的勒索軟件Gomasom

樣本:

f77e7569b2b2c54c006821b02ef76cd5f3826a37

解密器代碼下載地址:https://github.com/Voraka/Gomasom_Decryptor

總結

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

* 頭條號原創作者:BIT澤清,本文屬頭條號原創標籤作者獨家發佈,未經許可禁止轉載

相關推薦

推薦中...