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