劉濤,董亞楠
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610000)
無(wú)校驗(yàn)值比對(duì)的可信鏈建立方法
劉濤,董亞楠
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610000)
可信平臺(tái)模塊(TPM)具有對(duì)度量校驗(yàn)值進(jìn)行硬件級(jí)保護(hù)等特點(diǎn),在可信引導(dǎo)過(guò)程中起到至關(guān)重要的作用,進(jìn)而有力保障用戶(hù)計(jì)算環(huán)境的安全性。然而目前尚有大量不具備TPM硬件的計(jì)算機(jī),如何實(shí)現(xiàn)其可信引導(dǎo)從而建立安全的計(jì)算環(huán)境仍然亟待解決。針對(duì)在沒(méi)有TPM硬件的環(huán)境中度量校驗(yàn)值安全性難以保證的問(wèn)題,提出一種無(wú)校驗(yàn)值比對(duì)的可信鏈建立方法。這種方法采用在操作系統(tǒng)引導(dǎo)時(shí)輸入密鑰來(lái)動(dòng)態(tài)解碼二進(jìn)制指令流的模式,充分利用在操作系統(tǒng)引導(dǎo)這一特殊時(shí)期軟硬件環(huán)境尚不完整,嘗試破解密鑰代價(jià)高昂的特點(diǎn)。通過(guò)實(shí)驗(yàn)驗(yàn)證這種方法的有效性。
可信鏈;可信度量;可信引導(dǎo)
隨著信息產(chǎn)業(yè)的高速發(fā)展,個(gè)人電腦、手機(jī)、智能終端等電子設(shè)備越來(lái)越普及。然而普及的背后隱藏著越來(lái)越巨大的信息安全危機(jī)。電腦病毒、手機(jī)病毒、木馬后門(mén)等不安全的因素層出不窮,給廣大用戶(hù)帶來(lái)了嚴(yán)重威脅。病毒常常篡改操作系統(tǒng)運(yùn)行所必須的關(guān)鍵部分,并偷偷在用戶(hù)不知情的情況下運(yùn)行,從而達(dá)到監(jiān)視用戶(hù)行為,盜取破壞用戶(hù)敏感數(shù)據(jù)之目的。
保障系統(tǒng)啟動(dòng)過(guò)程的安全性對(duì)于建立安全的計(jì)算環(huán)境至關(guān)重要。為了保證系統(tǒng)的啟動(dòng)過(guò)程是安全可信的,文獻(xiàn)[1]和[5]采用了可信鏈機(jī)制:即先確立一個(gè)可信任的根,從這個(gè)根出發(fā),對(duì)下一個(gè)啟動(dòng)步驟進(jìn)行可信度量,如果度量成功,則將其納入可信鏈,并將系統(tǒng)控制權(quán)交給它;反之則認(rèn)為該步驟被篡改,不可信而啟動(dòng)失敗。不斷重復(fù)這一過(guò)程,可信鏈不斷延長(zhǎng),直至系統(tǒng)啟動(dòng)完畢。那么就可以認(rèn)為,系統(tǒng)的啟動(dòng)過(guò)程是可信的,安全的。可信根是可信鏈的起點(diǎn);可信度量則決定了可信鏈延展性。這兩項(xiàng)在可信鏈的建立過(guò)程中相輔相成,缺一不可。
正是由于可信根和可信度量在可信鏈建立過(guò)程中的重要性,工業(yè)界和學(xué)術(shù)界普遍采用將二者結(jié)合的辦法,即構(gòu)建一個(gè)專(zhuān)門(mén)的安全芯片TPM(Trusted Platform Module)[1,4-5],它既作為整個(gè)系統(tǒng)的可信根,又作為可信度量的場(chǎng)所,它內(nèi)部有專(zhuān)門(mén)的硬件電路負(fù)責(zé)密鑰存儲(chǔ),加解密計(jì)算等。即使在沒(méi)有內(nèi)置TPM硬件的環(huán)境中,為了實(shí)現(xiàn)可信引導(dǎo),很多人也采用外置類(lèi)似TPM功能硬件的方法,如文獻(xiàn)[2]中提出的USB-key等等。
由于TPM硬件(以及類(lèi)似TPM功能的硬件)目前的普及率和大眾認(rèn)知度不高(在淘寶網(wǎng)上搜索TPM硬件條目數(shù)便可窺一二),這導(dǎo)致很多計(jì)算機(jī)難以實(shí)現(xiàn)可信引導(dǎo)而長(zhǎng)期處于安全風(fēng)險(xiǎn)中。因此從實(shí)用的角度出發(fā),如何在沒(méi)有TPM硬件的條件下建立可信鏈,進(jìn)而提供一個(gè)便捷、安全的計(jì)算環(huán)境是眼下的當(dāng)務(wù)之急。文獻(xiàn)[3]實(shí)現(xiàn)了一種無(wú)需TPM硬件實(shí)現(xiàn)可信引導(dǎo)的方法,其基本思想是在引導(dǎo)系統(tǒng)時(shí)引入一個(gè)精簡(jiǎn)Linux環(huán)境,對(duì)目標(biāo)系統(tǒng)進(jìn)行可信度量,然后與保存在精簡(jiǎn)Linux環(huán)境中的度量校驗(yàn)值進(jìn)行比對(duì),從而判定目標(biāo)系統(tǒng)的可信與否。這種方法的不足之處在于存儲(chǔ)在軟件環(huán)境中的度量校驗(yàn)值安全可靠性難以得到保證。本文將介紹一種在沒(méi)有TPM情況下不依靠校驗(yàn)值比對(duì)實(shí)現(xiàn)可信引導(dǎo)的解決辦法。
1.1 可信根
計(jì)算機(jī)系統(tǒng)的啟動(dòng)需要經(jīng)歷如下過(guò)程,以PC啟動(dòng)位于硬盤(pán)上的Linux為例[1]:計(jì)算機(jī)上電后,首先完成硬件自檢,接著執(zhí)行BIOS中的代碼完成硬件初始化,然后讀入并執(zhí)行MBR中的代碼,MBR其實(shí)包含了grub引導(dǎo)程序的stage1,接著執(zhí)行g(shù)rub的stage1_5,stage2,最后將控制權(quán)交給Linux內(nèi)核vmlinuz完成Linux操作系統(tǒng)的啟動(dòng),如圖1所示。

