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