国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

內(nèi)核態(tài)下的系統(tǒng)服務(wù)分配表掛鉤主動(dòng)防御技術(shù)

2014-04-29 23:39任李
電腦迷 2014年13期
關(guān)鍵詞:防御

任李

摘 要 惡意程序利用內(nèi)核態(tài)下的系統(tǒng)服務(wù)分配表掛鉤可以隱藏進(jìn)程,過(guò)濾數(shù)據(jù)等,嚴(yán)重威脅計(jì)算機(jī)系統(tǒng)安全。本文提出了一種針對(duì)系統(tǒng)服務(wù)分配表掛鉤技術(shù)的主動(dòng)防御技術(shù),通過(guò)內(nèi)核驅(qū)動(dòng)程序,為系統(tǒng)關(guān)鍵內(nèi)核服務(wù)函數(shù)添加自我保護(hù)功能,能在惡意程序掛鉤相關(guān)服務(wù)函數(shù)系統(tǒng)服務(wù)分配表后,該服務(wù)函數(shù)能夠立刻感知,及時(shí)修復(fù)相應(yīng)表項(xiàng)值、報(bào)警,最后設(shè)計(jì)程序驗(yàn)證方案有效性。

關(guān)鍵詞 掛鉤 防御 系統(tǒng)服務(wù)

中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A

0引言

掛鉤技術(shù)應(yīng)用廣泛,安全產(chǎn)品利用掛鉤技術(shù)可以對(duì)軟件行為進(jìn)行分析過(guò)濾,阻止惡意程序進(jìn)行威脅操作,例如,有的防火墻就用到了SPI和NDIS的掛鉤技術(shù)。近年來(lái),惡意程序作者對(duì)windows系統(tǒng)進(jìn)行深入研究,使用的掛鉤技術(shù)越來(lái)越先進(jìn),由于系統(tǒng)服務(wù)分配表(System Service Dispatch Table,SSDT)肩負(fù)著在用戶模式的win32 API和內(nèi)核模式下的內(nèi)核API之間建立地址映射的使命,所以惡意程序作者常掛鉤SSDT表,達(dá)到隱藏自身進(jìn)程、過(guò)濾數(shù)據(jù)、對(duì)抗安全產(chǎn)品等目的,為此,本文提出了一種針對(duì)SSDT表掛鉤的主動(dòng)防御技術(shù),給一些系統(tǒng)關(guān)鍵的服務(wù)函數(shù)添加自我保護(hù)的性質(zhì),使其一旦被SSDT表掛鉤,能夠及時(shí)察覺(jué)、修復(fù)、報(bào)警,較之于傳統(tǒng)的靜態(tài)似的枚舉檢測(cè),本文提出的方法效率高,而且能在惡意程序給用戶造成損失以前及時(shí)阻止。

圖1 SSDT掛鉤原理圖

1系統(tǒng)服務(wù)調(diào)度原理及SSDT掛鉤技術(shù)

系統(tǒng)服務(wù)函數(shù)是操作系統(tǒng)提供的一個(gè)函數(shù)集,應(yīng)用程序通過(guò)調(diào)用API函數(shù)執(zhí)行系統(tǒng)服務(wù)。對(duì)于應(yīng)用層的API首先調(diào)用Ntdll.dll這個(gè)動(dòng)態(tài)鏈接庫(kù)轉(zhuǎn)譯成內(nèi)核服務(wù),Ntdll.dll中的包裝函數(shù)做進(jìn)入內(nèi)核前的裝備,如將服務(wù)號(hào)放入eax、將存放用戶參數(shù)的用戶棧指針?lè)湃雃dx、執(zhí)行中斷,進(jìn)入到內(nèi)核態(tài)。在Windows XP下,包裝函數(shù)形式如下:

mov eax, ServiceID

lea edx, ParameterTable

call dword [ptr]edx

retn

其中ServiceID是將要調(diào)用內(nèi)核服務(wù)的服務(wù)號(hào)。

內(nèi)核層的系統(tǒng)服務(wù)分配表,該表存放了系統(tǒng)服務(wù)號(hào)和服務(wù)函數(shù)所對(duì)應(yīng)的地址,進(jìn)入中斷后,內(nèi)核根據(jù)所傳的服務(wù)號(hào)(eax)在SSDT表中查找相對(duì)應(yīng)的服務(wù)函數(shù)地址。

