楊少鵬,陳 佳,馮中華
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
隨著全球信息化的飛速發(fā)展,網(wǎng)絡(luò)信息技術(shù)的持續(xù)演進(jìn),計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)成為當(dāng)今世界必不可少的高新技術(shù)之一。互聯(lián)網(wǎng)對(duì)整個(gè)經(jīng)濟(jì)社會(huì)發(fā)展的滲透、驅(qū)動(dòng)作用越來(lái)越明顯,帶來(lái)的風(fēng)險(xiǎn)挑戰(zhàn)也在不斷擴(kuò)大。
隨著《國(guó)家安全法》和《國(guó)家網(wǎng)絡(luò)空間安全戰(zhàn)略》的發(fā)布,以及近期發(fā)生的“斯諾登”事件、“震網(wǎng)”病毒攻擊、”勒索”病毒攻擊等安全事件,網(wǎng)絡(luò)空間安全技術(shù)已成為關(guān)系到國(guó)家利益和安全的核心技術(shù)。
網(wǎng)絡(luò)攻擊的基本步驟包括搜集信息、實(shí)施入侵、上傳程序、下載數(shù)據(jù)和保持訪問。研究表明,信息系統(tǒng)中主要的安全事件都源于不安全的終端。病毒、木馬、黑客等攻擊行為利用終端上的安全弱點(diǎn),在終端上發(fā)起攻擊,并通過網(wǎng)絡(luò)感染或破壞其他系統(tǒng)。例如,現(xiàn)在流行的APT 攻擊具有結(jié)構(gòu)復(fù)雜、手段高超、破壞嚴(yán)重、處理棘手、防范困難等特點(diǎn)。APT攻擊的手段主要是在目標(biāo)基礎(chǔ)上建立并擴(kuò)展立足點(diǎn)來(lái)獲取信息,在一個(gè)很長(zhǎng)的時(shí)間段內(nèi)潛伏并反復(fù)對(duì)目標(biāo)進(jìn)行攻擊,突破傳統(tǒng)安全系統(tǒng)的防御措施。
目前,有效的安全防御手段是“控”和“防”相互結(jié)合,從終端源頭進(jìn)行控制,對(duì)用戶行為規(guī)范進(jìn)行安全管理和控制,從系統(tǒng)層面進(jìn)行防御和預(yù)警。病毒、木馬、黑客等攻擊行為都是可執(zhí)行程序,所以終端層面的控制就是通過可執(zhí)行文件運(yùn)行控制,即計(jì)算機(jī)運(yùn)行可信。
計(jì)算機(jī)可信的主題思想是“行為的可預(yù)期性”,即通過可信根建立的一系列可信信任鏈,最后到應(yīng)用程序可信。這里的可信是相對(duì)于可信源(即度量值)來(lái)說(shuō)的,滿足預(yù)期的度量值即為可信。所以,在商用可信中,如何獲取度量值,從哪里開始比對(duì)度量值非常關(guān)鍵。操作系統(tǒng)啟動(dòng)時(shí),開始度量的階段越靠前,可信度越高,被篡改的機(jī)會(huì)越少。
目前,市面上使用的可信系統(tǒng)大多是基于硬件平臺(tái)設(shè)計(jì)的。可信系統(tǒng)通過增加額外的硬件、固件、中間件來(lái)實(shí)現(xiàn)操作系統(tǒng)的運(yùn)行可信。例如,可信BIOS 是對(duì)BIOS 進(jìn)行安全加固,是整個(gè)計(jì)算平臺(tái)安全的基石,只有保證BIOS 的安全可信,上層的操作系統(tǒng)和應(yīng)用程序才具有安全基礎(chǔ);可信平臺(tái)模塊(Trusted Platform Module,TPM)是基于安全芯片實(shí)現(xiàn)的可信,實(shí)現(xiàn)數(shù)字簽名、數(shù)據(jù)加解密和數(shù)據(jù)的訪問控制,主要實(shí)現(xiàn)硬件的可信度量[1]。
基于硬件的可信計(jì)算機(jī)系統(tǒng)在易用性和可靠性上還有所不足,主要表現(xiàn)在以下幾個(gè)方面。
(1)可信固件的改造和適配是一個(gè)復(fù)雜和長(zhǎng)期的工作,只有新定制的計(jì)算機(jī)才具有可信BIOS的能力,已經(jīng)在使用的計(jì)算機(jī)無(wú)法安裝可信BIOS。
(2)安全芯片存儲(chǔ)容量有限,內(nèi)部無(wú)法存儲(chǔ)大量摘要值,無(wú)法實(shí)現(xiàn)全覆蓋。
(3)外接硬件容易受到供電、工藝水平等影響,有時(shí)無(wú)法識(shí)別,影響使用性。
(4)市面上的可信計(jì)算系統(tǒng),在操作系統(tǒng)關(guān)鍵文件度量失敗后無(wú)法自動(dòng)完成修復(fù),操作系統(tǒng)無(wú)法進(jìn)入,影響系統(tǒng)的使用性和便捷性。
本文實(shí)現(xiàn)的可信系統(tǒng)軟件為純軟件形態(tài),以信任鏈傳遞技術(shù)為基礎(chǔ),通過軟件白名單技術(shù),實(shí)現(xiàn)對(duì)計(jì)算機(jī)操作系統(tǒng)文件和可執(zhí)行文件摘要值的度量,在系統(tǒng)啟動(dòng)過程中建立可信鏈,達(dá)到對(duì)用戶行為規(guī)范進(jìn)行安全管理和控制,同時(shí)起到有效防范惡意代碼的作用,確保運(yùn)行的程序都是合法的、可知的和可信的。
可信系統(tǒng)軟件是在現(xiàn)有計(jì)算機(jī)操作系統(tǒng)中安裝部署,不涉及硬件的改動(dòng)和操作系統(tǒng)的變動(dòng),在操作系統(tǒng)啟動(dòng)前開始度量,提高可信度。
操作系統(tǒng)的啟動(dòng)過程是一個(gè)復(fù)雜的過程,不同的操作系統(tǒng)具有相似但各不相同的啟動(dòng)方式和過程。系統(tǒng)啟動(dòng)是一個(gè)操作系統(tǒng)必經(jīng)的階段,是一個(gè)操作系統(tǒng)得以穩(wěn)定運(yùn)行的基礎(chǔ)。操作系統(tǒng)文件和內(nèi)核是操作系統(tǒng)的重要組件,運(yùn)行在操作系統(tǒng)上的程序無(wú)時(shí)無(wú)刻在與系統(tǒng)文件進(jìn)行交互。因此,操作系統(tǒng)文件和內(nèi)核的可信運(yùn)行對(duì)操作系統(tǒng)的安全增強(qiáng)至關(guān)重義。可執(zhí)行文件是計(jì)算機(jī)上運(yùn)行的單元,它們直接被用戶使用,是操作系統(tǒng)與用戶的接口。從安全角度上看,可執(zhí)行文件的運(yùn)行對(duì)操作系統(tǒng)安全構(gòu)成了威脅。
計(jì)算機(jī)系統(tǒng)的啟動(dòng)過程,如圖1 所示。計(jì)算機(jī)加電后首先執(zhí)行系統(tǒng)主板BIOS 中的自檢程序,而后根據(jù)CMOS 設(shè)置的啟動(dòng)順序加載介質(zhì)上的引導(dǎo)程序。以硬盤優(yōu)先引導(dǎo)為例,BIOS 通過JMP 指令轉(zhuǎn)跳到啟動(dòng)設(shè)備的主引導(dǎo)記錄(Master Boot Record,MBR)。如果計(jì)算機(jī)上只安裝了一個(gè)操作系統(tǒng),那么系統(tǒng)將直接載入操作系統(tǒng)的內(nèi)核鏡像,然后啟動(dòng)操作系統(tǒng)[2]。如果該計(jì)算機(jī)上同時(shí)安裝多個(gè)操作系統(tǒng),則MBR 將會(huì)被Boot Loader(操作系統(tǒng)啟動(dòng)裝載器)所覆蓋,然后由用戶進(jìn)行配置和選擇要啟動(dòng)的操作系統(tǒng)。

