LKRG:用於運行時完整性檢查的可載入內核模塊
開源社區的人們正在致力於一個 Linux 內核的新項目,它可以讓內核更安全。命名為 Linux 內核運行時防護 (LKRG),它是一個在 Linux 內核執行運行時完整性檢查的可載入內核模塊(LKM)。
它的用途是檢測對 Linux 內核的已知的或未知的安全漏洞利用企圖,以及去阻止這種攻擊企圖。
LKRG 也可以檢測正在運行的進程的提權行為,在漏洞利用代碼運行之前殺掉這個運行進程。
這個項目開發始於 2011 年,首個版本已經發布
因為這個項目開發的較早,LKRG 的當前版本僅僅是通過內核消息去報告違反內核完整性的行為,但是隨著這個項目的成熟,將會部署一個完整的漏洞利用緩減系統。
LKRG 的成員 Alexander Peslyak 解釋說,這個項目從 2011 年啟動,並且 LKRG 已經經歷了一個「重新開發"階段。
LKRG 的首個公開版本是 LKRG v0.0,它現在可以從 這個頁面 下載使用。這裡 是這個項目的維基,為支持這個項目,它也有一個 Patreon 頁面。
雖然 LKRG 仍然是一個開源項目,LKRG 的維護者也計劃做一個 LKRG Pro 版本,這個版本將包含一個專用的 LKRG 發行版,它將支持對特定漏洞利用的檢測,比如,容器泄漏。開發團隊計劃從 LKRG Pro 基金中提取部分資金用於保證項目的剩餘工作。
LKRG 是一個內核模塊而不是一個補丁。
一個類似的項目是 附加內核監視器 (AKO),但是 LKRG 與 AKO 是不一樣的,因為 LKRG 是一個內核載入模塊而不是一個補丁。LKRG 開發團隊決定將它設計為一個內核模塊是因為,在內核上打補丁對安全性、系統穩定性以及性能都有很直接的影響。
而以內核模塊的方式提供,可以在每個系統上更容易部署 LKRG,而不必去修改核心的內核代碼,修改核心的內核代碼非常複雜並且很容易出錯。
LKRG 內核模塊在目前主流的 Linux 發行版上都可以使用,比如,RHEL7、OpenVZ 7、Virtuozzo 7、以及 Ubuntu 16.04 到最新的主線版本。
它並非是一個完美的解決方案
LKRG 的創建者警告用戶,他們並不認為 LKRG 是一個完美的解決方案,它提供不了堅不可摧和 100% 的安全。他們說,LKRG 是 「設計為可旁通的」,並且僅僅提供了「多元化安全」 的一個方面。
雖然 LKRG 可以防禦許多已有的 Linux 內核漏洞利用,而且也有可能會防禦將來許多的(包括未知的)未特意設計去繞過 LKRG 的安全漏洞利用。它是設計為可旁通的(儘管有時候是以更複雜和/或低可利用為代價的)。因此,他們說 LKRG 通過多元化提供安全,就像運行一個不常見的操作系統內核一樣,也就不會有真實運行一個不常見的操作系統的可用性弊端。
LKRG 有點像基於 Windows 的防病毒軟體,它也是工作於內核級別去檢測漏洞利用和惡意軟體。但是,LKRG 團隊說,他們的產品比防病毒軟體以及其它終端安全軟體更加安全,因為它的基礎代碼量比較小,所以在內核級別引入新 bug 和漏洞的可能性就更小。
運行當前版本的 LKRG 大約會帶來 6.5% 的性能損失
Peslyak 說 LKRG 是非常適用於 Linux 機器的,它在修補內核的安全漏洞後不需要重啟動機器。LKRG 允許用戶持續運行帶有安全措施的機器,直到在一個計劃的維護窗口中測試和部署關鍵的安全補丁為止。
經測試顯示,安裝 LKRG v0.0 後大約會產生 6.5% 性能影響,但是,Peslyak 說將在後續的開發中持續降低這種影響。
測試也顯示,LKRG 檢測到了 CVE-2014-9322 (BadIRET)、CVE-2017-5123 (waitid(2) missing access_ok)、以及 CVE-2017-6074 (use-after-free in DCCP protocol) 的漏洞利用企圖,但是沒有檢測到 CVE-2016-5195 (Dirty COW) 的漏洞利用企圖。開發團隊說,由於前面提到的「可旁通」的設計策略,LKRG 沒有檢測到 Dirty COW 提權攻擊。
在 Dirty COW 的測試案例中,由於 bug 機制的原因,使得 LKRG 發生了 「旁通」,並且這也是一種利用方法,它也是將來類似的以用戶空間為目標的繞過 LKRG 的一種方法。這樣的漏洞利用是否會是普通情況(不太可能!除非 LKRG 或者類似機制的軟體流行起來),以及對它的可用性的(負面的)影響是什麼?(對於那些直接目標是用戶空間的內核漏洞來說,這不太重要,也並不簡單)。
作者:Catalin Cimpanu 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive