1、引言
1.1勒索軟件
勒索軟件()是一種運行在計算機上的惡意軟件,通過綁架用戶文件,使用戶數據資產或計算資源無法正常使用,并以此為條件向用戶勒索錢財。這類用戶數據資產包括文檔、數據庫、源代碼、圖片、壓縮文件等多種文件。贖金形式通常為比特幣,少數為真實貨幣或其他虛擬貨幣。
按照已有資料考證,早在1989年,第一款勒索軟件就已經問世,但這與本文內容關系不大,不做討論。而近期的勒索軟件是從2012年開始流行,并于2013年引起了廣泛的重視。截止至當前,勒索軟件的受害者已有上千萬用戶,這也使得勒索軟件日益猖獗。
1.2本文內容
考慮到勒索軟件所造成的深遠影響,有必要寫一些既可以給廣大非技術人員了解勒索軟件和加密算法又可以幫助技術人員深入分析的文章。筆者將自己近期在勒索軟件方面的工作進行整理和匯總,并挑選出10款比較有代表意義的勒索軟件進行深入探討。
需要注意的是,本文著重討論10款勒索軟件樣本的加密算法,而對其各自的加殼方法、反沙箱手段、提權方法和隱藏手段等不做討論。所以本文定位于介紹這些勒索軟件加密算法到底是怎樣的,是否可以將其解密等相關問題。而其他的,諸如DLL注入等問題,還是留給其他人再做分析吧。
出于讓更多非技術人員讀懂的目的,筆者傾向于用更通俗的語言和描述來整理勒索軟件中的各種問題,但這可能導致一些不嚴謹或是不準確的地方,還請技術人員領會大意即可。
最后,筆者由衷地希望通過本文,可以幫助更多的受害者認識勒索軟件,理性對待被加密的文件。也希望可以縮短其他技術人員的分析時間,提高分析效率。但限于筆者個人知識有限,才疏學淺,文中不當或錯誤之處還請各位讀者包容和指正。
1.3行文結構
本文第一章為介紹本文的文字,讀者可以通過第一章自行判斷本文討論的內容是否與讀者需要的內容相關;第二章開始逐一介紹各個樣本的加密算法;第三章則分析勒索軟件被破解的原因,當然還有更多的勒索軟件未能破解;第四章就目前勒索軟件的發展趨勢給出筆者自己的意見。
2、樣本分析
從本章節開始,筆者將向各位讀者逐一介紹各種勒索軟件,被展示出來的10款勒索軟件按字母順序排序。針對每一款勒索軟件著重介紹其加密流程,如需關注其他方面,可以單獨找些相應的資料。
此外,各個勒索軟件除了加密算法之后,還有大量的Hash算法,由于這類Hash算法會增加理解難度,所以在本文之中一概將其省略。有興趣的讀者可以自行分析其中的各種Hash算法。
2.1
2.1.概述
勒索軟件出現于2016年6月份,在得到廣泛傳播之前,就已經被破解了。但是筆者仍然決定把這款勒索軟件拿出來進行分析,因為它同樣可以作為某一類勒索軟件加密算法的代表。一個被勒索軟件加密的文件夾內容如下:
從圖中可以看到很明顯的特征,所有被加密的文件都以.為擴展名,并生成了一個與其名稱很類似的.txt文件,用于提醒用戶感染了勒索軟件并索要贖金。
2.1.加密流程
與其他所有勒索軟件不同,勒索軟件使用了一種其自定義的加密算法,并將其密鑰也內置在樣本之中:
其中,dl存著這該樣本使用的密鑰,cl為計數器。完成加密之后,將加密內容復寫入用戶文件,并更改其后綴名便完成其加密過程。
2.1.解密流程
通過的加密算法,可以了解到其自定義加密算法為一種對稱加密算法。所以,其解密算法與加密算法是完全相同的。
關于對稱加密算法的更多細節,可以在wiki上找到:
2.2
2.2.概述
勒索軟件是2016年3月份開始廣泛傳播的。被加密的用戶文件擴展名為,截止至筆者書寫此章節(2016年9月)時,最新的版本已出現了擴展名,可以通過其擴展名判斷其從屬于系列。本節所分析的勒索軟件樣本并非是最新樣本,如需對最新的加密樣本感興趣,讀者可以自行分析。
此外,被勒索軟件感染之后,每個目錄下還會生成額外的3個文件:# #.txt、# MY FILES #.html、# MY FILES #.vbs,這三個文件的作用就是提示用戶已經感染了勒索軟件,并索要贖金。
一個感染了勒索軟件的文件夾內容如下圖:
2.2.加密流程
勒索軟件的加密算法為RSA算法與RC4算法。其加密流程較為復雜,這里無法完全展示出來,只討論幾處關鍵點。關于RSA算法和RC4算法的更多細節可以在wiki上找到:
RSA :
RC4 :
粗略地講,采用三層加密方法:首先,用內置RSA密鑰加密隨機RSA密鑰;然后,利用隨機RSA密鑰加密隨機RC4密鑰;最后,利用隨機RC4密鑰加密用戶文件。
每個樣本都內置了一份配置文件,該被加密存儲在樣本的資源段中,將其解密后可以發現一個RSA公鑰,截圖如下:
此時,RSA公鑰被編碼了,使用時需要進行解碼。
利用該RSA公鑰加密一對隨機的RSA密鑰。進而,利用這隨機生成的RSA密鑰加密隨機的RC4密鑰。這隨機的RC4密鑰即為加密用戶文件的最終密鑰,其加密用戶文件的RC4算法核心代碼如下:
此外,需要指出的是勒索軟件并非對完整的用戶文件進行加密,而是隨機的把用戶文件分為了幾部分,并選擇其中的一部分進行加密。在最終生成的文件比原用戶文件大一些,其中保留了分塊信息等其他在解密是需要使用到的密鑰信息。
2.2.解密流程
如果可以正確理解勒索軟件的加密算法,那么就不難得出的解密算法。當忽略一些細節問題之后,其解密算法可以概述如下,首先從攻擊者C&C服務器獲取RSA私鑰,用該私鑰解密RC4算法的密鑰,進而利用RC4密鑰解密用戶文件即可。
2.3
2.3.概述
是一款在國外廣泛傳播的勒索軟件,在2014年出現了的第一個版本,截止至筆者書寫本小節時,勒索軟件的最新版是第4版。本章節以的第三個版本為分析樣本,一個感染了的目錄截圖如下:
其中,文件擴展名為隨機生成的3個字符。而文件夾內額外生成的3個文件為:.HTML、.PNG、.TXT,這3個文件主要用于提示用戶本機已感染了勒索軟件,并向用戶索要贖金。
2.3.加密流程
實現加密的方法為RSA算法和AES算法,其加密過程主要依靠微軟提供的實現。由于加密公鑰需要從攻擊者C&C服務器中獲取,而攻擊者的幾個C&C服務器很快就躺了,這在某種程度上抑制了的傳播。
關于AES算法和的更多細節可以在wiki上找到:
AES :
:
正如之前所述,從C&C服務器獲取RSA公鑰,用該公鑰加密隨機生成的AES密鑰:
進而,通過隨機生成的AES密鑰加密受害者用戶文件:
并將被加密的用戶文件和其他的額外信息一同寫入最終生成的文件中。
2.3.解密流程
勒索軟件的解密過程與加密過程是及其相似的,第一步同樣是從攻擊者C&C服務器獲取密鑰,不過這次獲取的是RSA私鑰。然后用該私鑰解密AES密鑰。針對每個用戶文件都有一個隨機的AES私鑰,通過該AES密鑰解密最終的受害者用戶文件即可。
2.4
2.4.概述
勒索軟件同樣于2014年開始傳播,被勒索軟件加密的用戶文件具有相同的擴展名,均為隨機的7個字母文后綴。一個被勒索軟件加密的用戶文件夾如下:
其中,最后兩個文件分別以圖片和文本的形式提示用戶感染了勒索軟件,并要求支付贖金。
2.4.加密流程
勒索軟件的加密算法比較完善,也比較復雜,與類似,本小節選擇用不嚴謹地語言描述其完整的加密算法,專業人員讀到此處時,理解筆者的意思即可,不要做太深的推敲。
勒索軟件加密用戶文件的所用算法主要是AES算法和ECDH算法。其ECDH算法選用曲線。
關于ECDH算法和曲線的更多細節可以在wiki上找到:
ECDH :
:
必須指出的是,ECDH是一種密鑰協商算法,但對于非技術人員,理解這種算法是有困難的。所以,筆者姑且將ECDH算法比作RSA算法,這種類比雖然不是完全正確,但是可以很好地幫助我們理解勒索軟件。
勒索軟件的加密過程可以粗略地理解為3層加密,第一層是運用內置在樣本中的公鑰通過ECDH算法加密隨機生成的ECDH密鑰:
上圖中的即為隨機生成的ECDH密鑰;進而第二層的結果通過隨機生成的ECDH密鑰加密隨機生成的AES密鑰;
第三層為通過隨機生成的AES密鑰加密用戶文件。
最后,將加密之后的用戶文件高強度文件夾加密大師加密的文件解密時老是出錯,以及解密時需要用到的其他額外信息覆蓋保存于用戶文件。
2.4.解密流程
勒索軟件的正常解密流程是無法獲得其主密鑰的,即正常的勒索軟件的解密流程只包含兩層,首先,通過從攻擊者C&C服務器拿到的關于隨機生成的ECDH密鑰相關信息,通過ECDH算法獲得隨機生成的AES密鑰;進而,通過該隨機生成的AES密鑰解密用戶文件即可。
2.5
2.5.概述
勒索軟件也是一款.net托管類勒索軟件,并與2016年4月開始流傳。關于.net框架的更多相關信息,可以在wiki上找到:
.net :
截止至筆者書寫此章節是,勒索軟件出現了2個版本,本小節分析的勒索軟件為第一個版本,其特征是被加密的用戶文件以.fun為后綴。一個被勒索軟件加密的文件夾如下:
此外,勒索軟件并未生成額外的其他文件用于提醒用戶,僅僅生成了一個窗口,顯示了索要贖金等相關信息。
2.5.加密流程
勒索軟件選用AES算法作為其加密算法,其加密密鑰和初始向量被編碼存儲于樣本中:
勒索軟件對文件的加密過程也是一目了然的,先是讀取目標文件內容,然后加密,最后寫入目標文件,即可完成其完全流程:
最后在增加一個文件名后綴,即完成了其加密流程。
2.5.解密流程
勒索軟件自身攜帶了其解密算法,當選擇解密時,該軟件會首先查詢是提交了贖金。如果已經提交,那么則以加密時使用的密鑰和初始向量完成解密流程;如果沒有提交贖金,則繼續計時。
2.6 Locky
2.6.概述
Locky勒索軟件是另一款需要從C&C服務器申請公鑰的勒索軟件,是2016年2月開始傳播,由于Locky需要從攻擊者的C&C服務器申請公鑰,而C&C服務器很快就掛掉了,使Locky無法與其C&C服務器進行通信,導致無法申請到密鑰,所以就不會繼續運行下去。
截止至筆者書寫本章時,已出現了多款不同的Locky版本,不同版本的Locky略有不同,這里選擇了一個早期的Locky版本,一個感染了Locky勒索軟件的文件夾如下:
其中,.bmp和.html是Locky勒索軟件生成的,用于提示用戶感染了Locky并索要贖金。
2.6.加密流程
Locky勒索軟件選用RSA算法和AES算法作為其加密算法。但不同的樣本對AES和RSA的實現略有不同,本小節分析的樣本中,其RSA算法使用微軟提供的實現:
其中,RSA算法用于加密隨機生成的AES密鑰,RSA算法的公鑰在Locky勒索軟件運行時從攻擊者C&C服務器中獲取。AES算法用于加密受害者的用戶文件,其主要由指令實現,該指令具有較高的執行效率:
完成加密之后,會將相關的信息與被加密的文件內容一同寫入用戶文件。
2.6.解密流程
Locky勒索軟件的解密算法相對比較簡單,首先需要從攻擊者C&C服務器中拿到RSA私鑰,用于解密AES密鑰,進而使用AES密鑰完成用戶文件的解密工作即可,此外,需要刪除用戶文件中額外的保留信息。
2.7 Petya
2.7.概述
Petya勒索軟件于2016年3月開始流傳。與其他勒索軟件不同的是,Petya勒索軟件并不對用戶文件本身下手,其主要的惡意功能可概述為兩點:其一,破壞計算機的主引導代碼,使不能啟動操作系統;其二高強度文件夾加密大師加密的文件解密時老是出錯,加密主文件表,使文件不能被訪問。關于主引導代碼和主文件表的更多描述可以在wiki中找到:
MBR :
NTFS MFT :
Petya勒索軟件還有一款名為的改進版本,本小節以Petya勒索軟件為分析樣本。一個感染了Petya勒索軟件的計算機開機后,會顯示如下內容:
其內容主要是提示用戶感染了Petya勒索軟件并索要贖金。
2.7.加密流程
Petya勒索軟件的加密算法并不復雜,可簡述為ECDH算法和算法。其中,ECDH算法采用曲線,用于加密算法的密鑰。關于算法的更多描述可以在wiki中找到:
:
為了幫助更多的讀者理解,本節中同樣把ECDH算法類比為RSA算法,感興趣的讀者可以在此基礎之上繼續深入研究。下圖展示了調用加密隨機生成密鑰的截圖:
而算法用于加密主文件表,該算法運行在操作系統引導之前的16位環境之中,截圖為引導程序調用算法:
當完成上述加密步驟之后,程序會顯示出其勒索頁面并索要贖金。
2.7.解密流程
Petya勒索軟件的解密算法僅包含一步,即從攻擊者C&C服務器中拿到的密鑰,用之解密主文件表,最后將引導區還原為正常引導,即可完成其解密流程。
2.8
2.8.概述
勒索軟件是在2015年2月首次出現。截止至筆者書寫此章節時,總共有4個主要版本。不同版本的加密樣本,擁有不同的擴展名,如.ecc、.ezz、.zzz、.vvv、.abc等等。本文選擇的第四個版本進行分析,其加密之后的文件名沒有任何變化,一個感染了勒索軟件的文件夾內容如下圖:
其中,-!!-yjxka++.Htm和-!!-yjxka++.Png以及-!!-yjxka++.Txt用于提示用戶干擾了勒索軟件,要求支付贖金。
2.8.加密流程
不同版本的勒索軟件所用的加密算法也略有不同,與勒索軟件類似的是,本小節分析的版本使用得同樣是ECDH和AES兩種,但其ECDH選用的曲線。
同樣的,為了讓更多的非技術人員可以理解本小節所述的內容,本小節同樣將ECDH算法類比為RSA算法。專業人員讀到此處時,領會大意即可。
粗略地,勒索軟件同樣采用三層加密方法,第一層中,使用樣本中內置ECDH公鑰加密隨機生成的ECDH密鑰。第二層中,使用隨機生成的ECDH密鑰加密隨機生成的AES密鑰:
第三層中,使用隨機生成的AES密鑰加密用戶文件:
加密完成之后,會將被加密的內容覆蓋寫入用戶文件,解密需要用到的相關信息也一同被保存在其中。
2.8.解密流程
與勒索軟件相同,正常情況下是無法獲取勒索軟件的主密鑰,所以其解密過程只包括兩步,分別是通過ECDH算法獲得AES密鑰,進而使用該AES密鑰解密用戶文件即可。
2.9
2.9.概述
勒索軟件是在2014年開始興風作浪。勒索軟件的絕大部分版本都以.為擴展名,但不同版本的最終加密文件格式略有不同。本章節選取早期的一個版本進行分析,該樣本加密用戶文件之后,并不會改變原用戶文件的體積,這一點可用于區分該版本與其他版本的勒索軟件。
一個感染了勒索軟件的文件夾內容如下圖:
其中,.txt為勒索軟件自動生成的。被勒索軟件感染之后,每個目錄下還會生成該文件,用于提示用戶感染了勒索軟件,顯示解密相關的信息。
2.9.加密流程
勒索軟件選用RSA和AES作為加密算法。其中RSA算法用于加密AES密鑰,AES算法用于加密用戶文件。AES密鑰通過算法隨機生成,關于算法的具體描述可以在wiki中找到:
:
勒索軟件的隨機過程中,隨機種子涉及到多個函數的返回值,如下圖:
截圖內容不全,部分函數未能展示出來。
最終加密用戶文件部分入如圖:
每次加密0x10字節,直至結尾。
2.9.解密流程
需要指出的是,在樣本中,所有用戶文件被同一AES密鑰加密。在解密過程中,需要從攻擊者C&C服務器獲取AES密鑰,通過該密鑰即可解密所有的用戶文件。
2.10
2.10.概述
勒索軟件于2016年6月開始流行,截止至筆者書寫此章節時,已出現了若干個版本的勒索軟件,該勒索軟件加密用戶文件之后,會增加不同的擴展名,其中以.CRRRT為后綴和以.為后綴的版本較為流行。相對于前者,后者的加密方法更科學,更嚴謹。本節選用以.為后綴的勒索軟件為分析樣本。
是一款.net托管類勒索軟件,感染了的用戶文件夾如下:
其中,FBDX.jpg為勒索軟件自動生成的圖片文件,該名稱不固定,圖片內容為提示用戶已經感染了勒索軟件。
2.10.加密流程
勒索軟件采用的勒索軟件為兩次RSA算法,每個勒索軟件都內置一個RSA公鑰,如下圖:
該公鑰用于加密一個隨機生成的RSA私密。而這個隨機生成的RSA公私密鑰對,用于加密用戶的全部個人文件:
需要指出的是,由于RSA算法運行速率較慢,的作者并未對完整的用戶文件全部進行加密,而是選擇每個用戶文件的前0x300字節進行加密。
2.10.解密流程
根據的加密過程,不難得出其解密算法。首先需要從攻擊者手中拿到對應于樣本內置RSA公鑰的私鑰,然后通過拿到的私鑰解密隨機RSA私鑰,最后用解密的來的RSA私鑰解密用戶文件即可。
3、破解原因3.1加密流程總結
在上文中,已經概括地介紹了各個勒索軟件的加密流程。而這10種勒索軟件被選出并展示的主要原因在于他們可以分別代表某一類加密流程。而這10個不同的勒索軟件,就涵蓋了10種不同的加密流程。其他的勒索軟件的加密流程也不外乎是這十種之中的某一種。
這里在重新歸納一下各種加密算法:
1.使用自定義加密算法,如2.1章節所述的勒索軟件等。
2.使用一層加密算法,如2.5章節所述的勒索軟件等。
3.使用二層加密算法,RSA+AES等,如2.9章節所述的勒索軟件等。
4.使用三層加密算法,ECDH+ECDH+AES等,如2.2章節所述的勒索軟件等。
5. 借用其他正常軟件的加密功能,如:勒索軟件借用的加密功能、Vault勒索軟件會借用gnupg的加密功能等等。筆者并未在本文中分析此類樣本,因為這與勒索軟件使用的加密算法關系不大。
在所有的標準加密和解密算法之中,AES算法的使用率是最高的,而RSA算法次之,ECDH算法同樣被一部分勒索軟件采用。這些標準的加解密算法,可以認為其本身是不可解的,而造成其可解的原因完全是因為使用不當,這也是勒索軟件被破解的主要原因。
3.2破解原因概括
勒索軟件被破解的主要原因并不在于其加密算法不科學,而主要原因是未能正確使用其加密算法。目前,勒索軟件被破解的原因可以歸納為以下幾點:
1.自定義算法,通過加密算法可以直接得到解密算法。在本文中第2.1章節所述的勒索軟件即存在該問題。
2.密鑰保存方法不合適,如使用固定AES密鑰加密用戶文件。在本文中第2.5章節所述的勒索軟件即存在該問題。
3.加密強度不夠,如RSA密鑰長度不夠,使得其被質數分解。在本文中第2.8章節所述的勒索軟件的早期版本存在該問題。
4.偽隨機數生成算法不科學,使得可以預測密鑰。在本文中第2.10章節所述的勒索軟件的早期版本存在該問題。
5.攻擊者C&C服務器有漏洞,通過該漏洞可以獲取密鑰。在本文中第2.2章節所述的勒索軟件的早起版本存在該問題。
除了以上5點之外,還存在一些其他的原因可是實現破解勒索軟件,但由于這些原因不具有通用性(比如,勒索軟件的作者被抓、主動放出密鑰等),這里就不再介紹了。
4、趨勢與建議4.1趨勢
按照筆者所了解的情況來看,目前勒索軟件的種類和數量都有增多趨勢。不僅如此,在黑市上已開始販賣勒索軟件的制作工具和勒索軟件源代碼。如果不采取有效措施遏制勒索軟件的增長趨勢,很難評估勒索軟件最終會壯大到何種地步。
不過,反勒索軟件的陣營也在不斷成長,各種反病毒公司先后推出了對抗反病毒的軟件與工具,在防范勒索軟件的方法也不斷的更新迭代,相信很快就會取得更豐碩的成果。
4.2建議
過去的勒索軟件對于各種加解密算法的使用,或多或少的都存在一些問題。但隨著勒索軟件的版本更新,這些問題越來越少。一旦勒索軟件的作者完全掌握了正確地使用這些加解密算法時,按目前的計算水平來看,想還原這些被加密的文件可以認為是不可能的。所以,針對于勒索軟件的問題,筆者建議是以防范為主。即時地備份自己的個人文件,對于一些關鍵的文件,更要采取一些額外的手段進行保護。而一旦真的感染了勒索軟件也不要驚慌,更不要盲目的購買并支付比特幣,咨詢一些專業人員可以得到更為科學的處理手段。
此外,可以針對勒索軟件的主要特征訂制一些防御手段,如設置蜜罐文件等。相信通過這些方式可以有效地遏制勒索軟件的傳播。