圖1 操作系統(tǒng)啟動(dòng)流程
操作系統(tǒng)可信增強(qiáng)的設(shè)計(jì)思想是“根據(jù)預(yù)制的可執(zhí)行文件的摘要值,確保可執(zhí)行文件按照預(yù)期的行為運(yùn)行”。根據(jù)操作系統(tǒng)啟動(dòng)原理及啟動(dòng)過程之間的依賴關(guān)系,在MBR 階段、操作系統(tǒng)啟動(dòng)裝載器階段和操作系統(tǒng)啟動(dòng)后3 個(gè)階段,通過“軟能力”對(duì)操作系統(tǒng)運(yùn)行進(jìn)行安全增強(qiáng),確保操作系統(tǒng)運(yùn)行環(huán)境安全可信。同時(shí),對(duì)操作系統(tǒng)啟動(dòng)關(guān)鍵文件進(jìn)行備份和自動(dòng)恢復(fù),確保操作系統(tǒng)文件異常后能夠快速實(shí)現(xiàn)文件恢復(fù),提高操作系統(tǒng)的可用性和安全性,如圖2 所示。
2.2.1 MBR 的可信
MBR 占據(jù)硬盤的一個(gè)扇區(qū),它在磁盤的物理地址為0 磁頭0 柱面1 扇區(qū),大小為512 B。對(duì)MBR進(jìn)行度量需要讀取磁盤物理位置上的塊數(shù)據(jù),需要通過BIOS 提供的讀寫磁盤13H 號(hào)中斷功能來(lái)實(shí)現(xiàn)。若MBR 異常,操作系統(tǒng)無(wú)法被正常引導(dǎo)。

