LKRG:用於執行時完整性檢查的可載入核心模組
| 2018-03-18 23:31
開源社群的人們正在致力於一個 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
相關文章
- 如何使用 Apache 控制命令檢查它的模組是否已經啟用或載入Apache
- linux核心動態載入模組Linux
- 【隨筆】JVM核心:JVM執行和類載入JVM
- 資料庫open時檢查點執行的過程資料庫
- 檢視執行緒所在模組執行緒
- Python:檢視已安裝模組 和 檢視可匯入模組Python
- 用於對執行慢的查詢進行優化優化
- 物件儲存服務的完整性檢查物件
- 用windbg檢查.NET執行緒池設定執行緒
- Javascript在頁面載入時的執行順序JavaScript
- Oracle中幾個常見的用於查許可權的檢視Oracle
- 核心模組的載入流程
- 用於對執行慢的查詢進行分析的清單
- ELF PHP 可執行程式執行後載入重型指令碼的過程PHP行程指令碼
- JVM核心之JVM執行和類載入全過程JVM
- 執行時異常和檢查性異常區別
- 檢查sql or session 執行的進度SQLSession
- 大家有沒有關於 Python 執行起來不錯的程式碼檢查工具?用於 CICD 裡面的靜態程式碼檢查Python
- Jooby的核心在於模組
- 解剖Nginx·模組開發篇(4)模組開發中的命名規則和模組載入與執行流程Nginx
- 結合 Shell 對 Koa 應用執行環境檢查
- 檢視語句執行的時間
- 0171-建立核心可執行檔案
- 關於UPDATE中關聯查詢的執行時間考慮
- 結合原始碼分析 Node.js 模組載入與執行原理原始碼Node.js
- 可本地執行大模型的應用大模型
- openGauss核心分析2:簡單查詢的執行
- swoole 模組的載入
- Linux核心模組驅動載入與dmesg除錯Linux除錯
- Android執行時ART載入OAT檔案的過程分析Android
- Android執行時ART載入類和方法的過程分析Android
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- Win10系統執行檔案檢查器工具提示資源保護完整性違規的解決方法Win10
- 檢視oracle系統的執行時間Oracle
- SQL語句執行進度檢查SQL
- 自己動手實現springboot執行時執行java原始碼(執行時編譯、載入、註冊bean、呼叫)Spring BootJava原始碼編譯Bean
- CentOS升級核心與容器執行時核心引數的關係CentOS
- 檢視JVM執行時引數JVM