本站小编为你精心准备了HOOK技术的进程管理参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《计算机工程与设计杂志》2014年第七期
1系统设计及技术原理
1.1隐藏进程的检测(1)挂接SSDT检测Windows操作系统是一个分层的系统,每层对系统资源有着不同的访问权限。SSDT[6]在ring3的Win32API和ring0的NativeAPI之间建立地址映射。它不仅包括地址索引表,还包括一些其它有用的信息,诸如地址索引的基地址,服务函数的个数等。所有的ring3层API在系统内核模式下都有对应的系统服务函数。大多数此类API请求都会通过系统调用转入内核,Rootkit恶意程序挂接SSDT后,若修改进程枚举查询类服务号对应的入口地址,进而转向钩子函数地址,就可以修改获取的操作系统内部进程信息,如抹去自己要隐藏的进程等,然后把处理后的结果返还给用户,用户获取的进程信息将是不全面的[7]。Root-kit恶意程序以此来达到隐藏进程的目的。基于这个原理,可以通过重新读取ntoskml.exe文件来得到一个纯净的SS-DT拷贝,然后与内存中SSDT作比较,这样可以有效防止Rootkit将SSDT中的某些系统服务地址替换成钩子的地址[8]。这种检测方法效率高,但也存在着不足之处,如Rootkit程序可以采用修改执行系统调用的中断或者是用全局服务描述表中的调用门实现系统调用避开这种方法的检测。安装调用门实现进程隐藏的原理是通过安装调用门直接由ring3层直接进入ring0层,并提升权限,修改EPRO-CESS结构,删除要隐藏的进程[9]。恢复SSDT相关服务地址不能检测出此类隐藏进程,可靠性不高。(2)挂钩SwapContext检测进程是分配和拥有资源的基本单位,线程是独立运行和调度的基本单位。线程不占有资源,线程的运行必须依赖于资源,一定隶属于某个进程。因此,根据线程可以找到它所属于的进程。CPU在运行多个程序时,不停地在各个线程之间切换,如果根据每个切换到的线程找到它隶属于的进程,在足够长的时间内,则可以获取到系统内所有的进程。利用Inlinehook技术对SwapContext函数处理,即可截获即将被换入的进程和其所属进程[11]。无论进程是否隐藏,EPROCESS结构是否被修改,如果一个进程处于运行态,总有属于它的线程是活动的。一定可以根据属于它的线程找到该进程。通过安装调用门隐藏进程的Rootkit程序也不能躲避该检测方法的检测。这种检测方法也存在一定的弊端。1)只有线程被分配到时间片,才能被截获,进而找到其所属进程。如果在一段时间内,一个进程处于等待状态,则无法截获其线程,也就无法得到该进程(包括普通进程和隐藏进程)。这也是该方法在短时间内枚举进程远少于任务管理器的原因。如果足够长的时间,该方法几乎能得到系统的所有进程(systemidle进程,系统很少给它分配时间片)。2)系统在每次进程切换时都要进行进程查询、对比进程列表,如此耗时的工作会一定程度地影响操作系统的效率。这种检测隐藏进程的方法在长时间内检测可靠性比较高[12]。上述两种方法都能检测到隐藏进程,也都存在着一定的不足,本文根据两种检测方法的思想,集合两种方法的优点,把两种检测方法有效结合,设计出一种基于HOOK技术检测隐藏进程的方法。首先重新读取ntoskml.exe文件来得到一个纯净的SSDT拷贝,然后与内存中SSDT作比较。如果相关系统服务地址被修改过,则恢复到服务原来的地址。根据进程查询类函数获得进程列表,然后根据进程的PID大小进行快速排序,把各个进程的PID排序后依次存放在数组Array中,形成有序进程列表List。利用In-lineHOOK技术挂钩SwapContext,根据运行线程得到其所属进程的PID,然后在数组Array中进行查询。若有相应的PID,说明已经检测到该进程,若没有该PID,说明该进程是未检测到的隐藏进程,就把该进程插入到List中,继续查找下一个进程,进行上述操作。如果用户需要获取系统进程列表,只需调用有序进程列表List即可。系统每间隔一段时间会对列表List刷新一次,检测方法流程如图2所示。图2隐藏进程检测流程
1.2结束批量进程Windows任务管理器每次只能终止一个进程。有些病毒属于双进程守护病毒,病毒进程之外有一个守护进程,它们之间相互监视,不断检测对方是否被终止。当发现对方被终止时,会迅速创建对方。针对此类病毒,单独结束一个进程是不会起到任何效果的,只有同时结束所有与它有关的进程,才能彻底清除此类病毒。本文设计一种方法终止此类病毒的运行(流程如图3所示),确定可疑进程后,根据可疑进程查找其守护进程,由于此类病毒的一个进程被结束的时候,另一个进程会创建它。若把病毒的一个进程定义为父进程,另一个则是子进程,但子进程同时也是父进程,而且子进程不会随着父进程的消亡而自动结束。因此可以根据病毒子进程的PID获取父进程的PID。获取选中的进程PID后,调用OpenProcess函数获取该进程句柄,然后获取其父进程的PID,这里调用了一个微软未公开的APINtQueryInformationProcess,该API位于Ntdll.dll面,其中第二个参数是PROCESSINFOCLASS结构体,该结构体的最后一个字段Reserved3就是父进程的PID。当选中要结束的多个进程时,系统会根据选中进程的句柄获取各个进程的PID,然后把进程PID作为参数传入自定义函数MyTerminateProcessList,实现同时结束多个进程的功能。函数关键代码如下:
1.3获取进程占用系统资源信息Windows程序调用API函数GetProcessMemoryInfo可以得到每个进程的虚拟内存和物理内存的使用情况。没有具体的API函数能够直接得到CPU的占用率情况。任务管理器中的大部分进程的CPU占用率是0,这是因为在很短的时间内,进程处于等待状态,没有分到时间片。通过一个特定时间段内(n个刷新周期)计算单个进程消耗CPU的时间和所有进程的总时间,它们的比值就是那个单个进程的CPU占有率。可以调用GetProcessTimes函数获取进程消耗的内核态时间KernalTime和进程消耗的用户态时间UserTime,二者之和即为进程消耗的CPU时间。同时可以通过调用GetSystemTimes获取总的CPU时间IdleTime、KernelTime、UserTime。可用于计算系统总的CPU占用率(多核CPU中返回的是所有CPU核时间的总和)。
2系统实现
图4给出了系统关键模块的实现界面。其中图4(a)图显示的是内存监控模块的界面,用户可以通过这个模块查看每个进程占用的物理内存和虚拟内存,并通过系统设置标记指定进程的信息。图4(b)图显示的是进程监控模块,这里系统默认把隐藏进程标记出来,用户可以获取进程的守护进程。如果进程有守护进程的PID,否则,返回空。如果用户想要批量结束进程,只需要勾选中进程后面的选框,单击结束进程即可。图4(c)图显示的是系统对每个进程的CPU监控情况,用户可以结束掉占用CPU较高的进程。
3系统实验环境及分析
3.1实现环境系统在Windows2003操作系统下,运用MicrosoftVi-sualC++6.0的开发环境,采用C++为开发语言,系统运行所需的硬件环境为Intel(R)Pentium(R)4CPU2GHz以上,内存512M以上,硬盘32G以上。系统无需进行安装,直接以管理员的身份运行即可。
3.2系统效率分析文献[11]通过重载SSDT实现隐藏进程的检测,直接通过进程枚举查询类函数即可获取进程列表,不需要根据进程的PID进行比较排序,也无需进行进程之间的对比,故比较的次数为0。文献[12]方法通过挂钩SwapContext实现隐藏进程的检测。假设系统内运行着n个进程,隐藏了m个进程,根据挂钩SwapContext检测进程的原理可知,系统每次截获一个进程都需要进程之间的比较至少n次,总的比较次数大于n2次。本文提供的方法则是先对文献[11]方法获取进程根据PID排序,采用快速排序的总的比较次数为n*log2n。排序后,根据挂钩SwapContext获得的进程在排序后的有序表中查找,采用二分法查找的总的比较次数为n2/2,文献[11]方法不能检测通过调用门实现隐藏的进程,可靠性不高。文献[12]方法的高可靠性必须在长时间内才能体现出来,短时间内得到的进程远远小于系统内真实存在的进程数目。本文方法将二者有效地结合,进程间比较次数相对减少,在效率上略优于挂钩SwapContext,可靠性也高于二者。表1对3种方法对检测隐藏进程方面做了对比。
3.3系统的性能分析表2给出了系统运行前后操作系统CPU和内存的变化情况,可以看到系统的运行并没有对系统资源有较大影响。针对非调用门类型木马程序,如SubSeven、BO2K、冰河、广外女生,本文系统和冰刃、ProcessExplore等进程查杀工具都可以有效检测到。在Windows环境下用VC6.0实现记录键盘输入的调用门木马程序MyRootkit,程序运行时,冰刃和ProcessExplore等检测不到被隐藏木马信息,而本系统在运行一段时间内能够检测到隐藏进程MyRootkit.exe。4结束语SSDTHOOK技术是内核HOOK技术的一种,用于很多杀毒软件和安全软件中。本文将该技术与InlineHOOK技术结合起来,实现了检测隐藏进程的功能。与挂钩系统调用检测方法相比,提高了可靠性,降低了效率。与挂接SwapContext检测方法相比,效率和可靠性都得到了提高。设计和实现了一个进程管理系统,不但能够检测到用户系统内的隐藏进程,而且具有终止批量进程的能力。无需安装,便捷易用,方便了用户手工杀毒,对系统内的进程进行管理。本文检测方法的效率只是略优于挂钩SwapContext检测,如何进一步提高检测效率,是下一步重点要研究的内容。
作者:赵广强凌捷单位:广东工业大学计算机学院