惡意程式
Noodle RAT:重新檢視中國駭客集團使用的新後門程式
本文分析 Noodle RAT 後門程式,它可能被好幾個中國駭客集團用於從事間諜行動與其他網路犯罪。
本文是根據我們在Botconf 2024的演講內容。請至此處觀賞演講。
簡介
我們自 2022 年至今一直在調查多起發生在亞太地區並使用同一個 ELF 後門程式的針對性攻擊案例。大多數資安廠商都將此後門程式視為現有惡意程式 (如 Gh0st RAT 或 Rekoobe) 的一個變種。但我們發現的真相是:此後門程式並非只是現有惡意程式的變種,而是一個全新的惡意程式家族。我們懷疑中國駭客集團正在使用它來從事間諜行動或網路犯罪。我們將這個先前未記載過的惡意程式命名為「Noodle RAT」。
Noodle RAT
Noodle RAT 亦稱為「ANGRYREBEL」或「Nood RAT」, 是一個相對單純的後門程式,目前確認有 Windows 和 Linux 兩個版本,分別為:Win.NOODLERAT 和 Linux.NOODLERAT。以下時間軸概略說明了這個惡意程式的發展歷史。
我們在 VirusTotal 發現了幾個幕後操縱 (CC) 面板指向 Noodle RAT 前期的一些版本:版本編號 v1.0.0 的 Win.NOODLERAT 編譯於 2016 年 7 月、v1.0.1 的 Linux.NOODLERAT 編譯於 2016 年 12 月,還有 v1.0.1 的 Linux.NOODLERAT 編譯於 2017 年 4 月。
儘管 Noodle RAT 的歷史悠久,但直到最近才被正確分類。從 2018 年至今已有多份關於 Noodle RAT 攻擊案例的報告發表,但在當時,這個 ELF 後門程式卻被意外歸為另外一個惡意程式家族。例如: 2018 年 NCC Group 的報告中提到的 Gh0st RAT 變種 (由 Iron Tiger 所使用)、2018 年 Talos 的報告提到的 Rocke 集團 (也就是 Iron Cybercrime Group) 所使用的一個 ELF 後門程式、2018 年 Sophos 的報告提到的 Cloud Snooper 攻擊行動使用的一個 Linux 版 Gh0st RAT 變種,以及 2019 年 Positive Technology Security 的報告提到的 Calypso APT 集團所使用的 Calypso RAT。經過分析比對之後,我們發現這些報告所指的 ELF 後門程式其實就是 Noodle RAT。
除此之外,我們的監測資料也發現從 2020 年起便有使用 Noodle RAT 的間諜行動一直在攻擊泰國、印度、日本、馬來西亞以及台灣。從這段簡短的歷史看來,Noodle RAT 已經在一些駭客集團之間流通,並且被用於間諜行動以及其他網路犯罪。
以下詳細討論 Noodle RAT 的 Windows 與 Linux 版本。
Win.NOODLERAT
Win.NOODLERAT 是一個 shellcode 型態的模組化記憶體內後門程式,最早由 NCC Group 和 Positive Technology Security 所通報。根據其他廠商的報告以及我們的觀察,Win.NOODLERAT 看起來似乎是 Iron Tiger、Calypso APT 以及數個不明的集群在間諜行動中使用。其內建的後門功能相當單純:
- 下載與上傳檔案
- 執行額外的記憶體內模組
- 當成 TCP 代理器 (proxy) 使用
由於 Win.NOODLERAT 是採用 shellcode 型態,因此它需要有自己的載入器。經過調查,我們確認它使用的是 MULTIDROP 和 MICROLOAD。
安裝
MULTIDROP 是我們在 2019 年攻擊泰國的間諜行動中觀察到的檔案植入器,與 Positive Technology Security 所描述的是同一個。
MICROLOAD 則是我們在 2019 至 2021 年期間攻擊印度的間諜行動中觀察到的檔案載入器,它採用了不同的設計。MICROLOAD 是經由合法的 Microsoft 應用程式 (Oleview.exe) 所載入。此外,它還會使用 RC4 演算法解開系統登錄機碼「HKCR\Microsoft.System.UpdateColl\UpdateAgent」中的加密程式碼,然後將解出來的 shellcode 注入 svchost.exe 當中。
這個第一階段 shellcode 只是負責解碼的 stub (替身),用來解開接下來的 XOR 編碼資料。當初始化程序完成後,核心惡意程式碼與組態設定就會在記憶體內解開。
CC 通訊
關於 CC 通訊部分,Win.NOODLERAT 可支援 TCP、SSL 及 HTTP 協定。整個通訊過程都採用 RC4 以及一個結合了 XOR 與 AND 指令的客製化演算法來加密。這個在 Positive Technology Security 的報告中已詳細說明的演算法,值得我們再次回顧一下,因為它是 Win.NOODLERAT 和 Linux.NOODLERAT 之間的一個重要差異。
加密封包分為兩個部分:標頭與實際的惡意內容。
當傳送資料時,它會使用以下步驟來將封包的標頭部分加密:
- 將標頭的 cmd_id、payload_len 及 const_val 等欄位初始化。
- 產生三個隨機的 DWORD 數值。
- 將惡意內容的資料長度與隨機 DWORD 數值相加來產生部分的 RC4 金鑰。
- 使用 XOR 搭配寫死的金鑰將步驟 3 得到的數值編碼。
- 將步驟 3 與 4 得到的數值轉換成十六進位 (HEX) 字串,然後合併在一起。
- 使用 RC4 搭配步驟 5 得到的金鑰,將標頭的前面 24 個位元組加密 (也就是排除了 header_key)。
再來是惡意內容部分的加密步驟:
- 從標頭的最開頭、cmd_id 欄位及 cont_val 欄位複製三個 DWORD 數值。
- 使用 XOR 與 AND 指令將步驟 1 當中的每個 DWORD 數值編碼。
- 將步驟 2 得到的數值轉換成十六進位字串,然後合併在一起。
- 使用 RC4 搭配步驟 3 產生的金鑰將惡意內容的資料加密。
後門指令
我們在分析過程中發現 Win.NOODLERAT 實作了不同類型的指令。根據獲得 CC 伺服器認證之後所收到的指令,我們將指令分成兩種類型:0x03A2 型與 0x132A 型。後門功能的指令編號方式採用一個主要編號 (major-ID) 搭配一個選擇性次要編號 (sub-ID) 的形式。表 1 列出惡意程式的後門指令:
動作 | 0x03A2 型 |
0x132A 型 |
||
主要編號 |
次要編號 |
主要編號 |
次要編號 |
|
成功獲得授權 |
0x03A2 |
- |
0x132A |
- |
指令結束 |
0x0AC3 |
- |
0x1AC3 |
- |
將模組的 metadata 初始化 |
0x194C |
- |
0x294C |
- |
接收模組資料 |
0x1AF2 |
- |
0x2AC8 |
- |
啟動模組而不使用管線 (pipe) |
0x1397 |
- |
0x230E |
- |
刪除模組的 metadata |
0x1D50 |
- |
0x2D06 |
- |
上傳檔案至 CC 伺服器 |
0x390A |
0x35C3 & 0x35C4 & 0x3013 |
0x590A |
0x55C3 & 0x55C4 & 0x5013 |
以遞迴方式列出目錄 |
0x390A |
0x35C5 |
0x590A |
0x55C5 |
從 CC 伺服器下載檔案 |
0x390A |
0x35C7 & 0x35C8 & 0x35C9 & 0x3013 |
0x590A |
0x55C7 & 0x55C8 & 0x55C9 & 0x5013 |
將收到的資料寫入管線 (pipe) |
0x2099 |
0x2186 |
0x3099 |
0x3167 |
將 0x32E0 寫入管線 (pipe) |
0x2099 |
0x220E |
0x3099 |
0x32E0 |
將 0x38AF 寫入管線 (pipe) |
0x2099 |
0x28FA |
0x3099 |
0x38AF |
將模組資料傳送至另一個模組 |
0x2099 |
0x2741 |
0x3099 |
0x3716 |
與 0x3099 相同 |
0x2099 |
0x2A0B |
0x3099 |
0x3A0B |
啟動 TCP 伺服器來扮演代理器角色,轉發給 CC 伺服器的封包 |
0x2099 |
0x2CBD |
0x3099 |
0x3CD0 |
將自己刪除 |
無 |
|
0x1C1C |
- |
表 1:Win.NOODLERAT 的後門指令。
第一類型 (0x03A2 型) 實作了絕大部分的指令,只有最後一個指令 (也就是將自己刪除) 沒有實作。此一型的 Win.NOODLERAT 被 Iron Tiger 以及其他未知的集群用於間諜行動,顯示此版本有可能是一個共用的版本。
第二類型 (0x132A) 實作了所有的功能。此一型的 Win.NOODLERAT 僅有 Calypso APT 集團在使用。所以,這有可能是一個獨家專用的版本。
有趣的是,在比較過指令編號之後,我們發現它們在某些地方有相似之處。例如,用來上傳檔案至 CC 伺服器的指令編號分別是 0x390A 和 0x590A,這樣的相似性有可能代表著版本的不同,但我們沒有足夠的證據可以下定論。
Linux.NOODLERAT
Linux.NOODLERAT 是一個 ELF 版本的 Noodle RAT,但它採用了一種不同的設計。此後門程式曾經被多個集團使用過,各有不同的動機,例如 Rocke 集團 (Iron Cybercrime Group) 用它來賺錢。
Cloud Snooper Campaign 則用於間諜行動,還有一個未知的集群也將它用於監視用途。既然它的設計不同,因此後門功能也自然也有些微差異:
- 反向指令列介面 (Reverse Shell)
- 下載與上傳檔案
- 執行排程工作
- 當成 SOCKS 通道
初始化
在大多數情況下,Linux.NOODLERAT 是被當成攻擊對外連網應用程式漏洞成功之後,另外下載的一個惡意程式。當後門程式被植入系統後,它會將自己複製到「/tmp/CCCCCCCC」目錄,然後藉由覆寫指令列參數「argv」的方式來偽造其處理程序的名稱。接著,它會使用 RC4 搭配寫死的金鑰「r0st@#$」將內嵌的組態設定解密。解密後的組態設定如下圖所示,Linux.NOODLERAT 會連線到組態設定中指定的 CC 伺服器。
CC 通訊
在 CC 通訊部分,Linux.NOODLERAT 只支援 TCP 和 HTTP 通訊協定。有趣的是,此後門程式使用了兩種不同的演算法來將通訊加密:第一種用於指令處理階段 (使用 RC4 搭配 XOR+AND),第二種用於反向指令列連線階段 (使用 HMAC_SHA1 搭配 AES128-CBC)。
指令處理階段的加密演算法採用 RC4 以及 XOR + AND 指令的搭配。這部分與 Win.NOODLERAT 大致相同,只不過寫死的金鑰與所用的 API 不同,如下圖所示:
反向指令列介面連線階段會在它收到後門指令之後啟動。由於此階段的加密演算法與既有的惡意程式完全相同 (如以下敘述),我們會盡可能簡單說明其認證機制:
- 它從 CC 伺服器收到 40 個位元組的資料,該資料可分成兩個 20 位元組的區塊。每一區塊接著與一個寫死的字串合併,然後計算出 SHA1 雜湊碼,這一對 HMAC_SHA1 將用於加/解密以及一致性檢查的 AES 金鑰與初始化向量 (IV)。
- 它從 CC 伺服器收到一段額外的 16 位元組資料,並使用前面產生的 AES 金鑰材料來將它解密。
- 它檢查解密後的挑戰資料 (challenge) 是否與寫死的挑戰位元組 (challenge bytes) 一樣,以確保 CC 伺服器的真實性。
後門指令
如同 Win.NOODLERAT 一樣,我們發現 Linux.NOODLERAT 實作的後門指令也分成兩種類型:0x03A2 型與 0x23F8 型。
動作 |
0x03A2 型 |
0x23F8 型 |
||
主要編號 |
次要編號 + arg 參數 (選擇性) |
主要編號 |
次要編號 + arg 參數 (選擇性) |
|
成功獲得授權 |
0x03A2 |
- |
0x23F8 |
- |
啟動後門行為 |
0x2099 |
- |
0x4799 |
- |
啟動反向指令列連線階段 |
0x1 |
0x2186 |
0x1 |
0x5186 |
列出根目錄下的檔案與目錄清單 |
0x2 |
0x2186 + 0x1 |
0x2 |
0x5186 + 0x1 |
列出指定目錄下的檔案與目錄清單 |
0x2 |
0x2186 + 0x2 |
0x2 |
0x5186 + 0x2 |
將檔案重新命名 |
0x2 |
0x2186 + 0x3 |
0x2 |
0x5186 + 0x3 |
移除檔案 |
0x2 |
0x2186 + 0x4 |
0x2 |
0x5186 + 0x4 |
上傳檔案至 CC 伺服器 |
0x3 |
0x35C3 & 0x35C4 & 0x3013 |
0x3 |
0x35C3 & 0x35C4 & 0x3013 |
以遞迴方式列出目錄 |
0x3 |
0x35C5 |
0x3 |
0x35C5 |
從 CC 伺服器下載檔案 |
0x3 |
0x35C7 & 0x35CB & 0x35CC & 0x3013 |
0x3 |
0x35C7 & 0x35CB & 0x35CC & 0x3013 |
建立一個新的目錄 |
0x3 |
0x35C8 & 0x35C9 & 0x35CA & 0x35CD |
0x3 |
0x35C8 & 0x35C9 & 0x35CA & 0x35CD |
啟動 SOCKS 通道 |
0x4 |
- |
0x4 |
- |
啟動 SOCKS 通道 |
0x5 |
- |
0x5 |
- |
顯示當前的日期和時間 |
0x6 |
0x2186 + 0x1 |
無 |
0x5186 + 0x1 |
下載一個檔案並儲存成「/usr/include/sdfwex.h」或「/tmp/.llock」 |
0x6 |
0x2186 + 0x2 |
無 |
0x5186 + 0x2 |
表 2:Linux.NOODLERAT 的後門指令。
標示為「無」的部分表示這些指令的功能雖然有實作,但卻無法進入,因為這些指令的主要編號 (Major-ID) 並不支援。
與 Win.NOODLERAT 相比,除了 0x03A2 型當中授權成功的回應指令之外,絕大部分的後門程式指令都不相同。此外,Linux.NOODLERAT 的某些指令還需要額外參數。但如同 Win.NOODLERAT 的情況一樣,當我們在比較 0x03A2 型與 0x23F8 型的指令時,兩個變種都有相似的次要編號,例如:0x03A2 型的 0x2186 以及 0x23F8 型的 0x5186 (一個是 0x2186,另一個是 0x5186)。正如前面所述,這有可能是代表不同的版本。如果就使用的對象來看,Rocke、Cloud Snooper 行動以及其他未知的集群使用的是 0x03A2 型,這可能意味著這一型是個共用的版本。但如果要將 0x23F8 型視為完全屬於某個集團專用的話,我們還需要更多資訊才能下定論。
Win.NOODLERAT 與 Linux.NOODLERAT 之間的相似性
我們已經提過 Linux.NOODLERAT 與 Win.NOODLERAT 在 CC 通訊流程部分的程式碼大致相同。除了這點之外,兩個變種還有一些其他相似/雷同之處。首先是後門指令。如前面所說,Win.NOODLERAT 與 Linux.NOODLERAT 在成功獲得 CC 伺服器的授權之後都會預期收到「0x3A2」這個指令。
另一個雷同之處是組態設定格式。Win.NOODLERAT 與 Linux.NOODLERAT 的組態設定資料大致上使用了相同的格式,除了 Win.NOODLERAT 中的網路金鑰部分。
新的基因? 或者只是舊版本
以上詳細分析了這兩個原本就有詳細記載的後門程式,它們分別支援不同的作業系統,可見得應該屬於同一個新的惡意程式家族:Noodle RAT。然而有多家廠商提到,Noodle RAT 有可能是某個現有惡意程式 (如 Gh0st RAT 或 Rekoobe) 的變種。他們在結論中提出了一個疑問:Noodle RAT 是否真的能被視為新的惡意程式? 要回答這問題,讓我們重新檢視一下 Gh0st RAT 和 Rekoobe。
Gh0st RAT 原本是中國的 C. Rufus Security Team 所開發,但由於 2008 年發生的資料外洩事件,Gh0st RAT 的原始程式碼已經外流到網路上。因此,今日有好多 Gh0st RAT 的變種,而且也有好多駭客集團正在使用。
Noodle RAT 與 Gh0st RAT 有多處看起來有所關聯,例如,就像 NCC 在 2018 年所說,Win.NOODLERAT 使用了與 Gh0st RAT 相同的一些擴充元件。此外,Noodle RAT 也採用了跟 Gh0st RAT 某些變種有點類似的封包加密演算法,例如 Gh0stCringe、HiddenGh0st 和 Gh0stTimes 這幾個變種。Gh0st RAT 的變種經常使用結合 XOR 與其他指令的客製化演算法,跟 Noodle RAT 的作法一樣。
但除了擴充元件之外,Noodle RAT 和 Gh0st RAT 的其他程式碼並無明顯相似之處,因此我們的結論是:它們只是使用了相同的擴充元件,但後門程式本身是完全不同的。
再來看看 Rekoobe,這是一個以 Tiny SHell (也就是 tsh) 為基礎的後門程式,其原始程式碼在 GitHub 上就能公開取得,多年來它一直被用於針對 Linux/Unix 系統的攻擊行動。過去已有多家廠商針對這個後門程式發表詳細的報告。Dr.Web 在 2015 年率先發布了第一份報告,2018 年,Intezer 也發布了一份有關另一個 Rekoobe 版本的報告。為了避免混淆,我們以下將 Dr.Web 提到的版本稱簡稱「v2015」,Intezer 提到的版本簡稱為「v2018」。
Rekoobe 有多個集團正在使用,而且一直有在持續更新。正如 Dr.Web 在報告中提到,Rekoobe v2015 是由 APT31 駭客集團所使用。此版本修改了 CC 通訊協定,增加了一個神奇數值 (MAGIC value) 並且改變了策略,從外部檔案 (而非從參數) 載入組態設定資料。根據我們的觀察,Rekoobe v2018 也有好幾個集團在使用,這個版本雖然改回原始的 CC 通訊協定,但卻又再次改變策略,將組態設定資料直接內嵌在二進位檔案中。同時也增加了一個新的功能來覆寫「argv」參數,偽造其處理程序的名稱。
比較 Rekoobe 和 Noodle RAT 之後可以發現,Linux.NOODLERAT 有某些部分的程式碼與 Rekoobe v2018 相同,特別是反向指令列介面 (reverse shell) 以及偽造處理程序名稱部分,如下圖所示:
Linux.NOODLERAT 的反向指令列連線階段程式碼與 Tiny SHell 的這部分程式碼完全相同,因此我們相信 Noodle RAT 的作者很可能只是從 GitHub 將 Tiny SHell 這部分的程式碼抄過來。另一方面,覆寫「argv」來偽造處理程序名稱的技巧是 Rekoobe v2018 獨有,此技巧在 Tiny SHell 和 Rekoobe v2015 都沒有。所以這意味著 Noodle RAT 的作者也許可以取得 Rekoobe v2018 的原始程式碼。
不過,既然 Linux.NOODLERAT 其他的程式碼與任何版本的 Rekoobe 或 Tiny SHell 都完全不同,因此我們的結論是:Linux.NOODLERAT 應該被歸為另一個惡意程式家族。
Noodle RAT 的伺服器端
NCC Group 在 2019 年的報告中揭露了 Win.NOODLERAT 的一些控制面板。其中一個叫作「Noodlesv1.0.0」,這可能意味著它是給 Win.NOODLERAT v1.0.0 版使用。我們最近也在 VirusTotal 當中發現了一個新版的 Linux.NOODLERAT 控制面板與組建工具。
控制面板
我們發現的控制面板叫作「NoodLinux v1.0.1」,就像之前發現的控制面板,它需要密碼才能開啟。先前版本的密碼是當下的年份和月份 (例如「202405」),但到了這個版本,密碼已寫死在控制面板內,使用「hello!@#」這個密碼就能將它開啟。
此版本的控制面板支援使用 TCP 和 HTTP 作為 CC 通訊協定,並且會監聽特定的連接埠。我們拿它來與 Linux.NOODLERAT 樣本搭配測試,確定能成功運作。
組建工具 (Builder)
我們發現了兩個版本的 Linux.NOODLERAT 組建工具:v1.0.1 和 v1.0.2。這個組建工具可根據使用者定義的客製化組態設定來組建 Linux.NOODLERAT。
有趣的是,這些伺服器端元件在提交時還包含了一份「.doc」格式的發行備註,檔案名稱是簡體中文的「更新说明」。此外,還有一個名為「副本」的「.ini」組態設定檔案。
這份發行備註也是採用簡體中文撰寫,裡面說明了測試結果,以及改善、修正、更新的項目。這很可能意味著此惡意程式背後有一位開發人員和一名客戶,就像正常的軟體廠商一樣。
結論
以上就是 Windows 及 Linux 版本 Noodle RAT 的深入分析,我們點出了它與已知惡意程式 (Gh0st RAT 和 Rekoobe) 相似及雷同之處,並推測 Noodle RAT 應該有被分享 (或販賣) 給多個中國駭客集團。此外,我們也提到了 Noodle RAT 的控制面板和組建工具,推測其背後應該有一個既存的惡意程式生態系。
Noodle RAT 多年來一直被錯誤歸類及輕忽。希望這篇文章能幫助大家正確評估 Noodle RAT 相關的資安事件。
我們確認 Noodle RAT 已有某些樣本被上傳至 Virus Total,代表它很有可能是一個仍在使用中的惡意程式。有鑑於近年對外連網的應用程式越來越常遭到攻擊,對駭客來說,攻擊 Linux/Unix 系統的惡意程式也越來越重要。這可能代表 Noodle RAT 將繼續成為駭客發動攻擊的不錯選擇。
Trend Vision One 追蹤查詢
以下是可在 Vision One 當中追蹤威脅的實用查詢:
- Noodle RAT 偵測
- malName:*NOODLERAT* AND eventName: MALWARE_DETECTION
- 潛在的 Noodle RAT 感染
- FileFullPath:"/usr/include/sdfwex.h" OR FileFullPath:"/tmp/.llock"
入侵指標資料
如需本文提到的入侵指標完整清單,請至此處。