?

Sep 10 2016

分享一款失敗的國產加密勒索軟件

首頁 » 業界見聞 » 分享一款失敗的國產加密勒索軟件   

lx_20160907193535
一、 前言

        近兩年,以敲詐勒索為目的的文件加密惡意軟件逐漸成為惡意軟件中的主力軍。以Locky家族,ceber家族為典型代表的加密勒索軟件席卷國外,對政府機構,公司乃至個人用戶造成了極大的危害。早期的加密勒索軟件一般以網頁掛馬形式出現,“落戶”到本地運行后會經過一系列的代碼重組及解密操作得到用于執行主要功能的shellcode,然后運行shellcode對指定文件進行加密。由于程序代碼段在解密和解混淆之后與之前已經完全不同,主要功能又移至shellcode中執行,因此此類加密勒索軟件較容易躲過殺軟的靜態檢測。但為了對抗殺軟不斷更新的特征庫,軟件作者也必須不斷更改加密方法,這也造成了研發成本的增加。在最近這段時間,加密勒索類軟件有簡化的趨勢,軟件開發者將目光轉向了擁有較為完善的加密函數類庫的.NET平臺,同時也去除一些混淆操作,直接使用.NET平臺下一些公開的混淆方法。當然,軟件開發的簡化也“造福”了國內一大幫急于發財但技術又不是那么過關的“偽黑客”。從最近的樣本捕獲可以發現,已有一些國內黑客試水.NET平臺下的加密勒索軟件。

1

二、 樣本具體分析

        捕獲到的樣本由c#語言編寫,使用了.NET  Reactor4.2混淆,在去混淆之后程序只有20幾k的大小。可以看出,.NET平臺下的敲詐勒索軟件相比較之前國外的其他敲詐勒索軟件體積上縮小特別多,但加密的速度還是不盡如人意,一般需要半分鐘至一分鐘的時間才能完成一整套加密操作。

2

圖1 去混淆后的程序非常小

        樣本集加密與解密于一身,當文件被加密后,受害者只需要到相應比特幣網站上付款然后再雙擊運行一次原程序即可進行解密。第二次運行該程序,程序便通過判斷贖金是否到賬來決定是否進行解密。相比較國外一些非常繁瑣的交付贖金解密的步驟,這款國產加密勒索相對比較“良心”,但也側面說明一點,作者的目標可能不是一些企業用戶或者機構用戶,而是普通的用戶,包括不了解電腦知識的用戶,該軟件一旦傳播開來破壞性不小。

        和其他加密勒索軟件的套路相同,該軟件也是使用AES加密算法去加密系統中的文件,然后使用RSA加密算法去加密AES密鑰。雖然AES是對稱加密算法,但RSA為非對稱加密算法,只有擁有RSA私鑰才能解密得到AES的密鑰進而對被加密的文件進行解密。除外,軟件加密時使用的AES密鑰是隨機生成的,因此在加密過后無法復現密鑰。

3

圖2 密鑰間加密過程

4

圖3 用AES密鑰對文件進行加密

        程序通過判斷文件名來選擇執行加密的文件,除了一些系統文件夾諸如“Program Files”之外,還專門針對國內用戶加密文件名中含有“優酷”,“風行”,“QQpet”字樣的文件。

23

圖4 一些被加密的文件名

        在進行加密之后,程序會將交付贖金的步驟等需要受害者知曉的信息寫入到文件中,并將文件放在系統的關鍵文件夾以及桌面上。除外,為了更加顯眼作者干脆來了個超大的對話框告訴受害者交付贖金的方法。

5

圖5 初始化文件中的內容

6

圖6 將恢復步驟寫入文件并復制到桌面上

7

圖7 循環彈對話框

        下圖所示就是作者彈出的寫有恢復步驟的對話框。從中可以看出,恢復步驟其實不復雜,交付贖金之后雙擊再次運行程序即可。

8