若要掛鉤SSDT,只需修改表中服務(wù)號(hào)所對(duì)應(yīng)的函數(shù)地址,使其指向自定義函數(shù)地址,在執(zhí)行相應(yīng)代碼后再調(diào)用原系統(tǒng)服務(wù)函數(shù)代碼。原理圖如圖1所示。

2相關(guān)SSDT表掛鉤技術(shù)檢測(cè)與恢復(fù)方法

2.1基于執(zhí)行狀態(tài)分析的檢測(cè)方法

如果入侵者掛鉤SSDT某個(gè)內(nèi)核函數(shù),該函數(shù)的一些執(zhí)行狀態(tài)(指令個(gè)數(shù)、寄存器狀態(tài)、CPU狀態(tài)等)將與正常的執(zhí)行狀態(tài)有所區(qū)別,通過(guò)對(duì)比可以大致檢測(cè)出是否被掛鉤。但該方法實(shí)現(xiàn)復(fù)雜,例如指令對(duì)比法。執(zhí)行指令的數(shù)量不同,一定程度預(yù)示著該服務(wù)函數(shù)被掛鉤了。但為了統(tǒng)計(jì)指令,系統(tǒng)必須處于單步追蹤模式下,每執(zhí)行一條指令就要觸發(fā)一次中斷,因此系統(tǒng)性能明顯降低。而且,系統(tǒng)服務(wù)函數(shù)每次運(yùn)行時(shí)指令個(gè)數(shù)不同,具有不確定性。

2.2基于對(duì)比的檢測(cè)恢復(fù)方法

內(nèi)核文件Ntosknl.exe中有個(gè)KiserviceTable,存放未重定位的服務(wù)地址,可以經(jīng)過(guò)文獻(xiàn)提出的方法,定位該表。通過(guò)這些地址可以計(jì)算出服務(wù)函數(shù)相對(duì)于基地址的偏移量。將其映射進(jìn)內(nèi)存中,將該文件中服務(wù)函數(shù)的偏移量加上正在運(yùn)行的內(nèi)核模塊的基地址,可以得到各服務(wù)函數(shù)的虛擬地址。利用該地址可以產(chǎn)生新的SSDT,利用該表和運(yùn)行的SSDT表進(jìn)行對(duì)比,發(fā)現(xiàn)服務(wù)地址若有不同,就是被掛鉤的地方,將其按新的SSDT表的內(nèi)容經(jīng)行恢復(fù)。該方法是靜態(tài)的被動(dòng)式的匹配檢測(cè),由于SSDT函數(shù)數(shù)量多,調(diào)用頻繁,該檢測(cè)方法會(huì)占用內(nèi)存,CPU等資源進(jìn)行不斷的檢測(cè),發(fā)現(xiàn)異常再恢復(fù),會(huì)嚴(yán)重影響系統(tǒng)性能。

2.3SSDT表掛鉤主動(dòng)防御技術(shù)

針對(duì)SSDT表掛鉤,本文提出了一種主動(dòng)防御技術(shù),為系統(tǒng)一些關(guān)鍵服務(wù)函數(shù)添加保護(hù)性質(zhì),使其具有在被調(diào)用時(shí)先檢測(cè)自己在SSDT表中的函數(shù)地址是否被掛鉤的能力。由于多數(shù)惡意程序在掛鉤SSDT表后,先執(zhí)行自定義代碼,再調(diào)用系統(tǒng)服務(wù)函數(shù),所以本文提出的方法能夠有效檢測(cè)SSDT表的掛鉤,如圖2所示。要完成向系統(tǒng)服務(wù)函數(shù)添加檢測(cè)功能,可以直接修改服務(wù)函數(shù)體和使用SSDT掛鉤技術(shù)。但由于在內(nèi)核直接修改函數(shù)代碼,容易導(dǎo)致系統(tǒng)崩潰,而且由于Windows版本不同,內(nèi)核也不同,兼容性較差。所以本文采用SSDT掛鉤技術(shù),達(dá)到給系統(tǒng)服務(wù)函數(shù)添加檢測(cè)恢復(fù)功能的目的,以后惡意程序再掛鉤SSDT表,將被及時(shí)檢測(cè)恢復(fù)。本文以惡意程序經(jīng)常掛鉤的內(nèi)核ZwQuerySystemlnformation函數(shù)說(shuō)明,如何使其防止被SSDT掛鉤。

圖2 SSDT掛鉤防御原理圖

SSDT結(jié)構(gòu)如下:

