勒索病毒一直是安全行業的一個熱點,近期安全人員發現了一款名為rapid的勒索病毒,該勒索病毒使用了 rsa加aes對文件進行加密,它不僅會感染計算機上已有的文件,還會對新創建的文件進行加密。本文對rapid病毒進行了詳細分析,剖析其加密機制,解析其加密后的文件。
1.概述
當rapid病毒運行時,它會創建多個線程不斷掃描文件系統,進行文件加密,它不僅會感染計算機上的已有文件,還會對新創建的文件進行加密。被加密的文件,其文件名被添加“.rapid”擴展名,同時文件大小增加了0x4D0字節。
? ?
rapid病毒將在進行加密的文件夾中創建名為“How?Recovery Files.txt”的勒索提示文件,文件中包含一個電子郵件,讓受害者聯系如何完成付款。用戶重啟電腦,將自動彈出名為“recovery.txt”的勒索提示文件,其內容和“How?Recovery Files.txt”文件內容相同。
2.詳細分析
使用蘭眼(LanyEye)下一代威脅感知系統對rapid程序進行檢測。在蘭眼中,rapid程序被標記為高危:
? ?
接下來對rapid程序進行逆向分析。
首先程序調用ShellExecuteA執行如圖所示命令:
? ?
主要作用包括清除windows卷影拷貝,防止受害者使用卷影拷貝恢復文件。禁用系統修復和自動修改功能,勒索程序可能加密驅動文件導致系統頻繁崩潰,禁用修復功能,忽略錯誤降低系統崩潰概率。終止oracle.exe、sqlite.exe、sql.exe進程,一方面,可以釋放內存,另一方面,可以解除這些數據庫進程對某些文件的占用。
接著程序添加開機啟動項,在注冊表HKEY_CURRENT_USERSoftwaremicrosoftWindowsCurrentVersionRun下新建Encrypter和userinfo項,Encrypter項值為“%AppDataRomainginfo.exe”,userinfo的項值為“%AppDataRomaingrecovery.txt”。“info.exe”文件是勒索病毒程序自身的拷貝,“recovery.txt”文件是勒索信息文件,文件內容和上文提到的“How?Recovery ? ?Files.txt”文件內容相同。
? ?
? ?
本次為了保證系統能夠正常運行,程序不會選取文件夾名稱為“Windows”、“intel”、“nvidia”、“ProgramData”和“temp”下的文件:
? ?
此勒索軟件并沒有通過后綴名過濾文件而是判斷選取的文件是不是“How Recovery Files.txt”、“info.exe”、“recovery.txt”,如果是其中三個文件則跳過,剩下的全加密。
? ?
2.1.加密過程
? ?
程序首先創建了一個PROV_RSA_FULL類型的CSP容器,然后將通過Base64的硬編碼在程序中的RSA的公鑰(命名為RSA1)導入。 ? ?
? ?
接著程序會查看是否存在注冊表項“local_public_key”。如果沒有則會創建注冊表項“local_public_key”
? ?
程序創建了一個PROV_RSA_FULL類型的CSP容器,并且調用CryptGenKey()生成了隨機RSA密鑰對(命名為RSA2)。
? ?
之后調用CryptExportKey()導出剛剛生成的RSA2私鑰數據,并調用RSA1公鑰對RSA2私鑰加密。加密完成后,將RSA私鑰數據寫入注冊表項HKEY_CURRENT_USERSoftwareEncryptKeyslocal_enc_private_key,將數據長度寫入注冊表項HKEY_CURRENT_USERSoftwareEncryptKeyslocal_enc_private_key_len
? ?
再次調用CryptExportKey()導出剛剛生成的隨機RSA2公鑰數據,這次不需要加密,直接寫入注冊表HKEY_CURRENT_USERSoftwareEncryptKeyslocal_public_key和HKEY_CURRENT_USERSoftwareEncryptKeyslocal_public_key_len。
之后開始對文件進行加密,獲取選取文件的大小,如果文件大小小于0x4D0字節,則直接進入加密流程;否則讀取文件尾部0x20字節的數據,并判斷這部分數據是不是加密標志“F5 D5 CD CD CD 7D CD CD 95 91 C1 C1 CD AD CD CD 41 CD 41 CD C1 99 FD 1D 59 95 81 FD 99 79 25 A5”,如果不是則進入加密流程,否則選取下一個文件。因為加密過的文件是大于0x4D0的,并且在其文件尾部添加了0x20個字節的加密標志
? ?
程序進入加密流程后,會先調用CryptGenKey()生成隨機AES密鑰。
? ?
并調用CryptExportKey()導出AES密鑰數據,BLOBTYPE=PLAINTEXTKEYBLOB:
? ?
如圖所示返回數據長度0x2C,0x3A42A8-0x3A42AF是BLOBHEADER ,0x3A42B0-0x3A42B3是keysize,0x3A42B4-0x3A42D3是AES的密鑰,0x3A42D4-0x3A4327則是使用0xCD填充的數據:
? ?
使用RSA2公鑰加密AES密鑰,加密的是上文中提到的“BLOB格式數據+AES密鑰+填充數據”這整個0x80字節的數據:
? ?
讀取文件數據,使用AES密鑰對讀取的文件數據進行加密?:
? ?
AES加密是按照128bit進行分組,當原文件字節數不是128bit的整數倍時,加密后的密文數據將會大于明文數據,所以程序在加密前在明文尾部填充了0x10個字節的0x00(一個AES分組的字節數)。
向文件覆寫加密后的數據,首先只寫入原文件大小的密文數據,變多的0x10字節的數據接下來再寫;
繼續向文件中寫數據,寫入0x4D0字節的數據。這0x4D0字節的數據包括五部分:第一部分0x10字節,這部分就是變多的數據;第二部分0x20字節,包含源文件文件大小的字符串和0xCD的填充數據;第三部分0x80字節,是被加密的AES密鑰數據;第四部分0x400字節,是被加密的RSA2私鑰數據;第五部分0x20字節,是文件加密標志數據。
? ?
在文件名后添加“.rapid”擴展名:
? ?
顯示勒索信息
?
至此,我們已經分析完了rapid勒索軟件的文件加密流程,接下來我們來分析被加密后的文件。
3.加密文件解析
假設一個大小為0x9000字節的文件被rapid程序加密,加密后的文件結構如下:
? ?
rapid勒索病毒使用數字簽名(RSA_AES-256)對文件進行加密,文件解密需要獲取數字簽名的私鑰。但是,數組簽名的私鑰使用RSA加密,在沒有RSA私鑰的情況下,很難獲取數字簽名的私鑰,文件恢復的難度極大。
2017年是勒索病毒高發的一年,可以預見2018年這種狀態仍將持續,我們每一個人都應該提高警惕,切勿打開來自可疑郵箱的附件,避免使用第三方軟件資源,安裝防病毒軟件,降低安全隱患。