簽名驅動/模組有什麼作用以及有何意義?

簽名驅動/模組有什麼作用以及有何意義?

最近安裝了一個需要手動簽名模組的驅動程序,令人困惑的是該模組的簽名實際上在做什麼以及為什麼必須這樣做。

關於此過程還有其他問題,但它們更具技術性。關於簽名模組的作用、為什麼有必要以及替代方案是什麼(顯然 dkms 可以自動簽名模組)的簡單解釋是什麼?

答案1

內核可以配置為在使用未簽名或錯誤簽署的模組時發出警告(透過日誌訊息+在核心上設定污點標誌),或直接拒絕任何沒有內核簽名的核心模組可以驗證。

當使用 BIOS 式開機程序時,或在停用安全開機的情況下使用 UEFI 時,這本質上只是一個可選的額外安全程序。這將使入侵者更難在系統中添加邪惡的核心模組(例如基於核心的 rootkit,以隱藏入侵者的工具和操作)。

但是,當使用啟用了安全啟動的 UEFI 時,它是安全啟動要求的一部分。安全啟動的「精神」是禁止將不受信任的程式碼載入到核心空間。 UEFI 韌體檢查開機載入程式上是否有有效簽章(或列入白名單的 SHA256 雜湊值);引導程式需要檢查作業系統核心上的相同情況;並且核心應該將此要求擴展到將在核心空間中執行的所有程式碼。

當然,實際上作業系統核心可以輕鬆選擇不滿足此要求。但開發安全啟動的組織已經決定,這種選擇退出至少應該需要係統管理員採取明確的行動:預設應該是強制執行簽章要求。

(順便說一句,這也是現代 Windows 要求所有已安裝的驅動程式預設進行簽名的部分原因。如果要安裝未簽署的驅動程序,則需要明確更改需要管理員存取權限的設定。)

可以在安全啟動系統上啟動並允許“開箱即用”執行未簽名的核心空間代碼的工具將被稱為安全啟動規避設備並將被歸類為惡意軟體。

Microsoft 是最著名的安全啟動簽署者,他們只會shimx64.efi對強制執行簽署要求的 shim 引導程式版本進行簽署。

支援安全啟動的 UEFI 韌體將具有內建功能,可檢查使用 Microsoft PE+ 二進位格式(檔案*.efi使用的格式)的二進位檔案的簽章。但 Linux 世界通常不使用這種二進位格式:而是使用 ELF 二進位格式。

Linux 核心模組和 GNU GRUB 引導程式模組都基於 ELF 格式。這需要引導程式和核心為 ELF 二進位檔案提供自己的簽章檢查演算法,但顯然 UEFI 論壇(管理 UEFI 和安全開機規範的產業聯盟)已經決定只要預設要求就可以這樣做維護有效簽章。

當然,如果您使用 DKMS 自動構建和簽署內核模組,這並不完全符合預期:這意味著將有一個帶有私鑰的證書,可用於自動生成有效簽名,因此入侵者也可以也用它來簽署任何邪惡的核心模組。它的安全性並不比沒有安全啟動的系統差,但也沒安全多少。

如果您有多個系統,則可以透過僅在一台主機(可能是受攻擊者威脅最小的主機)上擁有模組簽署憑證的私鑰來獲得一些安全優勢,並使用它來建立任何自訂核心和/或模組您可能需要,並將它們從那裡分發到需要它們的任何其他主機。這樣,其他主機只需要模組簽名憑證的公共部分,該部分只能用於驗證現有簽名,而不能用於建立新簽名。

相關內容