圖2 操作系統(tǒng)安全增強(qiáng)示意
2.2.2 OS Loader(操作系統(tǒng)裝載器)的可信
在商用計(jì)算機(jī)中,OS Loader 處于MBR 和操作系統(tǒng)之間,主要職責(zé)用于引導(dǎo)操作系統(tǒng),并把CPU控制權(quán)遞交給它。
OS Loader 對(duì)其進(jìn)行可信認(rèn)證的關(guān)鍵在于要從磁盤扇區(qū)中讀取引導(dǎo)程序文件數(shù)據(jù)。引導(dǎo)程序文件在磁盤中的位置是不固定的,且所在扇區(qū)也不一定是連續(xù)的,需要通過讀取文件系統(tǒng)的結(jié)構(gòu)元數(shù)據(jù)來(lái)定位,流程如下:
(1)獲取OS Loader 所在分區(qū)的文件系統(tǒng)類型;
(2)根據(jù)文件系統(tǒng)類型加載相應(yīng)的文件系統(tǒng)解析庫(kù);
(3)通過文件系統(tǒng)解析庫(kù)讀取引導(dǎo)文件數(shù)據(jù),并驗(yàn)證其完整性。
2.2.3 操作系統(tǒng)的可信度量和備份恢復(fù)
操作系統(tǒng)的可信驗(yàn)證與OS Loader 的可信驗(yàn)證基本相同,也是驗(yàn)證文件的完整性。但是,操作系統(tǒng)的文件類型和數(shù)量遠(yuǎn)不止一個(gè),包括操作系統(tǒng)的配置文件、主內(nèi)核文件、內(nèi)核驅(qū)動(dòng)文件、系統(tǒng)服務(wù)程序文件、系統(tǒng)接口庫(kù)文件等。通過文件采集工具,將要度量的操作系統(tǒng)文件摘要值計(jì)算加密保存,同時(shí)將文件進(jìn)行加密存儲(chǔ)。
操作系統(tǒng)文件度量時(shí),若摘要值比對(duì)失敗,則通過接口計(jì)入PE 操作系統(tǒng),自動(dòng)執(zhí)行文件恢復(fù)程序,實(shí)現(xiàn)操作系統(tǒng)文件的自動(dòng)恢復(fù)。
2.2.4 可執(zhí)行文件的可信度量
可執(zhí)行文件的運(yùn)行控制是根據(jù)白名單機(jī)制,通過摘要值比對(duì)控制文件的運(yùn)行,使文件的運(yùn)行是可預(yù)期的。可執(zhí)行文件的摘要值需提前采集。
Windows 系統(tǒng)的運(yùn)行控制模塊是通過內(nèi)核驅(qū)動(dòng)實(shí)現(xiàn)的。當(dāng)可執(zhí)行文件運(yùn)行時(shí),驅(qū)動(dòng)攔截將要加載的可執(zhí)行文件,計(jì)算可執(zhí)行文件的摘要值判斷此程序是否在可信列表中,如果在列表中則允許運(yùn)行,否則拒絕運(yùn)行。
可執(zhí)行文件控制技術(shù)在Windows XP/2003 與Windows Vista/7 的實(shí)現(xiàn)方法不同,前者采用SSDT HOOK 技術(shù),后者采用Windows 過濾平臺(tái)(Windows Filter Platform,WFP)技術(shù)。中標(biāo)麒麟系統(tǒng)的可信運(yùn)行控制基于Linux 安全模塊(Linux Security Module,LSM)框架實(shí)現(xiàn)。LSM 框架是一個(gè)針對(duì)Linux 內(nèi)核的安全框架,在訪問系統(tǒng)內(nèi)核的資源接口處注冊(cè)HOOK 函數(shù)接口,在進(jìn)程訪問系統(tǒng)資源前對(duì)進(jìn)程行為進(jìn)行控制[2]。
可信系統(tǒng)軟件主要分為操作系統(tǒng)啟動(dòng)前的可信度量和操作系統(tǒng)啟動(dòng)后的可信度量?jī)刹糠郑饕ぷ髁鞒倘鐖D3 所示。