圖8 寫有恢復步驟的對話框

        那么程序是如何判斷用戶已經交付贖金了呢?從下面的代碼可以看出,程序訪問相關比特幣帳戶,并根據返回值來進行判斷。可以看出,作者使用的比特幣網站和國內一些打碼平臺的運作方式相似,即用戶通過相關網址提交數據,而程序可以訪問相關接口來獲取實時的結果,這種借助第三方來進行交易的方式不僅不容易暴露作者身份,也方便作者實時獲得賬戶信息,可以說是一種自動化的“提款機”。

9

圖9 訪問比特幣帳戶相關網址

10

圖10 判斷付款金額是否足夠

        從上圖可以看出,受害者應付的數值為num3,受害者所付的數值為num4/1E08,通過判斷兩值的大小來確定付款金額是否足夠。從返回數據信息和代碼信息可以看出,num3是應付贖金對應的比特幣數目,訪問hxxp://blockmeta.com/api/v1/chain/ticker可以獲得當前比特幣對人民幣的匯率,并通過num(應付金額)/num2(比特幣匯率)來計算作者應得的比特幣。然后作者訪問自己賬戶獲得已收到的比特幣數并進行比較。

11

圖11 返回信息顯示比特幣匯率

        在獲得贖金后,程序就該執行解密操作了,按照常見的加密勒索軟件的套路應該是訪問一個暗網地址獲取密鑰解密。不過。。。作者好像用了另一種套路,他把密鑰全部存放在了本地。。。放在了本地。。。本地。。。

12

        如下圖所示,作者把加密文件用的AES密鑰和加密AES密鑰的RSA公鑰私鑰全存放在了桌面的ckt文件中。

12

圖12 生成ckt后綴的文件存放密鑰

        當交付贖金成功后,即通過本地的ckt文件進行解密。

13

圖13 調取存放在本地的密鑰進行解密

        既然密鑰都存放在本地,就可以通過密鑰來進行相應的解密操作。可以說,這個加密勒索做得相當相當相當失敗。不過換句話說,一般用戶可能不知道桌面上的ckt文件就是解密的密鑰,所以說,中了加密勒索軟件之后先別慌張,先檢查程序是否遺留下樣本或者一些相關的信息,如果有的話可以提交到殺毒軟件相關反饋窗口,由病毒分析人員分析并確定解密的可行性。

        除了利用本地的密鑰進行解密,我們還發現了另一個可以利用的點。程序通過判斷作者比特幣賬戶上的比特幣數量是否大于應付贖金可兌換的比特幣數量來決定是否進行解密。判斷的代碼如下所示。

14

圖14 判斷條件

        該條件如果成立,則說明支付的贖金不夠。因此滿足支付成功的條件為num4/1E08>num3。num4和num3都是從作者賬戶或者相應比特幣匯率信息中得到的數據,修改較不方便,但1E08是硬編碼在代碼里的,當然可以通過修改這個數值來使條件滿足。既然作者用num4/1E08和num3比較,說明num4應該比num3大好幾個數量級,我們不妨把1E08改為1,只要num4最初不等于0,num4/1>num3就有極大可能會成立。

15

圖15 修改前相應位置的IL指令

16

圖16 修改后相應位置的IL指令

        果不其然,即使沒有交付贖金,程序也能跳轉到解密部分執行解密功能。加密勒索軟件轉眼間就成了解密程序。當然,如果num4等于0,就不能通過修改1E08這個值來改變跳轉條件,這時候可以通過修改相應IL指令將跳轉條件中的<=改為>即可實現相同效果。如下所示。

17

圖17 修改前相應位置的IL指令

18

圖18 修改后相應位置的IL指令

        解密前后文件如下所示。

19

圖19 解密前的文件

20

圖20 解密后的文件

        只能說,這種把密鑰存放在本地的方式實在太失敗了,但側面也反映出了作者的一些顧慮。如果通過服務器上傳密鑰或下載密鑰進行解密就會很容易被分析人員通過服務器地址溯源出病毒作者的個人信息。由此看來作者的“反偵察意識”還是蠻強的,只是使用的方法,實在不忍直視。。。

