LinkPro Linux Rootkit
最近,針對亞馬遜網路服務 (AWS) 環境的入侵暴露了一個先前未記錄的 GNU/Linux Rootkit,其被追蹤為 LinkPro。此後門因其雙重 eBPF 模組用途而引人注目:一組模組用於隱藏構件,另一組模組充當隱密觸發器——一種「敲擊」機制,僅在檢測到特製的 TCP 封包後才會喚醒遠端命令功能。攻擊鍊和 Rootkit 的機製表明,攻擊者技藝高超,他們巧妙地融合了容器濫用、內核級隱藏和靈活的網路激活技術,以規避檢測和取證關聯。
目錄
感染媒介和初始部署
此次入侵始於利用一個暴露的 Jenkins 實例,該實例存在 CVE-2024-23897(CVSS 9.8)漏洞。攻擊者以此為據點,將一個惡意 Docker 映像(kvlnt/vv,現已從 Docker Hub 移除)推送到多個 Kubernetes 叢集。該鏡像基於 Kali Linux 構建,並包含一個小型應用程式資料夾,旨在建立持久性、遠端存取和分階段下載後門。
惡意 Docker 映像內部
該圖像的應用程式資料夾包含三個具有不同作用的關鍵檔案:
start.sh — 啟動 SSH 服務並執行其他兩個元件的 shell 腳本。
link-一個開源程式(vnt),編譯/打包後充當VPN/代理客戶端,連接到vnt.wherewego[.]top:29872。這使得攻擊者可以從任何地方存取受感染的主機,並透過它轉向其他目標。
app-一個基於 Rust 的下載程式(稱為 vGet),它從 S3 儲存桶中取得加密的 vShell 有效負載,然後與其位於 56.155.98[.]37 的命令與控制 (C2) 伺服器建立 WebSocket 連結。
向 Kubernetes 節點交付額外的有效負載
除了惡意鏡像之外,運營商還在節點上植入了另外兩個元件:一個用於安裝另一個 vShell 後門的植入器,以及一個用 Golang 編寫的 rootkit LinkPro。 LinkPro 的設計模式是兩種:被動(反向)或主動(正向),取決於其配置。在被動模式下,它等待特殊網路封包啟動;在主動模式下,它會主動發起與 C2 的通訊。正向模式支援五種傳輸協定(HTTP、WebSocket、UDP、TCP、DNS),而反向模式則將通訊限制為 HTTP。
LinkPro 如何持續存在
該惡意軟體的整體執行和持久性行為遵循明確的順序:
- 安裝隱藏 eBPF 模組。此模組包含 Tracepoint 和 Kretprobe eBPF 程序,用於隱藏 LinkPro 的進程和網路活動。
- 如果安裝隱藏 eBPF 模組失敗(或已停用),請在 /etc/libld.so 安裝共用程式庫,並將該路徑新增至 /etc/ld.so.preload 作為後備隱藏機制。
- 如需進行反向(被動)操作,請安裝 Knock eBPF 模組。 Knock 包含一個 XDP 程式和一個 TC 程序,因此 C2 頻道只有在收到特定的「魔術包」後才會啟動。
- 透過建立 systemd 服務來建立持久性。
- 執行從 C2 接收的命令。
- 在關機或收到訊號(SIGHUP、SIGINT、SIGTERM)時,卸載 eBPF 模組並刪除/恢復 /etc/libld.so 預先載入修改,以便系統恢復到先前的狀態。
魔法包和敲擊激活機制
LinkPro 的被動激活依賴於精確的 TCP 封包:任何視窗大小等於 54321 的 TCP 封包都被視為「魔術封包」。當 Knock 偵測到該封包時,它會儲存來源 IP 並為其添加一個一小時的有效期標記。來自該來源的後續 TCP 封包會受到監控,並在適當的時候,Knock 會重寫標頭,以便將運營商的流量重定向到 LinkPro 的監聽連接埠 (2333)。出站資料包會被調整,將原始連接埠返回網路(來源連接埠重寫為 2233)。其意圖簡單卻有效:允許攻擊者透過前端防火牆允許的任何連接埠存取 LinkPro,同時使外部防火牆日誌與主機內部網路活動難以關聯。
LinkPro 如何隱藏自身
LinkPro 採用雙層隱藏策略:
核心/eBPF 隱藏:隱藏 eBPF 模組會安裝 Tracepoint 和 Kretprobe 程序,用於攔截諸如 getdents(用於隱藏檔案/目錄)和 sys_bpf(用於隱藏其自身的 BPF 程式)之類的系統呼叫。此方法需要在核心中啟用 CONFIG_BPF_KPROBE_OVERRIDE 選項。
使用者空間 LD_PRELOAD 回退:如果核心功能不存在,LinkPro 會寫入一個共享庫 (libld.so),並將其路徑放置在 /etc/ld.so.preload 中。由於 /etc/ld.so.preload 會導致指定的程式庫載入到每個動態連結進程(使用 /lib/ld-linux.so 和 glibc 的進程)中,因此植入的 libld.so 會提前(在 glibc 自身行為之前)鉤住 libc 函數,並修改 libc 會提前(在 glibc 自身行為之前)鉤住 libc 函數,並修改 libc 調用的返回值,以隱藏可能暴露其存在的痕跡。
Rootkit 功能與指令集
LinkPro 支援互動式和自動化遠端操作。其實現的功能包括:
- 啟動 /bin/bash 偽終端並執行互動式 shell 工作階段。
- 執行任意 shell 命令。
- 枚舉檔案和目錄並執行檔案操作。
- 下載檔案並將其寫入磁碟。
- 建立用於樞軸和離地代理的 SOCKS5 代理隧道。
網路協定支援和 C2 行為
在主動(正向)模式下,LinkPro 非常靈活:它可以使用 HTTP、WebSocket、UDP、TCP 或 DNS 傳輸協定進行通訊。在被動(反向)模式下,其通訊僅限於 HTTP,但具有隱身優勢,因為它僅在 Knock 魔法包打開一個臨時的一小時命令視窗後進行監聽。
清理和卸載行為
如果進程收到終止訊號,LinkPro 會清除相關痕跡:它會卸載已安裝的 eBPF 模組,並刪除或恢復 /etc/libld 文件,將其恢復到先前的狀態,使系統看起來沒有任何變更。這種刻意的清理程序顯示操作員擔心規避攻擊,並希望最大程度地減少長期取證痕跡。
操作背景和歸因
該活動使用了高風險 Jenkins 漏洞、惡意容器鏡像、多個後門變體以及內核級隱身技術——這些因素表明攻擊者意圖明確且能力超群。目前尚未公開明確的歸屬資訊;然而,該活動所使用的工具集以及其用於代理和持久遠端存取的明顯用途,強烈表明其活動存在經濟動機(例如,轉移目標、使用代理進行更多入侵或轉售存取權限)。
核心依賴和回退行為
由於 LinkPro 依賴 BPF kprobe 覆蓋功能進行隱密的核心攔截,因此它僅在主機核心暴露 CONFIG_BPF_KPROBE_OVERRIDE 時才會套用核心級隱藏技術。當缺少此核心功能時,LinkPro 會主動回退到 LD_PRELOAD 共享庫方法,將自身隱藏在使用者空間中,從而確保在各種環境中都能實現隱藏。
結束語
LinkPro 展示了現代入侵如何結合容器入侵、分階段加載器、內核插樁 (eBPF) 以及巧妙的網絡技巧(魔術包激活和端口重寫),從而保持隱蔽性和靈活性。偵測和修復需要仔細檢查未經授權的 eBPF 程式、/etc/ld.so.preload 中的意外條目、異常的 systemd 服務以及與指定基礎設施的網路連線(取證指標包括 IP 56.155.98[.]37、連接埠 29872、2333、2233 映像名稱的 kvlcker/v)。