圖3 可信系統(tǒng)軟件工作流程
(1)以一個(gè)干凈的操作系統(tǒng)作為可信源進(jìn)行操作系統(tǒng)文件和可執(zhí)行文件的摘要值采集,并加密存儲(chǔ)于操作系統(tǒng)硬盤;
(2)操作系統(tǒng)啟動(dòng)前,輸入認(rèn)證口令;
(3)口令認(rèn)證成功后,對(duì)操作系統(tǒng)文件開始度量,操作系統(tǒng)文件度量值比對(duì)成功后進(jìn)入操作系統(tǒng);若操作系統(tǒng)文件度量值比對(duì)失敗,則進(jìn)入文件恢復(fù)階段恢復(fù)異常的系統(tǒng)文件,恢復(fù)成功后重新度量進(jìn)入操作系統(tǒng);
(4)進(jìn)入操作系統(tǒng)后,可執(zhí)行軟件若要運(yùn)行,需與存儲(chǔ)的摘要值進(jìn)行比對(duì),比對(duì)成功可以運(yùn)行,比對(duì)失敗禁止運(yùn)行;
(5)用戶可以根據(jù)需求,通過軟件界面動(dòng)態(tài)調(diào)整摘要值庫(kù)文件。
本文基于“軟能力”的可信系統(tǒng)軟件是基于Windows XP 系統(tǒng)實(shí)現(xiàn)的,可以對(duì)操作系統(tǒng)文件進(jìn)行摘要值度量和恢復(fù),同時(shí)對(duì)可執(zhí)行文件進(jìn)行摘要值度量,在系統(tǒng)運(yùn)行過程中建立可信傳遞,確保運(yùn)行環(huán)境是可控的、可信的。
操作系統(tǒng)啟動(dòng)前的可信增強(qiáng)基于Grub4Dos 源碼實(shí)現(xiàn),通過grubinst.exe 程序覆蓋系統(tǒng)原來(lái)的MBR,通過MBR 查找并加載grldr,在Grub 階段完成操作系統(tǒng)文件的安全度量。若操作系統(tǒng)文件度量失敗,則進(jìn)入文件恢復(fù)模式進(jìn)行受損文件的恢復(fù)。操作系統(tǒng)啟動(dòng)后的可信增強(qiáng)基于C/C++實(shí)現(xiàn),包括應(yīng)用層界面程序和驅(qū)動(dòng)層程序。內(nèi)核驅(qū)動(dòng)實(shí)現(xiàn)可執(zhí)行文件的安全度量,驅(qū)動(dòng)程序以服務(wù)方式隨操作系統(tǒng)自啟動(dòng),確保系統(tǒng)環(huán)境運(yùn)行安全可信。
3.1.1 采集源環(huán)境準(zhǔn)備
計(jì)算機(jī)操作系統(tǒng)安裝完成后,進(jìn)行多殺毒引擎、多輪次全盤殺毒,確保操作系統(tǒng)采集源環(huán)境是安全的、可信的,后面將以此作為比對(duì)的基礎(chǔ)。
3.1.2 文件采集和備份
通過可信系統(tǒng)軟件提供的采集和備份工具,將操作系統(tǒng)啟動(dòng)過程中的exe、dll、sys、ini 等文件進(jìn)行摘要值采集,形成摘要值數(shù)據(jù)鏈,加密保存到hmldr.cfg 文件中。涉及的主要函數(shù)包括AddHashToFile(char*filepath,char*filehash)、SetGrubPwd(char*pcszpwd)和AddFileToBackDirec(char*filepath)。AddHashTofile 函數(shù)將采集的操作系統(tǒng)內(nèi)核文件的路徑和計(jì)算的摘要值寫入hmldr.cfg 中。SetGrubPwd 函數(shù)設(shè)置Grub 引導(dǎo)界面的登錄口令,用于操作系統(tǒng)登錄身份認(rèn)證。Add FileToBackDirec 函數(shù)負(fù)責(zé)將操作系統(tǒng)內(nèi)核文件備份。
Grub 包 括Stage1 和Stage2 階 段。Stage1 實(shí) 現(xiàn)Bootloader 的功能;Stage2 是一個(gè)小型的操作系統(tǒng),有自己的API 函數(shù)[3]。
本文通過Grub4Dos 0.4.5 版本源碼實(shí)現(xiàn)操作系統(tǒng)文件安全度量和文件恢復(fù)。
備份操作系統(tǒng)原MBR,然后將Grub 程序安裝到MBR,使其能夠加載編譯的新文件grldr。通過grubinst.exe 程序,將Grub4Dos 中的Stage1(512 B)安裝到硬盤的MBR。運(yùn)行腳本執(zhí)行g(shù)rubinst-savembr=MBR.sav(hd0),安 裝GRLDR MBR 到 第 一 塊硬盤并保存原來(lái)的MBR 到MBR.sav 文件中,確保MBR 被破壞后能夠及時(shí)恢復(fù)引導(dǎo)區(qū),確保操作系統(tǒng)可用。操作系統(tǒng)啟動(dòng)后,BIOS 執(zhí)行軟中斷調(diào)用,加載MBR 至0x7c00 并跳轉(zhuǎn)執(zhí)行,Stage1 開始執(zhí)行,然后加載Stage2 并跳轉(zhuǎn)執(zhí)行,Stage2 中的微型操作系統(tǒng)啟動(dòng),完成對(duì)操作系統(tǒng)文件的安全度量。
(2)操作系統(tǒng)文件度量和文件恢復(fù)。操作系統(tǒng)文件的度量和恢復(fù)是在Stage2 階段實(shí)現(xiàn)的,具體實(shí)現(xiàn)邏輯如圖4 所示。

