非特權文件系統掛載面臨的安全困境|2018版

用戶命名空間和容器技術的出現使得以(我們希望的)安全方式向非特權用戶擴展更多類似root的功能成為可能。剩下的一個問題是文件系統的掛載,長期以來一直存在安全問題。允許這樣的掛載方式已經進行了數年,並且已經發布了針對4.18內核的補丁系列。但是,正如一個不相關的討論已經明確,真正安全的無特權文件系統掛載仍然是一個相當遙遠的願景。至少,如果有人想在內核中做到這一點。

試圖使掛載操作對普通用戶安全並不是什麼新鮮事;LWN覆蓋了2008年推出的一個補丁。這項工作從未合併過,但在2015年,當Eric Biederman(尤其是Seth Forshee)認真考慮允許用戶命名空間執行文件系統掛載時,允許非特權掛載的努力得到了加強。4.8內核的最初工作於2016年合併,但眾所周知,它並不是該問題的完整解決方案,因此大多數文件系統仍然只能由具有初始命名空間特權的用戶掛載。

Biederman最近發佈了一個新的補丁集“包裝”支持無特權的掛載。它負責處理許多細節,例如允許在掛載在用戶命名空間中的文件系統上創建設備節點,這種操作被認為是安全的,因為內核不會識別這些文件系統上的設備節點。他清楚地認為這個功能越來越接近為更廣泛的用途做準備。

不過,該計劃不允許無特權掛載任何文件系統。僅允許在此模式下明確標記為可安全掛載的文件系統類型。預期的用例顯然是允許通過FUSE機制掛載文件系統,這意味著實際的實現將在用戶空間中運行。這應該保護內核免受文件系統代碼本身的漏洞的影響,這是一件好事。

在另一個討論中,“syzbot”模糊測試項目最近報告了XFS文件系統的問題;yzbot已經對磁盤數據進行了一些模糊處理,結果出現了許多錯誤。但在這種情況下,XFS開發人員Dave Chinner解釋說問題不會得到修復。這是一個已知問題,它隻影響較舊的(“版本4”)磁盤格式,並且只能以打破未知(但很大)數量的其他工作文件系統為代價進行防禦。除此之外,XFS開發主要關注版本5格式,它具有校驗和以及其他可以捕獲大多數元數據損壞問題的機制。

有一個廣泛的討論是否XFS開者在使用正確的方法,Eric Sandeen抱怨錯誤涉及“僅僅是掛載一個精心製作的文件系統,在現實中永遠不會(直到宇宙的熱寂)造成破壞的”。Ted Ts'o指出,如果攻擊者創建了一個文件系統並以某種方式說服系統掛載它,這樣的文件系統(以及相關的崩潰)在現實生活中確實會出現。他將Fedora和Chrome OS命名為兩個系統,這兩個系統通過在可移動媒體(例如USB設備)上自動掛載文件系統來實現這種攻擊。

當然,有一類用戶享受自動掛載文件系統的便利。還有容器用例,在這個用例中,允許非特權用戶自己掛載文件系統是有充分理由的。因此,有人可能會認為,修復與磁盤格式損壞相關的所有錯誤是非常重要的,這樣才能保證安全性。不過,Chinner有個壞消息要告訴那些等著這一切發生的人:

我們幾乎無法阻止人們利用文件系統磁盤上格式的缺陷。沒有一個文件系統對它的所有元數據都有健壯的、詳盡的驗證,也沒有因為運行時檢查的複雜性和開銷而在運行時檢查我們能夠真正檢查的東西。

許多類型的破壞可以通過校驗和之類的方法來發現。不過,其他類型則更為微妙;Chinner舉了一個例子,將重要的元數據塊鏈接到普通文件中。至少可以說,要完全保護系統不受此類攻擊是很困難的,而且很可能會使文件系統慢下來。也就是說,Chinner並不希望像Fedora這樣的發行商停止自動掛載文件系統:“當我們為他們提供安全、易於使用的問題解決方案時,他們就會這樣做。這是我們要解決的問題,而不是把它推卸掉。顯然,這就留下了一個問題,即如何解決一個剛剛被描述為無法解決的問題。

對於Chinner來說,答案是明確的,至少從一般意義上來說是這樣的:“我們一次又一次的吸取了這個教訓:不要在特權環境下解析不可信的輸入”。這意味著,如果某個文件系統鏡像的內容不受信任(例如,它們來自非特權用戶),那麼該文件系統就不應該在內核空間中管理。換句話說,FUSE應該是任何非特權掛載操作的首選機制。

Ts'o抗議FUSE是“一個非常糟糕的安全邊界”,並且它缺乏對許多重要文件系統類型的支持。但是,FUSE是我們目前所擁有的,它確實將不受信任的文件系統的處理移出了內核。fusefs-lkl模塊(它似乎缺少自己的web站點,但是是使用Linux內核庫項目構建的)可以通過FUSE訪問任何內核支持的文件系統。

當Ts'o問及如何使非特權文件系統安裝安全時,Biederman明確表示,他也不認為大多數內核文件系統在短時間內使用這種模式是安全的:

現在,我的實際目標是能夠這樣的:“如果想要更強的安全性保證,請使用fuse在用戶空間中運行你的文件系統。”我認為這足以使可移動媒體在特權升級攻擊中保持合理的安全。

因此,似乎有一條相當容易理解的路徑,可以最終允許沒有特權的用戶掛載文件系統,而不會威脅到整個系統的完整性。顯然,還需要做一些工作來將所有的部分整合在一起。一旦完成,我們可能最終會有一個解決問題的方案,這個問題開發人員已經研究了至少十年。

原文鏈接:

https://lwn.net/Articles/755593/


分享到:


相關文章: