在systemd中發現了一個漏洞,該漏洞已在 (CVE-2019,6454), 什麼 允許導致控件初始化過程(PID1)阻塞 通過D-Bus向非特權用戶發送特製消息時。
很多 Red Hat開發人員也不排除使用該漏洞以root特權組織代碼執行的可能性。,但尚未確定發生這種攻擊的最終可能性。
關於systemd
對於那些不了解Systemd的人 我可以告訴你 這是一個Linux初始化系統和服務管理器 其中包括諸如按需守護程序啟動,自動掛載和掛載點維護,快照支持以及使用Linux控制組的進程跟踪等功能。
Systemd 提供註冊表守護程序以及其他工具和實用程序,以幫助完成常見的系統管理任務。 Lennart Poettering和Kay Sievers撰寫了SystemD,靈感來自發布的macOS和Upstart,目的是創建一個現代,動態的系統。
特別是,systemd提供了積極的並行化功能和基於依賴項的服務控制邏輯,從而允許服務並行啟動並縮短了啟動時間。 這兩個方面都存在於Upstart中,但由systemd進行了增強。
Systemd是主要Linux發行版的默認引導系統,但它與SysV啟動腳本向後兼容。
SysVinit是在systemd之前的初始化系統,並使用簡化的方法啟動服務。 Systemd不僅管理系統初始化,而且還提供其他知名工具(例如cron和syslog)的替代方法。
關於新的系統漏洞
通過操縱通過D-Bus發送的消息的大小, 攻擊者可以將指針移動到分配給堆棧的內存限制之外,繞過“堆棧保護頁”的保護,該保護基於調用異常(頁錯誤)的邊緣上的內存頁的替換。
成功的攻擊在具有systemd 18.10的Ubuntu 239和具有systemd 7.6的CentOS 219上得到了證明。
解決方法是,可以在GCC中使用“ -fstack-clash-protection”選項使用編譯,在Fedora 28和29中默認使用該選項。
應當指出的是,MUSL系統庫的作者在2014年指出了主要的體系結構問題,即過度充氣的PID1處理程序,並質疑實現PID1級控制器API以與總線鏈接的可行性,因為它是一個嚴重的問題遭受攻擊,並可能對整個系統的可靠性產生不利影響
據一位安全研究員說 揭示了一個漏洞,只有未使用的內存頁面才可能更改堆棧指針 (未分配),它不允許在PID1進程的上下文中組織代碼執行,但允許攻擊者在隨後的Linux內核轉換為“緊急”狀態時啟動PID1鎖定(對於PID控制器1故障,整個系統掛起)。
在systemd中,安裝了一個信號處理程序,該信號處理程序試圖捕獲PID1進程的故障(分段故障)並啟動外殼進行恢復。
但是由於在攻擊過程中會調用非重複(未分配)的內存頁,因此內核無法調用此信號處理程序,而只是使用PID 1終止進程,這反過來會無法繼續工作並進入“緊急”狀態,因此需要重新引導系統。
已經有解決問題的方法
像已經描述和報告的任何安全問題一樣,只有在解決了該問題並且 針對SUSE / openSUSE,Fedora的漏洞補丁更新已經發布,也適用於Ubuntu,部分適用於Debian (僅限Debian Stretch)。
儘管問題仍未在RHEL中糾正。
正是systemd具有成為大型特洛伊木馬的所有用途。 打破UNIX的“做一件事情,做好一件事情”的哲學,我們最終將為此付出代價。
我也是這麼想…
我個人對啟動系統相當保守,我認為就像傳統和原始UNIX的最老和最傳統的用戶一樣:我建議系統V INIT或永遠成為傳統SYSVINIT。 系統化(我在8.3年450月偷了我的THINKPAD T2017中保留了LIMUX DEBIAN XNUMX)
系統的吸!