typedef struct _SYSTEM_SERVICE_TABLE{

PVOID ServiceTableBase;//系統(tǒng)服務(wù)函數(shù)分配表基地址

PULONG ServiceCounterTableBase;//服務(wù)表項(xiàng)被調(diào)用的次數(shù)

ULONG NumberOfService;//系統(tǒng)所支持服務(wù)個(gè)數(shù)

ULONG ParamTableBase;//指向系統(tǒng)服務(wù)參數(shù)表

};SYSTEM_SERVICE_TABLE,

*P SYSTEM_SERVICE_TABLE;

typedef struct _SERVICE_DESCRIPTOR_TABLE{

SYSTEM_SERVICE_TABLE ntoskrnl.exe;

//ntoskrnl.exe的服務(wù)函數(shù)

SYSTEM_SERVICE_TABLE win32k;

//win32k.sys的服務(wù)函數(shù)

SYSTEM_SERVICE_TABLE null1;//未使用

SYSTEM_SERVICE_TABLE null2;//未使用

} SERVICE_DESCRIPTOR_TABLE,

*PSERVICE_DESCRIPTOR_TABLE;

KeserviceDescriptorTable是由內(nèi)核Ntoskrnl.exe導(dǎo)出的內(nèi)核實(shí)體,該表包含指向SSDT表的指針。因此只要定位該表,就可以定位SSDT表的基地址Base,而函數(shù)的服務(wù)號(hào)ServiceID也可通過(guò)KeserviceDescriptorTable獲得,從而可以得到其地址Addr=Base+ServiceID*4,修改該地址中內(nèi)容,使其指向新定義的函數(shù)。

SSDT位于windows系統(tǒng)內(nèi)核空間中,要修改SSDT的內(nèi)容必須使用設(shè)備驅(qū)動(dòng)程序,而且在Windows XP操作系統(tǒng)中對(duì)SSDT所在內(nèi)存區(qū)域啟用了寫(xiě)保護(hù)機(jī)制,要修改SSDT表中內(nèi)容,需要繞過(guò)內(nèi)存保護(hù)機(jī)制。

定義新的函數(shù)HookZwQuerySystemlnformation,易定位該函數(shù)內(nèi)存地址為nAddress,在驅(qū)動(dòng)程序的入口函數(shù)中將函數(shù)的地址重定向到HookZwQuerySystemlnformation并返回原函數(shù)地址sAddress。

定義PTR_ZwQuery為ZwQuerySystemInformation函數(shù)指針。

NTSTATUS DriverEntry( IN PDRIVER_OBJECT

theDriverObject, IN PUNICODE_STRING theRegistryPath )

{ _asm

{

push eax

mov eax,CR0

and eax,0FFFEFFFFh

mov CR0,eax

pop eax

}//關(guān)閉寫(xiě)保護(hù)

sAddress=(PTR_ZwQuery)InterlockedExchange((PLONG) KeServiceDescriptorTable.ServiceTableBase[*(PULONG) ((PUCHAR)(PTR_ZwQuery)+1)],(LONG)

HookZwQuerySystemInformation );

_asm

{

push eax

mov eax,CR0

or eax, NOT 0FFFEFFFFh

mov CR0,eax

pop eax

}//開(kāi)啟寫(xiě)保護(hù)

}

惡意程序掛鉤ZwQuerySystemlnformation函數(shù),實(shí)際掛鉤HookZwQuerySystemlnformation函數(shù),該函數(shù)被調(diào)用時(shí)先檢查nAddress和該函數(shù)ServiceID所對(duì)應(yīng)的SSDT表項(xiàng)中的值是否相等,如果不相等,判定函數(shù)被掛鉤,恢復(fù)該表項(xiàng)的值后報(bào)警,如果相等,繼續(xù)執(zhí)行ZwQuerySystemlnformation函數(shù)。該函數(shù)偽代碼如下:

TypeX HookZwQuerySystemlnformation(…)

{if(地址相等)

return sAddress;//執(zhí)行原函數(shù)

else

virusAddress=(PTR_ZwQuery)InterlockedExchange((PLONG) KeServiceDescriptorTable.ServiceTableBase[*(PULONG) ((PUCHAR)(PTR_ZwQuery)+1)],(LONG)

HookZwQuerySystemInformation );//恢復(fù)表項(xiàng)值,返回病毒地址

return value _of_TypeX;//返回報(bào)警值

}

