深入分析:Phobos勒索軟件EKING變種樣本
0x00 概述
Phobos家族是最近出現的一種勒索軟件,在2019年初首次被研究人員發現。自此開始,該惡意軟件持續被發現存在新的變種。與原有變種相比,新的變種不僅持續改進其攻擊方法,并且還經常修改加密文件的擴展名。盡管該勒索軟件持續的時間比較短暫,但有不少受害者都表示,他們支付了勒索的贖金,但文件卻沒有被恢復。
兩周前,FortiGuard實驗室從野外捕獲了一個新的威脅樣本。這是一個Microsoft Word文檔,帶有一個惡意宏,用于傳播Phobos勒索軟件名為EKING的變種。我們對該樣本進行了深入的分析,在這篇分析文章中,我們將展現該變種是如何感染受害者的系統,以及它是如何在受害者設備和共享網絡文件夾上掃描并使用AES算法加密文件的。
0x01 在Word中打開捕獲的樣本
打開Word文檔之后,會顯示出一條警告,指示受害者單擊黃色欄中的“啟用內容”按鈕以啟用宏,如下圖所示。
由于宏可能包含惡意代碼,因此在默認情況下,MS Office Word會顯示一個“安全警告”,警告用戶該文檔可能存在風險。然后,用戶可以通過單擊“啟用內容”按鈕來決定是否執行宏。
MS Office Word中的樣本內容。
但是,這個文檔中的安全警告是一個圈套。通過查看宏代碼,我們發現其中有一個名為Document_Close()的內置文件函數,當MS Office Word退出時,會自動調用該函數。換而言之,當受害者關閉文檔時,將會執行惡意的宏代碼。這種方式還可以繞過某些沙箱解決方案,FortiSandbox將這個惡意Word文件識別為風險軟件(Riskware)。
宏代碼非常簡潔清晰,它從打開的樣本中提取一個Base 64編碼的塊,并保存在位于C:\Users\Public\Ksh1.xls的本地文件中。然后,通過調用命令“Certutil -decode C:\Users\Public\Ksh1.xls C:\Users\Public\Ksh1.pdf”將文件解碼為另一個文件。“Ksh1.pdf”是經過Base64解碼后的文件,實際上是一個PE文件(DLL文件)。下面是宏代碼的截圖,展示了將在何處將Base64編碼后的文件“Ksh1.xls”解碼為“Ksh1.pdf”。
經過Base64解碼后提取的文件:

宏的最后一項任務是執行命令“Rundll32 C:\Users\Public\Ksh1.pdf,In”來運行解碼后的PE文件“Ksh1.pdf”。解碼后的PE文件“Ksh1.pdf”是包含導出函數“In”的DLL文件,在上述命令行中由“Rundll32.exe”調用。
導出函數In的ASM代碼:

上圖展示了“Ksh1.pdf”的導出函數In的ASM代碼。根據我在ASM代碼旁邊插入的注釋,我們很容易理解,它首先在“C:\Users\Public\cs5”處創建了一個新的目錄。然后,通過調用API “URLDownloadToFile()”從URL“hxxp://178[.]62[.]19[.]66/campo/v/v”下載文件并保存到“C:\Users\Public\cs5\cs5.exe”。最后,通過調用API “CreateProcessA()”來運行下載的“cs5.exe”文件。在這里,下載URL字符串和完整文件路徑字符串都在DLL文件“Ksh1.pdf”中進行了硬編碼。值得關注的是,下載的文件“cs5.exe”是Phobos的Payload文件。
0x02 分析Payload EXE文件
“C:\Users\Public\cs5\cs5.exe”是Phobos的EKING變種的Payload,該變種使用了未知的加殼工具,如下圖是Exeinfo PE顯示的結果。
受保護的Phobos Payload EXE文件:

