新的 APT Group Earth Berberoka 以新舊惡意軟件攻擊賭博網站
新的 APT Group Earth Berberoka 以新舊惡意軟件攻擊賭博網站
我們最近發現了一個新的高級持續威脅 (APT) 組,我們稱之為 Earth Berberoka(又名 GamblingPuppet)。根據我們的分析,該組以賭博網站為目標。我們的調查還發現,Earth Berberoka 以 Windows、Linux 和 macOS 平臺為目標,并使用了歷史上被認為是講中文的人的惡意軟件系列。
在此博客條目中,我們概述了 Earth Berberoka 在其活動中使用的 Windows 惡意軟件系列。該惡意軟件陣容包括經過驗證且已升級的惡意軟件系列,例如 PlugX 和 Gh0st RAT,以及我們稱為 PuppetLoader 的全新多階段惡意軟件系列。
我們在研究論文“Operation Earth Berberoka:多向量和多平臺 APT 分析”中討論了 Earth Berberoka 針對 Linux 和 macOS 以及 Windows 的惡意軟件系列的全部技術細節、感染媒介、目標以及與其他 APT 組的可能聯系針對在線賭博網站的廣告系列。”
技術分析
木偶裝載機
我們發現了一個新的惡意軟件家族,我們稱之為 PuppetLoader。它是一個復雜的五階段惡意軟件家族,使用了一些有趣的技術,包括劫持加載的模塊以啟動惡意代碼,以及將惡意負載和模塊隱藏在修改后的位圖圖像 (BMP) 文件中。
第 1 階段:混淆器和加載器
RC4 實施不正確
在此階段,使用硬編碼密鑰 (2726c6aea9970bb95211304705b5f595) 和似乎是 RC4 (Rivest Cipher 4) 算法的方式對一組有效負載數據進行解密。但是,密碼的偽隨機生成部分中的密碼“交換”操作沒有正確實現。這導致僅對標頭和有效負載的前幾部分進行了正確加密,而后面的部分幾乎完全以明文形式保留。
似乎這種硬編碼密鑰和有缺陷的 RC4 實現也被用于名為 TigerPlug 的惡意軟件家族中,可能是因為它傳播了 PlugX 惡意軟件。我們沒有發現關于其行為和特征的公開報道。
劫持加載的模塊
載荷解密后,它被加載到機器的內存中,并使用一種隱蔽的方法執行:PuppetLoader 首先從 Windows\System32 目錄加載一個合法的 DLL。然后劫持加載過程以用惡意庫替換合法庫。這是通過掛鉤 NTDLL API 來完成的,例如 NtQueryAttributesFile、NtOpenFile、NtCreateSection、NtMapViewOfSection、NtQuerySection 和 ZwClose。
加載程序使用未記錄的 NTDLL API,例如 RtlPushFrame、RtlPopFrame 和 RtlGetFrame, 以避免遞歸預訂,當掛鉤函數間接調用自身時會發生這種情況。
為了正確加載惡意負載,分配標記為“LDFM”的幀并填充必要的參數,例如文件名的內存地址和分配的緩沖區句柄或包含惡意負載的地址。在確定它們的值后,一些參數會立即設置,而其他參數則稍后設置。

圖 1. LDFM 加載框架
然后調用 LdrLoadDll 來加載合法的 asyclfilt.dll 庫。之后,調用之前掛鉤的 API 函數,導致加載的 DLL 名稱被替換為 lz32.dll, 這是一個合法的 DLL。然后,這個合法 DLL 的內容會被掛接的 NtMapViewOfSection 函數內的惡意負載替換。
然后,LdrLoadDll 函數對新加載的惡意圖像進行變基并加載所有需要的依賴項。一旦從 LdrLoadDLL 函數返回句柄,惡意軟件就不再需要幀,這就是為什么它通過調用 RtlPopFrame 彈出幀,解開之前掛鉤的函數,并通過調用 GetModuleHandleW (asycfilt.dll) 驗證加載是否成功.
然后,惡意軟件會動態解析名為 Install 的導出函數,并將參數值設置為“11BF29E1371C0D83C530BD1BF346”,然后解密為名為 OneTime 的函數。對于其命令行參數,PuppetLoader 使用相同的有缺陷的 RC4 實現,使用密碼“whk0q9ogev6ofg8d”。
這些劫持步驟導致以下結果:
- 通過解析PEB_LDR_DATA結構可以看到加載的asycfilt.dll模塊,該結構包含當前進程中所有加載的模塊。

