宋桂成
(河南省統(tǒng)計(jì)局, 河南 鄭州 450018)
傳統(tǒng)BIOS采用匯編語言編寫,編寫難度大,很難對(duì)BIOS的功能進(jìn)行補(bǔ)充,在硬件兼容性、自身安全性以及可擴(kuò)展性方面存在較多缺陷。隨著時(shí)間的推移,傳統(tǒng)BIOS已經(jīng)嚴(yán)重制約了計(jì)算機(jī)的創(chuàng)新。2003年,Intel 設(shè)計(jì)并提出新一代固件標(biāo)準(zhǔn):統(tǒng)一可擴(kuò)展固件接口[1](Unified Extensible Firmware Interface, UEFI)。與傳統(tǒng)BIOS相比,UEFI全部使用C語言進(jìn)行編碼,為驅(qū)動(dòng)和應(yīng)用程序提供了良好的接口規(guī)范,方便廠商根據(jù)需求編寫驅(qū)動(dòng)程序,具有良好的可擴(kuò)展性,此外,還提供了健全的文檔規(guī)范和豐富的接口協(xié)議。
然而正是由于UEFI的豐富接口,新的標(biāo)準(zhǔn)為攻擊者編寫惡意驅(qū)動(dòng)帶來了更多的可能,UEFI固件安全形式變得日益嚴(yán)峻。隨著UEFI的應(yīng)用,UEFI變得越來越復(fù)雜,更多的安全組織開始對(duì)UEFI進(jìn)行研究。2016年Anibal Sacco和Alfredo Ortega在CanSecWest安全會(huì)議上展示了一種UEFI攻擊方式[5]。他們通過向UEFI中植入一小段代碼來獲得計(jì)算機(jī)系統(tǒng)的控制權(quán)。2017年Alex Matrosov和Eugene Rodionov在Blackhat ASIA安全會(huì)議上展示了一種全新的UEFI攻擊技術(shù)[9],他們針對(duì)不同固件廠商的固件實(shí)現(xiàn)漏洞,向SPI Flash插入一段Rootkit代碼,從而完全獲取受害者計(jì)算機(jī)的控制權(quán)。在2017年Blackhat Vegas安全會(huì)議上[8],Cylance通過逆向分析的技術(shù),針對(duì)不同廠商的UEFI引導(dǎo)配置模塊,找出UEFI引導(dǎo)配置的安全漏洞,實(shí)現(xiàn)了UEFI引導(dǎo)過程的Rottkit攻擊。2017年,Ulf Frisk針對(duì)UEFI的預(yù)啟動(dòng)[9],使用直接內(nèi)存訪問(Direct Memory Access,DMA)技術(shù),通過掛鉤引導(dǎo)服務(wù)函數(shù)SignalEvent(),成功修改操作系統(tǒng)引導(dǎo)程序。對(duì)UEFI的安全引導(dǎo)過程進(jìn)行攻擊。
本文以UEFI開源規(guī)范為基礎(chǔ),針對(duì)UEFI安全引導(dǎo)模型進(jìn)行分析,詳細(xì)闡述了可能存在的安全風(fēng)險(xiǎn)以及典型的漏洞利用方法,給出了面向UEFI的典型漏洞利用范式,并提出了SMI信號(hào)抑制和Speed Racer兩種基于SPI Flash的漏洞利用方法。
UEFI是Intel為PC固件的體系結(jié)構(gòu)、接口和服務(wù)提出的建議標(biāo)準(zhǔn)[2]。它為操作系統(tǒng)和固件提供了標(biāo)準(zhǔn)接口,能夠在硬件發(fā)生變更時(shí)為固件提供準(zhǔn)確的信息,保證操作系統(tǒng)的運(yùn)行不受影響。它在啟動(dòng)過程的主要功能是:(1) 充當(dāng)固件可信執(zhí)行的初始節(jié)點(diǎn),能夠?qū)碳钠渌?jié)點(diǎn)進(jìn)行完整性校驗(yàn);(2) 對(duì)硬件進(jìn)行初始化以及測(cè)試工作;(3) 加載執(zhí)行額外的固件模塊;(4) 選擇引導(dǎo)設(shè)備,加載并執(zhí)行操作系統(tǒng)引導(dǎo)程序;(5) 退出UEFI服務(wù),啟動(dòng)操作系統(tǒng)。
除此之外,UEFI具有強(qiáng)大的可擴(kuò)展性。UEFI通過模塊化設(shè)計(jì)將其功能分為硬件控制部分和操作系統(tǒng)軟件管理部分。其中,主板廠商利用操作系統(tǒng)軟件管理提供的編程接口,根據(jù)自己的需求實(shí)現(xiàn)豐富的功能。UEFI的體系架構(gòu),如圖1所示。
圖1 UEFI體系架構(gòu)
從圖中可以看到UEFI與固件、操作系統(tǒng)和操作系統(tǒng)引導(dǎo)程序(UEFI OS Loader)之間的層次關(guān)系。UEFI是操作系統(tǒng)和平臺(tái)固件之間的紐帶,它提供系統(tǒng)化的標(biāo)準(zhǔn)方法,能夠加載驅(qū)動(dòng)并管理他們之間的交互。
UEFI采用模塊化設(shè)計(jì),其系統(tǒng)引導(dǎo)過程包括六個(gè)階段,UEFI的啟動(dòng)流程,如圖2所示。
圖2 UEFI啟動(dòng)流程
SEC(Security)階段:SEC是UEFI系統(tǒng)開始執(zhí)行的第一階段。它用于處理不同的平臺(tái)復(fù)位事件。SEC是系統(tǒng)安全的根節(jié)點(diǎn),為系統(tǒng)啟動(dòng)固件提供控制節(jié)點(diǎn)。SEC的優(yōu)點(diǎn)在于它可以提供基礎(chǔ)安全錨點(diǎn),UEFI通過該錨點(diǎn)構(gòu)建完整的安全引導(dǎo)驗(yàn)證過程。SEC階段運(yùn)行結(jié)束后找到下一引導(dǎo)進(jìn)程,并將控制權(quán)進(jìn)行轉(zhuǎn)交。
PEI(Pre-EFI Initialization)階段:PEI階段是UEFI的核心部分。它由PEI Foundation(PEI基礎(chǔ))和PEIM(初始化模塊)組成,其中初始化模塊是存儲(chǔ)于ROM中以壓縮形式保存的二進(jìn)制代碼塊,PEI Foundation為初始化模塊提供調(diào)度以及公共核心服務(wù)。PEI階段的主要任務(wù)是對(duì)CPU和主存進(jìn)行初始化,同時(shí)將平臺(tái)固件信息傳遞給DXE階段。
DXE(Driver Execution Environment)階段:DXE階段主要完成大多數(shù)的系統(tǒng)初始化工作。DXE階段通過HOB(Hand-off Block)查詢平臺(tái)相關(guān)信息,并為驅(qū)動(dòng)程序搭建完整的運(yùn)行環(huán)境。DXE內(nèi)核提供一系列的啟動(dòng)時(shí)服務(wù)(boot service)和運(yùn)行時(shí)服務(wù)(runtime service),該階段的DXE調(diào)度內(nèi)核對(duì)DXE驅(qū)動(dòng)程序和外部設(shè)備驅(qū)動(dòng)程序進(jìn)行枚舉。UEFI允許驅(qū)動(dòng)程序來源的多樣性,為了保證平臺(tái)的完整性與安全性,UEFI必須對(duì)固件采取散列和加密認(rèn)證的方式保障固件的合法性。DXE階段結(jié)束后,將控制權(quán)轉(zhuǎn)交給BDS階段。
BDS(Boot Device Selection)階段:DXE結(jié)束后,BDS階段得以運(yùn)行。它負(fù)責(zé)執(zhí)行符合UEFI驅(qū)動(dòng)模型的所有驅(qū)動(dòng),初始化操作系統(tǒng)啟動(dòng)時(shí)所需要的設(shè)備。BDS為用戶提供啟動(dòng)設(shè)備選擇列表,供用戶對(duì)啟動(dòng)設(shè)備進(jìn)行設(shè)置和選擇。根據(jù)用戶的選擇,BDS加載執(zhí)行OS Loader,加載操作系統(tǒng)并將控制權(quán)轉(zhuǎn)交給操作系統(tǒng)。
對(duì)于攻擊者來說,引導(dǎo)固件是潛在的攻擊目標(biāo),面臨著很多威脅。安全問題是UEFI規(guī)范的重中之重,其主要安全機(jī)制是Secure Boot[10]。 UEFI安全引導(dǎo)的主要功能是使用加密(數(shù)字簽名和哈希)對(duì)UEFI映像進(jìn)行驗(yàn)證,用于保證UEFI啟動(dòng)過程中執(zhí)行固件的合法性。如圖3所示。
圖3 UEFI鏡像驗(yàn)證過程
UEFI規(guī)范規(guī)定了基于PKI的平臺(tái)公鑰基礎(chǔ)設(shè)施,設(shè)置了平臺(tái)安全可信鏈密鑰(PK)。一般來說,PK由設(shè)備廠商擁有,可以對(duì)平臺(tái)的其他信任錨進(jìn)行更改。
除了PK之外,UEFI安全啟動(dòng)還維護(hù)著三個(gè)額外的信任錨數(shù)據(jù)庫:
(1) 密鑰交換密鑰(Key Exchange Key,KEK)數(shù)據(jù)庫;
(2) 已允許簽名(The Allowed signature)數(shù)據(jù)庫DB;
(3) 被禁止數(shù)據(jù)庫(The Forbidden database)數(shù)據(jù)庫DBx。
KEK由設(shè)備廠商擁有,可以對(duì)DB或DBx進(jìn)行修改。DB相當(dāng)于白名單,存儲(chǔ)著所有受信固件映像的數(shù)字簽名和哈希。如果一個(gè)驅(qū)動(dòng)的哈?;驍?shù)字簽名存在于DB,UEFI便允許系統(tǒng)對(duì)該驅(qū)動(dòng)進(jìn)行引導(dǎo)。DBx相當(dāng)于黑名單,存儲(chǔ)著所有不受信任的UEFI映像。對(duì)于被加入黑名單的UEFI映像,UEFI拒絕對(duì)其加載執(zhí)行。UEFI利用哈希和數(shù)字簽名對(duì)UEFI固件映像的來源進(jìn)行保障。簡(jiǎn)而言之,如果無法確認(rèn)UEFI映像的合法性,該映像將無法得到執(zhí)行。更具體的,如果操作系統(tǒng)啟動(dòng)引導(dǎo)器(Boot Loader)無法通過認(rèn)證,則UEFI將無法對(duì)操作系統(tǒng)進(jìn)行引導(dǎo)。
UEFI建立在平臺(tái)初始化[11]的標(biāo)準(zhǔn)框架之上,在引導(dǎo)過程中,UEFI遵循著PI(Platform Initialization)規(guī)范。PI規(guī)范允許使用模塊化的方法支持芯片和硬件平臺(tái)的初始化,包括系統(tǒng)初始化、系統(tǒng)引導(dǎo)和引導(dǎo)前的特殊配置需求。UEFI可以在系統(tǒng)的任意位置發(fā)現(xiàn)并執(zhí)行文件。這種系統(tǒng)的引導(dǎo)過程包括一系列的階段,每個(gè)階段既有自己獨(dú)特的優(yōu)勢(shì),也包含著不同的風(fēng)險(xiǎn)。
DXE階段是PI規(guī)范要求的最終階段,該階段由DXE基礎(chǔ)框架、DXE調(diào)度程序和DXE驅(qū)動(dòng)程序三部分組成。DXE階段使用HOB查詢平臺(tái)信息,為驅(qū)動(dòng)程序提供運(yùn)行環(huán)境,同時(shí)DXE內(nèi)核可以對(duì)設(shè)備進(jìn)行掃描,枚舉驅(qū)動(dòng)程序。DXE運(yùn)行結(jié)束后將控制權(quán)轉(zhuǎn)交給BDS階段。
一般來說,驅(qū)動(dòng)程序與應(yīng)用程序存儲(chǔ)在缺乏保護(hù)機(jī)制的硬盤上,DXE調(diào)度程序通過輪尋檢測(cè)的方式加載驅(qū)動(dòng)程序。UEFI驅(qū)動(dòng)程序具有不同來源,為了確保平臺(tái)的完整性與安全性,固件的更改必須處于平臺(tái)制造商的控制監(jiān)督下。在不同的平臺(tái)下,都必須嚴(yán)格遵循散列和加密的認(rèn)證方式。否則,攻擊者便可以通過更換驅(qū)動(dòng)、感染應(yīng)用程序等手段篡改UEFI驅(qū)動(dòng)程序,實(shí)現(xiàn)UEFI階段的惡意驅(qū)動(dòng)執(zhí)行。
DXE階段運(yùn)行結(jié)束后,BDS啟動(dòng)管理器可以對(duì)UEFI驅(qū)動(dòng)程序進(jìn)行控制,具有這個(gè)階段的控制權(quán)。當(dāng)BDS啟動(dòng)管理器進(jìn)行啟動(dòng)管理時(shí),會(huì)生成UEFI Shell命令,加載OS Loader,同時(shí)啟動(dòng)UEFI驅(qū)動(dòng)程序。它能夠配置NVRAM變量,利用SPI Flash 接口完成全局控制,同時(shí)控制具體哪一個(gè)文件被加載。UEFI驅(qū)動(dòng)程序和相關(guān)信息利用NVRAM變量進(jìn)行傳遞,同時(shí)給出一個(gè)可視化列表已備用戶查看。BDS啟動(dòng)管理器加載NVRAM變量的啟動(dòng)項(xiàng),執(zhí)行啟動(dòng)策略,最終將控制權(quán)轉(zhuǎn)交操作系統(tǒng)。
NVRAM變量保存了UEFI驅(qū)動(dòng)和應(yīng)用程序的默認(rèn)加載順序信息。攻擊者可以通過更改該變量的方法對(duì)NVRAM變量中的UEFI驅(qū)動(dòng)和應(yīng)用程序引導(dǎo)路徑進(jìn)行篡改,將其指向攻擊者已構(gòu)造好的惡意驅(qū)動(dòng)或應(yīng)用程序。使得UEFI加載并執(zhí)行惡意驅(qū)動(dòng),對(duì)系統(tǒng)安全造成破壞。NVRAM變量中還存在操作系統(tǒng)加載器OS Loader的存儲(chǔ)路徑,UEFI接口能夠利用OS Loader的存儲(chǔ)路徑進(jìn)行傳輸信息。在上述的可視化列表中具有對(duì)NVRAM變量的查詢和修改的權(quán)限,因此,在受到攻擊時(shí),NVRAM變量中存在的OS Loader路徑信息可能被篡改,這樣當(dāng)計(jì)算機(jī)重新啟動(dòng)后,啟動(dòng)加載項(xiàng)會(huì)由OS Loader變成攻擊程序,使系統(tǒng)受到攻擊,不受用戶的控制。
如前所述,UEFI在DXE階段對(duì)UEFI的可執(zhí)行鏡像進(jìn)行合法性校驗(yàn),以確定是否加載執(zhí)行該映像。UEFI的可信數(shù)據(jù)庫DB存放于SPI Flash中,為了防止攻擊者對(duì)可信數(shù)據(jù)庫進(jìn)行更改,SPI Flash采用了多個(gè)寄存器對(duì)其內(nèi)容進(jìn)行保護(hù)。BIOS_CNTL寄存器和PR[5](Protected Range)寄存器是SPI Flash最主要的兩個(gè)保護(hù)寄存器。
BIOS_CNTL寄存器提供三個(gè)保護(hù)位[4],分別是BWE、BLE、SMM_BWP。其中BWE為寫使能位,如果BWE置1,則用戶可以對(duì)SPI Flash進(jìn)行寫操作,如果BWE置0,SPI Flash鎖定無法進(jìn)行更改。BLE為鎖使能位,用于保證BWE的安全。一旦BLE置1,任何對(duì)BWE的操作都會(huì)觸發(fā)SMI(System Management Interrupt)中斷,進(jìn)入CPU的SMM[7]模式。在該模式下,CPU將主動(dòng)對(duì)BWE進(jìn)行復(fù)位操作。SMM_BWP是SMM模式下的寫保護(hù)位,對(duì)BWE提供更強(qiáng)大的保護(hù)。當(dāng)SMM_BWP置1時(shí),BWE將只能通過SMM模式下的系統(tǒng)進(jìn)行修改。
保護(hù)范圍寄存器PR(Protected Range)同樣可以對(duì)Flash芯片進(jìn)行讀寫保護(hù),PR寄存器共有32bit,它使用基地址(Protected Range Base)與保護(hù)范圍偏移(Protected Range Limit)來確定保護(hù)范圍。在PR寄存器的保護(hù)區(qū)域內(nèi),如果寫使能位被設(shè)置,將無法對(duì)SPI Flash保護(hù)區(qū)域進(jìn)行寫操作。同樣,如果讀使能位被設(shè)置,保護(hù)區(qū)域?qū)o法進(jìn)行讀操作。為了防止對(duì)PR進(jìn)行更改,Intel提供HSFS.FLOCKDN ,用于對(duì)保護(hù)范圍寄存器進(jìn)行保護(hù)。一旦該位被設(shè)置,將無法對(duì)PR寄存器進(jìn)行更改。
雖然SPI Flash的保護(hù)機(jī)制非常健全,但在實(shí)際應(yīng)用中,部分主板和固件廠商為了方便固件的升級(jí)和維護(hù),相當(dāng)一部分的設(shè)備沒有按照保護(hù)要求對(duì)保護(hù)位進(jìn)行設(shè)置,導(dǎo)致SPI Flash的安全性大大降低。經(jīng)調(diào)查[6],僅有6/8005(0.07%)的設(shè)備對(duì)SMM_BWP進(jìn)行設(shè)置,有4779/5197(92%)的設(shè)備沒有使用PR寄存器。
UEFI使用安全引導(dǎo)機(jī)制來確保所有UEFI可執(zhí)行鏡像的合法性,因此UEFI攻擊的主要目標(biāo)就是UEFI的安全引導(dǎo)驗(yàn)證機(jī)制。本文對(duì)現(xiàn)有的SMM和Bootkit兩種UEFI攻擊方法進(jìn)行了詳細(xì)的分析及闡述,針對(duì)SPI Flash的讀寫保護(hù)機(jī)制,提出了SMI信號(hào)抑制和Speed Racer兩種新的UEFI攻擊方法。
系統(tǒng)管理模式SMM(System Management Mode)[9]是CPU的一種特殊操作模式,SMM面向系統(tǒng)固件,提供孤立于OS的執(zhí)行環(huán)境,具有訪問全部?jī)?nèi)存和外設(shè)硬件的最高特權(quán)級(jí)。SMM模式由SMI中斷觸發(fā),一旦CPU檢測(cè)到SMI中斷,將立即保存當(dāng)前狀態(tài),進(jìn)入SMRAM空間,執(zhí)行SMRAM私有代碼,進(jìn)行系統(tǒng)活動(dòng)控制和功能處理等行為。防止SMRAM被修改的主要機(jī)制是設(shè)置D_LCK位,大部分操作平臺(tái)在啟動(dòng)時(shí)設(shè)置D_LCK保護(hù)位對(duì)其進(jìn)行保護(hù)。SMM漏洞是指利用CPU的緩存漏洞對(duì)SMRAM進(jìn)行修改,從而獲取SMM權(quán)限。
攻擊過程,如圖4所示。
圖4 SMM攻擊流程
對(duì)于設(shè)置了D_LCK保護(hù)位的SMRAM來說,攻擊者可以通過修改SMRAM地址的方法對(duì)D_LCK保護(hù)位進(jìn)行繞過。首先,攻擊者采用觸發(fā)SMI中斷的方式加載SMI Handler至CPU緩存區(qū)。修改CPU緩存區(qū)SMI Handler,并再次觸發(fā)SMI中斷,此時(shí)被修改的惡意映像將在CPU的緩存區(qū)內(nèi)執(zhí)行。由于遵循UEFI規(guī)范的設(shè)計(jì)的部分主板固件代碼允許在SMM模式下運(yùn)行,攻擊者可以通過SMM漏洞向SMRAM空間注入Rootkits代碼,使得Rootkits代碼永久駐留在主板上,并隨時(shí)可以通過SMI中斷激活Rootkits代碼。使用這種方法,Ring0級(jí)別的安全軟件也無法對(duì)其檢測(cè),即使格式化硬盤也無法將駐留在非易失性存儲(chǔ)器中的Rootkits代碼清除。
Bootkit是指早于操作系統(tǒng)內(nèi)核執(zhí)行的,能夠?qū)Σ僮飨到y(tǒng)內(nèi)核劫持的攻擊技術(shù)。UEFI是計(jì)算機(jī)加電啟動(dòng)后首先執(zhí)行的代碼,在UEFI的BDS階段,操作系統(tǒng)引導(dǎo)器獲取控制權(quán),對(duì)操作系統(tǒng)進(jìn)行引導(dǎo),成功引導(dǎo)操作系統(tǒng)之后,UEFI執(zhí)行ExitBootService函數(shù),并將控制權(quán)轉(zhuǎn)交至操作系統(tǒng)內(nèi)核。攻擊者可以通過Hook ExitBootSerivice函數(shù)的方法,對(duì)操作系統(tǒng)內(nèi)核進(jìn)行劫持。
其攻擊過程,如圖5所示。
圖5 UEFI Bootkit攻擊流程
首先,攻擊者刷寫B(tài)ootkit惡意代碼至UEFI。Bootkit代碼使用Hook技術(shù)掛載ExitBootService函數(shù)。隨后,在系統(tǒng)的正常啟動(dòng)過程中,擁有控制權(quán)的Bootloader加載操作系統(tǒng)內(nèi)核,并將控制權(quán)轉(zhuǎn)交至ExitBootService函數(shù)。UEFI執(zhí)行ExitBootService函數(shù),Bootkit獲取系統(tǒng)控制權(quán),完成操作系統(tǒng)內(nèi)核劫持功能。
在Intel datasheets[3]中,描述了至少一種抑制SMI中斷的方法。SMI控制使能寄存器中(SMI Control and Enable Register,SMI_EN)包含著GBL_SMI_EN位,Intel對(duì)此位的描述如下:當(dāng)SMI_EN設(shè)置為0,PCH將不再產(chǎn)生SMI中斷信號(hào)。當(dāng)SMI_LOCK被設(shè)置,GBL_SMI_EN無法進(jìn)行更改。經(jīng)調(diào)查[6]在8 005臺(tái)設(shè)備中,有3 216(約40%)臺(tái)的設(shè)備沒有對(duì)其進(jìn)行設(shè)置。
對(duì)于沒有設(shè)置SMI_LOCK的系統(tǒng),攻擊相對(duì)簡(jiǎn)單。攻擊過程,如圖6所示。
圖6 SMI信號(hào)抑制攻擊流程
假設(shè)攻擊者具備Ring0權(quán)限。首先,攻擊者將GBL_SMI_EN設(shè)置為0臨時(shí)禁用SMI,PCH將不再產(chǎn)生SMI信號(hào)。之后,設(shè)置BIOS_WE為1,現(xiàn)在可以對(duì)未受保護(hù)范圍寄存器保護(hù)的閃存區(qū)域進(jìn)行寫入訪問。攻擊者可以繞過保護(hù)受信變量的身份驗(yàn)證方案,通過直接讀寫SPI Flash的方法修改其內(nèi)容。攻擊者可以通過多種方法繞過安全引導(dǎo)機(jī)制,對(duì)系統(tǒng)的安全造成破壞。本文選擇的方法是在可信數(shù)據(jù)庫DB中插入Bootkit的哈希值。隨后替換合法的Windows啟動(dòng)引導(dǎo)器并重置系統(tǒng)。在下一次啟動(dòng)的過程中,由于bootkit已通過可信驗(yàn)證成為合法映像,UEFI固件加載bootkit并將控制權(quán)轉(zhuǎn)交,實(shí)現(xiàn)UEFI層面的惡意代碼執(zhí)行。
當(dāng)BIOS_CNTL寄存器中的SMM_BWP位不可用時(shí),可以通過產(chǎn)生中斷信號(hào)時(shí)間差的方法繞過SPI Flash的保護(hù)機(jī)制。
SPI Flash擁有多個(gè)編程位,它們都與閃存的編程操作直接相關(guān)。其中,HSFC(Hardware Sequencing Flash Control)為硬件閃存控制器,它用于控制編程操作的大小和類型。FADDR(Flash Address)為閃存地址寄存器,它用于確定編程操作的目標(biāo)位置。FDATA(Flash Address)為閃存數(shù)據(jù)寄存器,它用于保存寫操作期間寫入的數(shù)據(jù)以及讀操作期間讀取的數(shù)據(jù)。設(shè)置HSFC寄存器的FGO為1,便可對(duì)閃存進(jìn)行編程操作。
攻擊過程,如圖7所示。
圖7 Speed Racer攻擊流程
攻擊者可以在一個(gè)多內(nèi)核的系統(tǒng)中選用一對(duì)windows內(nèi)核驅(qū)動(dòng)程序進(jìn)行操作[8]。首先,攻擊者設(shè)置一對(duì)用戶級(jí)代理分別向CPU Core1與CPU Core2發(fā)送IOCTL(Input Output control)信號(hào)。當(dāng)CPU Core1收到IOCTL信號(hào)后,立即設(shè)置BIOSWE為0。接著,在BLE保護(hù)位觸發(fā)SMI中斷的同時(shí),CPU Core2立即對(duì)SPI Flash的寫保護(hù)位進(jìn)行操作。CPU Core2通過設(shè)置HSFC寄存器FGO位為1的方法打開SPI Flash的寫保護(hù),對(duì)存儲(chǔ)在SPI Flash中的受信哈希值進(jìn)行惡意更改。通過這種方法,攻擊者便可在信任數(shù)據(jù)庫中插入惡意驅(qū)動(dòng)簽名,從而繞過UEFI的安全引導(dǎo)機(jī)制。
本文針對(duì)統(tǒng)一可擴(kuò)展固件接口存在的安全隱患問題,對(duì)UEFI自身框架和UEFI啟動(dòng)過程進(jìn)行分析,提出了三種基于UEFI的攻擊方法。同時(shí)在現(xiàn)有的UEFI攻擊理論和漏洞利用技術(shù)的基礎(chǔ)上,利用系統(tǒng)管理模式存在的安全漏洞,通過BootKit、SMI信號(hào)抑制和Speed Racer三種方法對(duì)SPI Flash的保護(hù)機(jī)制進(jìn)行繞過,向存有可信數(shù)據(jù)庫DB的SPI Flash注入惡意驅(qū)動(dòng)簽名,實(shí)現(xiàn)UEFI惡意驅(qū)動(dòng)執(zhí)行的功能。
本文提出的基于UEFI的SMI信號(hào)抑制攻擊方式。由于該方法主要利用主板廠商的保護(hù)位設(shè)置漏洞進(jìn)行攻擊,因此不具有普遍性。下一步工作分析其它UEFI可利用漏洞,提升UEFI攻擊的普適性;對(duì)于本文提出的基于UEFI的Speed Racer攻擊方式,攻擊能否成功具有很大的隨機(jī)性,不能保證攻擊的穩(wěn)定性。下一步的工作主要對(duì)該方法進(jìn)行優(yōu)化,確保該攻擊的穩(wěn)定性。