圖1 無(wú)TPM的Linux啟動(dòng)過(guò)程
在引入了TPM的計(jì)算機(jī)系統(tǒng)中,Linux操作系統(tǒng)的啟動(dòng)過(guò)程與之前相比增加了TPM的可信度量環(huán)節(jié):計(jì)算機(jī)上電完成硬件自檢,TPM度量BIOS中代碼;BIOS初始化硬件,TPM度量MBR代碼;執(zhí)行MBR中g(shù)rub引導(dǎo)程序的stage1,TPM度量stage1_5;執(zhí)行stage1_5,TPM度量stage2;執(zhí)行stage2,TPM度量vmlinuz;執(zhí)行vmlinuz,至此Linux操作系統(tǒng)啟動(dòng)完成,如圖2所示。
可信根應(yīng)該有度量下一步可執(zhí)行代碼正確性的能力,否則就不能實(shí)現(xiàn)可信鏈的傳遞和延展。計(jì)算機(jī)上電、硬件自檢、BIOS初始化硬件這三步的可執(zhí)行代碼常常位于主板的ROM中,對(duì)普通用戶(hù)而言難以修改,通常由硬件生產(chǎn)廠家直接提供,幾乎不具備度量的能力,因此不適宜作為可信根。對(duì)于普通用戶(hù)而言,唯有位于磁盤(pán)上的代碼是易于修改的,因此MBR或bootloader等作為在BIOS初始化硬件完畢后執(zhí)行的第一步外部代碼則可以經(jīng)過(guò)修改而具備度量功能(比如修改grub或Linux中有關(guān)bootsector的代碼)。既然這些代碼位于磁盤(pán)上,對(duì)于普通用戶(hù)是易于修改的,對(duì)于惡意程序或惡意用戶(hù)來(lái)說(shuō)也是易于修改的,那么如何保證這些代碼的安全性?本文將在第二部分可信度量中做進(jìn)一步分析和探討。

圖2 有TPM的Linux啟動(dòng)過(guò)程
1.2 可信度量
常見(jiàn)可信度量方法[1,3-5]可以簡(jiǎn)單總結(jié)為下面四步:(1)輸入度量目標(biāo);(2)按照一定度量算法計(jì)算;(3)將度量結(jié)果與存儲(chǔ)在某處的度量校驗(yàn)值進(jìn)行比對(duì);(4)根據(jù)比對(duì)的結(jié)果判斷度量目標(biāo)是否可信。如圖3所示。前人的研究工作主要集中在第二步和第三步上,如在第二步中采用復(fù)雜的加解密算法,在第三步采用將校驗(yàn)值存儲(chǔ)在TPM等特殊軟硬件環(huán)境等方式來(lái)確保校驗(yàn)值的正確性和安全性。