圖 2. 加載的模塊名稱中顯示的 asycfilt.dll
- lz32.dll是基于進程監控工具打開的。

圖 3. 打開的文件中顯示的 lz32.dll
- 僅加載了 PuppetLoader 的 dropper 有效負載,并且沒有實際加載前面提到的庫。
第 2 階段:滴管
dropper 在受感染的機器中創建并刪除多個文件。

硬編碼的 GUID ({78106D5F-CD1A-A8C4-A625-6863092B4BBA}) 被插入到 CPuppetProcessFileSharer (C:\\Users\\Public\\Pictures\\Desktop.inf)。我們認為它可以作為第 2 階段已經完成的標志。
Config.ini (C:\Users\Public\Videos\Config.ini) 包含 GUID 和原因,它是使用密鑰 (whk0q9ogev6ofg8d) 加密的硬編碼值“ StartupBasicLoader ” 。
svchost.exe 使用以下命令行參數以掛起模式啟動:
-cmd -NoModuleLoadDLL -DisplayName=KeepAuthority.Client.MainConsole.x64.Release -InvokeMethodName=Run -InokeMethodParam=NULL”
這也使用前面提到的密鑰進行了加密,并在 svchost.exe 中創建了一個新線程,以使其加載 BasicLoader 有效負載 MSVCPX00.dll。有趣的是,“-InokeMethodParam”中有一個印刷錯誤。
第 3 階段:BasicLoader
BasicLoader 階段首先將硬編碼的 GUID ({78106D5F-CD1A-A8C4-A625-6863092B4BBA}) 添加到 CPuppetProcessFileSharer。與第 2 階段一樣,我們認為這可能是第 3 階段開始運行的標志。
BasicLoader 在 Users\\Public 中的目錄(桌面、文檔、下載、音樂、圖片和視頻)中搜索 BMP 文件。它會檢查每個目錄中是否存在將通過所需結構的 BMP 文件。對于這樣做的 BMP 文件,附加到 BMP 文件的有效負載被解密、加載到內存中并執行。BMP 文件僅由 33 x 11 像素和 338 字節組成,附加到它的數據是使用相同有缺陷的 RC4 實現加密的有效負載。
圖 4. 一個小 BMP 文件,其中附加了加密的有效負載
第 4 階段:核心
當硬編碼的 GUID ({7D8DA9DC-1F3B-2E5C-AA59-9418E652E4AA}) 添加到 CPuppetProcessFileSharer 時,此階段開始。與其他階段類似,這可能是第 4 階段開始運行的標志。
在此之后,惡意軟件啟動系統記錄器線程,其中記錄的信息通過管道接收并保存到具有硬編碼名稱的文件中。記錄的信息可以來自其他模塊或進程。根據我們的分析,每個日志文件條目由分隔符 (0xAABBCCDD) 分隔,后跟自定義 RC4 密碼和消息長度。
解密后的日志可以包含以下信息:
- 運行的模塊
- 運行此模塊的參數
- 在哪個階段(來自 CPuppetProcessFileSharer 的 GUID)執行了操作
圖 5. Core 的解密日志
在此階段還實現了以下命令行參數:
- -顯示名稱
- -InokeMethodParam(原文如此)
- -InvokeMethodName
- -NoModuleLoadDLL
- -LoadShellcode
雖然其他參數大多是不言自明的,但我們強調兩個值得注意的參數:-NoModuleLoadDLL 使用與階段 1 加載器相同的技術,-LoadShellcode 分配一個內存塊,復制 shellcode 并執行它。
第 5 階段:Client.MainConsole
這是用 C++ 編寫的主要客戶端二進制文件,是 PuppetLoader 感染鏈的最后階段。
代碼由處理不同任務的幾個類構成,例如管理交互式 shell、上傳和下載文件、安裝新模塊、監控受害者行為以及在滿足條件時執行回調函數。
- CPipeCmdManager – 交互式外殼管理器
論據:
-flushusersession
-createcmd
-destorycmd(原文如此)
-執行命令
-cmdkeepalive
- CommonLib::CcmdMulArgDecoder – 命令行參數解碼器,與命令行參數相關的附加模塊
論據:
-模塊日志
-LogText
-模塊ID
-模塊版本
-MountStatus
-小路
-IsDelete
-ModuleKeepAlive
-上傳文件
然后,客戶端通過 UDP(用戶數據報協議)與命令和控制 (C&C) 服務器建立通信,并識別不同類型的自定義 UDP 數據包:

