安全開機
安全開機是整合可擴展韌體介面 (UEFI) 的功能 , 需要先驗證所有低階韌體和軟體元件才能載入。 開機期間,UEFI 安全開機會檢查每個開機軟體的簽章,受到檢查的軟體包括 UEFI 韌體驅動程式 (也稱為選項 ROM)、可延伸韌體介面 (EFI) 應用程式,以及作業系統驅動程式和二進位檔。 如果這些簽章是有效的,或者受到原始設備製造商 (OEM) 的信任,那麼機器就會開機,且韌體會將控制權交給作業系統。
元件和程序
安全開機依賴下列重要元件:
- 平台金鑰 (PK) - 在平台擁有者 (Microsoft) 與韌體之間建立信任。 公用的部分是 PKpub,而私人的部分是 PKpriv。
- 金鑰註冊金鑰 (KEK) 資料庫 - 在作業系統與平台韌體之間建立信任。 公用的部分是 KEKpub,而私人的部分是 KEKpriv。
- 簽章資料庫 (db) - 針對獲得授權可與平台韌體互動的韌體和軟體程式碼模組,為這些模組中信任的簽署者保存摘要。
- 撤銷的簽章資料庫 (dbx) – 保存已撤銷的程式代碼模組摘要,這些模組會識別為惡意、易受攻擊、遭入侵或不受信任。 如果簽章資料庫和撤銷的簽章資料庫中有雜湊,那麼便會優先使用撤銷的簽章資料庫。
下列的圖和程序會說明這些元件的更新方式:
OEM 會在製造時,將安全開機摘要儲存在機器的非揮發 RAM (NV-RAM) 上。
- 簽章資料庫會填入 UEFI 應用程式的簽署者或映像哈希、操作系統載入器(例如Microsoft操作系統載入器或開機管理員),以及受信任的 UEFI 驅動程式。
- 撤銷的簽章 dbx 會填入不再信任的模組摘要。
- 在金鑰註冊金鑰 (KEK) 資料庫中會填入可用來更新簽章資料庫和撤銷簽章資料庫的簽署金鑰。 資料庫的編輯可以透過以正確金鑰簽署的更新來進行,或透過使用韌體功能表、實際存在且經過授權的使用者更新來進行。
- 新增 db、dbx 和 KEK 資料庫並完成最終韌體驗證和測試之後,OEM 會鎖定韌體進行編輯併產生平臺密鑰 (PK)。 PK 可用來簽署 KEK 的更新,或用來關閉安全開機。
在開機程序中的每個階段,會計算韌體、開機載入器、作業系統、核心驅動程式和其他開機鏈成品的摘要,並將這些項目與可接受的值互相比較。 不允許載入探索到不受信任的韌體和軟體。 因此,可以封鎖低階惡意代碼插入或預先啟動的惡意代碼攻擊。
Azure 機群上的安全開機
目前,已上線且部署至 Azure 計算機群以裝載客戶工作負載的每部機器,都來自已啟用安全開機的工廠廠房。 硬體建置和整合管線的每個階段都已設定目標工具和程式,以確保安全開機啟用不會因意外或惡意意圖而還原。
驗證 db 和 dbx 摘要是否正確可以確保:
- 開機載入器存在於其中一個 db 項目中
- 啟動載入器簽章有效
- 主機使用受信任的軟體開機
藉由驗證 KEKpub 和 PKpub 的簽章,我們可以確認只有受信任的對象具備軟體信任定義的修改權限。 最後,藉由確保安全開機處於作用中狀態,我們可以驗證這些定義是否已經強制執行。
下一步
若要深入了解我們推動平台完整性和安全性的方法,請參閱:
- 韌體安全性
- 平台程式碼完整性
- 量值開機和主機證明
- 專案 Cerberus (部分機器翻譯)
- 待用加密
- Hypervisor 安全性