汪自旺,莊 毅,晏祖佳
(南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京 211106)
目前,ARM處理器芯片占據(jù)了移動與嵌入式設(shè)備領(lǐng)域的主導(dǎo)地位,為超過60%的嵌入式設(shè)備以及超過45億部智能電話提供芯片支持.其中ARM處理器芯片在智能移動電話的處理器芯片中占比超過95%,到2035年,集成ARM芯片的移動設(shè)備估計(jì)將達(dá)到1萬億部[1].然而,ARM終端的安全風(fēng)險(xiǎn)已成為限制其發(fā)展的關(guān)鍵問題,尤其是智能手機(jī)和車聯(lián)網(wǎng)的應(yīng)用與普及,不可信終端可能會給企業(yè)和個人帶來嚴(yán)重的安全與隱私泄露風(fēng)險(xiǎn).在這種情況下,系統(tǒng)與用戶程序的完整性保證是實(shí)現(xiàn)移動終端可信與安全計(jì)算的基本要求與必要條件.
遠(yuǎn)程證明是驗(yàn)證遠(yuǎn)程計(jì)算設(shè)備完整性狀態(tài)與可信性的過程,表現(xiàn)為被多個實(shí)體所接受并共同使用的通用協(xié)議[2].標(biāo)準(zhǔn)的TCG(Trusted Computing Group)遠(yuǎn)程證明[3]過程通過向質(zhì)詢方報(bào)告設(shè)備的環(huán)境指紋,以驗(yàn)證證明方的完整性狀態(tài).因此,完整性度量是遠(yuǎn)程證明的基礎(chǔ),其實(shí)現(xiàn)通常分為靜態(tài)證明與動態(tài)證明兩種.大多數(shù)現(xiàn)有的完整性證明方案都是基于設(shè)備內(nèi)存指紋來實(shí)現(xiàn)的靜態(tài)證明,稱為基于二進(jìn)制的證明方案[4].
現(xiàn)階段移動平臺遠(yuǎn)程證明相關(guān)研究的核心問題仍是如何為嵌入式平臺設(shè)計(jì)輕量級的完整性度量與證明機(jī)制.靜態(tài)證明方案通過在程序加載期間獲取實(shí)體的測量值,反應(yīng)了測量發(fā)生時(shí)代碼與數(shù)據(jù)的狀態(tài),卻無法為平臺提供運(yùn)行時(shí)狀態(tài)證明.如果存在漏洞,攻擊者能夠利用TOC-TOU(Time of Check Versus Time of Use)[5]的競爭條件缺陷來實(shí)施攻擊,即攻擊者能夠根據(jù)度量粒度在相鄰的兩個度量時(shí)刻之間動態(tài)的插入攻擊行為與恢復(fù)行為,從而操縱證明方度量模塊在攻擊行為發(fā)生時(shí)仍會收集到正確的結(jié)果.而基于控制流[6]、程序執(zhí)行邏輯分析[7]的動態(tài)完整性度量機(jī)制無法適用于性能與功耗嚴(yán)格受限的移動設(shè)備.因此,研究ARM平臺可抵御TOC-TOU攻擊的二進(jìn)制可信度量與更新機(jī)制是當(dāng)前研究的重點(diǎn).
ARM TrustZone是ARM對可信計(jì)算的硬件實(shí)現(xiàn)解決方案,能夠?qū)崿F(xiàn)一個高度安全的隔離環(huán)境[8],為用戶提供數(shù)據(jù)、固件和外設(shè)的安全保護(hù),稱為安全域.最近,越來越多的研究人員利用TrustZone提供的可信執(zhí)行環(huán)境(Trusted Execution Environment,TEE)來托管內(nèi)核完整性監(jiān)視器,給出了不同類型使用ARM TrustZone安全域中的安全監(jiān)視器來保護(hù)操作系統(tǒng)內(nèi)核的安全架構(gòu).三星Knox是移動端首個實(shí)現(xiàn)了基于TrustZone完整性度量框架的商業(yè)解決方案[9],通過運(yùn)行在TEE中的可信組件來檢測內(nèi)核的完整性.Ali等人[10]提出一種基于TrustZone與區(qū)塊鏈[11]的物聯(lián)網(wǎng)終端度量架構(gòu),利用TrustZone的安全機(jī)制提高了對度量程序與度量結(jié)果的保護(hù).Morbitzer[12]指出位于TEE中的度量組件與其他可信應(yīng)用程序(Trusted Application,TA)共享可信OS的上下文,任何TA被攻擊都可能影響度量組件的安全性,因此提出將度量程序遷移到一種類似于Intel Software Guard eXtensions(SGX)的飛地環(huán)境中執(zhí)行,稱為Scanclave.然而,Scanclave的實(shí)現(xiàn)成本遠(yuǎn)遠(yuǎn)超過了任何一種相關(guān)的研究成果,無法部署到移動設(shè)備中.
上述研究工作僅對完整性度量程序的安全性進(jìn)行了優(yōu)化,缺乏對動態(tài)度量策略實(shí)現(xiàn)方法的討論,無法應(yīng)對TOC-TOU攻擊.ABERA等人[13]與Heejin等人[14]通過在安全域構(gòu)建流驗(yàn)證服務(wù)以實(shí)時(shí)檢測威脅普通世界完整性的行為.類似的,KIMS[15]在安全世界中實(shí)現(xiàn)對Rootkit等攻擊行為的建模,可以動態(tài)監(jiān)視操作系統(tǒng)內(nèi)核的變更行為并檢測其是否被破壞.TZ-RKP[16]通過剝奪內(nèi)核控制某些關(guān)鍵功能的能力,例如系統(tǒng)控制指令、存儲器轉(zhuǎn)換表的更新指令等,并將這些功能路由到安全世界中執(zhí)行,從而可以有效地阻止未經(jīng)許可的修改或注入二進(jìn)制文件的攻擊,以實(shí)現(xiàn)內(nèi)核的動態(tài)完整性保護(hù)機(jī)制.然而,安全世界與普通世界的語義鴻溝[17]是制約此類方案應(yīng)用的主要挑戰(zhàn).
與本文工作最為接近的是Sprobes[18,19],通過對篩選的操作系統(tǒng)指令放置探針,再利用安全世界能夠動態(tài)地中斷、恢復(fù)普通世界的事務(wù)的特性,實(shí)現(xiàn)在安全世界中動態(tài)執(zhí)行完整性檢查組件,保證內(nèi)核代碼的完整性.Sprobes與本文方法存在兩個主要不同:1)Sprobes通過利用探針的觸發(fā)將執(zhí)行環(huán)境切換到安全域以實(shí)現(xiàn)對篩選的目標(biāo)指令進(jìn)行分析,從而保證只有經(jīng)過分析和認(rèn)可的敏感指令才能夠被執(zhí)行;2)Sprobes仍是屬于操作系統(tǒng)的一種自省機(jī)制,其有效性受限于安全世界內(nèi)運(yùn)行的指令分析模塊的能力瓶頸.相比之下,本文的方法旨在通過探針的放置來監(jiān)視內(nèi)存寫入與寄存器變更等敏感指令行為,以動態(tài)檢測可能的完整性變更結(jié)果,不需要在安全世界獲取目標(biāo)指令的上下文信息,并且不用考慮安全世界與普通世界不同執(zhí)行環(huán)境之間存在語義鴻溝所帶來的挑戰(zhàn),具備更小的性能損失.
本文提出了一種基于探針的移動安全域動態(tài)完整性度量方案,該技術(shù)能夠動態(tài)實(shí)現(xiàn)完整性度量數(shù)據(jù)的運(yùn)行時(shí)更新.針對所有靜態(tài)證明機(jī)制面臨的TOC-TOU競爭條件缺陷問題,與普遍采用的實(shí)現(xiàn)復(fù)雜的一致性檢查機(jī)制不同,構(gòu)建了基于探針機(jī)制的系統(tǒng)內(nèi)核與用戶程序完整性動態(tài)監(jiān)測模型ProbeIMA(Probe-based dynamic Integrity Measurement Architecture),任何影響程序和內(nèi)核完整性的內(nèi)存片段的寫入與更新操作以及重要寄存器的變更行為都會產(chǎn)生新的完整性度量記錄.
在現(xiàn)有完整性證明方案的設(shè)計(jì)中,不乏利用TEE的最高安全權(quán)限提供可信的完整性保護(hù)服務(wù)的研究.當(dāng)運(yùn)行于安全域的處理程序收到請求時(shí)即跳轉(zhuǎn)到安全世界的可信執(zhí)行環(huán)境,普通世界被暫停.TEE中的度量組件測量當(dāng)前存儲單元中用戶程序指紋的完整性,最后將度量結(jié)果發(fā)送給質(zhì)詢方.目前,此類方案只能實(shí)現(xiàn)靜態(tài)證明服務(wù),因此無法應(yīng)對TOC-TOU攻擊.
本文所提的基于探針的安全域度量框架如圖1中所示,抽象了如何利用ARM TrustZone安全拓展實(shí)現(xiàn)可應(yīng)對TOC-TOU攻擊的完整性動態(tài)更新機(jī)制.具體的,運(yùn)行于可信執(zhí)行環(huán)境中度量根的有效性與健壯性是整個度量框架正常工作的基礎(chǔ),TrustZone的硬件安全機(jī)制保證了可信應(yīng)用TA實(shí)現(xiàn)的度量與報(bào)告根的可信性,使得安全域的完整性度量過程有效且可信.在此基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了ProbeIMA,使得度量根能夠在系統(tǒng)運(yùn)行的完整生命周期中動態(tài)檢測系統(tǒng)與用戶程序的完整性變更,以應(yīng)對TOC-TOU攻擊.
圖1 基于探針的安全域度量框架
首先,使用在TEE中運(yùn)行的可信應(yīng)用程序來模擬與普通執(zhí)行環(huán)境相隔離的可信度量模塊和報(bào)告模塊,如圖1中左側(cè)所示.由于安全世界能夠直接從其硬件寄存器和存儲單元中提取普通世界的不可偽造狀態(tài),因而,度量模塊可以準(zhǔn)確的度量內(nèi)核和程序的完整性信息,并將度量結(jié)果直接保存到安全存儲中的SML(Stored-Measurement Log).報(bào)告模塊維護(hù)設(shè)備內(nèi)所有實(shí)體的當(dāng)前和歷史指紋,并在認(rèn)證進(jìn)行時(shí)將其發(fā)送給質(zhì)詢方.其次,提出了一種基于探針的完整性更新機(jī)制ProbeIMA,該機(jī)制通過放置探針來動態(tài)監(jiān)視測量對象的完整性變化.
在基于二進(jìn)制的完整性證明過程中,挑戰(zhàn)者通過完整性質(zhì)詢協(xié)議獲得平臺的完整性度量記錄,并通過在返回的度量列表中發(fā)現(xiàn)未知指紋來驗(yàn)證平臺是否可信.通常,靜態(tài)證明只能獲取當(dāng)前時(shí)刻程序運(yùn)行列表中未知指紋的信息,也就是說,度量模塊僅驗(yàn)證了度量請求發(fā)生時(shí)刻的狀態(tài)信息是否完整.然而,任何獲得root訪問權(quán)限的攻擊者都能夠根據(jù)度量粒度來動態(tài)篡改數(shù)據(jù),并操縱由可信度量根獲取的二進(jìn)制指紋,即存在TOC-TOU的競爭條件缺陷.
針對這一問題,本文設(shè)計(jì)了一種基于探針的完整性動態(tài)更新機(jī)制ProbeIMA,通過靜態(tài)二進(jìn)制插樁技術(shù)編輯內(nèi)核與程序代碼的binary文件,在任意變更關(guān)鍵寄存器以及內(nèi)存存儲信息的指令處添加探針代碼.因此,ProbeIMA可以在系統(tǒng)運(yùn)行期間動態(tài)檢測未知指紋的生成,從而將測量模塊的范圍擴(kuò)展到系統(tǒng)運(yùn)行的整個生命周期.
由于ARM具有固定長度指令,因此在二進(jìn)制文件中找到目標(biāo)指令非常容易.圖2中顯示了ProbeIMA的探針觸發(fā)時(shí)的算法流程圖.當(dāng)放置在內(nèi)核或程序二進(jìn)制文件中的探測指令被觸發(fā)時(shí),安全世界直接從其硬件寄存器中提取普通世界的不可偽造狀態(tài),運(yùn)行度量程序?qū)χ噶畈僮鬟M(jìn)行分析,包括確定指令所影響的程序主體ID,以更新對應(yīng)程序ID實(shí)體的完整性度量記錄.本文統(tǒng)計(jì)了所有影響內(nèi)核和用戶程序完整性的頁表集,并將它們寫入指定的安全內(nèi)存地址,該地址稱為完整性相關(guān)內(nèi)存地址集(Integrity related Memory Address Set,IMASet).
圖2 ProbeIMA算法流程圖
此外,在整個內(nèi)核及所有用戶程序中的目標(biāo)指令處添加探針會導(dǎo)致安全世界被頻繁喚醒,為了避免在啟動過程中引起用戶可感知的延遲,重寫了監(jiān)視器模式中的代碼以實(shí)現(xiàn)兩個處理邏輯:首先,對于在內(nèi)核或用戶程序啟動完成之前任何由探針觸發(fā)的切換操作,將直接返回普通世界并執(zhí)行下一條指令.這是因?yàn)樵趦?nèi)核或用戶程序啟動過程中對關(guān)鍵寄存器進(jìn)行初始化會產(chǎn)生大量的誤觸發(fā).
其次,對于所有內(nèi)存寫入的觸發(fā)指令,獲取觸發(fā)指令寫入的物理地址,判斷物理地址是否包含于IMASet中,如果包含,通過IMASet獲取對應(yīng)的程序ID,并更新對應(yīng)實(shí)體的完整性記錄.IMASet能夠顯著減少真正與完整性相關(guān)的有效觸發(fā)的數(shù)量,進(jìn)而降低性能消耗.如圖2中的實(shí)線所示,將ProbeIMA中的世界跳轉(zhuǎn)指令SMC(Secure Monitor Call)稱為安全觸發(fā)器,通過安全觸發(fā)器切換到安全環(huán)境以執(zhí)行完整性更新.并且,將從“安全監(jiān)視器模式”直接返回普通世界的觸發(fā)指令稱為“無效觸發(fā)”,與之相對的,則稱為“有效觸發(fā)”.
ProbeIMA是一種運(yùn)行時(shí)完整性度量機(jī)制,通過放置在二進(jìn)制執(zhí)行程序中的探針觸發(fā)器來更新系統(tǒng)環(huán)境指紋,能夠?qū)⑽粗讣y的檢測擴(kuò)展到系統(tǒng)運(yùn)行的整個生命周期.安全監(jiān)視器調(diào)用SMC指令作為動態(tài)測量組件的入口,并且SMC可以通過常規(guī)寄存器中設(shè)置的命令I(lǐng)D來區(qū)分不同類型的調(diào)用.另一方面,作為探針插入的SMC指令是固定的,不會造成程序完整性信息的隨機(jī)變化,這一點(diǎn)對于完整性參考值的管理非常重要.
總的來說,ProbeIMA通過探針的放置,能夠?yàn)槠胀ㄊ澜邕\(yùn)行的內(nèi)核與用戶程序維護(hù)一個運(yùn)行時(shí)監(jiān)控機(jī)制,主要對以下兩個方面的操作進(jìn)行監(jiān)控:1)檢測新程序的執(zhí)行;2)已運(yùn)行程序和內(nèi)核完整性的變更.首先,檢測影響內(nèi)核完整性的關(guān)鍵CPU寄存器(如SCTLR,TTBR和TTBCR)中發(fā)生的修改操作,其次,監(jiān)視保存在存儲器中的二進(jìn)制文件的修改,即在可能影響進(jìn)程二進(jìn)制文件完整性的所有指令處插入SMC跳轉(zhuǎn)指令,如內(nèi)存寫入指令STR、STM、SWP等.當(dāng)放置的指令被觸發(fā)時(shí),運(yùn)行于安全世界的處理程序?qū)υ撐锢韮?nèi)存地址的所屬程序?qū)嶓w執(zhí)行一次完整性度量.這意味著,所有影響內(nèi)存頁表的操作指令都將路由至安全世界進(jìn)行處理,并根據(jù)觸發(fā)指令的執(zhí)行結(jié)果對內(nèi)核或程序的完整性進(jìn)行更新.
在廣泛使用的ARMv7 32位架構(gòu)中,控制指令是通過寫入某些協(xié)處理器寄存器來實(shí)現(xiàn)的.由于ARM強(qiáng)制執(zhí)行指令對齊和固定指令的大小[16].因此很容易為所有寫入?yún)f(xié)處理器寄存器的MCR和LDC指令生成模板.如圖3所示,在對寫入CP15協(xié)處理器寄存器的MCR指令后放置探針,使普通世界跳轉(zhuǎn)到安全世界執(zhí)行完整性度量程序.首先查詢目標(biāo)寄存器是否影響用戶內(nèi)核的完整性,同樣將經(jīng)過篩選的寄存器位存放于IMASet集合中,對于影響完整性的操作指令重新計(jì)算系統(tǒng)內(nèi)核的完整性指紋,并生成一條新的完整性記錄.需要指出的是,某些寄存器的寫入可能會影響IMASet的內(nèi)容.也就是說,IMASet的內(nèi)容不是固定的.
圖3 ProbeIMA的放置與觸發(fā)機(jī)制
一個程序本質(zhì)上是由.bss段、.data段、.text段3部分組成的.如圖4中所示,.text和.data段一般是固化在可執(zhí)行文件中的,由內(nèi)核從可執(zhí)行文件中加載,.bss段不在二進(jìn)制文件中,由系統(tǒng)初始化生成,而.text,.data和.bss的完整性等同于程序本身的完整性.在Linux中,內(nèi)核會為每個進(jìn)程創(chuàng)建單獨(dú)的地址空間,即創(chuàng)建一組新的轉(zhuǎn)換表.轉(zhuǎn)換表存儲在內(nèi)核的內(nèi)存片段中,轉(zhuǎn)換表的更新也是正常的內(nèi)存寫入.這意味著安全世界可以獲取普通世界進(jìn)程轉(zhuǎn)換表的全部視圖,因此,動態(tài)維護(hù)不同進(jìn)程完整性相關(guān)頁表地址集合組成的IMASet是可行的.另一方面,由于ARM處理器可以支持兩個頁表同時(shí)活動,一個由TTBR0確定,而另一個由TTBR1確定,即,相同的虛擬地址位可能被映射為不同的物理地址,因此本文使用物理地址來維護(hù)IMASet.
圖4 IMASet的設(shè)計(jì)
為了捕獲運(yùn)行于普通世界應(yīng)用程序的完整性狀態(tài)變更,ProbeIMA在所有程序二進(jìn)制文件內(nèi)存寫入指令處插入安全世界跳轉(zhuǎn)指令,當(dāng)檢測到包含于IMASet中的內(nèi)存頁表的寫入操作,安全世界的度量模塊能夠確定目標(biāo)物理內(nèi)存地址對應(yīng)的程序ID,動態(tài)更新該程序的完整性記錄.一方面,由于ARM具有固定指令長度的特性,因此在內(nèi)核二進(jìn)制文件中找到這樣的指令很簡單.另一方面,由于普通世界對于安全世界是透明的,頁表基址等關(guān)鍵信息能直接被安全世界讀取和保存,安全世界中的組件能夠很簡單的維護(hù)普通世界頁表與程序的關(guān)聯(lián)信息,獲取該頁表對應(yīng)的進(jìn)程的進(jìn)程號,識別對應(yīng)頁表的編輯是否能夠造成完整性的變更.
本節(jié)中的探針放置操作主要是通過指令級插樁技術(shù)[20]來實(shí)現(xiàn)的.在實(shí)際的靜態(tài)二進(jìn)制插樁的實(shí)踐中通常包含兩種實(shí)現(xiàn)策略,一種是直接對ELF可執(zhí)行文件進(jìn)行編輯,如PEBIL[21],PEBIL能夠在原ELF文件增加一個插樁代碼段與數(shù)據(jù)段.這種實(shí)現(xiàn)思路在定長指令架構(gòu)下通常只需要簡單的將插樁點(diǎn)原指令替換成一個無條件跳轉(zhuǎn)指令;另一種實(shí)現(xiàn)策略則是在編譯階段對中間代碼進(jìn)行插樁.本節(jié)中通過第一種實(shí)現(xiàn)策略來進(jìn)行演示模型的構(gòu)建.
圖5中演示了如何在STR內(nèi)存寫入指令處添加探針操作的實(shí)現(xiàn)過程,左上部分是ARM架構(gòu)匯編程序的一個原始示例片段.由于固定指令長度的限制,理論上能夠?qū)?15CD8處的32位STR存儲指令替換成任意指令而不會導(dǎo)致ELF文件結(jié)構(gòu)的損壞.具體的,首先將STR指令的進(jìn)行保存和替換,利用B跳轉(zhuǎn)指令將執(zhí)行過程跳轉(zhuǎn)到探針指令處.在本文的實(shí)現(xiàn)中,首先執(zhí)行完成原始的內(nèi)存寫入指令,然后通過SMC跳轉(zhuǎn)指令將CPU的運(yùn)行狀態(tài)切換到安全世界,如圖5(a)所示,安全世界中通過查詢目標(biāo)內(nèi)存地址對應(yīng)的物理地址PA,如果此PA包含在IMAset的集合當(dāng)中,通過IMAset查詢對應(yīng)實(shí)體的標(biāo)簽與度量區(qū)間完成一次實(shí)體的完整性更新.
圖5 ARMv7-A架構(gòu)下ProbeIMA的放置與觸發(fā)演示
盡管探針的插入操作在ARM架構(gòu)的定長指令環(huán)境下更加簡易,但是在實(shí)際的實(shí)現(xiàn)過程中仍然會存在問題,例如,本文在具體的硬件平臺上進(jìn)行實(shí)現(xiàn)時(shí),無法在任何EL0(Exception Level/Privilege Level)層的實(shí)體上部署SMC跳轉(zhuǎn)指令.這是因?yàn)?,由于ARM的硬件安全機(jī)制,任何用戶層的程序或者組件無法通過直接執(zhí)行SMC指令來實(shí)現(xiàn)安全環(huán)境與普通環(huán)境之間的切換.因此,作為原型驗(yàn)證,本文在用戶程序的實(shí)現(xiàn)中將SMC指令替換成安全世界入口API函數(shù)的跳轉(zhuǎn)指令.簡單來說,通過在源文件中引入一個自定義的安全世界入口函數(shù),并在后續(xù)探針插入的實(shí)現(xiàn)過程中通過利用BL指令跳轉(zhuǎn)到PLT表(Procedure Linkage Table)的指定位置,并通過PLT表跳轉(zhuǎn)到外部全局函數(shù)的入口以執(zhí)行安全世界的切換以及后續(xù)的完整性度量階段.圖5(b)處給出了簡單的入口函數(shù)的使用示例,需要指出的是,這種方式盡管能夠通過GDT(Global Descriptor Table)進(jìn)入內(nèi)核態(tài)執(zhí)行安全世界切換,但是在入口函數(shù)被劫持時(shí)將無法完成用戶程序的探針觸發(fā).
由于完整性度量所需要的量對象并不是連續(xù)分布和存儲在內(nèi)存中,傳統(tǒng)基于硬件的內(nèi)存提取方法和基于軟件的內(nèi)存提取方法都是將整塊內(nèi)存提取出來,再從中提取資源,一方面對系統(tǒng)的影響較大,另一方面也帶來了較大的時(shí)間開銷.本文通過維護(hù)影響所有程序與操作系統(tǒng)內(nèi)核完整性的內(nèi)存信息,只需要根據(jù)被度量對象在內(nèi)存中的位置提取資源,符合度量對象離散分布的規(guī)律,能夠極大地加快度量對象的提取效率.由于靜態(tài)測量對象(如代碼,數(shù)據(jù),中斷向量表和系統(tǒng)調(diào)用表)的完整性測量過程相對簡單,因此在此不再贅述.
總的來說,本文直接修改內(nèi)核及用戶程序的二進(jìn)制文件,以便在寫入關(guān)鍵協(xié)處理器寄存器和內(nèi)存頁指令處放置探針,當(dāng)探針被觸發(fā)時(shí),執(zhí)行SMC指令以跳轉(zhuǎn)到安全世界.進(jìn)一步,安全世界對目標(biāo)內(nèi)存頁進(jìn)行判斷,對于那些能夠影響代碼、數(shù)據(jù)、中斷向量表以及系統(tǒng)調(diào)用表完整性的指令執(zhí)行結(jié)果進(jìn)行完整性檢查.因此,維護(hù)離散內(nèi)存頁數(shù)據(jù)與程序ID的從屬關(guān)系信息表也是ProbeIMA機(jī)制的核心問題.
本節(jié)將從功能與性能兩個方面來對所提方案進(jìn)行分析,功能測試用于驗(yàn)證ProbeIMA動態(tài)完整性度量的有效性,即,能否度量并發(fā)現(xiàn)系統(tǒng)的異常和攻擊行為,性能測試用于驗(yàn)證ProbeIMA的效率和開銷.
具體的實(shí)驗(yàn)環(huán)境如下:
在Ubuntu 16.04中交叉編譯了一個開源OP-TEE[22]運(yùn)行環(huán)境,并將其部署到樹莓派3 Model B Rev1.2開發(fā)板上.OP-TEE是一個流行的開源可信執(zhí)行環(huán)境解決方案,能夠?qū)崿F(xiàn)一個完整的可信OS應(yīng)用場景.安全域運(yùn)行一個定制的微型操作系統(tǒng)optee_os,普通世界運(yùn)行的是64位的Linux系統(tǒng).硬件參數(shù)分別為1.2GHz處理器與1G內(nèi)存.度量核心通過運(yùn)行于optee_os中的可信應(yīng)用TA模擬,實(shí)現(xiàn)初始化簽名密鑰對、哈希以及PCR(Platform Configuration Register)等操作,包括計(jì)算和擴(kuò)展用于模擬TPM_quote操作的PCR值.所有安全上下文都存儲在TrustZone安全RAM存儲區(qū)域中.
如章節(jié)3所述,如果待驗(yàn)證系統(tǒng)的內(nèi)核是可信的且未被更改的,并且其后運(yùn)行的所有程序?qū)嶓w都是可信的且未被更改的,則認(rèn)為系統(tǒng)當(dāng)前狀態(tài)是可信的.例如,Arun等人[23]使用動態(tài)哈希完整性檢查器在運(yùn)行時(shí)對所有歷史指令記錄執(zhí)行完整性檢查,以應(yīng)對TOC-TOU威脅.也就是說,未曾運(yùn)行過危險(xiǎn)程序或內(nèi)核異常狀態(tài)的系統(tǒng)當(dāng)前時(shí)刻的完整性狀態(tài)是可被信任的.
事實(shí)上,攻擊者可能實(shí)現(xiàn)的攻擊行為中,包括打開設(shè)備直接對硬件單元進(jìn)行更改,必定是以修改系統(tǒng)參數(shù)或越權(quán)運(yùn)行非法進(jìn)程作為最重要的一個標(biāo)志性成就.這意味著在可信計(jì)算領(lǐng)域,所有越權(quán)攻擊行為都將導(dǎo)致系統(tǒng)完整性的變化.因此,本文將諸如惡意軟件激活和配置參數(shù)修改之類的行為作為安全檢查觸發(fā)器是合理且可靠的.
下面通過具體的攻擊示例,分析本文提出的方法的動態(tài)完整性檢測能力.具體的,創(chuàng)建了一個簡單的Rootkit以實(shí)現(xiàn)系統(tǒng)調(diào)用表內(nèi)核函數(shù)的劫持.首先,通過kallsyms_lookup_name確定目標(biāo)函數(shù)的地址;其次,Rootkit程序利用系統(tǒng)提供的內(nèi)核熱補(bǔ)丁函數(shù)(aarch64_insn_patch_text)動態(tài)創(chuàng)建內(nèi)核Hook、插入Payload以及隱藏Module;最后,基于此Rootkit的加載與移除操作模擬了典型TOC-TOU攻擊中在兩次完整性檢查之間攻擊與恢復(fù)行為.
完整的TOC-TOU攻擊過程模擬如圖6所示,在Rootkit程序的執(zhí)行與移除操作之前分別驗(yàn)證了內(nèi)核符號表/proc/kallsyms的完整性,均能夠正確輸出其散列值,而在Rootkit運(yùn)行時(shí),由于在kallsyms_op符號內(nèi)存地址處添加了hook代碼,無法正確輸出內(nèi)核符號的信息.
圖6 TOC-TOU攻擊模擬示例
最后,通過查詢存儲度量列表中的完整性記錄驗(yàn)證攻擊過程是否造成了根節(jié)點(diǎn)的哈希值改變.本文在安全世界實(shí)現(xiàn)了一個完整性度量值的查詢組件,并向普通世界提供查詢接口.在攻擊的執(zhí)行與移除操作前后各執(zhí)行了一次度量值查詢操作,查詢結(jié)果顯示兩次查詢執(zhí)行時(shí)刻獲取到的相關(guān)內(nèi)核函數(shù)的散列值并未發(fā)生變更,然而發(fā)現(xiàn)在此過程中,查詢到的散列值記錄條數(shù)卻增加了.如圖7所示,在將Rootkit移除后,安全世界的度量更新組件記錄了符號kallsyms_op的一個歷史值.因此,保存在PCR中的根節(jié)點(diǎn)散列值會相應(yīng)地發(fā)生變更,最終影響完整性證明的結(jié)果.因此,ProbeIMA能夠有效的實(shí)現(xiàn)運(yùn)行時(shí)內(nèi)核完整性更新.
本節(jié)將對所提框架的系統(tǒng)原型的性能損失進(jìn)行評估.本文將對ProbeIMA在運(yùn)行過程中產(chǎn)生的世界切換進(jìn)行測量,重點(diǎn)評估使用探針機(jī)制帶來的開銷.
首先,將評估ProbeIMA對普通世界程序的運(yùn)行所造成的性能影響.在實(shí)驗(yàn)環(huán)境中實(shí)施了性能評估的有限模型,主要的作在于對安全監(jiān)視器模式中的觸發(fā)代理及安全世界中處理程序TA的程序開發(fā).由于OP-TEE項(xiàng)目中安全監(jiān)視器的執(zhí)行文件與安全操作系統(tǒng)的執(zhí)行文件是打包在一起的,即OP-TEE中安全監(jiān)視器無法脫離可信OS單獨(dú)加載,無法計(jì)算無效觸發(fā)時(shí)的時(shí)間消耗.因此,在實(shí)際的設(shè)計(jì)實(shí)驗(yàn)中,通過統(tǒng)計(jì)探針的放置數(shù)量,再根據(jù)不同階段執(zhí)行指令的比重來估算出不同觸發(fā)方式造成的時(shí)間開銷.
CostProbeIMA=TimesPT*CostPT+TimesNT*CostNT
(1)
ProbeIMA的總體時(shí)間成本計(jì)算方法如式(1)所示,TimesPT、TimesNT分別表示在系統(tǒng)運(yùn)行過程中累計(jì)發(fā)生的有效觸發(fā)和無效觸發(fā)的次數(shù),CostPT、CostNT則表示各自產(chǎn)生的時(shí)間延時(shí).
表1中顯示了原型系統(tǒng)的統(tǒng)計(jì)數(shù)據(jù).本文在普通世界的不可信操作系統(tǒng)中構(gòu)建了兩個用戶程序RA_Router和Test_App_CA,其中RA_Router用于轉(zhuǎn)發(fā)安全世界中的報(bào)告以及MTR與遠(yuǎn)程質(zhì)詢者之間的交互數(shù)據(jù),包括接收和轉(zhuǎn)發(fā)完整性質(zhì)詢和度量數(shù)據(jù).Test_App_CA是示例測試程序在普通世界運(yùn)行的部分.
表1 ProbeIMA數(shù)據(jù)統(tǒng)計(jì)結(jié)果
本文的實(shí)驗(yàn)?zāi)P筒⑽磳_的循環(huán)計(jì)數(shù)建模,而是跟蹤指令計(jì)數(shù).為了量化所提方案造成的效能開銷,真實(shí)測量了實(shí)驗(yàn)環(huán)境中普通世界系統(tǒng)內(nèi)核與程序運(yùn)行產(chǎn)生的時(shí)間延遲.進(jìn)一步,為實(shí)驗(yàn)環(huán)境設(shè)立了一組對照環(huán)境Baseline,在基準(zhǔn)測試中沒有放置探針指令,而是僅在安全環(huán)境中安裝了IMA組件.
記錄了在兩組環(huán)境中運(yùn)行的系統(tǒng)內(nèi)核、用戶程序RA_Router及用戶程序Test_App_CA的時(shí)間消耗數(shù)據(jù),如表2所示,系統(tǒng)內(nèi)核啟動階段造成的時(shí)間消耗約為0.35s,且用戶程序的啟動與運(yùn)行造成時(shí)間消耗非常小,滿足移動系統(tǒng)平臺的實(shí)際需要.最后,根據(jù)統(tǒng)計(jì)結(jié)果估算出的單次無效觸發(fā)的平均時(shí)延約為47μs,而單次有效觸發(fā)產(chǎn)生的平均時(shí)延為3.2ms.
表2 時(shí)間消耗測試結(jié)果(in seconds)
大量的移動設(shè)備使用基于ARM的專用集成電路,因此研究ARM體系結(jié)構(gòu)下的完整性認(rèn)證方案是必要的.為了構(gòu)建一個高效且經(jīng)濟(jì)的完整性度量框架,保證移動平臺的安全性,本文利用TrustZone的最高權(quán)限來實(shí)現(xiàn)可信的完整性度量與更新組件,所有安全性關(guān)鍵操作都在TEE中執(zhí)行,以使其具備出色的安全屬性.其次,提出了一種基于探針的動態(tài)測量機(jī)制ProbeIMA,能夠動態(tài)檢測內(nèi)核和進(jìn)程在運(yùn)行過程中出現(xiàn)的未知指紋,有效防御TOC-TOU攻擊并滿足預(yù)期的安全需求.與現(xiàn)有解決方案相比,所提出的解決方案具有更好的通用性,更適合于資源匱乏的低成本ARM移動終端.