论文部分内容阅读
随着计算机技术的飞速发展,计算机系统的安全问题越来越引人注意。但是由于软件程序自身存在着脆弱性,经常被黑客攻击并加以利用,轻则造成程序崩溃,计算机系统宕机,重则造成大量财产损失。缓冲区溢出漏洞就是经常被利用、极度危险的漏洞类型之一。在程序运行过程中,向缓冲区写入超出其长度的数据,就会造成缓冲区溢出。攻击者可以利用缓冲区溢出漏洞窥探内存数据,或者劫持程序控制流,进而对计算机发动攻击。而在常见的脚本运行环境中,堆缓冲区溢出漏洞最为常见,也更容易被利用,所以,这就给攻击者提供了利用堆缓冲区溢出发动攻击的机会。攻击者可以利用堆分配器存在的安全漏洞,通过去碎片化等技术手段窥探内存数据,改变程序控制执行路径,从而执行对内存读写甚至破坏的恶意指令。论文系统地研究了缓冲区溢出攻击与防御过程,通过对缓冲溢出产生机理的研究,总结了常用的修复手段;通过对漏洞利用程序的研究,概括了利用总体流程,总结了漏洞利用关键步骤。在对溢出漏洞机理充分研究的基础上,选择缓冲区溢出中最为严重的堆溢出漏洞为研究主题,解决现有平台上部署的堆内存管理器在内存分配过程中存在可预测性强、释放再申请内存时可能得到相同的地址等问题。本文首先研究了linux系统glibc库中应用的ptmalloc2算法,并深刻分析其中内存分配及释放过程中的安全性问题,提出一种针对整个堆内存空间的随机化策略。该策略核心设计是维护一段缓存池,并将其中缓存分类为三类堆结构:small_bin、big_bin以及top_chunk。然后设计一种随机化的内存区块分配算法,增加堆内存地址的不可预测性,避免溢出以及重用的漏洞隐患。该算法旨在性能和安全性之间求得平衡,以牺牲部分效率为代价,提高计算机系统的安全性。最后对新算法的安全性和性能消耗进行评估,根据实验结果证明当在随机化参数=12的情况下,能够有效防御现有的堆溢出漏洞,并将额外时间和空间消耗分别控制在10.2%和14%,相比其他算法在安全性上具有明显优势。