● 摘要
缓冲区溢出攻击是近十年来最为常见的信息安全隐患之一。攻击者可以利用系统中的缓冲区溢出漏洞,非法操作程序中的数据缓冲区,进而达到篡改程序的运行流程,甚至获得系统权限运行恶意代码等目的。这种攻击方式具有极大的破坏性和隐蔽性,对系统安全造成了极大的威胁。本文研究了缓冲区溢出攻击的原理,分析了国内外常用的缓冲区溢出攻击检测技术,发现这些方法存在的一些不足:需要程序源代码;频繁进行溢出攻击检测;执行效率不高等。同时,目前绝大部分的缓冲区溢出攻击检测都是针对缓冲区溢出这一动作进行保护,比如StackGuard方法对所有函数的返回都进行溢出检测,检测带来的性能损耗较大。
为了改进现有方法存在的不足,本文从限制攻击者攻击行为的角度,设计并实现了一种缓冲区溢出攻击的动态检测方案。通过对API调用的合法性检查的手段,防止了攻击者非法调用系统关键API,进而避免了攻击者对系统功能的恶意使用。该方案具有较强的针对性,可以仅在关键部分进行重点检测,能够减少缓冲区溢出攻击动态检测带来的性能消耗。依据该解决方案,本文使用了代码注入、API拦截、调试器等技术,在Windows平台上实现了一个缓冲区溢出攻击保护系统。在系统在实现的过程中,主要解决了以下两个技术难点:首先是在程序运行的过程中,区分合法的API调用与由攻击代码发起的API调用;其次是在不影响程序正常运行的前提下,对目标API进行动态的拦截。针对第一个技术难点,本文使用目标API被调用时的程序栈大小、相对返回地址以及API调用模块名称的三元组作为一次API调用的状态信息,并以此作为区分API调用合法性的凭证;针对第二个技术难点,本文编写汇编代码对进程地址空间中的目标API进行动态检索,并修改内存中API代码,从而实现了对API进行拦截的目的。
目前,缓冲区溢出攻击保护系统已经完成。本文通过对现有一些软件进行实验及测试,证明了系统能够成功拦截缓冲区溢出攻击,可以为Windows平台下的多数软件提供缓冲区溢出攻击保护。
相关内容
相关标签