鄧 銳 陳左寧
基于分立架構(gòu)的系統(tǒng)完整性保護(hù)模型
鄧 銳 陳左寧
(江南計(jì)算技術(shù)研究所 江蘇 無(wú)錫 214083)
針對(duì)現(xiàn)有的各類系統(tǒng)完整性保護(hù)方案在隔離性和可實(shí)現(xiàn)性的融合上的不足,提出一種兼顧隔離性和可實(shí)現(xiàn)性的基于分立架構(gòu)的系統(tǒng)完整性保護(hù)模型。對(duì)多核CPU架構(gòu)做較小改動(dòng),添加特權(quán)主核及其專有的頁(yè)保護(hù)安全功能擴(kuò)展,達(dá)到單顆CPU下監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)并行隔離獨(dú)立運(yùn)行。監(jiān)控系統(tǒng)運(yùn)行在主核上擁有更高特權(quán),且監(jiān)控功能不需要運(yùn)行在從核上的目標(biāo)系統(tǒng)的支持。監(jiān)控系統(tǒng)通過(guò)設(shè)置目標(biāo)系統(tǒng)內(nèi)核代碼頁(yè)保護(hù)、內(nèi)核數(shù)據(jù)頁(yè)不可執(zhí)行,以及內(nèi)核數(shù)據(jù)完整性掃描功能充分保障目標(biāo)系統(tǒng)內(nèi)核的完整性,而應(yīng)用層的完整性則可依托自身安全內(nèi)核來(lái)解決。該模型在隔離性和可實(shí)現(xiàn)性上達(dá)到了較好的平衡,并且使用Bochs進(jìn)行的模擬驗(yàn)證也表明該模型能夠有效保護(hù)系統(tǒng)的完整性。
完整性 分立架構(gòu) 多核 系統(tǒng)架構(gòu) 操作系統(tǒng)
計(jì)算機(jī)的信息安全必須從中央處理器、硬件結(jié)構(gòu)、操作系統(tǒng)和應(yīng)用軟件,從底層支撐到上層應(yīng)用,全盤考慮,綜合采取措施,提供整體解決方案。在系統(tǒng)完整性保護(hù)方面已有學(xué)者做了大量研究并提出了多種模型架構(gòu)和相關(guān)的實(shí)施方案。
近年來(lái)在這方面的成果,按照軟硬件結(jié)合的程度,模型對(duì)軟、硬件倚重的比例,初始可信部件、模型工作原理的差異性等因素分為如下幾類:
1) 強(qiáng)調(diào)硬件尤其是CPU部件的核心功能地位,幾乎所有的完整性保護(hù)功能實(shí)現(xiàn)在CPU內(nèi)部,典型的例子有XOM[1]、AGES[2]等。XOM實(shí)現(xiàn)了程序在內(nèi)存中的全密態(tài)運(yùn)行,即數(shù)據(jù)和指令只在CPU內(nèi)部以明文形式出現(xiàn),在內(nèi)存以密態(tài)形式存在,不同進(jìn)程在內(nèi)存中的加密密鑰均不同,均由CPU臨時(shí)產(chǎn)生??蓤?zhí)行程序在編譯生成時(shí)就使用對(duì)稱密碼進(jìn)行保護(hù),加密密鑰使用目標(biāo)CPU的公鑰進(jìn)行保護(hù),并在程序運(yùn)行中使用HMAC來(lái)防止對(duì)程序的篡改和破壞。但該模型高度依賴硬件的安全功能,對(duì)CPU硬件的改動(dòng)太大,系統(tǒng)運(yùn)行效率不高,需要從硬件到編譯器到操作系統(tǒng)的整體改造,至今仍停留在理論和仿真層面。AGES在機(jī)制上與XOM類似,但提供了更強(qiáng)的內(nèi)存完整性保護(hù),使用硬件加速的Hash樹來(lái)快速驗(yàn)證內(nèi)存的完整性?;谙嗤脑?,該模型也沒(méi)有得到實(shí)現(xiàn)和應(yīng)用。
2) 以可信計(jì)算技術(shù)[3]為基礎(chǔ)的完整性保護(hù)模型。這類模型以可信計(jì)算模塊TPM為硬件可信根,以可信度量為主要手段,綜合運(yùn)用可信啟動(dòng)、信任鏈傳遞、可信封存等技術(shù)來(lái)搭建完整性保護(hù)系統(tǒng)。典型的例子有IMA[4]、PRIMA[5]、BIND[6]、LKIM[7]、DIMA[8]等,這方面涌現(xiàn)了大量的研究和應(yīng)用嘗試。IMA和PRIMA專注于程序加載時(shí)的度量驗(yàn)證,屬于基本的靜態(tài)度量。BIND系統(tǒng)需要程序員自己決定度量點(diǎn)并插入其提供的hook接口,提高了度量精度,但加重了程序員負(fù)擔(dān),兼容性較差。LKIM以預(yù)定義的內(nèi)核變量的變化為事件來(lái)觸發(fā)度量驗(yàn)證,但這些事件未必能覆蓋所有的情況。DIMA使用度量代理來(lái)完成對(duì)進(jìn)程和模塊的度量,但主動(dòng)性和實(shí)時(shí)性有所不足。我們也在以前的工作中提出了PEDIAMA[9]模型,以策略嵌入為基礎(chǔ),增強(qiáng)了度量的主動(dòng)性和系統(tǒng)運(yùn)行效率,策略的制訂較為靈活。
3) 充分利用CPU提供的安全特性或者經(jīng)少許改造后得到的安全功能,典型的系統(tǒng)有Flicker[10]、LLM[11]和H-SVM[12]等。Flicker利用 CPU提供的安全功能支撐,即Intel的TXT[13]技術(shù)以及AMD的SVM[14]技術(shù),在執(zhí)行目標(biāo)程序時(shí)暫停整個(gè)操作系統(tǒng)的運(yùn)行,保證其有一個(gè)安全隔離的運(yùn)行環(huán)境。由于沒(méi)有操作系統(tǒng)的支持,受保護(hù)的程序必須進(jìn)行訂制,而且只能保護(hù)程序中的核心代碼片段。LLM系統(tǒng)假定每個(gè)CPU核都配有少量的私有本地內(nèi)存來(lái)運(yùn)行程序,外部共享主內(nèi)存和本地私有內(nèi)存間通過(guò)換頁(yè)(paging)來(lái)彌補(bǔ)空間不足,并通過(guò)在特權(quán)啟動(dòng)核core0上運(yùn)行安全換頁(yè)系統(tǒng)來(lái)保證運(yùn)行在core0上的監(jiān)控程序的安全,core0通過(guò)讀取其它CPU核的本地內(nèi)存來(lái)監(jiān)控運(yùn)行在其它核上的目標(biāo)系統(tǒng),LLM對(duì)軟硬件的改動(dòng)均較大。H-SVM通過(guò)額外的硬件設(shè)計(jì)把物理頁(yè)映射和換頁(yè)功能獨(dú)立出來(lái),并通過(guò)密碼技術(shù)保證虛擬機(jī)數(shù)據(jù)的完整性不受虛擬機(jī)監(jiān)控器的影響。
4) 利用虛擬化技術(shù),比如Terra[15]、HyperSafe[16]和Overshadow[17]。這類模型的共同特定是,利用CPU硬件提供的虛擬化技術(shù),將目標(biāo)系統(tǒng)運(yùn)行在虛擬層,而監(jiān)控程序運(yùn)行在更底層的虛擬管理層,并結(jié)合密碼技術(shù)等手段來(lái)保護(hù)系統(tǒng)或應(yīng)用的完整性。
5) 利用外接的設(shè)備來(lái)輔助監(jiān)控,典型的如Copilot[18]和Gibraltar[19]系統(tǒng)。其特點(diǎn)是利用外接設(shè)備將目標(biāo)系統(tǒng)和監(jiān)控系統(tǒng)進(jìn)一步隔離,Copilot和Gibraltar就是使用PCI卡通過(guò)DMA直接獲取主機(jī)內(nèi)存進(jìn)行分析,分析系統(tǒng)可直接實(shí)現(xiàn)在PCI卡上,也可將數(shù)據(jù)送到外部進(jìn)行處理。
以上的分類并不絕對(duì),各類模型所使用的技術(shù)也有交叉的情況??偟膩?lái)看,1)和3)對(duì)CPU硬件的依賴和改動(dòng)較大,2)和5)借助了外部硬件設(shè)備,但2)的軟硬結(jié)合比5)要緊;4)對(duì)硬件的要求最低,在主流商用處理器下就可實(shí)現(xiàn),軟硬件結(jié)合最為緊密,但更多的功能倚重于軟件,安全性相對(duì)較低。
這幾類模型各有側(cè)重,但核心的問(wèn)題是,在盡量保障監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)充分隔離的情況下,又不增加監(jiān)控和保護(hù)的實(shí)現(xiàn)難度,即監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)不能相互干擾,同時(shí)也要方便監(jiān)控和保護(hù)的實(shí)施。1)和3)注重了隔離,但系統(tǒng)實(shí)現(xiàn)比較困難;4)的實(shí)現(xiàn)相對(duì)容易,但是隔離性不夠,虛擬機(jī)監(jiān)控器容易被突破[20];2)和5)兼顧了隔離和可實(shí)現(xiàn)性,但是由于硬件上徹底分離,在監(jiān)控上不夠緊密,比如PCI卡的DMA可以被旁路,TPM只是個(gè)被動(dòng)部件,功能有限。
如何在隔離性和可實(shí)現(xiàn)性間進(jìn)行平衡是模型設(shè)計(jì)的一個(gè)難題。本文提出一種兼顧隔離性和可實(shí)現(xiàn)性的基于分立架構(gòu)的系統(tǒng)完整性保護(hù)模型。以多核CPU中主核(core0)的頁(yè)保護(hù)安全功能擴(kuò)展為基礎(chǔ),在主核上運(yùn)行監(jiān)控系統(tǒng),對(duì)其它從核上運(yùn)行的目標(biāo)系統(tǒng)進(jìn)行保護(hù)。目標(biāo)系統(tǒng)使用安全內(nèi)核,監(jiān)控系統(tǒng)能保證目標(biāo)系統(tǒng)安全內(nèi)核的完整性,而安全內(nèi)核則向上支撐應(yīng)用系統(tǒng)的完整性,從而實(shí)現(xiàn)整體的完整性保護(hù)。監(jiān)控系統(tǒng)完全隔離和獨(dú)立于目標(biāo)系統(tǒng),同時(shí)也能啟動(dòng)和復(fù)位目標(biāo)系統(tǒng),并能讀取目標(biāo)系統(tǒng)的內(nèi)存。這樣就達(dá)到了既“分立”又監(jiān)控的目標(biāo),同時(shí)由于監(jiān)控系統(tǒng)主要保證安全內(nèi)核的完整性,應(yīng)用系統(tǒng)的完整性主要由安全內(nèi)核完成,且該模型對(duì)硬件的改造較少,因此在可實(shí)現(xiàn)性也不會(huì)有過(guò)多負(fù)擔(dān)。本模型在隔離性和可實(shí)現(xiàn)性上達(dá)到了較好的平衡。
1.1 設(shè)計(jì)思想
如果監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)沒(méi)有做到充分隔離,比如監(jiān)控系統(tǒng)依賴于目標(biāo)系統(tǒng)內(nèi)核的某些功能,則只要目標(biāo)內(nèi)核被侵入,監(jiān)控系統(tǒng)就有可能失效。因此必須做到監(jiān)控系統(tǒng)充分獨(dú)立于目標(biāo)系統(tǒng)。獨(dú)立造成的后果就是監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)之間的聯(lián)系和交互會(huì)很少,甚至沒(méi)有,這就對(duì)監(jiān)控造成了較大困難,所以在獨(dú)立的同時(shí)還要保證監(jiān)控的有效性。
考慮現(xiàn)在大多數(shù)對(duì)目標(biāo)系統(tǒng)造成較大破壞的惡意程序,均是以掌控系統(tǒng)內(nèi)核為基礎(chǔ),往往更難以發(fā)現(xiàn)和清除。如果能夠保證目標(biāo)系統(tǒng)內(nèi)核的完整性,則應(yīng)用層面的完整性大都可以在系統(tǒng)內(nèi)核的支撐下完成。因此只要監(jiān)控系統(tǒng)能保證目標(biāo)系統(tǒng)內(nèi)核的完整性,則其余的工作均可以直接在目標(biāo)系統(tǒng)上實(shí)現(xiàn)。由于二者的獨(dú)立性,監(jiān)控系統(tǒng)很難得到目標(biāo)系統(tǒng)的運(yùn)行時(shí)狀態(tài)等相關(guān)信息,這樣做也彌補(bǔ)了獨(dú)立性帶來(lái)的問(wèn)題。
1.2 硬件支撐
首先CPU應(yīng)具備多核、分頁(yè)、進(jìn)程隔離、特權(quán)級(jí)等主流CPU(如X86系列)的特性。CPU應(yīng)該有一個(gè)主核core0是整個(gè)CPU的啟動(dòng)核,具有最高的權(quán)限,能夠啟動(dòng)、停止和復(fù)位其他從核。主核啟動(dòng)時(shí),將從內(nèi)存中劃分一塊區(qū)域由自己獨(dú)占使用,其他從核將無(wú)法訪問(wèn)這片區(qū)域,主機(jī)上的所有內(nèi)存對(duì)主核可見。主核且只有主核可以標(biāo)記內(nèi)核級(jí)代碼頁(yè),使得所有核上對(duì)內(nèi)核級(jí)代碼頁(yè)的寫入和內(nèi)核數(shù)據(jù)頁(yè)上的執(zhí)行都會(huì)在主核上產(chǎn)生異常。主核具備類似IOMMU的功能,以防止關(guān)鍵內(nèi)存受到DMA的破壞,從核不具備該項(xiàng)功能。主核啟動(dòng)后,將從外部(比如ROM和FLASH)中加載一個(gè)微型的監(jiān)控系統(tǒng),該監(jiān)控系統(tǒng)負(fù)責(zé)在其它從核上加載目標(biāo)系統(tǒng)。目標(biāo)系統(tǒng)加載之后就獨(dú)立于監(jiān)控系統(tǒng)開始自主運(yùn)行,至此,監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)之間將完全獨(dú)立,也不會(huì)有任何后續(xù)信息交互。另外,為了方便目標(biāo)系統(tǒng)上的完整性保護(hù)應(yīng)用實(shí)現(xiàn),在硬件上還應(yīng)配備相應(yīng)的密碼模塊,如TPM或TCM,以實(shí)現(xiàn)加密、數(shù)字簽名、HASH等基礎(chǔ)功能。
1.3 主要監(jiān)控原理
監(jiān)控系統(tǒng)的主要任務(wù)就是保證目標(biāo)系統(tǒng)內(nèi)核(這里以Linux為例)的完整性。由于Linux操作系統(tǒng)內(nèi)核在編譯生成時(shí),其在內(nèi)存中的物理加載地址是確定的,其代碼段、數(shù)據(jù)段、全局內(nèi)核變量等數(shù)據(jù)結(jié)構(gòu)的地址均可以在System.map文件中確定。因此監(jiān)控系統(tǒng)不需要和目標(biāo)系統(tǒng)進(jìn)行交互,就能事先確定大部分所需信息。
內(nèi)核的完整性包括載入時(shí)完整性和運(yùn)行時(shí)完整性,而運(yùn)行時(shí)完整性又包括代碼完整性和數(shù)據(jù)完整性。載入時(shí)完整性屬于靜態(tài)完整性,只需要主核在從核上加載目標(biāo)系統(tǒng)內(nèi)核之前對(duì)其進(jìn)行完整性驗(yàn)證即可,比如計(jì)算HASH值,然后和基準(zhǔn)值進(jìn)行對(duì)比。運(yùn)行時(shí)完整性分為兩個(gè)方面,代碼完整性依賴于硬件支撐,即主核對(duì)所有的內(nèi)核代碼頁(yè)進(jìn)行標(biāo)定,這些物理頁(yè)的地址可以通過(guò)System.map文件事先確定。如果有破壞代碼頁(yè)完整性的行為發(fā)生,即內(nèi)核代碼頁(yè)發(fā)生寫入操作,就會(huì)在主核上產(chǎn)生異常,破壞行為隨即被發(fā)現(xiàn),這樣就保證了代碼頁(yè)的完整性。另外,由于LKM模式加載的內(nèi)核模塊的代碼頁(yè)是動(dòng)態(tài)分配的,主核無(wú)法得知其地址,也就無(wú)法對(duì)其進(jìn)行標(biāo)記,因此加載的模塊一旦執(zhí)行就會(huì)在主核產(chǎn)生異常(未被標(biāo)記的內(nèi)核頁(yè)被認(rèn)為是數(shù)據(jù)頁(yè),即在內(nèi)核數(shù)據(jù)頁(yè)上執(zhí)行),所以目標(biāo)操作系統(tǒng)將不支持LKM。而運(yùn)行時(shí)的數(shù)據(jù)完整性是通過(guò)類似Gibraltar[19]的技術(shù)來(lái)保證的。通過(guò)事先采集和規(guī)約的內(nèi)核“不變量”作為基準(zhǔn),定時(shí)的掃描目標(biāo)系統(tǒng)物理頁(yè),從中提取出檢測(cè)項(xiàng)進(jìn)行對(duì)比,如果不一致,則表示內(nèi)核的數(shù)據(jù)完整性遭到破壞。這里的“不變量”的形式可以多樣,可以是具體的數(shù)據(jù)常量,比如系統(tǒng)調(diào)用表里的函數(shù)地址,驅(qū)動(dòng)程序里的函數(shù)指針等;也可以是數(shù)據(jù)的大小、相等關(guān)系,集合的屬于關(guān)系,比如某個(gè)數(shù)據(jù)的取值只能在某個(gè)集合之內(nèi);還可以是鏈表項(xiàng)的長(zhǎng)度等。只要事先進(jìn)行“不變量”的采集和基準(zhǔn)制作,就能在后續(xù)的定時(shí)掃描中發(fā)現(xiàn)針對(duì)這些“不變量”的攻擊,從而保證運(yùn)行時(shí)內(nèi)核數(shù)據(jù)的完整性。另外,由于主核只對(duì)目標(biāo)系統(tǒng)內(nèi)核的固有代碼頁(yè)進(jìn)行了標(biāo)定,其他未被標(biāo)定的內(nèi)核頁(yè)均認(rèn)為是數(shù)據(jù)頁(yè),而在數(shù)據(jù)頁(yè)上執(zhí)行代碼是會(huì)產(chǎn)生異常的,所以任何通過(guò)緩沖區(qū)溢出來(lái)觸發(fā)內(nèi)核shellcode的企圖都會(huì)失敗,這也進(jìn)一步保證了外來(lái)惡意代碼無(wú)法在內(nèi)核執(zhí)行。這樣監(jiān)控系統(tǒng)就保證了目標(biāo)系統(tǒng)內(nèi)核在加載時(shí)和運(yùn)行時(shí)的全生命周期的完整性。
在保證目標(biāo)系統(tǒng)內(nèi)核完整性的基礎(chǔ)上,目標(biāo)系統(tǒng)內(nèi)其他部分的完整性保護(hù)可以依托自身解決?,F(xiàn)有的各種完整性保護(hù)模型都可以結(jié)合進(jìn)來(lái),比如可信度量技術(shù)、針對(duì)進(jìn)程頁(yè)交換的頁(yè)加密保護(hù)技術(shù)、白名單技術(shù)、加密文件系統(tǒng)、各類訪問(wèn)控制模型等。這里作為示例,采用的是我們?cè)谝郧暗墓ぷ髦刑岢龅腜EDIAMA[9]架構(gòu),但針對(duì)本文的模型做了少許改動(dòng),比如將相應(yīng)LKM模塊直接編譯進(jìn)內(nèi)核,可信啟動(dòng)流程的簡(jiǎn)化等。
整個(gè)模型的架構(gòu)如圖1所示,分為監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)兩個(gè)部分。監(jiān)控系統(tǒng)運(yùn)行在CPU的主核上,主核從外部導(dǎo)入固件系統(tǒng)運(yùn)行,并通過(guò)輸入輸出接口,比如串口,進(jìn)行命令輸入、信息輸出、固件燒寫和更新等工作。監(jiān)控系統(tǒng)可以訪問(wèn)全部物理內(nèi)存,但也有自己獨(dú)占的內(nèi)存區(qū)域。監(jiān)控系統(tǒng)是一個(gè)輕量級(jí)的單任務(wù)系統(tǒng),主要負(fù)責(zé)周期性的掃描目標(biāo)系統(tǒng)的物理內(nèi)存。目標(biāo)系統(tǒng)運(yùn)行在其他從核上,只能訪問(wèn)除主核獨(dú)占區(qū)外的其它內(nèi)存區(qū)。目標(biāo)操作系統(tǒng)通過(guò)外圍的密碼部件,如TPM或TCM,輔助實(shí)現(xiàn)其他完整性保護(hù)應(yīng)用。監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)各自獨(dú)立運(yùn)行,沒(méi)有信息交互,對(duì)外設(shè)的訪問(wèn)在運(yùn)行時(shí)也不交叉。
圖1 模型架構(gòu)圖
2.1 監(jiān)控系統(tǒng)工作流程
系統(tǒng)啟動(dòng)時(shí),CPU的主核作為啟動(dòng)核從外部導(dǎo)入固件先運(yùn)行,固件第一時(shí)間掃描整個(gè)物理內(nèi)存,并從中劃出一塊供主核獨(dú)占使用(比如內(nèi)存高地址的最后一部分),該部分內(nèi)存對(duì)其他從核不可見。隨后固件從外部讀取目標(biāo)系統(tǒng)內(nèi)核文件,這里系統(tǒng)內(nèi)核文件可以存放在硬盤上,甚至也可以存放在主核一端的FLASH里,這均可以根據(jù)具體的應(yīng)用需求來(lái)訂制。在完成對(duì)目標(biāo)系統(tǒng)內(nèi)核文件的完整性檢查后,將其加載進(jìn)目標(biāo)物理內(nèi)存,對(duì)系統(tǒng)內(nèi)核的代碼頁(yè)進(jìn)行標(biāo)定,并對(duì)相關(guān)內(nèi)核頁(yè)進(jìn)行DMA保護(hù)。隨后啟動(dòng)其余從核,目標(biāo)系統(tǒng)自行進(jìn)入加載流程開始獨(dú)立運(yùn)行。而主核隨即進(jìn)入運(yùn)行時(shí)監(jiān)控狀態(tài),定時(shí)掃描目標(biāo)系統(tǒng)相關(guān)內(nèi)存頁(yè),檢查系統(tǒng)內(nèi)核的數(shù)據(jù)完整性。一旦發(fā)生異常告警,或者在掃描中發(fā)現(xiàn)內(nèi)核數(shù)據(jù)完整性遭到破壞,則監(jiān)控系統(tǒng)將立即停止所有從核運(yùn)行,并在輸入輸出接口輸出相關(guān)告警信息,然后等待后續(xù)的命令,或者延時(shí)一段時(shí)間后對(duì)整機(jī)進(jìn)行復(fù)位。
2.2 目標(biāo)系統(tǒng)工作流程
在從核啟動(dòng)后,目標(biāo)系統(tǒng)內(nèi)核就已經(jīng)加載在內(nèi)存固定地址,從核即從系統(tǒng)內(nèi)核開始啟動(dòng)整個(gè)操作系統(tǒng)。目標(biāo)系統(tǒng)和監(jiān)控系統(tǒng)完全隔離,因此完全感知不到監(jiān)控系統(tǒng)的存在,由于二者之間沒(méi)有任何信息交互,目標(biāo)系統(tǒng)幾乎不用做任何更改就可以直接運(yùn)行在本模型中。為了向上支撐應(yīng)用層的完整性保護(hù)需求,目標(biāo)系統(tǒng)上可以使用現(xiàn)有的各類完整性保護(hù)架構(gòu),由于操作系統(tǒng)內(nèi)核的完整性是有保障的,這使得上層的完整性保護(hù)架構(gòu)在設(shè)計(jì)和實(shí)現(xiàn)上都要簡(jiǎn)化很多。作為示例,這里采用PEDIAMA[9]架構(gòu),并做了少許改造,整個(gè)架構(gòu)如圖2所示,這里省略了原架構(gòu)中對(duì)內(nèi)核模塊的度量支持,因?yàn)楸灸P椭心繕?biāo)系統(tǒng)不支持LKM模塊加載。
圖2 PEDIAMA架構(gòu)圖
PEDIAMA分為應(yīng)用層的策略管理、日志審計(jì)部分和內(nèi)核層的度量核心處理部分。應(yīng)用層的部分主要負(fù)責(zé)和系統(tǒng)用戶之間的管理交互工作,內(nèi)核層的部分負(fù)責(zé)策略的提取與應(yīng)用、動(dòng)態(tài)度量和結(jié)果報(bào)告。PEDIAMA的主體工作都在內(nèi)核層完成。整個(gè)架構(gòu)的運(yùn)作以TPM為基礎(chǔ)支撐,以可信啟動(dòng)來(lái)保證初始運(yùn)行環(huán)境的完整性。由于目標(biāo)系統(tǒng)加載方式的變化,可信啟動(dòng)的具體流程也要稍做調(diào)整,比如可直接從系統(tǒng)內(nèi)核后面的部分開始進(jìn)行度量。應(yīng)用程序加載時(shí),PEDIAMA會(huì)進(jìn)行截獲,并從應(yīng)用程序中提取度量策略,進(jìn)而對(duì)程序的初始狀態(tài)進(jìn)行度量,以保證其靜態(tài)初始可信。然后動(dòng)態(tài)度量模塊對(duì)度量策略實(shí)施部署和應(yīng)用,以保證程序在運(yùn)行中的完整性,更具體的內(nèi)容請(qǐng)參考文獻(xiàn)[9]。
3.1 安全性分析
模型的安全性有兩個(gè)方面,一個(gè)是監(jiān)控系統(tǒng)自身的安全性。首先是監(jiān)控系統(tǒng)自身的安全性,由于監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)采用分立的架構(gòu),各自獨(dú)立運(yùn)行,沒(méi)有任何信息交互,亦即監(jiān)控系統(tǒng)不會(huì)受到目標(biāo)系統(tǒng)的干擾,因此監(jiān)控系統(tǒng)的安全性完全取決于自身。而監(jiān)控系統(tǒng)上僅運(yùn)行的是一個(gè)輕量級(jí)的物理內(nèi)存掃描和檢測(cè)程序,任務(wù)單一,結(jié)構(gòu)簡(jiǎn)單,與外界幾乎沒(méi)有任何數(shù)據(jù)交互,因此監(jiān)控系統(tǒng)完全是一個(gè)自封閉的系統(tǒng),其安全性是有保障的。
另一方面是目標(biāo)系統(tǒng)的完整性。目標(biāo)系統(tǒng)內(nèi)核的完整性由監(jiān)控系統(tǒng)來(lái)保證,其中內(nèi)核代碼頁(yè)的完整性由主核的硬件頁(yè)保護(hù)機(jī)制直接支撐,內(nèi)核數(shù)據(jù)的完整性則通過(guò)定時(shí)掃描檢測(cè)“不變量”條件來(lái)保證。系統(tǒng)內(nèi)核之外的其他部分的完整性由目標(biāo)系統(tǒng)自身來(lái)完成,在內(nèi)核完整性的強(qiáng)有力支撐下,應(yīng)用層的完整性相對(duì)容易做到?,F(xiàn)有的各種完整性保護(hù)模型均可結(jié)合進(jìn)來(lái),作為示例的PEDIAMA架構(gòu),度量策略比較靈活,能夠依據(jù)策略對(duì)進(jìn)程進(jìn)行動(dòng)態(tài)度量,保障應(yīng)用的完整性。
3.2 模型比較
按照前面的分類,本模型大體可歸為第3類,同LLM有相似之處,但在模型硬件架構(gòu)和工作原理上有較大區(qū)別。主要區(qū)別在于,本模型對(duì)硬件的改造較小,主要是加入了特權(quán)主核及其對(duì)內(nèi)核頁(yè)的標(biāo)記和保護(hù),而LLM對(duì)軟硬件的改造均較大,不僅加入了特權(quán)主核,還要求每個(gè)核都有本地內(nèi)存,程序均在本地內(nèi)存執(zhí)行。這個(gè)設(shè)計(jì)只是為了方便安全換頁(yè)程序的駐留及其對(duì)監(jiān)控系統(tǒng)的保護(hù),對(duì)目標(biāo)系統(tǒng)意義不大。而安全換頁(yè)程序的存在也是因?yàn)楸O(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)共享外部?jī)?nèi)存,監(jiān)控系統(tǒng)數(shù)據(jù)可能被篡改,隔離性不夠。LLM對(duì)目標(biāo)系統(tǒng)的完整性保護(hù)全部依賴于監(jiān)控系統(tǒng)的內(nèi)存掃描功能,比較單薄,而本模型則分解為從底向上支撐的幾個(gè)部分,硬件支撐內(nèi)核代碼頁(yè)保護(hù)、數(shù)據(jù)頁(yè)不可執(zhí)行及DMA保護(hù)。引入“不變量”特性的內(nèi)存掃描系統(tǒng)僅需關(guān)注內(nèi)核的數(shù)據(jù)完整性,而目標(biāo)系統(tǒng)的應(yīng)用完整性則依托自身安全內(nèi)核及其完整性來(lái)解決。因此本模型在軟硬件實(shí)現(xiàn)、保護(hù)有效性等方面較LLM有一定優(yōu)勢(shì)。
3.3 模型缺點(diǎn)
由于無(wú)法獲得動(dòng)態(tài)加載內(nèi)核模塊的地址,所以本模型無(wú)法支持LKM,這將造成系統(tǒng)內(nèi)核過(guò)于龐大,而且每添加一個(gè)新設(shè)備或者更新一個(gè)驅(qū)動(dòng)程序都需要重新訂制內(nèi)核,并相應(yīng)刷新監(jiān)控端的內(nèi)核數(shù)據(jù)信息。由于同樣的限制,模型也無(wú)法將針對(duì)內(nèi)核代碼頁(yè)的保護(hù)機(jī)制延伸到應(yīng)用層的進(jìn)程代碼頁(yè),對(duì)應(yīng)用層進(jìn)程代碼頁(yè)的保護(hù)可依靠目標(biāo)操作系統(tǒng)內(nèi)核來(lái)完成。如果在監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)間增加接口,目標(biāo)系統(tǒng)可以向監(jiān)控系統(tǒng)提出申請(qǐng),將某塊內(nèi)存標(biāo)記為可執(zhí)行,是可以解決地址定位問(wèn)題的,但該接口可能變成新的攻擊點(diǎn),比如被惡意使用,使得作為數(shù)據(jù)傳送進(jìn)內(nèi)核的惡意代碼得以執(zhí)行。因此如何分辯這些申請(qǐng)的合法性又變成了難題。
監(jiān)控系統(tǒng)在發(fā)現(xiàn)問(wèn)題時(shí)的善后處理不夠完善。在發(fā)現(xiàn)問(wèn)題時(shí),監(jiān)控系統(tǒng)掛起了所有的從核,系統(tǒng)管理員可以dump出目標(biāo)系統(tǒng)的內(nèi)存,甚至可以在異常發(fā)生時(shí)獲得各從核的寄存器值,然后進(jìn)行后續(xù)的離線分析。但是對(duì)于目標(biāo)系統(tǒng)正在完成的工作卻無(wú)法保留和善后,比如待寫入磁盤的數(shù)據(jù)等。這可能會(huì)造成目標(biāo)系統(tǒng)應(yīng)用數(shù)據(jù)的丟失甚至導(dǎo)致目標(biāo)系統(tǒng)無(wú)法在下次啟動(dòng)時(shí)正常運(yùn)作。
以上的問(wèn)題都是由于采用了分立的架構(gòu),監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)隔離地十分徹底,缺少信息交互所造成的。本模型在充分保證隔離性和獨(dú)立性的同時(shí)犧牲了部分靈活性。
由于完全符合本模型要求的硬件還不存在,按照本文所依托基金項(xiàng)目的進(jìn)度安排,還處于部分功能的FPGA仿真驗(yàn)證階段,對(duì)模型只能進(jìn)行主要功能的模擬驗(yàn)證。由于目標(biāo)系統(tǒng)上使用的PEDIAMA架構(gòu)已經(jīng)在文獻(xiàn)[9]中驗(yàn)證過(guò)了,所以這里只需要驗(yàn)證監(jiān)控系統(tǒng)對(duì)目標(biāo)操作系統(tǒng)內(nèi)核的保護(hù)功能。我們使用Bochs 2.2.1系統(tǒng),對(duì)模型的主要功能進(jìn)行了驗(yàn)證,模擬的硬件平臺(tái)是32 bit的X86平臺(tái),配置128 MB物理內(nèi)存。我們把監(jiān)控系統(tǒng)的功能直接融合進(jìn)Bochs系統(tǒng),目標(biāo)系統(tǒng)使用RedHat 7.2(考慮驗(yàn)證效率,選擇該版本,并進(jìn)行最簡(jiǎn)安裝),內(nèi)核2.4.18版本,為了方便驗(yàn)證,加入了LKM支持。驗(yàn)證的內(nèi)容包括內(nèi)核代碼頁(yè)保護(hù)、內(nèi)核數(shù)據(jù)頁(yè)不可執(zhí)行、內(nèi)核數(shù)據(jù)完整性。
通過(guò)查看系統(tǒng)相關(guān)文件,可以確定內(nèi)核的代碼頁(yè)范圍,只要在內(nèi)核層運(yùn)行的代碼不在這個(gè)范圍就需要告警,這樣就保證了內(nèi)核數(shù)據(jù)頁(yè)不可執(zhí)行。注意,內(nèi)核的初始準(zhǔn)備代碼可能不在該范圍內(nèi),監(jiān)測(cè)時(shí)需要跳過(guò),比如剛啟動(dòng)時(shí)的實(shí)模式代碼、保護(hù)模式準(zhǔn)備代碼等。對(duì)于內(nèi)核代碼頁(yè)的保護(hù),只需要關(guān)注內(nèi)存寫入,如果是內(nèi)核代碼頁(yè)范圍就要告警。而對(duì)于內(nèi)核數(shù)據(jù)完整性,需要在Bochs系統(tǒng)內(nèi)定時(shí)掃描目標(biāo)系統(tǒng)的模擬物理內(nèi)存并進(jìn)行檢測(cè)。
為了把監(jiān)控系統(tǒng)加入Bochs,我們對(duì)其代碼做了部分修改。數(shù)據(jù)頁(yè)不可執(zhí)行功能是在Bochs的函數(shù)void BX_CPU_C::cpu_loop(Bit32s max_instr_count) 內(nèi)部實(shí)現(xiàn)的,由于Bochs是譯碼一條指令就立即執(zhí)行的,比如對(duì)于非重復(fù)指令(重復(fù)指令類似),譯碼完成后執(zhí)行過(guò)程如下:RIP += i->ilen(); BX_CPU_CALL_METHOD(execute, (i)); 首先更改指令指針,然后執(zhí)行指令。因此可以在每次執(zhí)行指令前對(duì)RIP進(jìn)行檢查,如果處于內(nèi)核層并且不在內(nèi)核代碼頁(yè)范圍內(nèi)則給出告警提示。
對(duì)代碼頁(yè)的保護(hù)是在函數(shù)BX_MEM_C::writePhysicalPage(BX_CPU_C *cpu, Bit32u addr, unsigned len, void *data)內(nèi)部實(shí)現(xiàn)的。所有對(duì)內(nèi)存的寫操作最終都會(huì)調(diào)用這個(gè)函數(shù),因此只需要對(duì)參數(shù)addr做范圍檢查,如果在代碼頁(yè)的物理地址范圍,則進(jìn)行告警。
對(duì)于內(nèi)核數(shù)據(jù)完整性檢測(cè),也是在cpu_loop函數(shù)里面完成的,每執(zhí)行完一定數(shù)量的指令,比如10萬(wàn)條,就對(duì)目標(biāo)系統(tǒng)內(nèi)核的相關(guān)數(shù)據(jù)頁(yè)進(jìn)行掃描和檢查。在實(shí)際驗(yàn)證中,檢測(cè)的“不變量”包括系統(tǒng)調(diào)用表、中斷向量表、VFS功能函數(shù)指針等。
在測(cè)試中我們自己編寫了一個(gè)惡意內(nèi)核模塊,根據(jù)實(shí)驗(yàn)內(nèi)容的不同,它會(huì)去修改系統(tǒng)調(diào)用表的sys_open函數(shù)地址為該模塊自身的一個(gè)函數(shù)地址,或者改寫函數(shù)sys_kill的部分指令代碼為0x90(nop指令)。首先我們以LKM方式加載該模塊,發(fā)現(xiàn)在加載后執(zhí)行該模塊的module_init()函數(shù)時(shí)Bochs系統(tǒng)告警,即執(zhí)行該模塊的第一條指令時(shí)就告警了,做到了內(nèi)核數(shù)據(jù)頁(yè)不可執(zhí)行。然后我們把該模塊編譯進(jìn)內(nèi)核,在該模塊修改sys_kill指令代碼時(shí),Bochs系統(tǒng)進(jìn)行了告警;在該模塊惡意修改sys_open函數(shù)地址后,cpu_loop函數(shù)里的定時(shí)掃描檢測(cè)程序也發(fā)現(xiàn)了該次攻擊,代碼頁(yè)保護(hù)和內(nèi)核數(shù)據(jù)完整性保護(hù)均得到了驗(yàn)證。其實(shí)在代碼頁(yè)保護(hù)及數(shù)據(jù)頁(yè)不可執(zhí)行的情況下,除非內(nèi)核代碼自身的問(wèn)題,內(nèi)核重要數(shù)據(jù)很難被篡改,惡意代碼沒(méi)有進(jìn)入內(nèi)核執(zhí)行的機(jī)會(huì)。
通過(guò)分析現(xiàn)有的各類系統(tǒng)完整性保護(hù)方案,提出了基于分立架構(gòu)的系統(tǒng)完整保護(hù)模型。該模型通過(guò)對(duì)現(xiàn)有多核CPU硬件架構(gòu)做較小改動(dòng),實(shí)現(xiàn)單顆CPU下監(jiān)控系統(tǒng)和目標(biāo)系統(tǒng)并行隔離獨(dú)立運(yùn)行,監(jiān)控系統(tǒng)比目標(biāo)系統(tǒng)擁有更高特權(quán),且監(jiān)控功能不需要目標(biāo)系統(tǒng)支持。通過(guò)監(jiān)控系統(tǒng)設(shè)置目標(biāo)系統(tǒng)內(nèi)核代碼頁(yè)保護(hù)、數(shù)據(jù)頁(yè)不可執(zhí)行,以及內(nèi)核數(shù)據(jù)完整性掃描等手段充分保障目標(biāo)系統(tǒng)內(nèi)核的完整性。在內(nèi)核完整性的基礎(chǔ)上,系統(tǒng)應(yīng)用層的完整性則可依托自身來(lái)解決,作為示例,模型中采用PEDIAMA架構(gòu)來(lái)保障應(yīng)用的完整性。使用Bochs對(duì)模型的主要功能進(jìn)行了模擬驗(yàn)證,實(shí)驗(yàn)表明監(jiān)控系統(tǒng)能檢測(cè)出針對(duì)系統(tǒng)內(nèi)核的完整性攻擊,結(jié)合文獻(xiàn)[9]對(duì)PEDIAMA架構(gòu)的驗(yàn)證,整個(gè)模型能夠有效保護(hù)系統(tǒng)的完整性。
[1] Lie D,Thekkath C A,Mitchell M,et al.Architectural Support for Copy and Tamper Resistant Software[C]//Proc of the ninth international conference on Architectural support for programming languages and operating systems,Massachusetts:Cambridge,2000:168-177.
[2] Suh G E,O’donnell C W,Sachdev I,et al.Design and implementation of the AEGIS single-chip secure processor using physical random functions[C]//Proc of the 32nd Annual International Symposium on Computer Architecture,New York: IEEE Press,2005:25-36.
[3] 沈昌詳,張煥國(guó),馮登國(guó),等.信息安全綜述[J].中國(guó)科學(xué)E輯:信息科學(xué),2007,37(2):129-150.
[4] Sailer R,Zhang X L,Jaeger T,et al.Design and implementation of a TCG-based integrity measurement architecture[C]//Proc of USENIX Security Symposium.California:ACM,2004:223-238.
[5] Jaeger T,Sailer R,Shankar U.PRIMA:Policy-reduced integrity measurement architecture[C]//Proc of the eleventh ACM symposium on Access control models and technologies.California:ACM,2006:19-28.
[6] Shi E,Perrig A,Van Doorn L.BIND:A fine-grained attestation service for secure distributed systems[C]//Proc of the IEEE Symposium on Security and Privacy.Oakland:IEEE Press,2005:154-168.
[7] Loscocco P A,Wilson P W,Pendergrass J A,et al,Linux kernel integrity measurement using contextual inspection[C]//Proc of the 2007 ACM workshop on Scalable trusted computing.Virginia:ACM,2007:21-29.
[8] 劉孜文,馮登國(guó).基于可信計(jì)算的動(dòng)態(tài)完整性度量架構(gòu)[J].電子與信息學(xué)報(bào),2010,32(4):875-879.
[9] 鄧銳,陳左寧.基于策略嵌入和可信計(jì)算的完整性主動(dòng)動(dòng)態(tài)度量架構(gòu)[J].計(jì)算機(jī)應(yīng)用研究,2013,30(1):261-264.
[10] Mccune J M,Parno B,Perrig A,et al.Flicker:An Execution Infrastructure for TCB Minimization[C]//Proc of the 3rd ACM European Conference on Computer Systems, Glasgow:ACM,2008:315-328.
[11] Kinebuchi Y,Butt S,Ganapathy V,et al.Monitoring Integrity Using Limited Local Memory[J].IEEE Transactions on Information Forensics and Security,2013,8(7):1230-1242.
[12] Seongwook J,Jeongseob A,Sanghoon C,et al.Architectural Support for Secure Virtualization under a Vulnerable Hypervisor[C] //The 44th Annual IEEE/ACM International Symposium on Microarchitecture,Porto Alegre:ACM,2011:937-949.
[13] Intel Corporation.Trusted eXecution Technology-preliminary architecture specification and enabling considerations.No.31516803[R].Santa Clara:Intel,2006.
[14] Advanced Micro Devices.AMD64 Architecture Programmer’s Manual Volume 2:System Programming,No.24593[R].Sunnyvale:AMD 2010.
[15] Tal G,B Pfa,J Chow,et al.Terra:A virtual machine based platform for trusted computing[C]//Proc of the Symposium on Operating System Principles,New York:ACM,2003:193-206.
[16] Wang Zhi,Jiang Xuxian.HyperSafe:A lightweight approach to provide lifetime hypervisor control-flow integrity[C]//IEEE Symposium on Security and Privacy,Oakland:IEEE,2010:380-395.
[17] Chen X X,Tal G,Lewis E,et al.Overshadow: A virtualization-based approach to Retrofitting protection in commodity operating systems[C]//Proc of the ACM Conference on Architectural Support for Programming Languages and Operating Systems,Washington:ACM,2008:2-13.
[18] Petroni N,Fraser T,Molina J,et al.Copilot:A coprocessor-based kernel runtime integrity monitor[C]//Proc of the 13th conference on USENIX Security Symposium.San Diego:Berkeley,2004:13-13.
[19] Arati B,Vinod G,Liviu L.Detecting Kernel-Level Rootkits Using Data Structure Invariants[J].IEEE Transactions on Dependable and Secure Computing,2011,8(5):670-684.
[20] Secunia Vulnerability Report:VMware ESX Server 4.x[EB/OL].[2014-07-20].http://secunia.com/advisories/product/25985/.
SCHISM ARCHITECTURE-BASED SYSTEM INTEGRITY PROTECTION MODEL
Deng Rui Chen Zuoning
(JiangnanInstituteofComputingTechnology,Wuxi214083,Jiangsu,China)
Focusing on the deficiency of various solutions of system integrity protection at present in integrating the isolation property and practicability, this paper presents a schism architecture-based system integrity protection model which takes both the isolation property and practicability into consideration. Through a minor revision to multi-core CPU architecture, and adding a privileged main core and the extension of its exclusive memory page protection security function, the parallel and independent running of the monitor system and the target system in isolation over a single CPU is achieved. The monitor running on main core has higher privilege, and its function doesn't need the support from the target system running on other cores. The monitor system can fully ensure the integrity of target system kernel by setting target system kernel code pages protection, kernel data page non-execution and kernel data integrity scanning function, while the integrity of applications level can be fixed by relying the security kernel in target system itself. The model achieves good balance between isolation property and practicability, and the prototype simulation by Bochs also shows that the proposed model can protect system’s integrity effectively.
Integrity Schism architecture Multi-core System architecture Operating system
2014-09-08。核高基重大專項(xiàng)(2011ZX01039-001-0 02)。鄧銳,工程師,主研領(lǐng)域:信息安全,可信計(jì)算,系統(tǒng)安全架構(gòu)。陳左寧,院士,教授。
TP309
A
10.3969/j.issn.1000-386x.2016.04.068