论文部分内容阅读
计算机安全建立在保密性,完整性和可用性之上。保密性是指对信息或资源的隐藏。可用性是指对信息或资源的期望使用能力。完整性指的是数据或者资源的可信度,通常使用防止非法的或者未经授权的数据改变来表达完整性。Windows系列操作系统在当前桌面操作系统中占据绝对统治地位。而Windows操作系统的安全问题却不容乐观,数据显示Windows操作系统下的安全问题成上升趋势。本文将从完整性的角度分析Windows操作系统下程序的安全,并实现其中的关键技术。
本文通过对Windows操作系统下的程序完整性研究,将Windows下程序的完整性受到的攻击进行分类。从完整性破坏的时间上分,可以分为静态完整性破坏和动态完整性破坏。动态完整性从程序的组成粒度上进行分类:从基本块和控制转移指令的粒度考虑程序的完整性为控制流完整性;从函数的粒度考虑程序的完整性为函数完整性;从模块的粒度考虑程序的完整性为模块完整性。本文所研究的重点是Windows应用程序的动态完整性。
通过研究现有完整性检测技术的基础上,设计了一个基于Windows内核的程序完整性检测系统,从不同粒度对Windows的完整性进行检测。分为五个主要模块:反汇编模块、控制流检测模块、函数完整性检测模块、外来模块检测模块、内核保护模块。
反汇编模块采用的是一种静态反汇编和动态反汇编结合的反汇编技术,最终得到二进制代码的控制流图。
控制流检测模块通过Windows操作系统合Intel处理器的调试异常机制来实现的,检测程序的每一次跳转的合法性。
函数完整性检测模块则是根据内核的数据结构获得客户程序的模块信息,扫描模块的导入导出函数表,以及通过重定位表的修改来比较磁盘文件和内存模块中函数体的差别来检测函数的完整性。
对于外来模块的检测:使用了检测注册表项的方式来检测使用注册表来插入动态库;对于使用挂钩来插入动态库,主要是通过内核线程的钩子链表和桌面的全局钩子链表来检测已经挂钩的消息钩子,通过拦截NtUserSetWindowsHookEx来阻断新钩子挂钩客户进程。
内核保护模块以保护内核的完整性来保护其他检测模块。
实验结论证明了本文提出的Windows下程序完整性检测系统的准确性和有效性。