论文部分内容阅读
缓冲区溢出是计算机系统中的十分普遍并极具危害性的安全漏洞。C编译器自身的不安全特性使得这种漏洞普遍存在,并随着C程序的广泛使用而被引入到未来的软件中。在实际中利用缓冲区溢出实施攻击的事例屡见不鲜,本文就是针对缓冲区溢出攻击的防御策略进行研究,并在编译器设计中增加防范措施。
由于在缓冲区溢出攻击中,基于栈的溢出攻击实现比较简单,因此这种攻击形式在实际中很常见。本文在深入分析栈溢出原理的基础上,提出了一种运行时刻的栈空间布局随机化防御策略,这个策略是基于栈空间随机化技术、并对它的不足进行了改进而完成的。
文中阐述了现有栈空间随机化技术存在着随机化周期较大的问题,使得程序在较长的时间周期内仍然存在相似性,这样就会存在被多次连续攻击突破的危险。针对这一缺陷,文中提出一种在函数调用时刻对栈帧布局进行随机化的防御策略,使程序能够获得函数周期间的随机性,从而降低连续攻击成功的概率。另外,对于随机化策略难以检测大规模数据溢出的问题,文中提出在栈中引入完整性检测的策略,并使用新的探测值生成方法,可以减少在传统方法中探测值的维护开销。
文中将所提出的解决策略在开源的LCC编译器中进行了一轮实践,并对新策略的攻击成功率和由此带来的程序运行时开销进行了分析和测试。文中对测试结果进行了分析,并说明了程序运行开销的改变情况。