開放牆項目
新版本的變化包括:
- 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%。
在最近舉辦的一場
此外,值得注意的是,發行版開發商
LKRG 中的完整性檢查是透過將核心和模組的實際程式碼和資料、一些重要的資料結構和 CPU 設定與儲存的雜湊值或對應記憶體區域、資料結構或暫存器的副本進行比較來執行的。 檢查由計時器定期激活,並根據各種事件的發生而激活。
確定可能使用的漏洞和阻止攻擊是在核心提供對資源的存取之前(例如,開啟檔案之前)、但在進程收到未經授權的權限(例如,更改 UID)之後的階段進行的。 當偵測到未經授權的行為時,預設會強制終止進程,這足以阻止許多漏洞。
來源: opennet.ru