發布 LKRG 0.8 模塊以防止 Linux 內核中的漏洞被利用

開放牆項目 опубликовал 核心模組發布 力克RG 0.8 (Linux Kernel Runtime Guard),旨在偵測和阻止攻擊以及違反核心結構完整性的行為。 例如,此模組可以防止對正在運行的核心進行未經授權的更改,並嘗試更改使用者進程的權限(檢測漏洞的使用)。 此模組既適合組織針對 Linux 核心已知漏洞的保護(例如,在難以更新系統核心的情況下),也適合對抗未知漏洞的利用。 專案程式碼 分發者 在 GPLv2 下獲得許可。

新版本的變化包括:

  • LKRG專案的定位發生了變化,不再分為用於檢查完整性和確定漏洞利用情況的單獨子系統,而是呈現為一個用於識別攻擊和各種完整性違規的完整產品;
  • 相容於 Linux 內核 5.3 到 5.7,以及使用積極的 GCC 優化編譯的內核,不帶 CONFIG_USB 和 CONFIG_STACKTRACE 選項或使用 CONFIG_UNWINDER_ORC 選項,以及不具有 LKRG 掛鉤函數的內核(如果可以)被免除;
  • 建置時,會檢查一些強制性的 CONFIG_* 內核設定以產生有意義的錯誤訊息,而不是晦澀的崩潰;
  • 增加了對待機(ACPI S3,掛起到 RAM)和睡眠(S4,掛起到磁碟)模式的支援;
  • 為 Makefile 新增了 DKMS 支援;
  • 已實現對 32 位元 ARM 平台的實驗性支援(在 Raspberry Pi 3 Model B 上測試)。 先前提供的 AArch64 (ARM64) 支援已擴展,以提供與 Raspberry Pi 4 板的兼容性;
  • 新增了新的鉤子,包括 Capable() 呼叫處理程序,以更好地識別操縱“的漏洞”能力「,不是進程 ID(證書);
  • 提出了新的邏輯來偵測逃避命名空間限制的嘗試(例如,來自 Docker 容器);
  • 在 x86-64 系統上,會檢查並套用 SMAP(管理程式模式存取封鎖)位,旨在阻止在核心層級執行的特權程式碼對使用者空間資料的存取。 之前實作了SMEP(Supervisor Mode Execution Prevention)保護;
  • 在操作過程中,LKRG設定被放置在通常是唯讀的記憶體頁中;
  • 對攻擊可能最有用的日誌資訊(例如,有關核心中的位址的資訊)僅限於偵錯模式(log_level=4 及更高),預設會停用。
  • 進程追蹤資料庫的可擴展性得到了提高——不再是由一個自旋鎖保護的一棵RB樹,而是由512個讀寫鎖保護的512個RB樹組成的哈希表;
  • 預設已實現並啟用一種模式,其中通常僅檢查當前任務的進程標識符的完整性,也可以選擇檢查啟動(喚醒)任務的進程標識符的完整性。 對於其他處於睡眠狀態或在不存取 LKRG 控制的核心 API 的情況下工作的任務,執行檢查的頻率較低。
  • 新增了新的 sysctl 和模組參數,用於微調 LKRG,以及兩個 sysctl,用於透過從開發人員準備的微調設定(設定檔)集中進行選擇來簡化配置;
  • 預設設定已更改,一方面是在違規檢測速度和響應有效性之間實現了更平衡的平衡,另一方面是對效能的影響和誤報風險;
  • systemd 單元檔案經過重新設計,可在啟動早期載入 LKRG 模組(可使用核心命令列選項來停用該模組);

考慮到新版本中提出的最佳化,使用 LKRG 0.8 時的效能降低估計在預設模式(「重」)下為 2.5%,在輕模式(「輕」)下為 2%。

在最近舉辦的一場 研究 用於檢測 Rootkit LKRG 的軟體包的有效性 顯示 最佳結果,辨識出8 個在核心層級工作的測試Rootkit 中的9 個,沒有出現誤報(辨識出Rootkit Diamorphine、Honey Pot Bears、LilyOfTheValley、Nuk3 Gh0st、Puszek、Reptile、Rootfoo Linux Rootkit 和Sutekh,但Keysniffer,它是一個核心)模組,是被鍵盤記錄器錯過的,而不是字面上的 rootkit)。 作為比較,AIDE、OSSEC 和 Rootkit Hunter 軟體包偵測到了 2 個 Rootkit 中的 9 個,而 Chkrootkit 則沒有偵測到任何一個。 同時,LKRG不支援偵測位於使用者空間的rootkit,因此將AIDE和LKRG結合使用時效率最高,可以辨識所有類型的14個rootkit中的15個。

此外,值得注意的是,發行版開發商 Whonix 開始 編隊 適用於 Debian、Whonix、Qubes 和 Kicksecure 的現成 DKMS 軟體包,以及用於 Arch Linux 已經更新到0.8版本。 LKRG 套餐還提供俄語版本 ALT Linux и 阿斯特拉Linux.

LKRG 中的完整性檢查是透過將核心和模組的實際程式碼和資料、一些重要的資料結構和 CPU 設定與儲存的雜湊值或對應記憶體區域、資料結構或暫存器的副本進行比較來執行的。 檢查由計時器定期激活,並根據各種事件的發生而激活。

確定可能使用的漏洞和阻止攻擊是在核心提供對資源的存取之前(例如,開啟檔案之前)、但在進程收到未經授權的權限(例如,更改 UID)之後的階段進行的。 當偵測到未經授權的行為時,預設會強制終止進程,這足以阻止許多漏洞。

來源: opennet.ru

添加評論