论文部分内容阅读
堆溢出是指写到堆内存块的数据大于其内存容量导致超越边界,从而覆盖相邻内存块内容的一种情形。堆溢出破坏数据的完整性,导致程序运行失败、系统当机,甚至利用它改变程序执行流程执行非授权指令,从而获得被攻击主机的特权以便进行各种非法操作。因此对堆溢出防御的研究,对计算机网络与信息安全、信息对抗有非常重要的理论意义和实用价值。本文指出保护数据信息的完整性是防御的关键点,从为用户程序搭建运行时系统环境,以指令最终进入处理机执行为主线,运用虚拟机技术动态检测、控制关键指令和部分系统调用,给出一种基于进程虚拟机动态防御堆溢出的防御方案。
本文主要包括以下几个研究工作:
1、分析国内外在堆溢出防御方面的研究现状,给出当前防御技术的分类,指出当前防御技术中的不足特别是虚拟机技术在堆溢出防御中的不足。
目前堆溢出防御技术的研究可分成静态防御技术和动态防御技术两大类。静态防御技术是指在源程序编译的不同阶段,依据静态库进行程序更改的代码修正技术,它需要高级语言源代码的支持;动态防御技术是对应用软件的运行环境进行修正的上下文检测和更改技术,主要包括堆不可执行和随机化指令集与地址来防止堆溢出、边界检查和沙箱技术。
当前防御存在的问题是:堆溢出防御技术大多依赖有源代码或函数动态调用库支持的防御;在指令进入处理机后,无法动态地对其进行执行逻辑的防御,从而引发安全问题。而目前的虚拟机技术在堆溢出防御中存在看不到溢出过程,控制不住程序的执行流程,且不能记录溢出发生时缓冲区中的数据等不足。
2、分析堆溢出技术、溢出过程以及溢出防御,指出保护数据信息的完整性是防御的关键点,分析并指出进程虚拟机动态防御堆溢出需要关注的几个关键问题。
堆溢出主要原因是语言在实现上没有对写内存进行边界检查,加上堆具有可读、可写属性,通过对某些数据的修改使用,改变程序执行流程,使程序可能临时具有超级用户权限,某些特殊的系统调用等性质,从而诱发堆溢出攻击。并从用户空间和系统空间角度来分析堆溢出攻击所带来的后果。本文指出保护数据信息的完整性是堆溢出防御的关键。并把动态防御技术分为基于进程和基于系统二类,重点分析搭建进程运行时系统环境防御溢出所需要注意的关键问题。
3、分析并论述堆溢出防御方案的关键技术,指出程序加载、内存布局、指令运行是其中主要的关键技术。
首先分析搭建进程虚拟机运行时系统环境所需的关键问题,分别对应不同的关键技术。其次给出程序加载方案,在此基础上,引出内存布局、指令运行、系统调用等关键技术分析。最后分别给出相应的算法描述,并在此基础上给出一种堆溢出防御的系统模型。
4、依据以上的关键技术,以基于Intel X86 CPU的Windows操作系统为例,提出一种堆溢出防御虚拟机DHOVM(Defense of Heap Overflow Virtual Machine)防护堆溢出方案。运用软件工程的思想,设计并实现该系统。
5、给出验证目标、验证环境和测试大纲,验证DHOVM达到保护数据信息完整性和防护堆溢出的系统设计目标,并运用下推自动机理论对DHOVM能够正确的防御堆溢出给出理论证明。从试验结果和理论证明分析来看,论文关注的问题及所提出的解决问题的思想在研究上是有效的,设计上是可行的,方案的实现是正确的。
最后,给出本文研究工作的总结,并指出下一步值得开展研究的工作内容。