重點摘要
- PeckBirdy 是親中 APT 集團自 2023 年起便開始採用的一套 JScript 幕後操縱 (CC) 框架,採用可跨環境執行的設計來提供靈活的部署能力。
- HOLODONUT 和 MKDOOR 這兩個模組化後門程式在 PeckBirdy 核心功能的基礎上,進一步擴展了攻擊能力。
- 此外,還有另外兩起攻擊行動:SHADOW-VOID-044 和 SHADOW-EARTH-045 示範了使用 PeckBirdy 的親中駭客集團如何在多個管道上發動聯合攻擊。
- 其中一起攻擊行動利用偷來的程式碼簽章憑證簽署 Cobalt Strike 惡意檔案,以及多個 CC 網域和 IP 位址上的漏洞攻擊程式碼 (CVE-2020-16040) 來常駐於受害環境。
- TrendAI Vision One™ 已經可以偵測並攔截本文所列的入侵指標 (IoC),並為客戶提供量身訂做的威脅追蹤查詢、威脅洞見,以及威脅情報。
簡介
我們自 2023 年起便開始觀察到有攻擊行動正在使用之前從未見過的一套腳本式幕後操縱 (CC) 框架 (我們命名為「PeckBirdy」) 來攻擊中國的博弈產業,並針對亞洲地區的政府機關和民間機構進行惡意活動。在追蹤這個框架時,我們至少發現了兩起使用 PeckBirdy 的攻擊行動,並追查至多個親中的進階持續性滲透攻擊 (APT) 集團。值得一提的是,我們先前已在 2025 年 8 月舉行的 HitCon 台灣駭客年會上介紹過這些攻擊行動,本文的目的是希望分享給更廣大的閱眾。
PeckBirdy 是一個腳本式框架,雖然它具備進階功能,但卻使用 JScript 這個老舊的腳本語言來實作。這是為了確保該框架能在不同的執行環境上透過就地取材的二進位檔案 (LOLBin) 來啟動。正是因為這樣的彈性,所以我們才能在攻擊程序的不同階段都看到 PeckBirdy 的身影,包括:在初期階段當成水坑式攻擊的控制伺服器、在橫向移動階段當成反向指令列介面 (reverse shell) 伺服器、在後門階段當成 CC 伺服器。
本文將詳細分析 PeckBirdy、其攻擊行動,以及我們在相關活動當中看到的兩個新的後門程式:HOLODONUT 和 MKDOOR。除此之外,我們也將對其所屬的攻擊行動進行溯源。
網路上的活動
從 2023 年起,我們便開始注意到有多個中國博弈網站被注入了惡意腳本,它們會連上遠端伺服器。在進一步研究注入的腳本及其伺服器時,我們發現了 PeckBirdy 這個腳本框架。當受害者造訪這些博弈網站時,注入的腳本就會下載 PeckBirdy 的主要腳本到電腦上執行,讓駭客從遠端傳送 JavaScript 到電腦上執行。
此動作的目的是要顯示假的 Google Chrome 軟體更新網頁來誘騙受害者下載並執行惡意更新檔案,但它其實是駭客準備好的後門程式。這就是我們發現並命名為「SHADOW-VOID-044」來加以追蹤的第一起攻擊行動。
2024 年 7 月,我們又觀察到另一起攻擊亞洲政府機關和民間機構的攻擊行動,並命名為「SHADOW-EARTH-045」來加以追蹤。我們發現這起攻擊會將 PeckBirdy 的連結注入到政府機構的網站,這很可能是為了在網站上散播可蒐集登入憑證的腳本。
其中一個案例是注入到某政府系統的登入頁面,另一個案例是利用 MSHTA 來執行 PeckBirdy 以建立遠端存取的管道,讓駭客在企業內橫向移動。除此之外,駭客還開發了一個 .NET 執行檔來透過 ScriptControl 啟動 PeckBirdy。這些發現證明了 PeckBirdy 的設計具備多種功能,因此可滿足多種用途。
PeckBirdy 框架分析
PeckBirdy 可在各種環境上執行,包括:瀏覽器、MSHTA、WScript、Classic ASP、Node JS 以及 .NET (ScriptControl)。視環境而定,PeckBirdy 的功能和用途可能會有所不同,
例如,在瀏覽器環境當中,由於受限於沙盒模擬環境的機制,因此 PeckBirdy 只能在網頁內運作。不過在其他環境當中 (如 MSHTA),PeckBirdy 可以直接在本機上執行更多動作。PeckBirdy 伺服器已定義了一些 API 來讓用戶端透過簡單的 HTTP(S) 查詢就能從伺服器取得其登陸腳本 (landing script)。下表列出我們觀察到的 PeckBirdy 伺服器 API。
| API | 說明 |
|---|---|
| https://{domain}/{ATTACK_ID} | 下載主要的 PeckBirdy 腳本。 |
| https://{domain}/{ATTACK_ID}/hta | 下載 MSHTA 的登陸腳本。 |
| https://{domain}/{ATTACK_ID}/html | 下載 MTML 的登陸腳本。 |
| https://{domain}/{ATTACK_ID}/wscript | 下載 WScript 的登陸腳本。 |
表 1:用來取得登陸腳本的 PeckBirdy 伺服器 API。
根據查詢中隨附的 ATTACK_ID 值而定,框架產生的每個 PeckBirdy 腳本都包含一組內嵌的組態設定 (ATTACK_ID 是一個預先定義的數值,由一個 32 字元的隨機字串所組成)。組態設定值用來控制 PeckBirdy 在執行期間行為,包括以下項目。
| 組態設定 | 說明 |
|---|---|
| $HOST | PeckBirdy 伺服器網域。 |
| $PORT | 支援的通訊協定所連接的連接埠號碼。 |
| $ATTACK_ID | 一個由框架產生的 32 字元隨機字串。 |
| $RETRY | 重試之間的等候時間。 |
| $RETRY_TIME | 重試次數。 |
| $HEARTBEAT | 心跳之間的等候時間。 |
表 2:內嵌在 PeckBirdy 腳本內的組態設定。
為了擴展 PeckBirdy 的功能,其開發者使用了一種名為 JScript 的老舊腳本語言 (遵循 ECMAScript 3 標準),並將它設計成可支援多種通訊協定來確保相容於各種環境。此外,當偵測到較新的環境時,它也會使用 ECMAScript 5 當中定義的內建功能,如 JSON。反之,PeckBirdy 會使用另一組它自己用 JScript 實作的函式版本。
在執行一開始時,PeckBirdy 會先搜尋某些特定環境獨有的物件來判斷其當前的執行環境。它會檢查瀏覽器環境中的 window 物件、NodeJS 環境中的 process 物件、ASP 環境中的 response 物件,以及 HTA 環境中的 HTML 是否有 APPLICATION 標籤。
在決定了當前的環境之後,PeckBirdy 會根據不同的環境使用不同的方法產生一個受害者 ID (識別碼)。在 HTA 這類本地主機環境中,它會試圖擷取受害電腦主機板和硬碟的硬體資訊。然後將這些資訊合併並使用 MD5 產生一個雜湊碼來當成受害者 ID。如果這個步驟失敗,或是在某些無法擷取硬體資訊的環境,它就會直接產生一個 32 字元的隨機字串來當成受害者 ID。
為了在瀏覽器環境下保存這個受害者 ID,PeckBirdy 會在受害者 ID 字串前面加入上一個 Hm_lvt_ 前綴 (這是某個正常服務已知使用的 Cookie 前綴),然後寫入瀏覽器的 Cookie 當中。在其他環境下,它會將受害者 ID 字串寫入一個名為 ___unique_id___ 的檔案,該檔案會放在 Windows 的暫存資料夾當中。如此一來,PeckBirdy 就能在後續執行時取得受害者 ID。
在初始化之後,PeckBirdy 會偵測其所在環境支援的通訊方式。其預設的作法是使用 WebSocket 通訊協定來與 PeckBirdy 伺服器通訊。如果環境不支援 WebSocket,它會試著偵測 Adobe Flash 是否存在,若存在,就產生一個 Flash ActiveX 物件來建立 TCP socket 通訊 (此方法可與舊環境相容,儘管 Flash 本身已在 2020 年停止支援)。如果這些方法都不支援,PeckBirdy 就會使用 Comet 和 LocalComet 兩個基於據 HTTP(S) 和 AJAX 通訊協定的方法。儘管 Comet 的效率較低,但它提供了廣泛的環境相容性。
以 PeckBirdy 在瀏覽器內使用 WebSocket 為例,它一開始會發送一個 init 請求給遠端伺服器來啟動通訊。這個請求當中包含了當前網站的網域和網址,以及前面提到的受害者 ID、ATTACK ID 以及一個新產生的連線階段 ID (同樣也是一個 32 字元的隨機字串)。
伺服器的回應會提供 PeckBirdy 的第二階段腳本,包括腳本的執行程序以及 AES 加密和解密函式。接下來的通訊會先使用 AES 加密,然後再使用 Base64 編碼,AES 加密金鑰是組態設定中的 ATTACK ID 值。
可惜,我們並未蒐集到很多 PeckBirdy 與其伺服器通訊時直接發送的腳本。我們只蒐集到一個簡短的腳本,用來竊取被注入網站的瀏覽器 Cookie。
此外,我們也在 PeckBirdy 伺服器上發現更多其他腳本檔案 (屬於 SHADOW-VOID-044 所有),這些檔案似乎是透過 PeckBirdy 來散布並執行。以上就是駭客如何利用 PeckBirdy 來從事攻擊的分析。
以下是我們發現的腳本:
- 用來攻擊 Google Chrome CVE-2020-16040 漏洞的腳本。
- 用於彈出社交工程視窗、誘騙受害者下載並執行惡意檔案的腳本。
- 用於散布其他後門程式的腳本 (經由 Electron JS 執行)。
- 用於透過 TCP 通訊端建立反向指令列介面的腳本。
後門程式分析
根據駭客所使用的基礎架構,我們找到了兩個與 SHADOW-VOID-044 相關的模組化後門程式:HOLODONUT 和 MKDOOR。
HOLODONUT
我們在駭客的基礎架構中發現的 HOLODONUT 是一個以基於 .NET 所開發的模組化後門程式。 為了執行 HOLODONUT,駭客部署了一個客製化的簡易下載器,用來從遠端伺服器下載惡意檔案,我們將它命名為「NEXLOAD」來加以追蹤。 NEXLOAD 值得注意的一點是它會在第一次連線時發送一個特殊格式「{string}#{string}」的字串。接著,下載到的惡意檔案會使用 XOR 演算法來解密,並使用 EnumWindows() 函式來加以執行。
為了躲避資安防禦,惡意檔案運用了多種技巧,包括:停用 AMSI 和 EtwEvent,以及使用 Donut 這個開放原始碼工具來暗中執行 .NET assembly。這樣一來,HOLODONUT 就能在處理程序的記憶體內執行而不容易被發現。
根據程式碼的內容,我們將其支援的封包類型和內建指令摘要整理如下:
第一個封包類型與處理函式 (handler) 有關,用來接收、執行或卸載來自 CC 伺服器的擴充元件 (plug-in)。除了擴充元件相關的封包之外,該程式還提供了一些內建指令,如:蒐集、睡眠及結束。
| 封包類型 | 擴充元件物件 (assembly 名稱、assembly 位元組、Methodinfo、類型、 ClientID) |
|---|---|
| 「plugin」 | 新增並載入收到的擴充元件 (.NET assembly)。 |
| 「execplugin」 | 執行收到的擴充元件 (.NET assembly)。 |
| 「Unloadplugin」 | 根據指定的「ClientID」和「Assembly name」來移除收到的擴充元件 (.NET assembly)。 |
| 「UnloadClientIDplugin」 | 根據「ClientID」來移除已安裝的擴充元件。 |
表 3:支援的 HOLODONUT 封包類型。
MKDOOR
我們在長期監控 SHADOW-VOID-044 的期間發現了一個用來誘騙使用者下載冒牌 Google Chrome 更新程式的網路釣魚網頁。在下載並分析了該檔案之後,我們發現了另一個模組化設計的後門程式:MKDOOR,它由兩個不同的模組組成,分別是下載器和後門程式。在第一次啟動時,下載器會連上 CC 伺服器來下載後門程式。為了躲避資安防禦,它會將自己加入排除清單當中,並讓它連上的網址看起來像 Microsoft 的支援頁面,試圖避開 Microsoft Defender。
https://{C&C address}/en-us/howtotell/default[.]aspx
後門程式模組啟動之後,就會擷取下載器模組當中內嵌的網路組態設定,然後啟動另一個連線到 CC 伺服器。後門程式模組使用的網址路徑同樣也被偽裝成 Windows 啟用網址。
https://{C&C address}/en-us/windows/activate-windows-c39005d4-95ee-b91e-b399-2820fda32227
由於 MKDOOR 是一個模組化後門程式,其功能取決於從 CC 伺服器所收到的模組。只可惜,我們在調查期間並未從伺服器蒐集到任何模組。因此,我們只能提供惡意程式所支援的指令,如下表所示:
| 指令 | 說明 |
|---|---|
| INSTALL | 安裝收到的模組。 |
| UNINSTALL | 解除安裝收到的模組。 |
| EXECUTE | 執行收到的模組。 |
| SHOW | 回饋狀態。 |
| SLEEP | 睡眠 (睡眠時間由遠端駭客決定)。 |
| EXIT | 結束。 |
| UNDATE | 未定義任何功能 (在此案例中)。 |
表 4: MKDOOR 支援的指令。
攻擊行動溯源
我們發現了兩起使用 PeckBirdy 的駭客攻擊行動,根據受害者分析與攻擊行動所用的工具、手法和程序 (TTP),我們暫時將它們歸在兩個臨時的入侵集合 (intrusion set) 底下:SHADOW-VOID-044 與 SHADOW-EARTH-045。根據我們的調查顯示,這兩起攻擊可能與兩個不同的親中 APT 集團有所關聯。
就 SHADOW-VOID-044 來說,我們在該行動的伺服器上 (47[.]238[.]219[.]111) 發現 GRAYRABBIT 後門程式,而先前有報告指出這是 UNC3569 所用的後門程式。不過我們觀察到的 GRAYRABBIT 樣本稍有不同,採用了 DLL 側載技術搭配 PowerShell 的 UuidFromStringA 函式來讀取、解碼及執行後門程式。儘管執行方式不同,但其 CC 伺服器所在的網域 (center[.]myrnicrosoft[.]com) 卻與 UNC3569 所用的 CC 網域相同。此外,SHADOW-VOID-044 和 UNC3569 都專門瞄準中國的博弈產業。這些發現讓我們有「中至高度信心」將這起攻擊行動歸納在 UNC3569 之下。
除此之外,我們也發現 SHADOW-VOID-044 使用了 HOLODONUT 後門程式,而它很可能與另一個後門程式「WizardNet」有所關聯 (之前有一個名為 TheWizard 的 APT 集團就是使用這個後門程式)。有趣的是,有些 SHADOW-VOID-044 所使用的 HOLODONUT 樣本會連上 TheWizard 所使用的同一台 CC 伺服器 (mkdmcdn[.]com)。雖然我們並未看到 Campaign Alpha 和 TheWizard 之間有任何額外的關聯,但值得注意的是,TheWizard 也使用了我們之前在某篇部落格文章中提到的 Earth Minotaur 駭客集團所開發的 DarkNimbus 後門程式。
我們的研究還有另一項發現,那就是:在 SHADOW-VOID-044 伺服器 (oss-cdn[.]com 上發現 Cobalt Strike 樣本 (SHA256:162cc325ab7b6e70edb6f4d0bc0e52130c56903f)。我們發現這個樣本是使用南韓某家博弈公司的憑證來簽署 (thumbprint,SHA1:bbd2b9b87f968ed88210d4261a1fe30711e8365b)。此外,我們也曾在報告中指出這個憑證也被用於 BIOPASS RAT 攻擊行動中。
根據我們的研究,BIOPASS RAT 和 MKDOOR 都使用了相同的技巧:在本機上開啟一個 HTTP 伺服器來監聽某個號碼很大的連接埠。如此一來,就能讓水坑式攻擊腳本掃描本機上是否有這個連接埠,進而判斷受害者是否已經感染了這個後門程式。而 BIOPASS RAT 攻擊行動與另一個駭客集團 Earth Lusca 有所關聯。
針對 SHADOW-EARTH-045 來看,我們曾在 2024 年 7 月觀察到它對某個菲律賓教育機構發動惡意攻擊。駭客執行了一個 MSHTA 指令來連上 github[.]githubassets[.]net,在一個已遭入侵的 Internet Information Services (IIS) 伺服器上啟動 PeckBirdy。同一時間,駭客還從 47[.]238[.]184[.]9 下載檔案,這個 IP 位址之前曾被認為跟 Earth Baxia 有所關聯。請注意,就目前來說,將 SHADOW-EARTH-045 與 Earth Baxia 做連結的信心度仍低。不過值得注意的是,同一個 PeckBirdy 網域和 IP 位址也曾在另一份有關非洲政府 IT 部門遭到攻擊的報告中被提及。
結論
本文摘要說明兩起攻擊行動來突顯當前親中駭客集團日益精密的技術和適應能力。這些攻擊行動使用了一個動態的 JavaScript 框架「PickBirdy」,透過就地取材的二進位檔案散布 MKDOOR 和 HOLODONUT 這類模組化後門程式。目前要偵測惡意的 JavaScript 框架依然是一項挑戰,因為它們使用了動態產生的執行時期注入程式碼,並無永久性檔案,因此能躲避傳統的端點防護。在這樣的環境下,防禦策略的適應力與持續改進已不再是個選項,而是在一個日益充滿敵意的數位情勢下維持營運完整的基礎。
採用 TrendAI Vision One™ 的主動式防護
TrendAI Vision One™ 是唯一將資安曝險管理、資安營運以及強大的多層式防護集中在一起的業界領先 AI 網路資安平台。
TrendAI Vision One™ Threat Intelligence Hub 威脅情報中心提供了有關新興威脅與駭客集團的最新洞見、TrendAI™ Research 的獨家策略性報告,以及 TrendAI Vision One™ 平台的 TrendAI Vision One™ Threat Intelligence Feed 威脅情報來源。
新興威脅:
PeckBirdy:親中駭客集團在 LOLBin 攻擊手法中使用的多功能腳本框架
PeckBirdy:親中駭客集團在 LOLBin 攻擊手法中使用的多功能腳本框架
駭客集團檔案:
追蹤查詢
malName: (*MKDOOR* OR *HOLODONUT* OR *GRAYRABBIT* OR *PECKBIRDY*) AND eventName: MALWARE_DETECTION
TrendAI Vision One™ 客戶可以使用 Search 應用程式來尋找或追蹤本文提到的惡意指標,看看是否也出現在自己的環境中。
除此之外,TrendAI Vision One™ 客戶還可啟用 Threat Intelligence Hub 權利來取得更多追蹤查詢。
入侵指標 (IoC)
如需本文提到的入侵指標完整清單,請至此處。