圖3 可信鏈建立過(guò)程中的常見(jiàn)度量步驟
這種依賴(lài)校驗(yàn)值比對(duì)的方式有一定弊端:惡意用戶(hù)或程序可能通過(guò)某種途徑獲得或修改這個(gè)校驗(yàn)值,繞過(guò)復(fù)雜的度量算法,從而控制系統(tǒng)。如文獻(xiàn)[7]提出利用LiveCD修改Linux登錄密鑰的方法就是一種變相修改校驗(yàn)值的方法。
一個(gè)更好的辦法是在可信鏈的建立過(guò)程中移除校驗(yàn)值比對(duì)這一薄弱的環(huán)節(jié),即不保存所謂的校驗(yàn)值,從而消除校驗(yàn)值比對(duì)帶來(lái)的潛在威脅。這種方法的流程如圖4所示:度量目標(biāo)事先被一定的可逆加密算法加密(如位運(yùn)算、DES加密等,由于加解密算法不在本文研究范圍內(nèi),所以不再詳述),到需要度量該目標(biāo)時(shí),提示用戶(hù)輸入密鑰,然后將這個(gè)密鑰不加驗(yàn)證地用于解密算法中進(jìn)行運(yùn)算。此時(shí)無(wú)論是真密鑰還是假密鑰,無(wú)論被度量目標(biāo)被篡改與否,都可以運(yùn)算得到一個(gè)二進(jìn)制流的結(jié)果,然后系統(tǒng)跳轉(zhuǎn)到該結(jié)果處繼續(xù)執(zhí)行。只有真密鑰和未篡改的度量目標(biāo)解碼出來(lái)的結(jié)果才是有效的二進(jìn)制指令流從而被正確執(zhí)行。這樣只能通過(guò)系統(tǒng)的運(yùn)行行為(如正常開(kāi)機(jī)、正常啟動(dòng))而非存儲(chǔ)在某處的校驗(yàn)值比對(duì)來(lái)判斷密鑰和度量目標(biāo)的真?zhèn)巍?/p>