主客戶端實現的后門功能有:
- 交互式外殼
- 上傳文件
- 下載文件
- 列出文件
- 終止進程
- 列出進程
- 安裝模塊
- 登錄回調
- 枚舉 RDP 會話
通過 UDP 的通信協議使用相同的 RC4 加密。發送和/或接收的數據包包含一個 16 字節的 RC4 密鑰和一個 RC4 加密有效負載的長度,然后是另一個帶有加密有效負載本身的數據包。
或
我們在調查期間獲得了 Windows 和 macOS 樣本的另一個惡意軟件家族是 oRAT。有趣的是,這是我們第一次分析這個用 Go 語言編寫的惡意軟件家族的樣本。
我們在分析中發現的 oRAT 釋放器是使用 Electron JS 框架和 DMG(磁盤映像)文件構建的 MiMi 聊天應用程序。我們在研究論文中討論了兩者的全部細節。
對于 Windows 和 macOS 示例,這些示例都標記為 0.5.1 版,并且具有相同的功能和配置。
配置文件和 AES 解密密鑰以加密形式附加到 PE(便攜式可執行文件)文件覆蓋層。
圖 6. 解密的 oRAT 配置
配置使用 AES-GCM(AES with Galois/Counter Mode)算法進行解密。然后,惡意軟件對其進行解析并啟用網關或流量轉發器模式(如果在配置設置中指定)。
為了讓惡意軟件操作員直接連接到受感染的機器并通過 GET 或 POST 請求執行命令,惡意軟件會啟動受感染機器上的本地服務器,以偵聽在配置設置中為控制命令指定的端口。
網絡通信可以是純文本或加密的,具體取決于文件的配置:
- 純文本的“tcp”
- “stcp” 用于使用golang-tls 庫的加密 TCP 通信
- “sudp”用于使用Quic-go 庫的加密 UDP 流量
控制服務器是通過注冊路由來實現的。這種簡單的機制導致將 GET/POST 請求直接轉換為內部 Go 命令。因此,請求 URL 會導致在受感染的系統上執行相應的代碼。
我們獲得了注冊這些路由的 oRAT 樣本:
- 獲取/代理/信息
- 獲取/代理/ping
- 發布/代理/上傳
- 獲取/代理/下載
- 獲取/代理/截圖
- 獲取/代理/壓縮包
- 獲取/代理/解壓縮
- 獲取 /agent/kill-self
- 獲取/代理/端口掃描
- 獲取/代理/代理
- 獲取/代理/ssh
- 獲取/代理/網絡
PuppetDownloaders(C++ 下載器)
在我們的調查過程中,我們還發現惡意網站分發虛假的 Adob??e Flash Player 更新,這些更新實際上是在提供 C++ 下載器。
感染始于用 C++ 編寫的可執行文件,該可執行文件通過 Winsock API 連接到特定端口中的域或 IP 地址。下載的內容保存為 SMTemp.dat,并使用可執行文件的文件名和硬編碼的 XOR 密鑰,解密名為 Loader.dll 的文件并將其復制到磁盤。如果可執行文件因任何原因被重命名,DLL 解密將失敗,并且惡意軟件的第二階段不會通過。
如果 SMTemp.dat 文件存在,Loader.dll 文件將執行它。之后,加載程序解密一個合法的 Adob??e Flash Player 安裝程序并執行它,以欺騙受害者認為可執行文件是一個合法的安裝程序。
在調查過程中,我們注意到托管 PuppetDownloaders 惡意軟件負載第二階段的服務器處于離線狀態。值得注意的是,該惡意軟件的字符串解密例程是一個簡單的 XOR,其密鑰為字符串“2020-05-24 13:00:29”。用于解碼字符串的密碼的前 13 個字節與后 13 個字節相同。
圖 7. XOR 解密例程
我們將這些下載器稱為 PuppetDownloaders,因為它們與 PuppetLoader 惡意軟件家族相關聯,我們的觀察證明了這一點:
- 該惡意軟件和 PuppetLoader 都使用相同的字符串解密例程,該例程使用相同的密鑰。
- 該惡意軟件和 PuppetLoader 都使用相同的 XOR 密鑰 (2726c6aea9970bb95211304705b5f595),用于解密嵌入式 Loader.dll 文件。
- 該惡意軟件和 PuppetLoader 的解密 Loader.dll 共享類似的字符串,例如“[-] UnExist pwszModuleFunName:”。這表明使用了一個通用框架來編譯這兩個 DLL。
MFC 套接字下載器
我們還看到 WinRAR 自解壓 (SFX) 文件丟棄了使用 Microsoft 基礎類庫 (MFC) 框架編寫的下載器。這些 MFC 套接字下載器具有相同的結構:一個函數創建一個套接字,連接到域或 IP 地址,發送一個短字符串,然后調用兩次“recv”。
代碼流通過調用 EnumDesktopsA 或 EnumWindows 重定向,其回調函數指針指向下載的內容。
下載器嘗試訪問端口 8080、29527 和 8885。它們還將字符串“feiji”、“@5436”和“fhfgj@jfggdsg”發送到套接字。我們發現了同一惡意軟件家族的多個額外樣本,它們具有相同的結構并發送相同的字符串。但是,多個組可能會秘密共享此惡意軟件的源代碼。
插頭X
PlugX是一種遠程訪問工具 (RAT),十多年來一直被用作間諜活動的惡意工具。根據我們獲得和分析的樣本,我們發現 Earth Berberoka 使用 PlugX 以 32 位和 64 位架構為目標。
該惡意軟件系列在 HELLO 數據包中發送一個 DWORD,一個 32 位無符號整數。然后,受感染的系統將看起來像“yyyymmdd”格式的日期的 HELLO 數據包發送到 C&C 服務器。
我們在分析的多個樣本中發現了以下 DWORD,這表明我們發現的版本是在過去三年內開發的:20190520、20201106 和 20210804。
我們發現的所有樣本都以相同的方式加載:一個容易受到 DLL 側載攻擊的合法且簽名的文件被放置在一個惡意 DLL 旁邊,該惡意 DLL 解密并加載包含最終有效負載的第三個文件。
這些惡意 DLL 文件之一具有 PDB(程序數據庫)路徑 C:\Users\Administrator\Desktop\Plug7.0(Logger)\logexts\x64\Release\logexts.pdb。
Gh0st RAT
我們還看到了Gh0st RAT的至少三種不同變體,這是另一個已經存在10 多年的惡意軟件家族,被用于 Earth Berberoka 的活動。這個惡意軟件家族的源代碼是公開的,這就是它有很多變種的原因。
我們分析的其中一個變體有一個有趣的破壞性特征:它取代了主引導記錄 (MBR) 以顯示明確的消息(“我是病毒!F*ck you :-)”)。這條 Gh0st RAT 變種受害者的公開報告中也顯示了這一特定信息。2017 年工業控制系統網絡應急響應小組 (ICS-CERT)報告還討論了 Gh0st RAT 變體如何擦除 MBR 并將其替換為不同樣本中不同的消息。
其他已知的惡意軟件系列
我們還發現 Earth Berberoka 濫用了其他合法工具,以及該組織在其活動中使用的惡意軟件系列:
- Quasar RAT——一種基于 Windows 的開源 RAT,已被 APT 組織用于網絡攻擊
- AsyncRAT – 一種開源 RAT,可用于通過加密連接遠程監控和控制設備
- Trochilus – 一種可以逃避沙盒分析的隱形 RAT,可用于網絡間諜活動
安全建議
我們的分析指出,Earth Berberoka 擁有多種工具和龐大的基礎設施來瞄準東南亞賭博市場。為避免成為 Earth Berberoka 攻擊的受害者,賭博網站的用戶和運營商可以采用以下安全建議:
- 在點擊鏈接或下載應用程序之前,正確審查電子郵件、網站和應用程序。
- 僅從受信任的來源下載應用程序。
- 注意惡意網站標志,例如語法和拼寫錯誤。
- 通過托管電子郵件安全和反垃圾郵件保護阻止通過電子郵件到達的威脅,例如惡意鏈接。
- 使用有助于檢測、掃描和阻止惡意 URL 的多層安全解決方案。
我們調查的全部技術細節可以在我們即將發表的研究論文中找到。 我們在單獨的文本文件中列出了Windows、Linux和macOS的妥協指標 (IOC)。我們還在單獨的文本文件中 提供域列表。