- 什么是安全啟動?
安全啟動是 UEFI (Unified Extensible Firmware Interface) 中定義的功能,它定義了如何進行固件驗證以及固件與操作系統(tǒng)之間的接口(協(xié)議),從而保證整個系統(tǒng)啟動過程的安全性。現(xiàn)在的服務器主板上都有一塊 TPM (Trusted Platform Module) 安全芯片,安全啟動基于公鑰基礎設施(PKI Public Key Infrastructure)來驗證固件代碼,利用 TPM 來實現(xiàn)固件代碼的數(shù)字簽名,通過數(shù)字簽名來保證所執(zhí)行的固件代碼都是可信的。
服務器開機時將執(zhí)行 UEFI 啟動代碼,配置處理器、內存、和硬件外圍設備,以便為執(zhí)行操作系統(tǒng)做好準備。在切換到操作系統(tǒng)加載程序之前,UEFI 將檢查硬件外圍設備(如網(wǎng)卡、存儲控制器)中固件代碼的數(shù)字簽名,如果該簽名與UEFI 中的簽名數(shù)據(jù)庫匹配,則允許執(zhí)行該模塊。UEFI 簽名數(shù)據(jù)庫中包含“允許”和“禁止”列表,用于確定哪些設備可以執(zhí)行啟動過程。這可以防止設備固件被注入惡意代碼,任何被篡改的代碼因為跟允許的數(shù)字簽名不相符,都會被拒絕執(zhí)行。
在網(wǎng)卡或 Raid 控制器固件中注入惡意代碼,有人會質疑這可能嗎?安全的基本指導原則就是要堵上任何可能造成安全隱患的漏洞。盡管我們還沒有看到過相關案例,但是還是要確保所有的安全漏洞都被堵上了。那 UEFI 代碼自己的安全性如何來保證呢?UEFI 代碼也有數(shù)字簽名,是在刷固件代碼的時候檢查的。
UEFI 也定義了跟操作系統(tǒng)之間的接口,在運行操作系統(tǒng)加載代碼之前,也需要檢查加載代碼數(shù)字簽名,只有認證的加載代碼才能被執(zhí)行,保證啟動的是一個可信的 OS。而上一代的系統(tǒng)固件 BIOS 則沒有這一套安全機制,它允許執(zhí)行任何加載代碼,這當然是一個潛在的安全隱患。
當年微軟推出 Windows 8(首個支持安全啟動的 Windows 操作系統(tǒng)),曾經要求各 PC 廠商在 UEFI 中僅放置微軟的數(shù)字簽名,從而只允許 PC 啟動 Windows 操作系統(tǒng),從而引起 Linux 廠商和用戶的一致抗議。所以現(xiàn)在的 UEFI 中多了一個 Secure Boot 的選項,如果 UEFI 中沒有相關的數(shù)字簽名,用戶可以選擇關閉安全啟動,從而可以繼續(xù)安裝和使用一個未經認證的操作系統(tǒng)。還有另一種選項,有的服務器提供工具讓用戶自己向 UEFI 中寫入缺少的操作系統(tǒng)廠商數(shù)字簽名。
當執(zhí)行權被交給 vSphere 之后,vSphere 也會進行一系列的安全檢查,保證 vSphere 系統(tǒng)中沒有被注入惡意代碼。vSphere 在加載每一個驅動程序之前,會檢查該驅動的 VIB,如果發(fā)現(xiàn)某個 VIB 的數(shù)字簽名沒有通過安全檢查,就會進入到 vSphere 的紫屏錯誤 PSOD (Purple Screen Of Death) 狀態(tài)。
同樣的道理,虛擬機也可以支持安全啟動。只要把虛擬機的固件配置成為 EFI 的話,就可以選擇 Secure Boot 選項,以配合 Windows 和 Linux 等操作系統(tǒng)的安全啟動功能。