在實(shí)際中,需要保護(hù)多個(gè)函數(shù)時(shí),可以將驅(qū)動(dòng)程序的加載、病毒報(bào)警及處理等模塊抽象為公共模塊處理,以節(jié)省系統(tǒng)資源。Nguye等人通過(guò)監(jiān)測(cè)文件訪問(wèn)和進(jìn)程活動(dòng)構(gòu)建了系統(tǒng)調(diào)用層次模版。我們可以對(duì)系統(tǒng)之間的調(diào)用關(guān)系抽象成調(diào)用圖,賦予各個(gè)函數(shù)不同權(quán)值,找尋關(guān)鍵服務(wù)函數(shù)進(jìn)行保護(hù),以此提高效率。

3實(shí)驗(yàn)結(jié)果與分析

操作系統(tǒng):Windows 7,CPU Intel Core2,2.0Ghz;內(nèi)存:2GB; 虛擬機(jī)VMvare WorkStation7.0;虛擬機(jī) (下轉(zhuǎn)第37頁(yè))(上接第33頁(yè))操作系統(tǒng):Windows 7;編譯工具VS2010、DDK2003;在此環(huán)境下測(cè)試Hook_ZwQuerySystemlnformation病毒,該病毒通過(guò)Hook掉SSDT表中的ZwQuerySystemlnformation函數(shù)來(lái)改變進(jìn)程鏈表結(jié)構(gòu),從而達(dá)到隱藏自身的目的。文提出的方法能夠在函數(shù)被掛鉤后立即檢測(cè)恢復(fù)并且報(bào)警。

4結(jié)論

本文提出的針對(duì)SSDT掛鉤技術(shù)的主動(dòng)防御方法,賦予了關(guān)鍵函數(shù)自我保護(hù)的性質(zhì),一旦函數(shù)被掛鉤、調(diào)用能及時(shí)發(fā)現(xiàn)恢復(fù)。較之其它靜態(tài)式的被動(dòng)檢測(cè)方法,本方法能夠及時(shí)發(fā)現(xiàn)并且阻止惡意程序,而且由于函數(shù)在被調(diào)用時(shí)才占用資源,所以資源占用量少,效率高,但隨著保護(hù)函數(shù)數(shù)量的增加,效率會(huì)降低,因此找尋系統(tǒng)關(guān)鍵函數(shù)進(jìn)行保護(hù)顯得尤為重要。同時(shí)針對(duì)直接修改函數(shù)內(nèi)核體的掛鉤技術(shù),怎么提取病毒特征,使函數(shù)具有自我保護(hù)性質(zhì),怎么使函數(shù)具有自我保護(hù)性質(zhì),還需進(jìn)一步探索。

參考文獻(xiàn)

[1] 韓芳.基于可執(zhí)行路徑分析的隱藏進(jìn)程檢測(cè)方法[J].計(jì)算機(jī)與數(shù)字工程,2009,1.

[2] 左黎明,蔣兆峰等.Windows Rootkit隱藏技術(shù)與綜合檢測(cè)方法[J].計(jì)算機(jī)工程,2009, 35(10).

[3] 何耀彬,李祥和等.二次跳轉(zhuǎn)的SSDT掛鉤及檢測(cè)方法研究[J].計(jì)算機(jī)工程與應(yīng)用,2012, 48(6).

[4] 李偉,蘇璞瑞.基于內(nèi)核驅(qū)動(dòng)的惡意代碼動(dòng)態(tài)檢測(cè)技術(shù)[J].中國(guó)科學(xué)院研究生院學(xué)報(bào):2010, 27(5).

[5] Richter J, Nasarre C.Windows核心編程[M].5版.北京:清華大學(xué)出版社,2008.

[6] lyer A, Ngo H Q. Towards a theory of insider threat assessment[C]//proceedings of the 2005 International Conference on Dependable Systems and Networks,2005:108-117.

猜你喜歡
防御
數(shù)據(jù)挖掘在計(jì)算機(jī)網(wǎng)絡(luò)病毒防御中的應(yīng)用
論校園無(wú)線局域網(wǎng)的攻擊與防御
計(jì)算機(jī)網(wǎng)絡(luò)安全與防御研究
計(jì)算機(jī)網(wǎng)絡(luò)安全與防御
基于魚(yú)叉式網(wǎng)絡(luò)釣魚(yú)攻擊的防御研究
芻議新局勢(shì)下計(jì)算機(jī)病毒防御技術(shù)
網(wǎng)絡(luò)型病毒與網(wǎng)絡(luò)安全防御研究
烏拉特草原近40年白災(zāi)危害與防御
APT攻擊的特征分析與防御策略