糜 旗,宗俊珺,徐 超
(1.北京交通大學(xué),北京 100044;2.中國(guó)航天科技集團(tuán)第八研究院上海航天動(dòng)力技術(shù)研究所,上海 201109)
近年來,針對(duì)計(jì)算機(jī)基本輸入輸出系統(tǒng)(Basic Input Output System,BIOS)的攻擊不斷增加。2011年9月,第一個(gè)正式的BIOS Rootkit病毒被發(fā)現(xiàn)。據(jù)分析,該病毒能夠感染電腦主板的芯片和硬盤主引導(dǎo)區(qū)(Main Boot Record,MBR),再控制 Windows系統(tǒng)文件,加載惡意代碼,使感染用戶無論重裝系統(tǒng)、格式化硬盤,甚至換掉硬盤都無法徹底清除病毒。于是針對(duì)BIOS的攻擊也開始逐漸引起人們的關(guān)注。
為了減少和阻止這類攻擊,美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,NIST)制定了新的安全指導(dǎo)方針來更新BIOS,同時(shí)NIST還要求美國(guó)高科技制造業(yè)提高BIOS的安全規(guī)范。
BIOS是計(jì)算機(jī)基本輸入輸出系統(tǒng)Basic Input-Output System的縮寫,這類程序都會(huì)刷寫到計(jì)算機(jī)主板上ROM芯片中,包含基本輸入輸出程序、通電自檢程序、啟動(dòng)自舉程序和配置信息內(nèi)容。因此通常也可以把BIOS看成是一個(gè)軟件與硬件的結(jié)合體,它為主板和主要外圍設(shè)備服務(wù)[1-2]。
當(dāng)計(jì)算機(jī)開始通電啟動(dòng),中央處理器(Central Processing Unit,CPU)從主板 BIOS芯片中獲取程序代碼和配置信息,得到控制權(quán)并且發(fā)揮作用。工作流程大致為:先自檢CPU內(nèi)外部的設(shè)置,激活DRAM;然后對(duì)芯片組與外圍設(shè)備進(jìn)行初始化設(shè)置;接著驅(qū)動(dòng)系統(tǒng)存儲(chǔ)介質(zhì),最后加載操作系統(tǒng)。此時(shí)BIOS引導(dǎo)工作暫告一個(gè)段落,轉(zhuǎn)為后臺(tái)支持和協(xié)調(diào)。
Rootkit最早出現(xiàn)于20世紀(jì)90年代初,在1994年2月的一篇安全咨詢報(bào)告中首先使用了Rootkit這個(gè)名詞。這篇安全資訊就是CERT-CC的CA-1994-01,題目是 Ongoing Network Monitoring Attacks,最新的修訂時(shí)間是1997年9月19日。
Rootkit能夠持久可靠地存在于計(jì)算機(jī)中,大部分使用了未公開的系統(tǒng)服務(wù)函數(shù),它最大的特點(diǎn)就是具有自我隱藏功能,無論是作為文件,處于未激活狀態(tài),還是作為進(jìn)程,處于已激活狀態(tài),使用普通方法都無法檢測(cè)出。
最早Rootkit程序是出于善意用途,但后來Rootkit也被黑客用在入侵和攻擊他人的計(jì)算機(jī)。電腦病毒、間諜軟件等也常使用Rootkit來隱藏蹤跡,因此Rootkit已被大多數(shù)的安全防護(hù)軟件歸類為具有危害性和攻擊性的惡意軟件[3]。
現(xiàn)在BIOS芯片大多采用可擦寫寄存器(Flash ROM)或可擦除可編程只讀寄存器(Erasable Programmable Read Only Memory,EPROM),因此可以將特定編寫的Rootkit程序作為模塊刷寫到BIOS芯片中以實(shí)現(xiàn)特殊功能。
BIOS Rootkit將BIOS攻擊與 Rootkit技術(shù)相結(jié)合,同時(shí)擁有了程序最先啟動(dòng)并固化于硬件和深層次控制操作系統(tǒng)2個(gè)優(yōu)點(diǎn)。由于BIOS芯片中Rootkit程序在計(jì)算機(jī)啟動(dòng)的第一時(shí)間運(yùn)行,因此BIOS Rootkit能在各類安全防護(hù)軟件工作之前,就已取得硬件設(shè)備和操作系統(tǒng)的控制權(quán)[4]。
迄今為止,能夠被公開搜索到的BIOS Rootkit文獻(xiàn)資料,除了2007年IceLord發(fā)布過的一篇技術(shù)文章外,其他的文字材料幾乎為空白。這也使得BIOS Rootkit技術(shù)充滿著各種神秘色彩。
通常一個(gè)BIOS Rootkit可以劃分成4個(gè)功能模塊,包括權(quán)限獲取、權(quán)限保持、自身隱藏和有效負(fù)載(PayLoad)。
該模塊主要作用是完成BIOS代碼嵌入,實(shí)現(xiàn)對(duì)BIOS的劫持。一般有3種實(shí)現(xiàn)方法:攔截和修改Boot Block;將BIOS Rootkit作為BIOS的整體或部分功能模塊嵌入到BIOS中;設(shè)置硬件中斷,同時(shí)修改中斷處理程序的入口地址為Rootkit地址,當(dāng)斷點(diǎn)觸發(fā)時(shí)Rootkit就被觸發(fā)。
該模塊主要作用是實(shí)現(xiàn)BIOS Rootkit接管權(quán)限傳遞實(shí)現(xiàn)系統(tǒng)正常啟動(dòng)。實(shí)現(xiàn)方法:通過對(duì)讀入內(nèi)存的操作系統(tǒng)內(nèi)核打補(bǔ)丁或者對(duì)關(guān)鍵函數(shù)做HOOK。
該模塊主要作用是在BIOS與引導(dǎo)程序、操作系統(tǒng)內(nèi)核之間傳遞控制權(quán)時(shí)穿透操作系統(tǒng)內(nèi)核實(shí)現(xiàn)自身隱藏。實(shí)現(xiàn)方法大致與權(quán)限保持模塊相同。
該模塊主要作用是實(shí)現(xiàn)任何運(yùn)行在被感染環(huán)境中的程序所能做的事情,并且能夠執(zhí)行動(dòng)作,包括破壞刪除文件、發(fā)送敏感信息以及提供后門等。該模塊實(shí)現(xiàn)方法比較多,既可以通過調(diào)用系統(tǒng)的API函數(shù)直接實(shí)現(xiàn),也可以通過加載驅(qū)動(dòng)程序或者釋放文件的方式間接實(shí)現(xiàn)。
BIOS Rootkit的最顯著特性就是優(yōu)點(diǎn)與缺點(diǎn)共存。主要表現(xiàn)在BIOS Rootkit前期設(shè)計(jì)實(shí)施極為困難,但成功嵌入后破壞力又是極為驚人。主要表現(xiàn)以下幾個(gè)方面。
(1)在操作系統(tǒng)啟動(dòng)之前就已獲得控制權(quán)。因?yàn)锽IOS Rootkit已經(jīng)被刷寫至BIOS芯片,而BIOS芯片中的程序是在計(jì)算機(jī)啟動(dòng)之前首先被執(zhí)行。
(2)不保存在存儲(chǔ)介質(zhì)中。BIOS Rootkit主要存在于BIOS芯片中,而不會(huì)保存在硬盤等傳統(tǒng)的存儲(chǔ)介質(zhì)中。
(3)能夠反復(fù)感染操作系統(tǒng)。簡(jiǎn)單的分區(qū)、格式化和重裝操作系統(tǒng)對(duì)BIOS Rootkit都毫無作用,能夠再次被感染。
(4)可以對(duì)抗幾乎所有安全防護(hù)軟件?,F(xiàn)有的主動(dòng)防御軟件和殺毒軟件幾乎都基于操作系統(tǒng),對(duì)存在于芯片中的BIOS Rootkit毫無檢測(cè)和查殺能力。
(5)檢查分析困難。BIOS Rootkit一般都會(huì)偽裝成BIOS設(shè)計(jì)規(guī)范中的標(biāo)準(zhǔn)模塊,因此檢查分析相應(yīng)模塊是否為BIOS Rootkit極為困難。
(6)清除困難。即使經(jīng)過檢查分析后,判斷芯片中存在BIOS Rootkit,一般也只能通過重新刷寫硬件的方式才能清除[5-6]。
(1)代碼編寫困難。BIOS Rootkit主要使用匯編語言編寫,并且只能調(diào)用特定的BIOS中斷調(diào)用,要求具備較高的匯編語言編程能力。
(2)BIOS Rootkit很難同時(shí)兼容所有的主板產(chǎn)品。因?yàn)椴煌愋虰IOS對(duì)硬件調(diào)用標(biāo)準(zhǔn)接口不相同,而不同類型主板也有可能采用不同的BIOS芯片,這就對(duì)BIOS Rootkit的編寫產(chǎn)生困難,甚至不同的主板生產(chǎn)批次都會(huì)對(duì)BIOS Rootkit有較大限制[7]。
(3)缺少BIOS技術(shù)資料。BIOS相關(guān)技術(shù)資料一直是國(guó)外各大廠商的商業(yè)機(jī)密,因此許多產(chǎn)品特性、調(diào)用參數(shù)等資料無法被查閱到[8]。
(4)必須熟悉操作系統(tǒng)中模式轉(zhuǎn)換、系統(tǒng)引導(dǎo)等問題。尤其針對(duì)未開源的Windows操作系統(tǒng),在保護(hù)模式下編寫B(tài)IOS Rootkit,實(shí)現(xiàn)控制操作系統(tǒng)流程較為困難[5,9]。
(5)BIOS空間有限。BIOS芯片空間通常非常有限,一般容量不大于512k[10]。僅夠廠家初始寫入正常程序,剩余的可用空間往往無法再刷寫B(tài)IOS Rootkit[4-5]。
IceLord.EXE是已經(jīng)被證實(shí)可以實(shí)現(xiàn)的 BIOS Rootkit,其中含有很多先進(jìn)的BIOS Rootkit實(shí)現(xiàn)技術(shù),以IceLord.EXE為例,對(duì)BIOS Rootkit進(jìn)行技術(shù)分析,了解BIOS Rootkit實(shí)現(xiàn)的功能。
2007年4月26日,IceLord(網(wǎng)名)在CSDN網(wǎng)站的博客發(fā)表了一篇名為《BIOS RootKit:Welcome Home,MyLord!》的文章。作者詳細(xì)描述BIOS Rootkit的設(shè)計(jì)理念,并提供DEMO文件下載,DEMO文件名為 IceLord.EXE。
DEMO文件IceLord.EXE是Windows環(huán)境中PE可執(zhí)行文件[11],它由IceLord.EXE主文件和IO_HLPER.SYS、LEAVING.BIN兩個(gè)附加資源組成。當(dāng)使用CMD命令行,運(yùn)行 IceLord.EXE/Install時(shí),2個(gè)附加資源會(huì)從主文件中釋放出來,然后主文件利用IO_HLPER.SYS,將LEAVING.BIN刷寫至BIOS芯片中,完成了 BIOS Rootkit的植入[6]。
IceLord.EXE為 Windows環(huán)境中 PE可執(zhí)行文件,主要作用是讀取和刷寫B(tài)IOS芯片。文件運(yùn)行后會(huì)釋放附加資源,同時(shí)對(duì)BIOS芯片進(jìn)行讀取檢測(cè),當(dāng)判斷BIOS芯片屬于可刷寫類型后,則利用驅(qū)動(dòng)程序文件 IO_HLPER.SYS,將 LEAVING.BIN 刷寫至BIOS芯片中。
Windows操作系統(tǒng)通常都是在保護(hù)模式下運(yùn)行,如果要對(duì)I/O操作則必須擁有Ring0權(quán)限或者修改I/O允許位圖設(shè)置,因此想要成功刷寫B(tài)IOS芯片必須利用驅(qū)動(dòng)程序文件才能完成。IO_HLPER.SYS主要作用就是協(xié)助IceLord.EXE對(duì)BIOS芯片進(jìn)行刷寫。IO_HLPER.SYS驅(qū)動(dòng)程序文件通過修改I/O允許位圖設(shè)置,讀取特定的I/O端口,使IceLord.EXE在Ring3級(jí)權(quán)限下按照I/O允許位圖位置,不受限制地訪問I/O端口。
模塊文件是DEMO文件IceLord.EXE中最核心的部分,也是需要被植入到BIOS芯片中的文件,使用標(biāo)準(zhǔn)ISA模塊的頭部,大小是十六進(jìn)制40h,也就是64×512=32k,里面自帶了一個(gè)Protector.SYS文件。
它通過HOOK中斷向量表來實(shí)現(xiàn)BIOS Rootkit功能。當(dāng)模塊文件被植入到BIOS芯片中后,工作前先保存原始INT 19H的調(diào)用地址,然后進(jìn)行HOOK操作,將自定義函數(shù)地址嵌入,使其中斷向量指向自定義程序所在地址97C000A2[12],即物理內(nèi)存地址0x00097ca2處。如果系統(tǒng)調(diào)用INT 19H中斷,則自動(dòng)忽略INT 19H,執(zhí)行New_int19h函數(shù),對(duì)INT 13H再進(jìn)行HOOK操作。
Int 13H是BIOS中斷類型中處理磁盤的中斷調(diào)用。通過對(duì)Int 13H中斷調(diào)用,對(duì)磁盤中特定Rootkit程序進(jìn)行查找,如果不存在,則使用默認(rèn)BIN模塊文件中的Protector.SYS,然后修改Windows相關(guān)啟動(dòng)鏈表的方式,完成內(nèi)核Rootkit程序的寫入操作[5]。
BIOS Rootkit作為Rootkit中的特殊類型,具有極強(qiáng)隱蔽性和較大破壞力,幾乎可以躲過現(xiàn)有的任何計(jì)算機(jī)安全檢測(cè)軟件的檢測(cè)。隨著BIOS Rootkit技術(shù)不斷被突破,計(jì)算機(jī)的安全隱患也將越來越多[13-14]。
在2011年4月,NIST已經(jīng)針對(duì)臺(tái)式機(jī)和筆記本電腦發(fā)布了BIOS安全標(biāo)準(zhǔn),并且美國(guó)國(guó)土安全局要求聯(lián)邦政府使用該安全標(biāo)準(zhǔn)作為購(gòu)買筆記本和臺(tái)式機(jī)的基準(zhǔn)。從NIST的文件中顯示,在未來美國(guó)政府對(duì)計(jì)算機(jī)和服務(wù)器的購(gòu)買(無論是基本服務(wù)器、管理服務(wù)器還是刀片服務(wù)器)都會(huì)檢查其購(gòu)買的設(shè)備是否能夠“身份驗(yàn)證BIOS更新機(jī)制”、“安全本地更新機(jī)制”,以及是否存在“固件完整性保護(hù)”和“非繞過功能”。而中國(guó)也應(yīng)盡快發(fā)布相關(guān)的安全標(biāo)準(zhǔn),同時(shí)研制可產(chǎn)品化的檢查防范技術(shù)。
[1]陳文欽.BIOS研發(fā)技術(shù)剖析[M].北京:清華大學(xué)出版社,2001.
[2]彭毅.BIOS Rootkit及其檢測(cè)技術(shù)的研究[D].重慶:重慶大學(xué),2008.
[3]崔甲.Rootkit的分類方法和檢測(cè)技術(shù)研究[D].成都:電子科技大學(xué),2007.
[4]王靜,吳偉民,賴天武,等.BIOS后門分析[J].計(jì)算機(jī)應(yīng)用,2006,26(S2):96-99.
[5]韓宇.基于AWARD主板的BIOS Rootkit檢測(cè)技術(shù)研究[D].蘭州:蘭州大學(xué),2011.
[6]IceLord.BIOS RootKit:Welcome Home,My Lord![EB/OL].http:∥blog.csdn.net/icelord/2007,2008-05-06.
[7]ACPI.ACPI Specification[EB/OL].http://www.acpi.info,2013-05-20.
[8]Award.Award BIOS Editor 1.0[EB/OL].http://awdbedit.sourceforge.net/,2008-05-06.
[9]Heasman J.Implementing and Detecting a PCI Rootkit[M].Blackhat Federal,2006.
[10]郭斌.基于I386EX和IPSec的安全的實(shí)時(shí)嵌入式網(wǎng)絡(luò)系統(tǒng)的設(shè)計(jì)[D].成都:西南交通大學(xué),2013.
[11]李月鋒.基于行為監(jiān)測(cè)的Anti-R/Bootkit的研究與實(shí)現(xiàn)[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2009.
[12]王文宇.基于Rootkit技術(shù)的終端安全防護(hù)研究[J].計(jì)算機(jī)安全,2011(11):32-36.
[13]周振柳,劉寶旭,池亞平,等.計(jì)算機(jī)BIOS安全風(fēng)險(xiǎn)分析與檢測(cè)系統(tǒng)研究[J].計(jì)算機(jī)工程,2007,33(16):114-116.
[14]Emmerik van M.Static Assignment for Decompilation:Formal Abstraction of Semantics for Detecting[D].Brisbane,Australia:University of Queensland,2007.