惡意檔案分析
惡意檔案描述
近期,深信服深盾終端實驗室在運營工作中發現了一種 ELF 格式的勒索軟體,該勒索軟體近期開始出現,其釋放的勒索信中的 Onion 連結似乎已關閉,這表明該勒索軟體可能仍在開發中。
經過分析,發現該勒索軟體與今年5月出現的 DarkAngels 勒索信內容非常相似。而 DarkAngels 與 Babuk 勒索軟體也存在相似之處。本文主要分析最新捕獲的針對 Linux 平臺的 ELF 格式的勒索軟體以及針對 Windows 平臺的 DarkAngels 兩種格式的樣本,探究其中的相似與不同之處。
左圖為針對 Linux 系統下的勒索信內容,右圖為針對 Windows 系統下的勒索信內容。
![](https://i.iter01.com/images/acaef9865092d02fa1fd1d7e0dfbeaa24bbc4de099adafe94c3ed4929610aa34.jpg)
惡意檔案分析
(一)Windows 版本分析
總體功能框架
![圖片](https://i.iter01.com/images/34976c6f8ae0d159f33cd4a8e2c11118a12f9d9c23e02da1cf88b62cba83579d.jpg)
使用靜態分析,發現惡意檔案是基於 32 位 GUI (圖形使用者介面)的二進位制檔案。
![](https://i.iter01.com/images/a0f629f8e4f0dcbd00a73e2171f75a1d26329dc7553968818f7701c995ec7334.jpg)
獲取命令列引數,透過呼叫 SetProcessShutdownParameters(0,0) ,惡意軟體為指定程式設定它相對於其它程式的關閉順序,引數為 0,意味著較其他程式關閉得最遲。
![](https://i.iter01.com/images/b5c9da11ed6235bdf6f6d11236937314e6fb4b6607bf9885bd9dad5e5bd06134.jpg)
終止服務
為了確保在系統加密過程中不中斷其加密過程,惡意軟體會列舉和檢索受害者機器上所有可用的服務,在加密系統之前嘗試終止服務。
開啟服務控制管理器資料庫 (0xF003F = SC_MANAGER_ALL_ACCESS)。
![](https://i.iter01.com/images/92e8c65d5599552531df708a3a68a1dec827365584c841789f90b0868377c971.jpg)
呼叫 OpenServiceA,開啟一個目標服務(0x2c = SERVICE_STOP )。
![](https://i.iter01.com/images/afaeaac3f0ae7809982319c11cae3a59ddeabe20e935c13890c4cb8c7dc05b73.jpg)
查詢服務狀態,判斷上一步驟引數是否正確傳遞。
![](https://i.iter01.com/images/d15f75e0f19e71a3cf8a5704a0813642e593bbd8385a8aa0e60836c3158933fb.jpg)
檢索每個依賴於指定服務的服務的名稱和狀態;也就是說,在依賴服務能夠執行之前,指定的服務必須執行 (0x1 = SERVICE_ACTIVE)。
![](https://i.iter01.com/images/cbf5edbc1ee4dccb1e903630a7eab644e60a0731b59179d1a8ec90bd4e6fc933.jpg)
終止服務 (0x1 = SERVICE_CONTROL_STOP)。
![](https://i.iter01.com/images/e6764725bb73eafb93a1939e20c951aec73d386b0b54a2bfc047f0824d5ecae0.jpg)
終止的服務列表
![](https://i.iter01.com/images/23dc2c385963b4e8893ec16fb6de58f2a5146a261bc6f81d2906d6233507a5f3.jpg)
終止程式
函式 CreateToolhelp32Snapshot() 獲得當前執行程式的快照後,我們可以利用 process32First 函式來獲得第一個程式的控制程式碼。
![](https://i.iter01.com/images/7e8301226b057c3b6c848f7649f7c5ed78e343c5be73d82110e5496bbc37440f.jpg)
將當前程式與硬編碼中的程式表對比,如果當前程式控制程式碼與表中匹配。則開啟指定程式的控制程式碼,並傳入 0x1 引數(0x1 = PROCESS_TERMINATE),隨後終止程式,最後關閉該程式控制程式碼。
![](https://i.iter01.com/images/00d74e379638da56227ba0994afacc44002c99f0ce19265949646ab07ec2e4dd.jpg)
繼續列舉下一個程式。
![](https://i.iter01.com/images/17f882151b30e85aabaa8937b3d41053d143a20783d3a4c96ad42aa6608d0022.jpg)
重複上述操作,直至遍歷完所有程式。
終止程式列表
![](https://i.iter01.com/images/917ca12675daec581a7507facadfe32e588358b45d17393efff352bed3a30fd1.jpg)
防止恢復
(1)刪除卷影
![](https://i.iter01.com/images/902973665839f38ad4ad8b3fbc0f92517d283f0e0965dc0e7619c84d75006334.jpg)
(2)清空回收站
使用 SHEmptyRecycleBinA() API,惡意軟體會從回收站中刪除所有專案,以確保加密後不會恢復已刪除的檔案。
![](https://i.iter01.com/images/60273664002b213454fb6cf9200c674e28e43b098cbb330aa085013d315211d7.jpg)
最大化執行加密操作
首先建立互斥變數 DarkAngels:
![](https://i.iter01.com/images/1b5144ad54681a5be0f6dadb64e130bc1402f8d25e7d81e236377781a76f1d20.jpg)
(1)當命令列引數中包含"shares"
使用 NetShareEnum () API 檢索有關伺服器上每個共享資源的資訊。
![](https://i.iter01.com/images/4a1996e0e75ff45122d0cb2d036e480042bd3360a0bb142e05e1d29f69d33bc3.jpg)
檢查 $ADMIN 共享並開始加密檔案:
![](https://i.iter01.com/images/cd83948309ddd856094c8820df5e74d4deb359e7b797be471368f9d7dc1944bb.jpg)
(2)當命令列引數中包含 "path"
勒索軟體會呼叫 GetDriveTypeW() API 來找出連線到受感染機器的網路驅動器。一旦識別出網路驅動器,勒索軟體就會開始加密檔案。
![](https://i.iter01.com/images/af5a807c585289b373ff580dc96ebff839bf3b311e8597aac37e45738381126f.jpg)
(3)當命令列引數中既不包含 "shares"又不包含 "paths"
勒索軟體會遞迴遍歷所有本地驅動器並加密所有目標檔案。加密後,檔案被賦予 .crypt 副檔名。
遍歷所有本地驅動器
![圖片](https://i.iter01.com/images/7c7fd76590121022df4d293d4aad710d4570f0621ed9afdbd5bd539c1dbd1575.jpg)
列舉卷及本地磁碟
獲取驅動器型別,判斷路徑是否有效GetDriveTypeW(0x1),如果路徑有效,則對捲進行列舉。呼叫 GetVolumePathNamesForVolumeName 獲取路徑資訊,檢視該卷是否被安裝,若未被安裝,則呼叫SetVolumeMountPointW 安裝未被安裝的卷。
![](https://i.iter01.com/images/416c38799471f67b4031f6542f0a5ca7eb229db1274ee3c587707484179fdbde.jpg)
列舉網路資源
![](https://i.iter01.com/images/1802cdf5ce892024608056ccf7b76aae99eeed139b4bb84129c767c453ca1d82.jpg)
![](https://i.iter01.com/images/f1c1458071b2206ff7f9c7a7c1a232a3665dfb6bbbb190f8bd107643e8668eb1.jpg)
檔案加密
(1)被加密檔案新增擴充套件
呼叫 SetFileAttributesW(0x80 = FILE_ATTRIBUTE_NORMAL ) 設定檔案屬性,取消文件的只讀、隱藏、系統、存檔許可權。呼叫 MoveFileExW 函式,被加密檔案新增擴充套件 .crypt。
![](https://i.iter01.com/images/2604336279ab3a6ebbb587167cf523603db50276295aec3946e9756b392774a1.jpg)
呼叫CreateFileW(0xC0000000 = GENERIC_READ | GENERIC_WRITE,0x3 = OPEN_EXISTING),開啟一個已經存在的檔案。
![](https://i.iter01.com/images/276c6258690b2432d50ea83f586b41092f4def25043ec20301e87d0c47064a94.jpg)
(2)處理金鑰
呼叫 CryptGenRadom 隨機生成 AES 金鑰,之後使用Session Key 中的 RSA 公鑰對 AES 金鑰進行加密。
![](https://i.iter01.com/images/520fc6888ea9eb262bdacc681107c49efd96154f897aef1cb92a4fd5cddc1880.jpg)
(3)檔案加密大小
從檔案頭部開始遍歷檔案,先加密 0-64,接著加密 64-5242880,其次加密 5242880-20971520,最後加密20971520 之後的字元。
![](https://i.iter01.com/images/d3b6feea594ea3e82ecb179ff6b9fdf2c440bc0faa715624e70b7860f752a854.jpg)
(3)不進行加密的檔案、目錄及擴充套件
不進行加密的目錄:
AppData | Boot |
Windows | Windows.old |
不進行加密的檔案:
autorun.inf | boot.ini | bootfont.bin |
不進行加密的檔案擴充套件:
.babyk 是著名的 Babuk 勒索軟體副檔名,表明 DarkAngels 與 Babuk 勒索軟體可能存在關聯。
DarkAngels 在加密檔案的末尾附加了一個簽名 "choung dong looks like hot dog!!",表明該勒索軟體與 Babuk 相關。
![](https://i.iter01.com/images/f4b253936bb7fe3682c5ca34dfc42ce8b8e9149a2cc52e4de27ab5e3b6dc3850.jpg)
(二)Linux版本分析
總體功能框架
![](https://i.iter01.com/images/481590553975b51016f485e37877fb091992c55d68a4f85348fac01e9c53fcb9.jpg)
1、定製化加密路徑
該勒索軟體二進位制檔案需要一個資料夾作為加密引數。給定資料夾路徑後,DarkAngels 會加密資料夾中的檔案並將 .crypted 副檔名附加到加密檔案中。如果沒有新增需要加密的路徑,則會顯示 Usage:%s [-m (10-20-25-33-50) ] Start Path 。
![圖片](https://i.iter01.com/images/ae1ac458aa19c55809c49b7bd36bebe9f1457667dd604fe69fe2c9fbba66c01a.jpg)
該惡意程式使用 pthread_create 函式建立了一個新的執行緒,新的執行緒透過呼叫 start_routine 執行主模組。
![圖片](https://i.iter01.com/images/c4d3d7fd9f521a264c9b87abc6d55b1cfce94adcbad7b0e3730c6f4c1617f0f1.jpg)
start_routine 函式為該勒索軟體主要功能模組,分析內容如下所示:
(1)被加密檔案新增檔案擴充套件 .crypted
![圖片](https://i.iter01.com/images/7e90507e7acc98f93bc0b82e8c16123ab283cadfd6c3f7ba1589e7d7e0014f91.jpg)
(2)將新增過 .crypted 擴充套件的檔案設定寫鎖
呼叫 open64 函式開啟目標檔案,並且使用 fcnt 函式將目標檔案設定為 F_WDLCK 寫鎖,隨後 close 關閉目標檔案。
![圖片](https://i.iter01.com/images/74463919c61fe1adb957bf00514e6553a015e5f47ffe928e8c9f31bda5786fa0.jpg)
(3)終止程式
終止 pid>10 且佔用檔案的程式,儘可能多的加密檔案且避免在加密過程中造成檔案的損壞。
![圖片](https://i.iter01.com/images/983301fab1607f547b5075c53d6ec490ef8585f81171b31364b3018c2ea5c667.jpg)
(4)將程式的工作目錄修改為"/"根目錄,建立守護程式。
![圖片](https://i.iter01.com/images/1246560214f89c0d7a5714692fcdb117ae2b0585aa2aa69b8bd30e48b89ec2ae.jpg)
(5)勒索信
開啟另一個與目標檔案同名但附加了README_TO_RESTORE 擴充套件的檔案,寫入了勒索信內容並關閉檔案。
![圖片](https://i.iter01.com/images/0a873843cbb7ec068b5a3e2240eb2cbb64af7ccf1bdde0cdaea5f3d3b88a35d5.jpg)
寫入的勒索信內容如下所示:
![圖片](https://i.iter01.com/images/27acb10c99d0b0498868b851b853101d47341c7ebcdbde0ea0c76544b06e0ac2.jpg)
(6)避免加密的檔案擴充套件、目錄、檔案
不進行加密的檔案擴充套件:
![圖片](https://i.iter01.com/images/b7cef2ac8e450273023fb302a9adf97e0d3f73198f8e15b3d33cfaecfd169171.jpg)
不進行加密的目錄:
![圖片](https://i.iter01.com/images/1df4ec96e1236811ea58f845f239d9813d4fa49593f6c3f0c29e2e2ccb32ee95.jpg)
不進行加密的檔案:
![圖片](https://i.iter01.com/images/408e2c689f219efd5e8dff2ab2dfab7cde3deee4f7ba9e28788dc514f3efab47.jpg)
(7)加密
開啟被新增 .crypted 擴充套件的檔案,呼叫 lseek 和 write 函式寫入已加密的內容。
![圖片](https://i.iter01.com/images/39b8febd14811fc0f3691dae4e5b75c8d9ac6dd30a84ad0633f5df7950e80f5b.jpg)
(8)加密記錄
所有被加密檔案儲存在 wrkman.log.0 檔案中。
![圖片](https://i.iter01.com/images/a7d751da4fa61b2c568ce2cd45ec349bea6e96d04ddbac7eedd9aebc7f635cca.jpg)
IOCs
Windows 版本
Sha256 38e05d599877bf18855ad4d178bcd76718cfad1505328d0444363d1f592b0838
Linux 版本
Sha256 3b56cea72e8140a7044336933cf382d98dd95c732e5937a0a61e0e7296762c7b
處置建議
1. 避免將重要服務在外網開放,若一定要開放,需增加口令複雜度,避免使用弱口令。
2. 避免開啟可疑或來歷不明的郵件,尤其是其中的連結和附件等,如一定要開啟未知檔案,請先使用防毒軟體進行掃描。
3. 安裝信譽良好的防病毒/反間諜軟體,定期進行系統全盤掃描,並刪除檢測到的威脅,按時升級打補丁。
4. 使用官方和經過驗證的下載渠道,使用正版開發人員提供的工具/功能啟用和更新產品,不建議使用非法啟用工具和第三方下載器,因為它們通常用於分發惡意內容。
5.重要的資料最好雙機備份或雲備份。