论文部分内容阅读
栈溢出是当前最流行的计算机系统攻击手段之一,近几十年来人们对栈溢出进行了许多深入的研究,并基于不同的思路提出了不同的栈溢出检测防御技术。现有的栈溢出检测技术总体可分为静态检测和动态检测两类,静态检测技术无法防御运行时的栈溢出攻击,动态检测技术的研究大多停留在理论层面,难以被实际应用。现有的栈溢出防御技术大多只能防御基本的栈溢出攻击类型,即仅对返回地址进行保护,却忽视了系统中普遍存在的函数调用与返回不平衡情况,无法判断此种情况下是否有栈溢出发生,因此防御效果并不显著。如果能够实现计算机运行时栈的动态监控,栈溢出的动态检测与防御,并能判断在函数调用与返回不平衡时系统中是否存在栈溢出情况,就能有效的解决栈溢检测防御问题。本文提出了一种基于指令重组的内核栈溢出检测防御技术,通过动态指令重组、线程启动与消亡监控、备份栈建立与销毁等技术实现了基于指令重组的栈溢出检测技术以及基于备份栈的栈溢出防御技术,并基于所提出的栈溢出检测防御技术,完成了基于指令重组的内核栈溢出检测防御系统的设计与实现。针对所实现的栈溢出检测防御系统,设计了主要针对以覆盖返回地址EIP为目标和以调用函数当前EBP为目标的两种最典型的栈溢出攻击进行检测防御的实验方案,对基于指令重组的栈溢出检测防御技术的有效性和实用性进行了验证。实验表明,基于指令重组的内核栈溢出检测防御技术能够有效的检测和防御以覆盖返回地址EIP为目标和以调用函数当前EBP为目标的栈溢出攻击,并能判断在函数调用与返回不平衡时系统中是否发生了栈溢出,且具有系统资源占用率低,实时性高等特点,该技术有效提高了计算机系统的防栈溢出攻击能力和安全性。