
摘要
本報告探討如何利用 Linux io_uring 介面繞過基於系統呼叫的安全監控,由 ARMO 開發的概念驗證 rootkit Curing 展示了這一點。Curing 透過共享環形緩衝區(Shared ring buffers)的非同步 I/O 操作,成功規避了 Falco、Tetragon 和 Microsoft Defender for Linux 等先進的安全工具的偵測。本分析突顯了現執行時期安全解決方案(Runtime security solutions)的關鍵設計缺陷,並提出緩解策略,包括 Kernel Runtime Security Instrumentation (KRSI) 和異常偵測框架。

1. 引言
Linux 執行時期安全工具越來越依賴系統呼叫 (syscall) 監控來偵測惡意活動。然而, io_uring 介面——於 Linux 5.1 (2019) 引入——允許非同步 I/O 操作而不需觸發傳統的系統呼叫,造成系統性的監控盲點。ARMO 的研究透過 Curing 揭示了此漏洞,這是一個完全透過 io_uring 運作的 rootkit,成功繞過了商業及開源工具的偵測機制。
本報告剖析 io_uring 漏洞利用的技術基礎,評估其對安全生態系統的影響,並提供改進偵測能力的具體建議。
2. 背景:io_uring 架構
2.1 核心機制
io_uring 使用兩個在使用者與核心空間共享的環形緩衝區:
- Submission Queue (SQ) :使用者空間應用程式非同步送出I/O 請求(例如檔案讀取、網路操作)。
- Completion Queue (CQ) :核心返回已完成操作的結果。
此架構透過允許批次送出和輪詢完成結果,消除了系統呼叫的開銷,使其在高吞吐量應用程式(如資料庫和網頁伺服器)中極為高效。
2.2 安全影響
傳統安全工具透過 Hook 系統呼叫(例如
read
、
write
、
connect
)來監控活動。然而,io_uring 完全繞過這些 Hook,因為其操作透過共享記憶體管理,而非系統呼叫。例如:
-
檔案操作
:
IORING_OP_READV
和IORING_OP_WRITEV
允許直接存取檔案。 -
網路通訊
:
IORING_OP_SEND
和IORING_OP_RECV
支援 socket 操作。
這種規避能力使得 Falco 和 Microsoft Defender 等工具失效,Curing 未被偵測地執行了檔案篡改、惡意軟體部署和 C2 通訊 ,證明了這一點。
3. Curing Rootkit:設計與實作
3.1 架構概覽
Curing 採用客戶端-伺服器模型運作:
- Client :受感染主機利用 io_uring 執行指令。
- Server :指揮與控制 (C2) 基礎設施發送指令。
關鍵組件 :
-
指令執行
:客戶端透過 io_uring 網路操作獲取指令(例如
read /etc/shadow
、execute payload
)。 -
系統呼叫規避
:僅使用
io_uring_setup
和io_uring_enter
系統呼叫進行初始化,後續操作繞過系統呼叫。
- // 簡化的 I/O 請求提交程式碼片段
- struct io_uring ring;
- io_uring_queue_init(32, ˚, 0);
- struct io_uring_sqe *sqe = io_uring_get_sqe(˚);
- io_uring_prep_readv(sqe, fd, &iov, 1, 0);
- io_uring_submit(˚);
3.2 攻擊流程
- 初始化 :客戶端使用基於 io_uring 的 socket 操作連接到 C2 伺服器。
- 指令獲取 :伺服器透過完成佇列(Queue)傳送加密指令。
- 執行 :客戶端使用 io_uring I/O 原語(Primitives)處理指令(例如檔案外洩)。
- 結果回報 :資料傳回伺服器,且不觸發基於系統呼叫的偵測。
4. 安全工具限制分析
4.1 Falco 與 Tetragon
- Falco :依賴透過 eBPF 或核心模組的系統呼叫 Hook。ARMO 確認 Falco 的預設規則無法偵測基於 io_uring 的檔案存取或網路活動。使用 Linux Security Module (LSM) Hooks的插件(Plugin)仍在開發中。
- Tetragon :雖然能監控 Kprobes 和 LSM Hooks,但 Tetragon 需手動設定才能追蹤 io_uring 操作,使大多數部署容易受到攻擊。
4.2 Microsoft Defender for Linux
Microsoft 的解決方案僅透過檔案完整性監控 (FIM) 偵測到檔案變更,而無法偵測基於 io_uring 的操作。網路層級的偵測完全被規避,凸顯其對系統呼叫追蹤的依賴。
4.3 eBPF 限制
eBPF 的驗證器限制了複雜的邏輯,迫使供應商優先考慮系統呼叫 Hooks 而不是更深層的核心偵測。這種權衡犧牲了 io_uring 和類似機制的可見性。
5. 偵測與緩解策略
5.1 異常偵測
- io_uring 使用分析 :標記使用 io_uring 進行異常操作的程序(例如非資料庫應用程式)。
-
行為分析
:監控透過
IORING_OP_SEND
啟動的加密 C2 流量等模式。
5.2 Kernel Runtime Security Instrumentation (KRSI)
KRSI 與 Linux Security Modules (LSM) 整合,將 eBPF 程式附加到安全關鍵 Hook (例如
file_open
、
socket_connect
)。這提供了不依賴系統呼叫的 io_uring 操作可見性。
5.3 供應商特定修正
- CrowdStrike :更新 Falcon 以監控 io_uring 操作。
- Google :在 Android、ChromeOS 和生產伺服器中關閉 io_uring。
6. 結論
io_uring 介面凸顯了安全工具適應不斷演進的核心功能的挑戰。雖然像 io_uring 這樣以效能為導向的創新對 Linux 的可擴展性至關重要,但其安全影響需要積極的緩解措施。供應商必須從以系統呼叫為中心的模型轉向結合 KRSI、異常偵測和威脅情報的多層次偵測框架。
參考文獻
- io_uring Rootkit Bypasses Linux Security Tools. Retrieved from ARMO. (2025).
- Linux io_uring PoC Rootkit Bypasses System Call-Based Threat Detection Tools. Retrieved from The Hacker News. (2025).
- Linux Has a Major Weakness: Invisible Rootkit Abuses Security Systems' Blind Spot. Retrieved from CyberNews. (2025).
- New Linux Rootkit . Retrieved from Schneier on Security. (2025).
- Hackers Can Now Bypass Linux Security Thanks to Terrifying New Curing Rootkit . Retrieved from BetaNews. (2025).
- Linux io_uring Security Blind Spot Let Attackers Stealthily Deploy Rootkits . Retrieved from Cybersecurity News. (2025).
- ARMO/curing: io_uring-based Rootkit . Retrieved from GitHub. (2025).