摘要

本報告探討如何利用 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) 和異常偵測框架。

揭秘 Curing:io_uring Rootkit 如何繞過 Linux 防護 | 資訊安全新聞

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 使用兩個在使用者與核心空間共享的環形緩衝區:

  1. Submission Queue (SQ) :使用者空間應用程式非同步送出I/O 請求(例如檔案讀取、網路操作)。
  2. 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 採用客戶端-伺服器模型運作:

  1. Client :受感染主機利用 io_uring 執行指令。
  2. Server 指揮與控制 (C2) 基礎設施發送指令。

關鍵組件

  • 指令執行 :客戶端透過 io_uring 網路操作獲取指令(例如 read /etc/shadow execute payload )。
  • 系統呼叫規避 :僅使用 io_uring_setup io_uring_enter 系統呼叫進行初始化,後續操作繞過系統呼叫。
  1. // 簡化的 I/O 請求提交程式碼片段
  2. struct io_uring ring;
  3. io_uring_queue_init(32, ˚, 0);
  4. struct io_uring_sqe *sqe = io_uring_get_sqe(˚);
  5. io_uring_prep_readv(sqe, fd, &iov, 1, 0);
  6. io_uring_submit(˚);

3.2 攻擊流程

  1. 初始化 :客戶端使用基於 io_uring 的 socket 操作連接到 C2 伺服器
  2. 指令獲取 :伺服器透過完成佇列(Queue)傳送加密指令。
  3. 執行 :客戶端使用 io_uring I/O 原語(Primitives)處理指令(例如檔案外洩)。
  4. 結果回報 :資料傳回伺服器,且不觸發基於系統呼叫的偵測。

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、異常偵測和威脅情報的多層次偵測框架。

Copyright © 2025 版權所有 翊天科技有限公司