


預裝Windows 8的新電腦,要獲得微軟的Windows 8認證,就要按照微軟的規定從BIOS切換到UEFI并開啟安全啟動,這使得在這些電腦上安裝其他操作系統變成了一件比較復雜的事情。
目前Windows是最為普及的操作系統,但是同時也是最危險的操作系統,蠕蟲、病毒和木馬等惡意程序嚴重威脅操作系統的安全性。為此,微軟寄希望于通過UEFI(Unified Extensible Firmware Interface,統一的可擴展固件接口)的安全啟動功能實現更安全的啟動,以增強系統的安全性。如果一臺電腦由BIOS的繼任者UEFI啟動,在開啟安全啟動的情況下,Rootkit(Rootkit是指其主要功能為隱藏其他程序進程的軟件,可能是一個軟件,也可能是多個軟件的組合,廣義而言Rootkit也可被視為一項技術,現在Rootkit一詞更多地是指被作為驅動程序加載到操作系統內核中的惡意軟件)等惡意程序完全沒有機會在操作系統啟動前進入內存工作區域。UEFI引導管理器將檢查所有運行的代碼,只允許與加密數據庫中簽名一致的代碼運行,這種嚴格的保護機制被微軟納入了Windows 8的認證要求中。換句話說,所有帶有Windows 8認證標志的新電腦,無論是平板電腦、筆記本電腦還是臺式電腦,在銷售時都已經開啟了安全啟動功能。
然而,開啟UEFI安全啟動機制雖然可以保護系統免遭Rootkit的侵害,但同時也帶來了一些弊端:在UEFI安全啟動機制下,Linux等其他免費的操作系統無法運行,另外即使是Windows用戶,如果購買新電腦后不準備使用Windows 8而希望繼續使用Windows XP或者Windows 7,那么同樣也無法運行。在開啟安全啟動功能的情況下,舊系統完全無法安裝或啟動。
啟動更快更便利的UEFI
UEFI將要取代早已過時的BIOS,作為操作系統與硬件之間的接口,UEFI將負責啟動電腦。與已經使用了超過30年的BIOS相比,UEFI擁有更強的容錯和糾錯能力,它可以植入硬件驅動,可以提供圖形化的界面和64位支持,并能夠響應鼠標和觸摸輸入。
雖然UEFI平臺初始化的各個步驟與BIOS相似,但是UEFI的速度更快,UEFI平臺初始化時主板、CPU、內存將并行啟動,而不是像BIOS那樣逐一地啟動。在初始化結束后,UEFI引導管理器將啟動,讀取硬件組件的信息,并像網絡連接或者Shell接受命令輸入一樣,激活驅動程序與應用程序,程序存儲于UEFI主板上的內存模塊NVRAM中或者硬盤驅動器上。為此,UEFI需要在硬盤上保留一個單獨的分區,其大小為200MB。驅動程序與應用程序運行之后,UEFI系統加載程序將啟動,它將負責加載操作系統。
安全啟動檢查系統組件
最后,安全啟動功能將決定操作系統是否可以啟動。安全啟動有3個加密等級,最高等級是由硬件制造商創建的平臺密鑰(PK),它用于UEFI更新和修改密鑰交換密鑰(KEK)列表。按照UEFI標準,KEK列表中應該包含來自不同操作系統開發商的密鑰,但是這只是理論上的,實際上所有UEFI電腦的KEK列表均只包含微軟Windows 8的密鑰。因為除了Google的Chromebook以外,所有支持安全啟動的電腦通常只會安裝Windows 8。KEK是安全啟動的關鍵,因為只有通過KEK才可以修改存儲簽名的數據庫,它包含兩個密鑰,可以修改數據庫中允許運行程序的簽名(允許庫)和禁止運行程序(禁止庫)的簽名。在允許庫中,除了包含UEFI應用程序的簽名以外,還包含操作系統內核、驅動程序和操作系統組件的簽名和哈希值。只有當這些都存在時,UEFI系統加載程序才加載操作系統,否則用戶將收到安全啟動錯誤提示,操作系統將無法啟動。
對于Windows 8來說,安全啟動功能不會引起任何問題,但是對于舊的操作系統,微軟沒有提供任何簽名數據,因而用戶只能夠選擇禁用安全啟動功能。使用各種Linux系統的用戶也同樣如此,因為如果只對一款Linux的發行版本提供KEK列表信息以及操作系統內核、驅動程序和操作系統組件的簽名和哈希值是可能的,但是大部分真正使用Linux的用戶使用的是自己編譯的版本,與此同時,Linux的啟動管理器種類也比較多,要將各種可能使用到的操作系統內核和操作系統組件的簽名與哈希值都統一起來,需要一定的時間進行協調。就目前來說,Linux開發人員并不抗拒安全啟動功能,同時微軟也沒有要借安全啟動壟斷電腦硬件的想法,微軟在Windows 8的認證標準中明確寫入,必須為用戶提供關閉安全啟動功能的選項。唯一的問題是,未來微軟是否會改變主意呢?
UEFI啟動流程
UEFI通過廠商自己的驅動器程序和應用程序激活硬件,如果開啟安全啟動,那么UEFI將檢查驅動程序和應用程序是否有一個有效的簽名,如果沒有,將中斷啟動。除此之外,引導管理器同樣也會對已安裝的操作系統內核進行類似的檢測。
激活硬件
在第一個啟動階段,UEFI與BIOS略有不同。在檢測到所有硬件組件已經供電后,主板、CPU、內存將啟動并加載UEFI代碼。
執行UEFI代碼
UEFI引導管理器讀取NVRAM存儲器中的引導設置,激活用于啟動的數據存儲介質,加載硬盤上UEFI引導分區中的驅動程序和應用程序,如果它們的簽名與允許庫中的簽名一致則運行,并執行加載程序。
啟動操作系統
系統加載程序啟動操作系統,無論是直接或通過啟動管理器啟動,操作系統的啟動代碼或者啟動管理器都必須有一個有效的簽名,否則加載程序將取消該操作。接下來,啟動管理器啟動內核和驅動程序也同樣需要簽名。
安全啟動檢查
在安全啟動開啟的情況下,所有操作系統的主要文件(內核、驅動程序)都必須有一個簽名。證書表中會列出主要文件的X.509標準證書、哈希值等屬性,它們必須與允許庫中相應的條目一致。