圖4 無(wú)校驗(yàn)值比對(duì)的度量步驟
利用上述無(wú)校驗(yàn)值比對(duì)的可信度量方式,可按如下過(guò)程建立可信鏈:假如操作系統(tǒng)啟動(dòng)需要經(jīng)過(guò)5個(gè)步驟:s1,s2,s3,s4,s5,其中前一步包含了對(duì)后一步的解密算法,如s1的代碼中包含了對(duì)s2的解密算法。寫(xiě)在磁盤(pán)上的操作系統(tǒng)代碼已經(jīng)按照上面5個(gè)步驟劃分成了5塊,并已經(jīng)分別按照相應(yīng)的加密算法進(jìn)行了加密。當(dāng)然s1不需要加密,因?yàn)樗纳弦徊绞荁IOS,而B(niǎo)IOS中的代碼不具備解密功能。當(dāng)啟動(dòng)計(jì)算機(jī)時(shí),上電、硬件自檢、BIOS初始化硬件這三步不變,接著B(niǎo)IOS把控制權(quán)交給s1,s1完成自身特定功能后提示用戶(hù)輸入用于解密s2的密鑰,如果密鑰正確且s2沒(méi)有被篡改,s2將得以正確解密而完成自身特定功能并提示輸入解密s3的密鑰;反之不能得到正確的s2代碼而永遠(yuǎn)不能進(jìn)行后續(xù)步驟,s3,s4,s5與此類(lèi)似,不再贅述。
惡意程序不能破壞、增刪s1-s5中任意一個(gè)環(huán)節(jié),否則都將使得后續(xù)步驟的解密失敗,因?yàn)檫@樣會(huì)破壞數(shù)據(jù)的完整性從而導(dǎo)致解密運(yùn)算得到的二進(jìn)制流與原始可執(zhí)行的二進(jìn)制指令流不一致,使得啟動(dòng)不能繼續(xù)進(jìn)行。對(duì)于惡意程序來(lái)說(shuō),有可乘之機(jī)的地方在BIOS與s1處,即在BIOS與s1間增加一個(gè)環(huán)節(jié)。如引導(dǎo)區(qū)病毒(Boot sector viruses),它可以先于正常引導(dǎo)程序運(yùn)行,待完成自身任務(wù)后將控制權(quán)交給正常引導(dǎo)程序。如何防范引導(dǎo)區(qū)病毒不在本文的討論范圍之列,文獻(xiàn)[6]給出了一些常見(jiàn)的防范辦法,本文不再贅述。但是近幾年引導(dǎo)區(qū)病毒破壞力有限,在dos、win95時(shí)代猖狂一時(shí),但在Linux和windowsNT時(shí)代的破壞卻鮮有耳聞,現(xiàn)代操作系統(tǒng)已經(jīng)具備有成熟的虛擬內(nèi)存保護(hù)和管理機(jī)制,使得引導(dǎo)區(qū)病毒無(wú)機(jī)可乘。由此s1,s2,s3,s4,s5構(gòu)成了一條可信鏈。
筆者在Linux-0.12基礎(chǔ)上開(kāi)發(fā)了一個(gè)小型的操作系統(tǒng)內(nèi)核,它由兩部分組成:引導(dǎo)程序和內(nèi)核。它的啟動(dòng)將依次進(jìn)行下面的步驟:上電,硬件自檢,BIOS初始化硬件,BIOS將控制權(quán)交給引導(dǎo)程序,引導(dǎo)程序度量?jī)?nèi)核并將控制權(quán)交給內(nèi)核,運(yùn)行內(nèi)核完成系統(tǒng)啟動(dòng)。
BIOS中可設(shè)置的啟動(dòng)引導(dǎo)設(shè)備有軟盤(pán)、硬盤(pán)、光盤(pán)、U盤(pán)等等。理論上說(shuō)這些設(shè)備都可以作為實(shí)驗(yàn)對(duì)象,但軟盤(pán)由于其結(jié)構(gòu)簡(jiǎn)單,設(shè)置方便,因此我們選用軟盤(pán)作為引導(dǎo)介質(zhì)。實(shí)驗(yàn)環(huán)境為:debian-7.0.0作為宿主操作系統(tǒng),版本號(hào)為1.1.2的qemu虛擬機(jī)。
2.1 模擬度量目標(biāo)沒(méi)有被篡改條件下的運(yùn)行情況
(1)實(shí)驗(yàn)步驟
①編譯并制作正常可以啟動(dòng)的操作系統(tǒng)內(nèi)核system。
②編寫(xiě)以位運(yùn)算作為加密手段的加密程序encrypt.c,設(shè)置好加密參數(shù),將system加密為e_system。
③編寫(xiě)帶解密算法的引導(dǎo)程序boot.s,并編譯成boot.bin。
④將引導(dǎo)程序boot.bin和加密后的內(nèi)核e_system一并寫(xiě)入軟盤(pán)鏡像fakedisk.img中。
⑤用這個(gè)軟盤(pán)鏡像啟動(dòng)qemu虛擬機(jī),運(yùn)行參數(shù)為:qemu-system-i386-m 8-fda fakedisk.img。
(2)實(shí)驗(yàn)結(jié)果(如圖5、圖6)
2.2 模擬度量目標(biāo)被篡改條件下的運(yùn)行情況
(1)實(shí)驗(yàn)步驟
①編譯并制作正常可以啟動(dòng)的操作系統(tǒng)內(nèi)核system。
②編寫(xiě)以位運(yùn)算作為加密手段的加密程序encrypt.c,設(shè)置好加密參數(shù),將system加密為e_system。
③模擬篡改行為,隨機(jī)修改e_system中的幾位,得到f_system。
④編寫(xiě)帶解密算法的引導(dǎo)程序boot.s,并編譯成boot.bin。
⑤將引導(dǎo)程序boot.bin和篡改后的內(nèi)核f_system一并寫(xiě)入軟盤(pán)鏡像fakedisk.img中。

圖5 輸入正確密鑰,正常運(yùn)行打印出標(biāo)識(shí)