Phobos具有AES加密的配置塊,其中包含許多配置信息(在我們分析的變種中包含69項)。它們在一個函數中被解密,然后隨著索引號參數一起被使用。其中還包含用于加密文件的新擴展名字符串、用于生成加密密鑰的數據、文件擴展名列表、Phobos的版本信息、受害者的勒索提示信息等等。
在下圖,我們可以看到對具有新擴展名的加密文件“.id[<
從配置塊解密新的擴展名:

0x03 啟動第二個進程并執行兩組命令
當“cs5.exe”運行時,它通過調用API CreateProcessWithTokenW() 以及來自Explorer.exe進程的令牌來創建自身的第二個進程,從而讓第二個進程在Explorer.exe令牌的安全上下文中運行。這樣一來,它就具有在受害者的系統上讀寫更多文件所需的特權。
Phobos在兩個創建的線程中執行兩組命令。
下面列出了第一組命令,其中包含我添加的注釋:
- vssadmin delete shadows /all /quiet – Deletes all of the volume's shadow copies.
- wmic shadowcopy delete – Deletes shadow copies from local computer.
- bcdedit /set {default} bootstatuspolicy ignoreallfailures
- bcdedit /set {default} recoveryenabled no – Disables the automatic startup repair feature.
- wbadmin delete catalog –quiet – Deletes the backup catalog.
- Exit
通過刪除Windows系統用于系統還原的卷影副本,受害者無法再使用這一功能來還原加密的文件。勒索軟件還可以防止受害者通過自動啟動修復功能還原文件,或者從備份目錄中還原文件。
第二組命令關閉了受感染系統上的Windows防火墻,如下所示。
- netsh advfirewall set currentprofile state off(Windows 7及更高版本)
- netsh firewall set opmode mode=disable(Windows XP和Windows 2003)
0x04 添加自動運行項
該惡意軟件還從加密的配置塊中解密字符串“Software\Microsoft\Windows\CurrentVersion\Run”(索引號為0x11),這是注冊表的子路徑。然后,會同時在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下創建一個自動運行項“cs5”。下圖是在HKEY_CURRENT_USER下添加的自動運行項的截圖。
添加自動運行項“cs5”:

除了將此項添加到系統注冊表的自動運行組之外,勒索軟件還會將“cs5.exe”復制到兩個啟動文件夾中,分別是“%AppData%\Microsoft\Windows\Start Menu\Programs\Startup”和“%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup”。下圖展示了將“cs5.exe”復制到兩個啟動文件夾中的ASM代碼片段。
將Payload文件復制到啟動文件夾中:

在Windows啟動時,Windows系統會自動執行這兩個文件夾中的可執行文件。這意味著,Windows將在啟動過程中運行4個“cs5.exe”文件以保證惡意軟件的持久化。我們無需擔心會發生沖突,因為Phobos使用了Mutex對象來確保僅有一個進程正在運行。如果存在相同的Mutex對象,則其他的“cs5.exe”進程將會退出。
0x05 Phobos在受害者系統上執行的核心任務
對于一個勒索軟件來說,其核心任務就是加密受害者的文件,然后進行勒索,以換取對文件的解密。在這里,我們將詳細分析Phobos的EKING變種是如何執行這一任務的。
為了提高性能,它創建了多個線程來掃描和加密受害者系統上的文件。此外,它使用了大量Event對象來控制和同步這些線程的進度。
5.1 用于終止進程的線程
通過使用線程的方式,勒索軟件可以終止特定名稱的41個進程(在列表中指定)。名稱列表同樣也是保存在配置塊中,其索引號為0x0a。
- msftesql.exe;sqlagent.exe;sqlbrowser.exe;sqlservr.exe;sqlwriter.exe;oracle.exe;ocssd.exe;dbsnmp.exe;synctime.exe;agntsvc.exe;mydesktopqos.exe;isqlplussvc.exe;xfssvccon.exe;mydesktopservice.exe;ocautoupds.exe;agntsvc.exe;agntsvc.exe;agntsvc.exe;encsvc.exe;firefoxconfig.exe;tbirdconfig.exe;ocomm.exe;mysqld.exe;mysqld-nt.exe;mysqld-opt.exe;dbeng50.exe;sqbcoreservice.exe;excel.exe;infopath.exe;msaccess.exe;mspub.exe;onenote.exe;outlook.exe;powerpnt.exe;steam.exe;thebat.exe;thebat64.exe;thunderbird.exe;visio.exe;winword.exe;wordpad.exe
在其他勒索軟件家族中,也經常會發現相同的進程名稱列表,這些勒索軟件也會進行相同的操作。
這些進程屬于MS SQL Server、Oracle Database、VMware、Panda Security、MySql、FireFox、SQL Anywhere、RedGate SQL Backup、MS Excel、MS Word、MS Access、MS PowerPoint、MS Publisher、MS OneNote、MS Outlook、The Bat!、Thunderbird、WordPad等產品。
Phobos會繼續終止這些應用程序,以迫使它們釋放當前打開的任何文件,從而可以對其進行加密。
5.2 用于掃描文件并進行加密的線程
該線程的線程函數調用API GetLogicalDrives()來獲取并枚舉受害者系統上的所有邏輯驅動器,例如“C:\”、“D:\”、“E:\”等等。然后,它為每個邏輯驅動器創建兩個掃描線程。這意味著,每個邏輯驅動器中的文件都會使用兩個線程進行處理。
忽略兩個系統文件夾:

為了避免對受害者的Windows系統進行破壞,它會忽略兩個系統文件夾及其子文件夾,不對其中的文件進行加密,這兩個文件夾分別是“%WinDir%”(通常為“C:\Windows”)和“%ProgramData%\Microsoft\Windows\Caches”。下圖展示了Phobos檢測當前路徑(“\\?\D:”)是否與它需要忽略的兩個系統文件夾匹配。
如前所述,勒索軟件創建了兩個線程來掃描每個驅動器中的文件。一個線程用于普通掃描(一個文件接著一個文件),另一個線程僅用于與數據庫相關的文件的特殊掃描。我們可以認為這些文件對受害者的價值要大于其他文件。然后,會按照以下擴展名的順序(索引號為0x06)來掃描數據庫文件:
- fdb;sql;4dd;4dl;abs;abx;accdb;accdc;accde;adb;adf;ckp;db;db-journal;
- db-shm;db-wal;db2;db3;dbc;dbf;dbs;dbt;dbv;dcb;dp1;eco;edb;epim;fcd;gdb;
- mdb;mdf;ldf;myd;ndf;nwdb;nyf;sqlitedb;sqlite3;sqlite;
除此之外,勒索軟件還包含兩個擴展名排除列表。其中一個包含了Phobos此前曾使用過的加密文件擴展名,如下所示(索引號為0x07):
- eking;actin;Acton;actor;Acuff;Acuna;acute;adage;Adair;Adame;banhu;banjo;Banks;Banta;Barak;Caleb;Cales;Caley;calix;Calle;Calum;Calvo;deuce;Dever;devil;Devoe;Devon;Devos;dewar;eight;eject;eking;Elbie;elbow;elder;phobos;help;blend;bqux;com;mamba;KARLOS;DDoS;phoenix;PLUT;karma;bbc;CAPITAL;WALLET;
另一個列表包含此變種用于向受害者顯示勒索信息的文件,以及一些Windows系統文件,如下所示(索引號為0x08):
- info.hta;info.txt;boot.ini;bootfont.bin;ntldr;ntdetect.com;io.sys;osen.txt
掃描線程在回調函數中使用這兩個排除列表來過濾文件,以根據其規則進行加密。同時,Phobos還在每個掃描線程中創建了一個加密線程,用于對受害者的文件進行加密。那么,掃描線程和加密線程如何協同工作呢?掃描線程繼續掃描文件,并將具有完整路徑的文件名復制到公共緩沖區中,在選擇一個文件后會設置一個事件。隨后,加密線程就可以從公共緩沖區中獲取文件名并進行加密。
5.3 加密算法和密鑰的使用
Phobos使用AES算法的CBC模式作為其加密文件的加密算法。在我的分析中發現,Phobos的這一變種沒有使用Windows提供的用于AES的內置Crypto API,而是自行實現了AES的功能。
我們知道,當人們在談論AES CBC加密和解密時,通常會提到“IV”和“Key”。
對于其密鑰長度,我們知道Phobos使用256位密鑰(20H字節),這是最強的文件加密。此外,它使用非對稱的公私鑰密碼系統來保護AES密鑰。公鑰包含在索引號為0x2的配置塊中,在解密后使用。
AES密鑰和已經加密的公鑰:

AES密鑰是使用10H字節的隨機數據和10H字節的數據,由解密的公鑰生成的。如下圖所示,在內存窗口的最上方生成了AES密鑰(20H字節),接下來是加密的AES密鑰(80H字節)的相關數據,這部分數據是使用卷序列號“%systemdrive%”(例如受害者系統上的“C:\”)和公鑰生成的,同時還包含函數Sub_401706中的一些解密后的常量值。在加密的AES密鑰之后還有四個字節,其中包含上述兩部分的CRC32哈希值。
一旦受害者提供了系統驅動器卷序列號(使用Phobos中的API GetVolumeInformationW())、加密的AES密鑰以及其他常量值數據,攻擊者就可以使用其持有的私鑰來還原AES密鑰。加密的AES密鑰將被記錄在加密的文件中,稍后我們將分析加密的文件結構。正因如此,在勒索提示信息中要求了受害者提供系統驅動器的卷序列號。
IV(初始向量)數據的長度為10H字節,通常是隨機生成的。它也像加密的AES密鑰一樣,記錄在加密的文件中。IV與AES密鑰共同用于數據加密,就如同MD5算法中的鹽一樣。
在獲得IV數據和AES密鑰之后,就可以對加密的文件進行解密。
5.4 用于加密文件的線程
如上所述,加密線程是由掃描線程啟動。在掃描線程選擇文件后,就會將該文件的完整路徑復制到加密線程的公用緩沖區,該緩沖區由掃描線程通知(設置事件對象)。
然后,它將配置塊中的格式字符串(索引號0x04)解密為那些加密文件的新文件擴展名,如下所示,其中的“<
- .id[<>-2987].[wiruxa@airmail.cc].eking
具有新擴展名的加密文件:

這一過程只是使用新的擴展名,對加密文件進行重命名的操作。這一次,由掃描線程選擇和過濾的文件是“\\?\E:\test_file.txt”,其加密的文件名是“\\?\E:\test_file.txt.id[[581F1093-2987].[wiruxa@airmail.cc].eking”。
然后,繼續讀取所選擇文件的內容(例如“E:\test_file.txt”)。我們知道AES加密塊的大小固定為10H字節。因此,如果要加密的數據大小沒有與10H對齊,就需要使用填充數據來附加在原始數據的后面,以解決該問題。Phobos勒索軟件使用的填充字符為“00”。
調用AES_CBC_Encrypt()函數來加密文件內容:

上圖顯示了Phobos調用AES_CBC_Encrypt()函數,其參數arg0是一個密鑰對象(AES_CTX Struct),其中包含用于加密文件內容的IV和密鑰(填充了三個“00”)。
加密后,Phobos通過調用API WriteFile()將密文保存到加密文件中(例如“E:\test_file.txt.id[[581F1093-2987].[wiruxa@airmail.cc].eking”),如下圖所示。
將密文保存到加密文件中:

加密的文件內容由兩部分組成,第一部分是原始文件內容的密文,第二部分是一組數據,我們稱之為decryption_config_block,它用于解密第一部分。下圖展示了加密文件內容的截圖,我們主要分析一下decryption_config_block中包含的內容。
加密后的文件內容示例:

前10H字節(使用紅色標記)是加密的原始文件內容。后面的40H字節(使用藍色標記)是一個加密塊,其中包含一些常量值以及原始文件名,這些文件使用相同的AES密鑰和IV進行加密。隨后的14H字節“00”可以視為是數據定界符。后面的10H字節(使用黑色標記)是這個文件的IV數據。接下來的Dword 0x03負責通知原始文件內容附加填充的大小。有80H數據塊(使用綠色標記)是加密的AES密鑰的相關數據,該數據在掃描線程中生成,并且對于不同的掃描線程來說是不同的。下面的Dword 0xF2是整個decryption_config_block的大小。最后的6個字節“4B E5 1F 84 A9 77”是從配置塊中索引號為0x00的位置解密獲得的。
之后,Phobos要做的最后一件事就是調用API DeleteFileW()來清除受害者系統中的原始文件。
5.5 掃描網絡共享資源
該線程函數用于網絡共享資源。Phobos使用參數dwScope的不同值來多次調用API WNetOpenEnum()。這些參數值分別是RESOURCE_CONNECTED、RESOURCE_RECENT、RESOURCE_CONTEXT、RESOURCE_REMEMBERED和RESOURCE_GLOBALNET。
RESOURCE_CONNECTED:列舉所有當前連接的資源;
RESOURCE_RECENT:列舉所有最近連接的資源;
RESOURCE_CONTEXT:僅列舉調用方的網絡上下文中的資源;
RESOURCE_REMEMBERED:列舉所有記住的(持久)連接;
RESOURCE_GLOBALNET:列舉網絡上的所有資源。
在這里,使用到WNetOpenEnumW()和WNetEnumResourceW()這兩個API來枚舉網絡共享資源。
在成功獲取到其中的一種資源后,Phobos將使用上面的資源的完整地址(例如\\?\UNC\{resource name}\{folder name}),運行5.2中所描述的兩個掃描進程,開始掃描并篩選其中的文件。隨后,如5.4中所描述的,掃描線程啟動加密線程,并對選擇的文件進行加密。
針對其中一個共享資源,準備啟動掃描線程:

上圖展示了通過RESOURCE_CONNECTED獲取的共享資源(“\\?\UNC\VBoxSvr\vbox_share_folder”),該資源調用Sub_405840函數,從而針對這個共享資源啟動新的掃描線程。
5.6 用于監視和掃描新邏輯驅動器的線程
我們之前分析過,Phobos會掃描本地邏輯驅動器以及網絡共享資源上的文件,這些都是受害者系統當前的所有資源。
然而,還有另外一個線程,其主要任務是監視新的邏輯驅動器。例如,受害者如果連接了U盤或手機,Windows系統會將其視為新的邏輯驅動器。這個過程會被這一線程捕獲。該線程每秒運行一次檢測,并對檢測到的任何新邏輯驅動器啟動兩個新的掃描線程。下圖展示了該線程功能的邏輯結構偽代碼。
用于掃描新邏輯驅動器的偽代碼:

0x06 向受害者顯示勒索提示信息
Phobos的主線程會等待所有掃描線程和加密線程完成工作。然后,將info.hta(HTML版本勒索提示信息)和info.txt(TXT版本勒索提示信息)這兩個文件拖放到桌面以及受害者系統上可用邏輯驅動器的根目錄中。它還使用“open”命令調用API ShellExecuteExW(),以在受害者的屏幕上打開HTML版本的info.hta,如下圖所示。
向受害者顯示勒索提示信息:

0x07 總結
在這篇文章中,我對Phobos勒索軟件的EKING變種進行了深入分析。我們介紹了如何從原始MS Word文檔樣本中下載Payload文件(cs5.exe),以及Phobos采取了哪些措施來使其在受害者的系統上持久存在。
我們深入分析了Phobos的核心任務——掃描并加密受害者系統上的文件。經過分析之后,我們現在知道,它不僅僅會掃描邏輯驅動器上的文件,還會掃描網絡共享資源和新連接的邏輯驅動器。在最后,我們分析了Phobos的變種是如何使用多個線程來完成其工作的。
最后,我們解釋了Phobos在完成加密后如何向受害者顯示其勒索提示信息。
為了保護設備免受惡意軟件的攻擊,我們建議不要打開不受信任來源的電子郵件附件。
0x08 防護方案
使用Web過濾、反病毒和內容安全產品,可以防范Phobos變種的攻擊,例如:
FortiGuard Web過濾服務將下載URL標記為“惡意網站”;
FortiGuard反病毒服務將Word文檔和下載的Payload文件檢測為“VBA/Agent.KBU!tr”和“W32/Phobos.HGAF!tr.ransom”并阻止;
FortiSandbox將Word文檔檢測為風險軟件;
使用FortiMail的用戶可以檢測到原始Word文檔,并通過CDR服務進一步加強保護,該服務可以用于消除Office文檔中的宏威脅。
此外,為了防止設備遭受到惡意軟件攻擊,我們建議用戶不要打開不受信任來源的電子郵件附件。我們強烈建議對所有最終用戶進行關于如何甄別潛在惡意郵件的培訓。
0x09 威脅指標
9.1 網址
hxxp://178[.]62[.]19[.]66/campo/v/v
9.2 樣本SHA-256
Word文檔:
667F88E8DCD4A15529ED02BB20DA6AE2E5B195717EB630B20B9732C8573C4E83
Phobos Payload:
6E9C9B72D1BDB993184C7AA05D961E706A57B3BECF151CA4F883A80A07FDD955
0x0A 參考
https://id-ransomware.blogspot.com/2017/10/phobos-ransomware.html
本文翻譯自:https://www.fortinet.com/blog/threat-research/deep-analysis-the-eking-variant-of-phobos-ransomware如若轉載,請注明原文地址。