圖4 文件度量和恢復(fù)邏輯
操作系統(tǒng)文件度量和文件恢復(fù)功能是在stage2.c 代碼中實(shí)現(xiàn),stage2 的入口是stage2/asm.S。asm.S 在設(shè)置好C 運(yùn)行環(huán)境后,調(diào)用第一個(gè)函數(shù)init_bios_info(stage2/common.c)。該函數(shù)在執(zhí)行一些底層的初始化后,調(diào)用stage2 的main 函數(shù)cmain,在cmain 函數(shù)中實(shí)現(xiàn)度量和恢復(fù)功能,其偽代碼如下:
(1)計(jì)算機(jī)開機(jī)后,BIOS 引導(dǎo)MBR,然后加載Grub,執(zhí)行stage2.c 中的cmain(void)函數(shù);
(2)通過函數(shù)exec_cmdline 執(zhí)行”inputpwd--cfgfile=/hmldr/hmldr.cfg--cfgpwd=%s--boot”,實(shí)現(xiàn)Grub 登錄的口令認(rèn)證;
(3)執(zhí)行”graphicsmode-1 800 600 32”和”font/hmldr/hmldr.fnt”,進(jìn)行背景圖片和字體設(shè)置,用于展示操作系統(tǒng)文件度量過程;
(4)check_system_integrity 函數(shù)用來(lái)實(shí)現(xiàn)操作系統(tǒng)文件摘要值比對(duì),通過_grub_open、grub_read等一系列函數(shù)讀取操作系統(tǒng)文件,計(jì)算摘要值,通過grub_memcmp 函數(shù)實(shí)現(xiàn)摘要值比對(duì),將結(jié)果通過函數(shù)display_check_progress 展示到顯示器,方便用戶直觀看到操作系統(tǒng)文件摘要值正常或異常;
(5)如果所有文件度量成功,則執(zhí)行”chainloader(hd0,0)+1”,啟動(dòng)操作系統(tǒng);
(6)若某個(gè)文件摘要值度量失敗,則進(jìn)入恢復(fù)操作系統(tǒng)文件階段,執(zhí)行命令”{map--mem/hmldr/pe.iso(0xff)”,”map--hook”,”root(0xff)”,”chainloader--force(0xff)”,”boot”},操作系統(tǒng)會(huì)加載PE 鏡像文件進(jìn)入PE 模式;
(7)修改PE.iso 鏡像,將文件備份恢復(fù)程序添加到自啟動(dòng)項(xiàng)中,PE 系統(tǒng)進(jìn)入后自動(dòng)執(zhí)行文件恢復(fù),文件修復(fù)完成后重啟操作系統(tǒng)。
3.3.1 可執(zhí)行文件初始化摘要值采集
可信系統(tǒng)軟件初次安裝時(shí),需要用戶根據(jù)需求掃描磁盤,計(jì)算并保存可執(zhí)行文件摘要值,以此作為可執(zhí)行文件基礎(chǔ)白名單。
3.3.2 可執(zhí)行文件白名單增加和刪除
可信控制功能生效后,新增的可執(zhí)行文件運(yùn)行會(huì)被攔截。為滿足操作系統(tǒng)用戶的使用需求,需要對(duì)白名單進(jìn)行高效的增加或刪除。系統(tǒng)用戶可以在軟件界面進(jìn)行可執(zhí)行文件摘要值的刪除。
可執(zhí)行文件摘要值的增加包括兩種方式。
(1)先運(yùn)行,后添加。可執(zhí)行文件嘗試運(yùn)行,驅(qū)動(dòng)攔截模塊捕捉可執(zhí)行文件產(chǎn)生的摘要值形成攔截日志,用戶可以將攔截的摘要值添加到白名單中,添加成功后可執(zhí)行文件可以運(yùn)行;
(2)先添加,再運(yùn)行。用戶可以通過軟件界面進(jìn)行可執(zhí)行文件的添加,可執(zhí)行文件的摘要值添加到白名單中,添加成功后可執(zhí)行文件可以運(yùn)行。
可執(zhí)行文件采集流程如圖5 所示。
Windows 系統(tǒng)的可執(zhí)行文件可信度量由底層驅(qū)動(dòng)實(shí)現(xiàn)。可執(zhí)行文件運(yùn)行時(shí),驅(qū)動(dòng)攔截運(yùn)行的可執(zhí)行程序,然后通過計(jì)算可執(zhí)行程序的度量值判斷此程序是否在白名單中。如果在白名單中則允許運(yùn)行,否則拒絕運(yùn)行。