圖7 輸入正確密鑰,不能正常運(yùn)行打印出標(biāo)識(shí)
⑥用這個(gè)軟盤(pán)鏡像啟動(dòng)qemu虛擬機(jī),運(yùn)行參數(shù)為:qemu-system-i386-m 8-fda fakedisk.img。
(2)實(shí)驗(yàn)結(jié)果(如圖7、圖8)
2.3 實(shí)驗(yàn)結(jié)果說(shuō)明
實(shí)驗(yàn)發(fā)現(xiàn)當(dāng)輸入正確密鑰且度量目標(biāo)沒(méi)有被篡改時(shí),度量目標(biāo)被還原成正確可執(zhí)行的二進(jìn)制指令流,正常運(yùn)行并打印出標(biāo)識(shí);當(dāng)輸入錯(cuò)誤密鑰或度量目標(biāo)被篡改時(shí),度量目標(biāo)被計(jì)算成無(wú)意義的二進(jìn)制流,當(dāng)跳轉(zhuǎn)到該結(jié)果處執(zhí)行后,虛擬電腦由于執(zhí)行錯(cuò)誤指令而出現(xiàn)“死機(jī)”的狀態(tài)。
上述可信鏈建立過(guò)程中沒(méi)有任何校驗(yàn)值比對(duì),杜絕了惡意程序和用戶(hù)修改或竊取度量校驗(yàn)值從而繞過(guò)可信度量的隱患。如果采用暴力破解密鑰的辦法,那么每嘗試一次密鑰就需要重啟電腦一次;如果是在VirtualBox、qemu類(lèi)的虛擬機(jī)中破解,每次嘗試也需要重啟虛擬機(jī)。這也是操作系統(tǒng)啟動(dòng)引導(dǎo)過(guò)程的特殊性,因?yàn)榇藭r(shí)系統(tǒng)沒(méi)有完全運(yùn)轉(zhuǎn)起來(lái),不能提供完整的軟硬件環(huán)境。相比于其他暴力破解方式(系統(tǒng)完全運(yùn)轉(zhuǎn)起來(lái),使用破解軟件,開(kāi)啟上百個(gè)線程,每秒嘗試上萬(wàn)個(gè)密鑰),這種暴力破解的代價(jià)是相當(dāng)大的。

圖6 輸入錯(cuò)誤密鑰,不能正常運(yùn)行打印出標(biāo)識(shí)

圖8 輸入錯(cuò)誤密鑰,不能正常運(yùn)行打印標(biāo)識(shí)
按照文中設(shè)計(jì)的無(wú)校驗(yàn)值比對(duì)的可信鏈建立方式,構(gòu)建具有可信度量功能的操作系統(tǒng)引導(dǎo)程序。實(shí)驗(yàn)結(jié)果表明,這種不依賴(lài)校驗(yàn)值比對(duì)的可信鏈建立方式是可行的。這為廣大沒(méi)有TPM硬件的用戶(hù)提供了一種保障自身計(jì)算環(huán)境安全的新思路。
[1]吳剛.面向Xen安全計(jì)算機(jī)中可信鏈的可信引導(dǎo)及可信設(shè)備虛擬化[D].華南理工大學(xué),2011.
[2]張帆,張聰,陳偉,等.一種無(wú)需操作系統(tǒng)的硬件級(jí)可信度量方法[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2014(11):6-10.
[3]姚金魁,張濤,王金雙,陳融,施祖清.一種不依賴(lài)TPM的安全引導(dǎo)方式的設(shè)計(jì)與實(shí)現(xiàn)[期刊論文].計(jì)算機(jī)技術(shù)與發(fā)展,2012(6)
[4]譚良,周明天.基于可信計(jì)算平臺(tái)的可信引導(dǎo)過(guò)程研究[J].計(jì)算機(jī)應(yīng)用研究,2008,25(1):232-234.
[5]赫芳,劉毅,莊祿.面向云計(jì)算平臺(tái)的可信度量研究[J].信息網(wǎng)絡(luò)安全,2013(1):5-7.
[6]Boot sector.https://en.wikipedia.org/wiki/Boot_sector
[7]利用LiveCD修改root密鑰.http://luyx30.blog.51cto.com/1029851/1092928/
A Way of Building Trusted Chain Without Checksum Validation
LIU Tao,DONG Ya-nan
(College of Computer Science,Sichuan University,Chengdu 610000)
The trusted platform module(TPM)is capable of protecting validation checksum from hardware level perspective,and plays a vital role in guaranteeing the safety of computing environment.However there are a lot of computers running without TPM,how to guarantee their safety is still unsolved.For that reason,proposes a way of building trusted chain without checksum validation.This method dynamically decodes binary instructions at boot time,taking full advantage of the characteristics that cracking key at initialization moment will be costly.Finally the effectiveness of the proposed method is verified by experiment.
Trusted Chain;Trusted Measurement;Trusted Startup
1007-1423(2016)33-0009-05
10.3969/j.issn.1007-1423.2016.33.002
2016-10-08
2016-11-15
劉濤(1990-),四川資陽(yáng)人,在讀碩士研究生,研究方向?yàn)榍度胧讲僮飨到y(tǒng)
董亞楠(1990-),女,河北保定人,在讀碩士研究生,研究方向?yàn)榍度胧讲僮飨到y(tǒng)