上集提到，2023年7月，一起由Earth Preta集團所發動的APT攻擊瞄準歐洲國家，同年一封攻擊台灣政府的魚叉式網路釣魚電子郵件挾帶了一個客製化PlugX惡意程式，而SMUGX也同樣用到這個惡意程式。它們從2022至2023年期間不僅攻擊了台灣，也攻擊越南、馬來西亞以及其他亞洲國家。接著說明通用版PlugX惡意程式、DOPLUGS如何與KillSomeOne模組整合。
本文聚焦Earth Preta攻擊行動並針對DOPLUGS惡意程式變種提出分析，包括它的後門指令行為、與KillSomeOne模組的整合，以及該程式的演變。上集文章已經介紹了誘餌與受害者、利用魚叉式網路釣魚郵件突破防線、攻擊工具分析、DOPLUGS下載器等章節，以下繼續未完的內容說明。
通用版PlugX惡意程式介紹
接著介紹通用版PlugX惡意程式，也就是DOPLUGS經由後門指令0x3004下載的檔案。很幸運地，從CC伺服器下載到兩種類型的最終惡意檔案來進行分析，而表1顯示下載到的檔案。
根據Palo Alto發表的一份報告，這些通用版PlugX惡意程式的樣本有可能是從THOR PlugX修改而來，基於以下幾點觀察，如圖1～圖3所示：
‧兩者在DLL載入器部分的程式碼結構相似
‧兩者在進入PlugX主函式之前的shellcode相同
‧兩者擁有相同的指令列執行參數
第一類型
當DOPLUGS啟動adobe_licensing_wf_helper.exe檔案時，指令列將無任何參數（表2），其執行流程如下： 1. 檔案adobe_licensing_wf_helper.exe會安裝和建立常駐機制。 2. adobe_licensing_wf_helper.exe600 0會將自己注入到%SystemRoot%\system32\WerFault.exe並傳入601 0當作參數。 3. 檔案%SystemRoot%\system32\WerFault.exe 601 0會執行後門指令。
第一個參數的功能，則如表3所示。
第二類型
第二類型通用版PlugX惡意程式，如表4所示。
指令列參數從6xx換成了7xx，但參數的功能仍維持不變，如圖4所示。
另一個部分是組態設定的解密。在第一類型PlugX惡意程式中，組態設定區段是以解密後的純文字顯示，但在第二類型當中卻仍然維持加密狀態，組態設定資料只有在處理程序需要用到時才會使用qwedfgx202211這個RC4金鑰來將它解密，如圖5～圖7所示。而第二類型PlugX惡意程式的組態設定區段結構，如表5所示。
與KillSomeOne整合
在試圖尋找更多DOPLUGS相關樣本時，發現了一個DOPLUGS變種具備KillSomeOne的功能。KillSomeOne模組是一個專門經由USB來散播惡意程式、蒐集資訊及竊取文件的外掛模組。它可用來擴充感染能力，讓駭客突破防線的手段不會侷限在只有網路釣魚或誘餌文件。
KillSomeOne模組最早是由Sophos在一份2020年的報告中披露。KillSomeOne模組的DOPLUGS變種與先前分析到的DOPLUGS變種極為相似，唯一的差異在於感染的方式，它總共有四個元件：一個合法的執行檔、一個惡意的DLL、一個加密的惡意檔案，以及一個加密的PE檔案。這個變種比以往多了一個啟動器檔案，用來執行合法的執行檔以便將DLL側載（表6）。
載入器
使用Golang編譯的載入器（InstanceFinderDlgUI.dll）是唯一找的一個，圖8顯示它所包含的函式，而其執行流程如下：
1. 讀取同一資料夾中的InstanceFinderDlg.dat加密惡意檔案。
2. 使用XOR搭配單一金鑰「0x73」將加密惡意檔案解密。
3. 從main_NTCreateThreadEx進入解密後的惡意檔案。
惡意檔案的行為
惡意檔案處理程序與一般的DOPLUGS變種類似。其函式會檢查HPSmart.exe這道指令的參數部分。第一次執行時不帶參數：它只會建立常駐機制，然後重新啟動自己並帶入參數，參數是一個隨機的三位數號碼。表7列出其指令列參數與對應的行為。
建立常駐機制
以下是建立常駐機制的步驟：
1. 將所有檔案複製到安裝目錄（C:\Users\Public\HPSmartMZWx\）。
2. 在系統登錄機碼Software\Microsoft\Windows\CurrentVersion\Run底下建立「C:\Users\Public\HPSmartMZWx\HPSmart.exe xxx」這個數值以便常駐。
3. 建立處理程序C:\Users\Public\HPSmartMZWx\HPSmart.exe xxx。
KillSomeOne執行緒
KillSomeOne執行緒有兩項主要行為：第一是清除之前的PlugX惡意程式留下來的所有痕跡，包括檔案、處理程序、系統登錄，以及排程工作，如表8所示。
第二項行為與USB感染有關，它會使用API函式DeviceIoControl搭配參數0x2d1400來搜尋USB隨身碟。接著，它會在目標USB隨身碟中產生三個執行緒，以下詳細說明。
這個執行緒會建立以下的mutex作為標記：USB_NOTIFY3_INF_{USB_volume}。在蠕蟲行為開始前，會先設好以下這些系統登錄機碼來隱藏檔案的副檔名，以及惡意程式與偷來文件所在的資料夾：
HKCU\Software\Microsoft\Windows\ CurrentVersion\Explorer\Advanced, Hidden=0 HKCU\Software\Microsoft\Windows\ CurrentVersion\Explorer\Advanced, ShowSuperHidden=0 HKCU\Software\Microsoft\Windows\ CurrentVersion\Explorer\Advanced, HideFileExt=1
被感染的USB隨身碟上有四個元件會被複製到隱藏的資料夾，如圖9所示：
‧HPReport.exe複製成{USB_volume}:\Usb Drive\1.0\5.dat
‧HPSmart.exe複製成{USB_volume}:\Usb Drive\1.0\6.dat
‧InstanceFinderDlgUI.dll複製成{USB_volume}:\Usb Drive\1.0\2.dat
‧InstanceFinderDlg.dat複製成{USB_volume}:\Usb Drive\1.0\InstanceFinderDlg.dat
解密後的啟動器HPReport.exe會複製成{USB_volume}:\Usb Disk ({free space of USB}).exe（偽裝成USB隨身碟），並以opn-U({free space of USB}).cmd的名稱複製到以下資料夾：
{USB_volume}:\AVAST\Protection for Autorun\ {USB_volume}:\SMADAV\SMADAV\ {USB_volume}:\Removable Disk\
KillSomeOne模組專門經由USB感染，啟動器會假扮成一個USB隨身碟來引誘受害者點選它，除非使用者特別查看它的副檔名，否則不容易看出來（圖10）。啟動器的作用很簡單：將2.dat重新命名為InstanceFinderDlgUI.dll，然後執行6.dat，這是負責側載InstanceFinderDlgUI.dll檔案的執行檔。
這些資料夾中的所有檔案會被複製到{USB_volume}:\Usb Disk\：
{USB_volume}:\ {USB_volume}:\Kaspersky\ {USB_volume}:\Kaspersky\Usb Drive\ {USB_volume}:\Usb Drive\3.0\ {USB_volume}:\Kaspersky\Removable Disk\（包括檔案與子資料夾） {USB_volume}:\AVAST\Protection for Autorun\（包括檔案和子資料夾） {USB_volume}:\SMADAV\SMADAV\（包 括子資料夾中的檔案）
這個執行緒會建立以下mutex作為標記：USB_NOTIFY3_COP_{USB_volume}。它竊取資料的情況有兩種，第一種情況是「竊取文件」。如果它能夠成功連線至「https://www.microsoft.com/」，就會在下列資料夾中檢查檔案的副檔名：
{USB_volume}:\Kaspersky\Usb Drive\1.0\ {USB_volume}:\Usb Drive\1.0\ {USB_volume}:\.System\Device\ USB\3.0\Kaspersky\Usb Drive\1.0 {USB_volume}:\.System\Device\ USB\3.0\Usb Drive\1.0\
如果副檔名不是.cmd、.bat或.dll，而且檔案名稱不是RECYCLERS.BIN，那就會將檔案傳送到「%userprofile%\AppData\Roaming\Render\1.0\」，並且將原本的檔案內容清空。
此外，也發現它有另一項功能，但截至本文撰稿為止似乎還並未實作。此功能會蒐集同一目錄下的所有檔案，並尋找包含副檔名.doc、.docx、.ppt、.pptx、.xls、.xlsx、.pdf的檔案。
接著，它會將檔案名稱編碼（base64）、將檔案內容加密，然後將檔案複製到當前處理程序所在的資料夾。以下是將偷來的檔案加密的XOR演算法：
encrypted_contents = [ ] encrypted_key = 0x6D for i in range(len(contents)): encrypted_contents.append (contents[i] ^ encrypted_key) encrypted_key += 0xAA
第二種情況為「竊取受害者資訊」。如果前述連線失敗，那這個執行緒就會檢查系統登錄機碼的數值(HKCU|HKLM)\System\CurrentControlSet\Control\Network\Version，而它並不存在。接著，它會產生並執行%temp%\edg{value of QueryPerformanceCounter}.bat這個批次檔腳本來蒐集受害者的資訊：
%comspec% /q /c systeminfo >"%~dp0AE353BBEB1C6603E_E.dat" %comspec% /q /c ipconfig /all >>"%~dp0AE353BBEB1C6603E_E.dat" %comspec% /q /c netstat -ano >>"%~dp0AE353BBEB1C6603E_E.dat" %comspec% /q /c arp -a >>"%~dp0AE353BBEB1C6603E_E.dat" %comspec% /q /c tasklist /v >>"%~dp0AE353BBEB1C6603E_E.dat" del %0
所有的輸出都會經過加密之後寫入{USB_volume}:\Usb Drive\1.0\ {value of SOFTWARE\CLASSES\ms-pu\CLSID}.dat這個檔案。
這個執行緒會建立以下mutex作為標記：USB_NOTIFY_BAT_H3_{USB_volume}，它只有在以下條件成立時才執行：
‧當連線至https://www.microsoft.com失敗。
‧當系統登錄機碼System\\CurrentControlSet\\Control\\Network\\version的數值不存在（這個系統登錄機碼會在指定了指令列參數「-net」時啟用）。
此外，執行緒會搜尋下列資料夾中的所有批次檔腳本：
{USB_volume}:\Usb Drive\1.0\p\ {USB_volume}:\Kaspersky\Usb Drive\1.0\p\ {USB_volume}:\.System\Device\ USB\3.0\Usb Drive\1.0\p\
如果批次檔腳本的名稱當中不含tmpc_或tmp字串，那麼就使用XOR演算法將腳本解密，這也是前面執行緒2當中所使用的檔案加密演算法。接著，產生新的批次檔腳本%temp%\{value of QueryPerformanceCounter}.bat並使用ShellExecuteW來加以執行，內容如下：
{USB_volume} cd "{USB_volume}:\target folder\" {decrypted contents in batch file} del %0
這個行為與原始的DOPLUGS惡意程式相同，負責執行CC通訊、後門指令，並且下載下一階段的通用版PlugX惡意程式。
以下指令是用來設定排程工作以便啟用Wi-Fi連線：
cmd.exe /c schtasks.exe /create /sc minute /mo 30 /tn "Security WIFI Script" /tr "netsh interface set interface """Wireless Network Connection""" enabled" /ru SYSTEM /F&schtasks.exe / run /tn "Security WIFI Script" cmd.exe /c schtasks.exe /create / sc minute /mo 30 /tn "Security WIFI2 Script" /tr "netsh interface set interface """Wireless Network Connection 2""" enabled" /ru SYSTEM / F&schtasks.exe /run /tn "Security WIFI2 Script" cmd.exe /c schtasks.exe /create / sc minute /mo 30 /tn "Security WIFI3 Script" /tr "netsh interface set interface """Wireless Network Connection 3""" enabled" /ru SYSTEM / F&schtasks.exe /run /tn "Security WIFI3 Script"
舊的變種
除了DOPLUGS之外，也追查到有幾個客製化PlugX惡意程式樣本同樣也具備了KillSomeOne模組。根據調查，這樣的整合應該已經存在三年，而率先揭露此技巧的應該是Avira發布的報告。Avira的報告中提到的樣本是第一個含有KillSomeOne模組的PlugX變種，其設計是要經由USB來散播。表9列出已整合KillSomeOne模組的PlugX惡意程式。
在檢查過這些PlugX惡意程式變種的後門指令之後，發現還有一個變種是從DOPLUGS轉變到Hodur。此版本保留了通用版PlugX惡意程式的磁碟模組，不過客製化後門指令卻改成像增強版DOPLUGS一樣（有別於原始的DOPLUGS變種沒有任何來自通用版PlugX惡意程式的模組）。另一個令人驚訝的特點是，KillSomeOne + Hodur變種的CC伺服器還分成兩類：第一類是一般用來接收後門指令的CC伺服器，第二類是設計用來下載要注入svchost.exe處理程序的惡意檔案。
結語
Earth Preta主要鎖定的目標是全球的政府機關，尤其是亞太和歐洲地區。就趨勢科技的觀察來看，Earth Preta偏好在攻擊中使用魚叉式網路釣魚搭配Google Drive連結。
以上解釋了DOPLUGS惡意程式的用途，這是Earth Preta用來下載通用版PlugX惡意程式的主要工具之一（它自從2022年便已經在使用）。在追查其他樣本的過程中，也發現了一個整合了KillSomeOne模組的DOPLUGS變種，而且最早可追溯至2018年，這顯示Earth Preta長久以來一直在不斷精進他們的工具，不時會增加新的功能和特色。
在調查Earth Preta活動的這段期間，發現該集團仍相當活躍，尤其在歐洲和亞洲。未來很有機會再聽到該集團的更多消息，所以資安團隊最好熟悉Earth Preta的運作方式。
＜本文作者：Trend Micro Research 趨勢科技威脅研究中心本文出自趨勢科技資安部落格，是由趨勢科技資安威脅研究員、研發人員及資安專家全年無休協力合作，發掘消費者及商業經營所面臨層出不窮的資安威脅，進行研究分析、分享觀點並提出建議。＞