版权所有:内蒙古大学图书馆 技术提供:维普资讯• 智图
内蒙古自治区呼和浩特市赛罕区大学西街235号 邮编: 010021
作者单位:华中科技大学
学位级别:硕士
导师姓名:韩兰胜
授予年度:2023年
学科分类:0839[工学-网络空间安全] 08[工学] 081201[工学-计算机系统结构] 0812[工学-计算机科学与技术(可授工学、理学学位)]
摘 要:释放重用(Use-After-Free,简称UAF)漏洞是一种高危内存漏洞,其特征是分配内存、释放内存、使用已释放内存这三者按序出现,而且它们可能存在于程序的任何地方。UAF漏洞的检测和防御是当前比较具有挑战性的问题。静态分析的方法不能获取程序运行时的状态,往往会产生漏报和误报,动态分析的大多数方法则在性能或者功能上表现不佳,存在性能开销过大或是只能防御UAF漏洞而不能检出的问题。 针对现有技术的不足,本文提出一种基于引用计数和中间指针的UAF漏洞防御与检测系统MPCounter。通过底层虚拟机(Low Level Virtual Machine,简称LLVM)插桩技术,在堆对象和原始指针之间引入中间指针来隔离原始指针对堆对象的访问,所有对堆内存的访问都通过中间指针来实现,在堆对象释放后,引用该对象的中间指针被置为无效,再次解引用已释放堆对象则会被检出UAF漏洞。同时使用指针跟踪对中间指针进行引用计数,当中间指针的被引用次数为0时进行释放,减少了中间指针不能释放带来的内存开销。为了降低中间指针的插入、搜索时间复杂度,使用红黑树作为中间指针的组织结构,同时为了防御位于栈和数据段的悬挂指针导致的UAF漏洞,使用影子栈记录位于栈和数据段的指针与中间指针的引用关系。 经测试表明,基于LLVM编译器插桩实现的MPCounter系统可以有效防御和检测UAF漏洞。在Juliet Test Suitev(JTS)和UAFBenchmark测试集上进行的有效性测试展示了MPCounter可以有效防御UAF漏洞,在Mi Bench上进行的性能测试展示了MPCounter可以在较少的时间开销和内存开销下运行。和单纯的UAF漏洞防御方法相比,MPCounter还能检出漏洞,和其它检测方法相比有接近的性能开销。