圖5 可執(zhí)行文件摘要采集
在Windows XP 系統(tǒng),采用SSDT HOOK 技術(shù)實(shí)現(xiàn)可執(zhí)行文件運(yùn)行攔截。系統(tǒng)服務(wù)描述符(System Service Descriptor Table,SSDT)是應(yīng)用層到內(nèi)核層的一個(gè)通道,將應(yīng)用層的Win32 API 與內(nèi)核層的Native API 串聯(lián)起來(lái)。可執(zhí)行文件運(yùn)行時(shí),通過調(diào)用kernel32 的API 轉(zhuǎn) 移 到ntdll.dll 和notskrnl.exe,最后通過SSDT 檢索調(diào)用Native API 函數(shù)。通過HOOK 系統(tǒng)服務(wù)描述表中函數(shù)的地址,用自定義的函數(shù)地址替換原函數(shù)地址,實(shí)現(xiàn)可執(zhí)行文件的攔截處理,具體原理如圖6 所示。

圖6 可執(zhí)行文件可信度量
具體實(shí)現(xiàn)邏輯代碼如下。
(1)編寫sys 驅(qū)動(dòng)程序,以服務(wù)方式注冊(cè)到操作系統(tǒng),實(shí)現(xiàn)驅(qū)動(dòng)自動(dòng)加載。
(2)在驅(qū)動(dòng)中修改SSDT 內(nèi)存保護(hù)機(jī)制[4]。在內(nèi)核中修改內(nèi)存,可以修改CR0 寄存器,關(guān)閉寫保護(hù)屬性實(shí)現(xiàn),也可以使用內(nèi)存描述符表(Memory Descriptor List,MDL)方式修改內(nèi)存。前者只支持32 位,后者32 位和64 位都支持。使用MDL 修改內(nèi)存具體流程如下:首先,調(diào)用MmCreateMdl 函數(shù)分配足夠大的MDL 結(jié)構(gòu)映射給指定的緩沖區(qū);其次,調(diào)用MmBuildMdlForNonPagedPool 函數(shù)更新MDL 對(duì)物理內(nèi)存的描述;最后,調(diào)用MmMapLockedPages函數(shù)將MDL中描述的物理頁(yè)面映射到虛擬內(nèi)存中,并返回映射地址。
(3)修 改SSDT 表,KeServiceDescriptorTable→ServiceTableBase[XX]=HKFun。
(4)在HKFun 函數(shù)中,實(shí)現(xiàn)可執(zhí)行文件摘要值的計(jì)算和比對(duì),并將結(jié)果返回給應(yīng)用層。
本文在Windows XP 系統(tǒng)上實(shí)現(xiàn)了基于“軟能力”的操作系統(tǒng)可信度量與恢復(fù),實(shí)現(xiàn)了從MBR階段到可執(zhí)行文件運(yùn)行的可信鏈建立,確保了操作系統(tǒng)運(yùn)行環(huán)境的可信。在解決系統(tǒng)完整性保護(hù)方面,該技術(shù)可以起到基礎(chǔ)保護(hù)作用,但從信息系統(tǒng)安全的整體角度來(lái)看,需與其他安全技術(shù)相結(jié)合(如防火墻、入侵檢測(cè)),才能使整個(gè)信息系統(tǒng)更加安全、可信。
目前,該軟件功能已經(jīng)得到驗(yàn)證,但在使用中有一些不足,后期需要改進(jìn)。
(1)摘要值比對(duì)算法優(yōu)化問題。當(dāng)摘要值數(shù)量龐大時(shí),檢索時(shí)間會(huì)較長(zhǎng),目前使用的是二分法查找。
(2)Grub 引導(dǎo)代碼不能識(shí)別所有的文件系統(tǒng),目前支持的類型包括NTFS、FAT12、FAT16、FAT32、EXT2 以及EXT3。
(3)驅(qū)動(dòng)控制模塊實(shí)現(xiàn)過程中,由于SSDT HOOK 的不穩(wěn)定性,現(xiàn)在使用較多的是通過回調(diào)函數(shù)PsSetCreateProcessNotifyRoutineEx實(shí)現(xiàn)進(jìn)程攔截。