专利名称::一种Windows下系统服务Rootkits检测与恢复方法
技术领域:
:本发明涉及一种针对Windows下系统服务Rootkits的检测和恢复方法。
背景技术:
:Windows内核rootkits是近年来Windows操作系统安全的主要威胁之一。在Windows内核rookits中针对系统服务的rootkits占据主要部分,无论是进程隐藏,文件隐藏,还是注册表隐藏都能利用系统服务rootkits实现。关于内核rootkits的检测方法有在内核rootkits进入时进行静态检测;对系统中已经存在的rootkits进行动态检测和恢复。现有检测方法的不足1,不完全准确,检测出来以后不能确定rootkits的类型,也不能动态检测内核中已经存在的rootkits。2,依赖于内核执行程序的符号文件。
发明内容本发明的主要目的是动态检测和恢复Windows系统服务Rootkits。为了克服现有检测方法的不足,对当前Windows下系统服务i"ootkits的各类情况,提出一种利用驱动程序,无需符号文件,检测和修复系统内核的方法。本发明能准确检测出针对系统服务的rootkits,在发现异常的情况下进行恢复。本发明采取的检测方法是1,int2Ehook和sysenterhook的检测和恢复检测int2Ehook和sysenterhook需要确定KiSystemService在磁盘的相对偏移地址KiSystemServiceRVA。KiSystemService的地址是保存在IDT表中的第2E数据项。IDTtable是一张未导出的表其表项的数据结构定义为-第一项为所对应的中断处理函数的地址,若IDTtable在磁盘文件ntoskrnl.exe的相对偏移地址为IDTRVA,在重定位表中,将存在重定位项指向,IDTRVA+i*8(i=0,......255)。KGDT一R0—C0DE的值为0x0008。根据这个特征在重定位表中可以很快得到IDTtable的入口点的相^H^移地址IDTRVA,其第2E项保存了KiSystemServiceRVA。在内核模式下,对于int2E方式调用系统服务,通过指令sidt得到IDTtable在内存中的地址,其第2E项是KiSystemService的地址KiSystemServiceAddr。对于sysenter调用系统服务,通过指令rmsr获得IA32—SYSENTER—EIP的值KiSystemServiccAddr。检测和恢复算法A1:if(KiSystemServiceAddr-KernelBaseAddress!二KiSystemServiceRVA)ddoffsetFlATmamedwaccessdwKGDT—R0—CODE6ndmif(int2E方式调用系统服务)IDTtable[2E].FunctionAddress=KiSystemServiceRVA+KernelBaseAddress;KiSystemServiceAddr=KiSystemServiceRVA+KernelBaseAddress;2,SSDT表重定向的检测和恢复检观ijSSDT表重定向需要确定KeServiceDescriptorTable的RVA。KeServiceDescriptorTable是被ntoskrnl.exe导出的变量,其偏移地址可以通过如下方式获得。KeHandle=LoadLibraryEx("ntoskrnl.exe",0,DONT—RESOLVE—DLL—REFERENCES);KeAddr=GetProcAddress(KeHandle,〃KeServiceDescriptorTable〃)));KeServiceDescriptorTableRVA=KeAddr-(DWORD)KeHandle;在内核模式下,可以直接得到KeServiceDescriptorTableAddr。检测和恢复算法A2:if(KeServiceDescriptorTable.Base-KernelBaseAddress!=KiServiceTableRVA)3,SSDT表项修改的检测和恢复KiServiceTable不是被ntoskrnl.exe导出的变量,不能按第二种情况的方法获得RVA。但是在ntoskrnl.exe的内部函数KilnitSystem中对KeServiceDescriptorTable进《亍了初始化的操作KeServiceDescriptorTable[O].Base=&KiServiceTable;对应的汇编代码是rva:movKeServiceDescriptorTableRVA,KiServiceTable腿对应的丰几器^f戈码是rva:C705**林****在重定位表中将存在一条指针指向rva+2,rva+2地址处保存的值为KeServiceDescriptorTableRVA,并且在rva处的值为0X05C7,搜索重定位表能确定rva的值,紧接着在重定位表中将存在一条指针指向rva+6,其值为KiServiceTable的RVA。得到KiServiceTableRVA后,可以对每一个表项进行检测。检测和恢复算法A3:KiServiceTableAddr=KiServiceTableRVA+KernelBaseAddress;for(inti=l;i〈=ServieFunctionNum;i++)if(KiServiceTableAddr[i]-KernelBaseAddress!=KiServiceTableRVA[i])KiServiceTableAddr[i]=KiServiceTableRVA[i]+KernelBaseAddress;4,服务函数重定向的检测和恢复已经得到了KiServiceTable的RVA,KiServiceTable是一张保存系统服务函数地址的线性表,因此也得到了各个系统服务函数的RVA。比较内核各个系统服务函数的头几个(NUM)字节与磁盘上的原文件相应RVA处保存的内容,判断系统服务函数是否被重定向了。检测和恢复算法A4:KeServiceDescriptorTable.Base二KiServiceTableRVA+KernelBaseAddress;for(inti=l;i〈=ServieFunctionNum;i++)if(memcompare(iServiceFunction,iServiceFunctionRVA,NUM)!=0))本发明能准确检测出针对系统服务的rootkits,在发现异常的情况下进行恢复。下面结合附图和对本发明进一步说明。图l是本发明系统服务检测点图图2是int2Ehook和sysenterhook图图3是SSDT表重定向图图4是SSDT表项修改图图5是服务函数重定向图具体实施例方式如图1所示,对于int2EHook和sysenterHook采用算法1进行检测和恢复;对于SSDT表重定向采用算法2进行检测和恢复;对于SSDT表项修改采用算法3进行检测和恢复;对于服务函数重定向采用算法4检测检测和恢复。权利要求1.一种检测和恢复Windows系统服务Rootkits的方法,其特征是一种利用驱动程序,无需符号文件,检测和修复系统内核的方法。2.根据权利要求l所述的,其特征是利用Windows驱动程序,分别检测int2Ehook和sysenterhook,SSDT表重定向,SSDT表项修改,服务函数重定向。全文摘要一种检测和恢复Windows系统服务Rootkits的方法,利用Windows驱动程序,分别检测int2Ehook和sysenterhook,SSDT表重定向,SSDT表项修改,服务函数重定向。能准确检测出Windows下各种系统服务rootkits并且进行恢复。文档编号G06F11/36GK101582047SQ200810024728公开日2009年11月18日申请日期2008年5月12日优先权日2008年5月12日发明者海龙申请人:海龙