<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LWN: 針對驅動程序設計的防火墻!

          共 2732字,需瀏覽 6分鐘

           ·

          2021-09-01 11:29

          關注了就能看到更多這么棒的文章哦~

          A firewall for device drivers

          By Jonathan Corbet
          August 13, 2021
          DeepL assisted translation
          https://lwn.net/Articles/865918/

          設備驅動程序(device drivers)以及它們所控制的硬件,長期以來一直被認為是系統(tǒng)中的完全可以信賴的一部分。不過,近年來這種信任已經(jīng)被逐步破壞了,而且在某些情況下甚至變得完全不可信了,比如 VM 虛擬機不信任它們所運行的 host 系統(tǒng)。最近報道的 virtio-hardenning 工作就是針對這種情況所采取的一些措施,但它只解決了典型內(nèi)核配置中內(nèi)置進來的一小部分驅動。其余的部分該怎么處理呢?來自 Kuppuswamy Sathyanarayanan 的驅動過濾 patch 就展示了一種可能的處理方法:把它們完全禁用掉。

          虛擬機通常只能直接訪問很少的物理硬件,甚至完全不可以訪問物理硬件。相應地,它們會通過主機提供的 emulated 設備來與外界互動。這使得 host 系統(tǒng)處于一種特權地位,因為它完全控制了這些虛擬設備的行為。如果在編寫驅動程序時沒有考慮到它所管理的設備可能是有惡意的,那么很有可能這個驅動程序就會被利用來入侵 guest 并竊取數(shù)據(jù),甚至哪怕客戶在運行時使用了 host 一般來說無法訪問的加密過的內(nèi)存數(shù)據(jù)也有可能出現(xiàn)數(shù)據(jù)泄露。

          上述的 virtio 改動對少數(shù) virtio 驅動進行了加固,防止它們在 host 不按規(guī)則出牌時產(chǎn)生錯誤行為。這方面的工作非常多(但至今仍未達到可以合入 mainline 的程度),而且漏洞是完全有可能真實存在的。即使 virtio 的工作完美完成了也是不夠的,畢竟內(nèi)核包含了成千上萬的其他各種驅動程序,其中大多數(shù)都沒有得到過類似程度的關注和分析??梢圆孪氲玫?,這些驅動程序絕大多數(shù)都不夠強大,無法完全抵御惡意設備發(fā)起的攻擊。如果 host 可以說服 guest 加載這樣一個惡意設備的驅動程序,那么系統(tǒng)的安全就完全無法得到保障了。

          針對這個問題,一個可能的解決方案是來逐個檢查并加固所有這些當前仍被被忽視的驅動程序。這樣做,肯定可以將內(nèi)核變得更完美,但千萬不要指望事情能按照這個方向發(fā)展。哪怕能夠找到一位開發(fā)者來愿意實現(xiàn)這樣的開發(fā)工作,可是也還有大量代碼需要用海量設備來進行測試,其中相當多的設備在很多年前就已經(jīng)很少有人使用了。因此,現(xiàn)實一點的話,必須接受這樣的事實:許多驅動程序永遠不會按這個方式來完成加固。

          另一種方法是直接讓這些驅動程序不可用。畢竟一個完全無法運行的驅動程序不太可能會損害系統(tǒng)了。大多數(shù)虛擬機只需要少量的驅動程序,其余的代碼都是危險的無價值代碼。顯而易見,如果編譯生成的內(nèi)核里面只帶有它所需要的驅動程序,那么系統(tǒng)不僅變得更加安全了,同時 size 也更小。這個想法有一個問題,那就是發(fā)行版提供商很討厭提供多個采用不同的 kernel config 來編譯生成的內(nèi)核。因為每多提供一種內(nèi)核,都會增加相應的編譯、測試和支持的工作量,而且只需要幾個 config 選項的差異就會導致大量的內(nèi)核映像文件。因此,如果可能的話,發(fā)行版提供商會盡力確保只提供單一的內(nèi)核鏡像。

          這樣一來 Sathyanarayanan 的 patch set 就有用處了。它為系統(tǒng)管理員提供了一種方法來控制哪些驅動程序可以被允許運行。具體來說是增加了兩個新的 cmdline 選項(filter_allow_drivers 和 filter_deny_drivers)用來進行這方面的控制,可以使用 "bus:driver" 符號來將指定驅動程序添加到兩個 list 中。字符串 "ALL" 可以匹配所有選項。因此,舉例來說,在啟動一個系統(tǒng)時如果使用下面的 cmdline 參數(shù):

          filter_allow_drivers=ALL:ALL

          那么就會允許所有驅動程序正常運行,也就是缺省配置。allow list 會首先被使用,并優(yōu)先于 deny list,所以如果像下面這樣來配置的話:

          filter_allow_drivers=pci:e1000 filter_deny_drivers=ALL:ALL

          就會允許 e1000 網(wǎng)絡適配器的驅動程序正常運行,但會阻止其他任何驅動程序。在 sysfs 中還有一個新增的 driver attribute(名為 allowed),也可以用它在運行時來改變一個驅動程序的狀態(tài)。

          驅動程序子系統(tǒng)的維護者 Greg Kroah-Hartman 對這個提案很不以為然。他建議要么編譯生成一個特殊的內(nèi)核鏡像,要么使用一些現(xiàn)有的機制來阻止那些不需要的設備驅動程序。比如在系統(tǒng)的 modprobe 配置中拒絕,或者使用 sysfs 中的開關來解除驅動與設備的綁定關系。但正如 Andi Kleen 后來的解釋所說,這些機制并不能完全滿足要求。配置 modprobe 的話,無法影響內(nèi)置的驅動程序,而且,無論如何,起初的目的是為了防止不受信任的驅動得以運行。在用戶空間可以手動解除某個驅動程序的綁定關系時,它已經(jīng)在內(nèi)核中完成了配置,沒準可能已經(jīng)在試圖驅動某個惡意設備了。

          Kleen 補充說,還可以換一個角度來看待這種情況,那就是把在可能有惡意的 host 上運行的 guest 系統(tǒng)看作是互聯(lián)網(wǎng)上的服務器。服務器幾乎必定會運行一個防火墻程序,將所有訪問限制在已知安全(或至少是希望是安全的)的端口上。他開發(fā)的 driver filter 就相當于 guest 系統(tǒng)的防火墻。這個方案把加固問題簡化一下之后,真正變得可行了。

          這些論點是否能說服 Kroah-Hartman 還有待觀察。交流在沒有得出任何明確結論的情況下就沉默了下來。不過,推動這項工作的出發(fā)點似乎是真實的需求。如果當前的解決方案沒有被采納的話,我們很可能會在未來看到其他類似方案的嘗試。設備已經(jīng)不再是隱藏在內(nèi)核后面而已了,它們已經(jīng)變成了內(nèi)核受攻擊面(attach surface)的一部分。注重安全的開發(fā)者自然希望盡可能地減少這種受攻擊面。

          全文完
          LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。

          歡迎分享、轉載及基于現(xiàn)有協(xié)議再創(chuàng)作~

          長按下面二維碼關注,關注 LWN 深度文章以及開源社區(qū)的各種新近言論~



          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久操精品视频 | 精品成人无码久久久久 | 大胆无码视频 | 爆乳尤物一区二区三区 | 色五月婷婷五月 |