馮榮耀,彭金輝 ,張志鴻(.鄭州大學(xué)教育技術(shù)中心,河南 鄭州 45000;.鄭州大學(xué)信息工程學(xué)院,河南 鄭州 45000)
隨著計(jì)算機(jī)用戶的不斷增加,PC操作系統(tǒng)的安全性變的越來越重要。針對(duì)計(jì)算機(jī)系統(tǒng)惡意程序的檢測(cè)和防御的研究正成為當(dāng)前安全研究的熱點(diǎn)課題。一些技術(shù)應(yīng)運(yùn)而生,如主動(dòng)防御、偵測(cè)與反偵測(cè)等,而且在系統(tǒng)的應(yīng)用層和內(nèi)核層不同層次上實(shí)現(xiàn)。Window系統(tǒng)是當(dāng)前最流行的PC操作系統(tǒng),同時(shí)也是安全防護(hù)最關(guān)注的操作系統(tǒng),針對(duì)惡意程序的防御和系統(tǒng)安全措施的研究在不斷深入,這也是當(dāng)前的研究重點(diǎn)。目前可選擇的是USBKEY嵌入式版的Windows XPE,通過對(duì)XPE進(jìn)行可信安全加固,研究、設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)主動(dòng)防御的安全操作系統(tǒng)原型(SR-XPE)。
文件可信度量是指文件完整性和真實(shí)性的度量,它反映了文件的本來面目,是主動(dòng)防御保護(hù)系統(tǒng)安全的重要前提。一切對(duì)文件的非法修改(如惡意程序的攻擊)都將破壞文件的完整性。因此可以通過檢查文件(包括可執(zhí)行文件)的完整性信息,來鑒別文件是否遭到病毒攻擊。使用文件摘要(HASH值)來保存文件的完整性信息。首先保存要保護(hù)的重要文件和進(jìn)程的HASH,當(dāng)校驗(yàn)文件完整性時(shí),重新計(jì)算文件摘要,并比較是否一致,以此判斷是否被修改。這里稱這些文件摘要為策略預(yù)設(shè)值。目前,常用的完整性算法包括MD5、SHA等,通常使用SHA1算法來計(jì)算文件的摘要信息。
可信引導(dǎo)是在安全操作系統(tǒng)中實(shí)現(xiàn)可信計(jì)算的重要一環(huán)。SR-XPE采用開源的Grub2可信引導(dǎo),Grub2是Grub的新版本,可以用來引導(dǎo)多種計(jì)算機(jī)體系結(jié)構(gòu)下的幾乎所有的操作系統(tǒng)。SR-XPE在理解Grub2內(nèi)核的基礎(chǔ)上對(duì)Grub2的框架內(nèi)容和執(zhí)行過程做了修改。
Grub2內(nèi)核裁剪與安裝。在Linux操作系統(tǒng)下編譯,把開機(jī)引導(dǎo)程序使用的所有模塊靜態(tài)加載到內(nèi)核中,刪除動(dòng)態(tài)加載模塊時(shí)所用到的所有文件,保證計(jì)算機(jī)從USB啟動(dòng)時(shí),能夠正常加載修改后的Grub2。引導(dǎo)程序必須使用的模塊體現(xiàn)在創(chuàng)建內(nèi)核文件的命令中。
Grub引導(dǎo)過程的一個(gè)重要工作是核心文件保護(hù)。保護(hù)文件校驗(yàn)是為防止敏感文件遭惡意程序修改而進(jìn)行的文件完整性校驗(yàn)。開機(jī)引導(dǎo)程序?qū)崿F(xiàn)對(duì)保護(hù)文件列表中的所有文件進(jìn)行校驗(yàn)。依據(jù)文件可信度量規(guī)則校驗(yàn),只要發(fā)現(xiàn)核心文件被修改,就不允許啟動(dòng)操作系統(tǒng)。
Window XPE操作系統(tǒng)的引導(dǎo)程序?yàn)閚tldr,開機(jī)引導(dǎo)程序文件校驗(yàn)完成后將直接讀取U盤上的ntldr,實(shí)現(xiàn)對(duì)硬盤上的操作系統(tǒng)進(jìn)行引導(dǎo)。
SR-XPE使用特有的用戶身份認(rèn)證模塊,以增強(qiáng)系統(tǒng)安全。Windows系統(tǒng)在默認(rèn)情況下調(diào)用GINA進(jìn)行用戶認(rèn)證。GINA是一個(gè)動(dòng)態(tài)鏈接庫,是Windows操作系統(tǒng)的組成部分。GINA在啟動(dòng)進(jìn)程中被Winlogon.exe加載。加載成功后,GINA主要功能有用戶登錄身份認(rèn)證、CTRL+ALT+DEL鍵響應(yīng)、啟動(dòng)Shell等。
使用定制GINA替換msgina.dll,就可以在驗(yàn)證用戶身份時(shí),加入需要的其他驗(yàn)證模塊,如指紋識(shí)別、PIN碼驗(yàn)證等。定制GINA需要實(shí)現(xiàn)msgina.dll的全部接口,最簡(jiǎn)單的辦法是僅修改自己關(guān)心的部分接口,其余直接調(diào)用操作系統(tǒng)接口。圖1為修改后的SR-XPE系統(tǒng)登錄界面,此種方式重新實(shí)現(xiàn)了GINA的WlxLoggedOutSAS函數(shù),去掉了用戶密碼驗(yàn)證,增加了PIN碼(即USBKEY口令)驗(yàn)證。下面是需要實(shí)現(xiàn)的關(guān)鍵函數(shù)。
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE ph-Token,PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,PVOID*pProfile)。
圖1 XPE系統(tǒng)登錄界面
SR-XPE提供對(duì)執(zhí)行程序真實(shí)性和完整性度量功能,可執(zhí)行程序是一類特殊的文件。執(zhí)行程序真實(shí)性度量可以確保系統(tǒng)中的執(zhí)行程序都是合法的,阻止非授權(quán)程序的運(yùn)行。執(zhí)行程序完整性度量用來保證系統(tǒng)所啟動(dòng)的執(zhí)行程序都是可信的,禁止不符合預(yù)期的程序的啟動(dòng)。執(zhí)行程序啟動(dòng)前,SR-XPE核心模塊會(huì)度量該程序相關(guān)模塊的真實(shí)性和完整性,只有在度量結(jié)果和策略預(yù)存值一致的前提下,該程序才允許啟動(dòng),否則拒絕其執(zhí)行。因此如果SR-XPE中的某個(gè)程序被病毒或木馬感染,由于其不再可信,系統(tǒng)將禁止其執(zhí)行,從而阻止了惡意代碼繼續(xù)傳播和破壞,降低了系統(tǒng)完整性被破壞的風(fēng)險(xiǎn),實(shí)現(xiàn)了對(duì)惡意代碼的免疫功能。
Windows系統(tǒng)分應(yīng)用層和內(nèi)核層,程序首先調(diào)用Win32子系統(tǒng)動(dòng)態(tài)庫的API,然后調(diào)用Ntdll.dll導(dǎo)出的Native API。XPE中Ntdll.dll通過SYSENTER指令軟中斷陷入內(nèi)核。系統(tǒng)(內(nèi)核文件ntoskrnl.exe)調(diào)用SSDT確定要調(diào)用的系統(tǒng)服務(wù)代碼地址,從Executive轉(zhuǎn)向內(nèi)核執(zhí)行系統(tǒng)調(diào)用。
文件系統(tǒng)驅(qū)動(dòng)接收打開、創(chuàng)建、讀寫、關(guān)閉磁盤文件的請(qǐng)求操作。這些請(qǐng)求一般由用戶進(jìn)程產(chǎn)生通過I/O子系統(tǒng)管理器發(fā)送的文件系統(tǒng)。I/O管理器構(gòu)造一個(gè)I/O Request Package(IRP)來描述這個(gè)請(qǐng)求,并把請(qǐng)求發(fā)向掛載邏輯盤的文件系統(tǒng)驅(qū)動(dòng)。在發(fā)送請(qǐng)求之前,檢查是否掛載其他驅(qū)動(dòng)設(shè)備對(duì)象,如果設(shè)備對(duì)象棧頂端存在過濾驅(qū)動(dòng),I/O管理器會(huì)把請(qǐng)求先發(fā)給過濾驅(qū)動(dòng)。
雖然Windows不允許直接修改源碼來實(shí)現(xiàn)安全框架,微軟還是提供了很多相關(guān)技術(shù)。通過編寫底層驅(qū)動(dòng)程序,可以提高代碼權(quán)限。文件系統(tǒng)過濾的實(shí)現(xiàn),就是基于成熟的HOOK技術(shù),通過修改系統(tǒng)SSDT來控制操作系統(tǒng)內(nèi)核層對(duì)象。應(yīng)用層調(diào)用的API CreateFile對(duì)應(yīng)驅(qū)動(dòng)層收到的IRP主功能號(hào)是IRP_MJ_CREATE。HOOK截獲IRP請(qǐng)求包之后,計(jì)算進(jìn)程摘要,并和策略預(yù)設(shè)值比較,如果允許則放行,否則直接返回拒絕(策略預(yù)設(shè)值即策略庫,包括預(yù)收集的進(jìn)程白名單、進(jìn)程黑名單列表)。
SR-XPE網(wǎng)絡(luò)訪問控制實(shí)現(xiàn)防火墻的功能。和文件過濾驅(qū)動(dòng)類似,通過底層加掛HOOK攔截?cái)?shù)據(jù)包,可以分析數(shù)據(jù)包的內(nèi)容,達(dá)到過濾效果??梢栽赥DI上實(shí)現(xiàn)數(shù)據(jù)包的攔截,也可以在NDIS層上實(shí)現(xiàn),這不僅僅表現(xiàn)在攔截時(shí)機(jī)不一樣,還表現(xiàn)了攔截的程度不同。TDI可以攔截進(jìn)程級(jí)網(wǎng)絡(luò)數(shù)據(jù)包,NDIS可以攔截IP級(jí)網(wǎng)絡(luò)數(shù)據(jù)包。當(dāng)有網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送或接收時(shí),系統(tǒng)核心模塊會(huì)檢查數(shù)據(jù)包的IP地址、端口號(hào)和協(xié)議類型,只有在策略預(yù)設(shè)值允許的情況下才放行數(shù)據(jù)包,否則丟棄數(shù)據(jù)包。
SR-XPE實(shí)現(xiàn)的方式是對(duì)所有IRP包進(jìn)行攔截,獲得應(yīng)用與下層協(xié)議棧交互的命令和數(shù)據(jù),經(jīng)過分析和仲裁,依據(jù)策略做出判斷。攔截的IRP請(qǐng)求包括創(chuàng)建 (IRP_MJ_CREATE)、 關(guān) 閉 (IRP_MJ_CLOSE)、關(guān) 聯(lián)請(qǐng)求(TDI_ASSOCIATE_ADDRESS)等操作。通過解析address_entry可以獲取當(dāng)前操作的目的是IP或者本地進(jìn)程。系統(tǒng)可以對(duì)進(jìn)程使用網(wǎng)絡(luò)接口進(jìn)行通信的方式進(jìn)行控制。是基于進(jìn)程控制網(wǎng)絡(luò)還是基于IP和端口控制網(wǎng)絡(luò),取決于制定的網(wǎng)絡(luò)訪問策略,圖2是一個(gè)基于IP和port的網(wǎng)絡(luò)策略實(shí)例。
訪問控制是指按用戶身份及其所歸屬的預(yù)定義組來限制用戶對(duì)某些信息項(xiàng)的訪問。一般分為自主訪問控制(DAC)和強(qiáng)制訪問控制(MAC)。前者是指用戶有權(quán)對(duì)自身創(chuàng)建的對(duì)象進(jìn)行訪問,并可將訪問權(quán)授予其他用戶。后者是指由系統(tǒng)對(duì)用戶或進(jìn)程創(chuàng)建的對(duì)象進(jìn)行統(tǒng)一的強(qiáng)制性控制,按照策略決定哪些用戶或進(jìn)程對(duì)哪些對(duì)象進(jìn)行哪些類型訪問。強(qiáng)制訪問控制的基本思想是:每個(gè)主體都有既定的安全屬性,每個(gè)客體也有既定的安全屬性,主體對(duì)客體能否執(zhí)行特定的操作,取決于兩者安全屬性之間的關(guān)系。
在設(shè)計(jì)實(shí)現(xiàn)的強(qiáng)制訪問控制策略中,可給主體(進(jìn)程或用戶)和客體(文件或注冊(cè)表項(xiàng))指定安全級(jí)別,如1~6級(jí)。不同級(jí)別標(biāo)記了不同主要程度和能力的實(shí)體。不同級(jí)別的主體對(duì)不同級(jí)別的客體的訪問是在強(qiáng)制的安全策略下實(shí)現(xiàn)的。將安全級(jí)別按照從高到低進(jìn)行排序,規(guī)定高級(jí)別可以單向讀寫低級(jí)別,低級(jí)別禁止讀寫高級(jí)別。
筆者按照強(qiáng)制訪問控制按安全級(jí)別控制的原理和windows內(nèi)核驅(qū)動(dòng)實(shí)施方案,實(shí)現(xiàn)了一個(gè)強(qiáng)制訪問控制模型。重要的文件和注冊(cè)項(xiàng)擁有較高安全級(jí)別,只有特定進(jìn)程才能訪問。主體和客體的安全級(jí)別由策略規(guī)定。
進(jìn)程啟動(dòng)控制主要分析截獲的IRP_MJ_CREATE,強(qiáng)制訪問控制還關(guān)心文件打開、修改(IRP_MJ_WRITE)、刪除操作的控制?;诓呗苑治鲋黧w(進(jìn)程)和客體(文件),裁決是向下轉(zhuǎn)發(fā)IRP還是直接向上層返回請(qǐng)求失敗信息。文件是操作系統(tǒng)最重要的信息載體,保證文件安全是操作系統(tǒng)安全最重要的工作之一。系統(tǒng)提供的文件操作HOOK,覆蓋了文件的整個(gè)生命周期。目前SR-XPE實(shí)現(xiàn)了文件打開、重命名、刪除等功能。當(dāng)用戶進(jìn)程試圖打開一個(gè)txt文件時(shí),內(nèi)核截獲該操作,讀取策略比對(duì)主體進(jìn)程和客體文件的安全級(jí)別,如果屬于惡意越級(jí)訪問,系統(tǒng)會(huì)終止操作并彈出圖3所示的提示。
注冊(cè)表是操作Windows系統(tǒng)的核心數(shù)據(jù)庫,直接控制系統(tǒng)啟動(dòng)、驅(qū)動(dòng)加載和應(yīng)用程序運(yùn)行。系統(tǒng)運(yùn)行期間,注冊(cè)表的系統(tǒng)調(diào)用較頻繁。注冊(cè)表監(jiān)控的實(shí)現(xiàn)原理是,使用SSDT HOOK技術(shù)鉤住系統(tǒng)注冊(cè)表操作的API,實(shí)現(xiàn)注冊(cè)表訪問控制。應(yīng)用程序訪問設(shè)置注冊(cè)表鍵值的系統(tǒng)調(diào)用流程是:應(yīng)用程序(kernel32)RegSet-ValueKey轉(zhuǎn)發(fā)到 (ntdll)ZwRegSetValueKey陷入內(nèi)核執(zhí)行(noskrnl)NtSetValueKey。通過替換操作系統(tǒng)有關(guān)注冊(cè)表操作內(nèi)核API,來實(shí)現(xiàn)對(duì)系統(tǒng)所有注冊(cè)表相關(guān)操作的截獲和控制。系統(tǒng)提供了所有的注冊(cè)表操作供安全模塊使用,包括注冊(cè)表的創(chuàng)建、打開、修改、刪除、替換等操作。目前SR-XPE實(shí)現(xiàn)了注冊(cè)表防篡改功能。當(dāng)用戶進(jìn)程試圖修改一項(xiàng)安全級(jí)別較高的注冊(cè)表項(xiàng)時(shí),系統(tǒng)會(huì)終止操作并彈出提示(見圖4),防范針對(duì)主機(jī)的惡意注冊(cè)表篡改行為。
圖2 網(wǎng)絡(luò)策略配置庫
圖3 文件拒絕打開
圖4 注冊(cè)表項(xiàng)拒絕修改
本文介紹了通過可信引導(dǎo)、進(jìn)程控制、網(wǎng)絡(luò)控制和強(qiáng)制訪問控制等方面對(duì)XPE系統(tǒng)進(jìn)行安全加固的研究和實(shí)踐,向Windows安全操作系統(tǒng)邁出了一步。下一步研究工作主要有:研究進(jìn)程控制的動(dòng)態(tài)度量,完善基于進(jìn)程和IP的2種網(wǎng)絡(luò)策略的結(jié)合優(yōu)化,進(jìn)一步提高系統(tǒng)安全性、穩(wěn)定性和易用性,同時(shí)考慮系統(tǒng)向WES7(Win7的嵌入式版)的移植方案。
[1]譚文,楊瀟,邵堅(jiān)磊.Windows內(nèi)核安全編程[M].北京:電子工業(yè)出版社,2009.
[2]劉邦明,鄔浙艷,孫黌杰.SSDT掛鉤:基于Windows內(nèi)核的RootKit技術(shù)樣本[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2009(3):62-64.
[3]Li L,Wu J,Guo XW.Framework for Windows Password Function Security Enhancement [J].Journal of Southeast Univesity,2007,37(z1):26-28.
[4]李雪峰,徐開勇.基于保護(hù)主機(jī)完整性的入侵防御系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)安全,2008(9).
[5]M.Lacoste,T.Jarboui,R.He.A component-based policy-neutral architecture for kernel-level access control [J].Annales Des Telecommunications-Annals of Telecommunications,2009,64(1-2):121-146.