21

        可能作者也發現了該軟件存在嚴重的漏洞,不久過后,360互聯網安全中心又捕獲到一枚加密勒索軟件。通過對該加密勒索軟件的分析不難看出,兩個加密勒索軟件出自同一人之手。

1

圖21 升級后的加密勒索軟件

2

圖22 新樣本中對ckt的命名方式和上一個樣本相同

        新樣本中的加密手法和老樣本相同,只是對于密鑰的處理方式發生了改變,不再是以前的直接將密鑰存放在本地,而是將用戶計算機名稱以及加密所需的密鑰上傳到hxxp://www.diaochapai.com/survey/b6ceb9cf-3902-4496-a630-89055efde01c。這是一個用戶發布調查表的網站,從用戶計算機獲取的數據可能作為調查表的內容上傳到該地址,而軟件作者作為調查表的發布者可以很容易的看到這些數據,也就可以得到每一臺計算機感染該加密勒索軟件時所使用的密鑰。由于上傳密鑰時順道上傳了計算機名,也就達到了“一機一碼”的效果,作者在接收贖金進行解密時也更加方便。

3

圖23 上傳密鑰和計算機名

        同樣,加密成功后程序會彈出相應的文本內容以及警告框要求用戶聯系郵箱[email protected]來申請解密。

4

圖24 彈出寫有恢復方法的文本內容

5

圖25 彈出警告框

        被加密后的文件如下圖所示。

6

圖26 被加密的文件

        那么,是不是作者上傳了密鑰就沒辦法進行解密,只能乖乖交付贖金了?理論上是這樣的,但不知是作者良心發現還是良心發現,竟然留下了一段可能可以用來解密的代碼。

        如下圖所示,作者在進行上傳操作時使用的是try catch語句,一旦上傳出現異常則轉向異常處理代碼,而異常處理代碼竟然也是。。。將密鑰保存在本地。

7

圖27 一旦上傳失敗就將密鑰存在本地

        可能作者考慮到有些用戶的文件遭到加密時上傳地址已經失效,如果這時不存留一份密鑰的話,用戶的文件將永遠無法解密。看來作者還是有點良心的。。。而作者又是一個善于“隱藏身份”的人,肯定會經常修改上傳地址,這會導致該版本的上傳地址很快就失效,因此許多用戶的文件遭到加密時,是可以在本地找到解密密鑰的。不過如果用戶不知道本地存放的這些以ckt為后綴的文件就是解密密鑰,可能同樣會去聯系作者,也同樣會被坑一筆錢。

8

圖28 分析過程中該上傳地址已經失效

        所以用戶在發現自己計算機中的文件遭到加密后千萬不要馬上聯系對方,可能加密密鑰就在本地,而你卻因此被坑了一大筆錢。這時候將情況反饋給殺毒軟件廠商才是最正確的選擇。

三、 總結

        由于加密勒索軟件開發技術的簡化以及該產業所帶來的暴利對國內黑產從業者的誘惑,國內的加密勒索軟件數量將呈現不斷上升的趨勢。用戶在發現計算機中的文件被加密后,不要急于支付贖金,而應該檢查計算機中是否有相應病毒樣本或者相關信息的殘留,如果有的話可以反饋到殺毒軟件廠商,由專業分析人員進行分析并確定解決方案。值得一提的是,360安全衛士已經開通了“反勒索服務”,并向用戶公開承諾:使用360安全衛士11.0版本并開啟該服務后,一旦感染敲詐者病毒,360將提供最高3個比特幣(約13000元人民幣)的贖金并幫助用戶恢復數據,讓用戶遠離財物及文檔的損失。

 

 

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: 加密勒索軟件

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «逆向工程學習第一天--一個VC6編譯的小程序 | NSO到底是個什么樣的公司?揭秘三叉戟0day的締造者»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