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