[发明专利]一种面向二进制程序的堆溢出检测方法在审
| 申请号: | 201711104808.4 | 申请日: | 2017-11-10 |
| 公开(公告)号: | CN107729747A | 公开(公告)日: | 2018-02-23 |
| 发明(设计)人: | 和亮;苏璞睿;杨轶;闫佳;黄桦烽;贾相堃 | 申请(专利权)人: | 中国科学院软件研究所 |
| 主分类号: | G06F21/52 | 分类号: | G06F21/52 |
| 代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 余功勋 |
| 地址: | 100190 *** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 面向 二进制 程序 溢出 检测 方法 | ||
技术领域
本发明属于网络安全技术领域,具体涉及一种面向二进制程序的堆溢出检测方法。
背景技术
现有软件漏洞类型繁多,而程序缓冲区溢出漏洞是目前最为常见也是可利用性最高的一类漏洞,其根据缓冲区内存的不同可以分为栈溢出漏洞和堆溢出漏洞。其中,栈溢出漏洞是历史最为悠久的一类溢出漏洞,对于该类型漏洞的挖掘、防御以及可利用性分析已经有相当丰富的研究成果;而对于堆溢出漏洞来说,由于堆自身结构的复杂性以及堆分配的动态特性,目前针对其相关的漏洞挖掘检测、成因分析以及可利用性分析是目前软件漏洞研究领域中的热点及难点问题。
现有的堆溢出检测工作主要分为以下两种:
1)基于堆防护页的检测方法:通过在每个堆块的头部或尾部放置不可访问的防护页,如果堆溢出发生并尝试访问防护页,则系统会因为内存不可访问而告警或者崩溃,从而检测出堆溢出的发生;
2)基于源码重编译的检测方法:该方法主要是替代原有堆分配、释放等函数库,通过新的具有安全检测的函数库(例如,每次堆分配或者释放时,这些函数库中的安全函数会检测堆管理数据是否被破坏)来检测堆溢出的发生。
上述两类方法主要存在的问题在于效率不理想以及存在对于源码的依赖性。
其中,基于堆防护页的检测方法需要在程序每次堆分配申请时额外分配一定数量的内存来充当防护页,该过程将明显增加系统的开销,降低程序的运行效率,使得该方法难以使用于目前流行的大规模程序。而对于第二种借助源码重编译的检测方法,由于其无可避免的需要依赖程序源码,因此对于目前数量众多的闭源软件将无法开展进一步溢出检测分析。
发明内容
针对现有堆溢出检测方法存在的效率不理想以及存在对于源码的依赖性的不足,本发明的目的在于提出一种面向二进制程序的堆溢出检测方法,通过动态监控程序运行过程中的堆分配以及堆指针,识别所有堆访问操作过程中的越界行为,从而完成堆溢出的检测。
本发明所采用的技术方案是:
一种面向二进制程序的堆溢出检测方法,其步骤如下:
根据程序运行过程中的堆管理操作函数的调用情况,对相关堆管理操作信息进行记录;
根据堆管理操作信息生成污点信息并对二者进行关联,通过对污点信息动态传播,动态监控程序运行过程中所有和污点信息相关的操作;
如发现某指令中使用该污点数据,则将该条指令作为堆溢出判断指令;
根据污点数据确定该指令实际访问内存地址,判断该内存地址是否存在堆溢出。
进一步地,所述堆管理操作包括堆分配,堆释放。
进一步地,所述堆管理操作信息包括:堆分配对应的线程标识,堆分配/堆释放的堆起始地址,堆分配/堆释放的大小,是否进行堆分配/堆释放。
进一步地,所述污点信息包括:堆起始地址对应的内存地址及其长度。
进一步地,动态监控程序运行过程中与污点信息相关的操作包括:
通过程序动态监控的方式,获取程序执行过程中的每一条指令,并通过语义解析来进行指令信息的记录,记录内容包括:指令所处的线程标识、指令的语义类型及指令不同操作数所对应的内存地址集合。
进一步地,所述动态监控包括行文监控及指令监控。
进一步地,若指令类型为数据移动或者数据计算,则通过动态污点传播计算,分析相应的污点传播过程。
进一步地,若指令类型为内存地址访问,则根据指令不同操作数所对应的内存地址集合进行判定;
若指令中有操作数为污点,则认定该指令将进行堆内存访问,通过查询污点信息及与其关联的堆管理操作信息来判定访问的内存地址是否超出了其合法的堆空间;
超出则认定存在堆溢出,否则继续进行下一条指令的分析。
一种服务器,其包括存储器和处理器,所述存储器存储计算机程序,所述程序被配置为由所述处理器执行,所述程序包括用于执行前述方法中各步骤的指令。
一种存储计算机程序的计算机可读存储介质,所述计算机程序包括指令,所述指令当由服务器的处理器执行时使得所述服务器执行前述方法中的各个步骤。
通过采取上述技术方案,本发明借助动态污点传播方法,能够细粒度跟踪堆地址相关操作,防止漏报问题发生;通过透明式的动态分析方法,能够保证原有程序的运行效率,可以适用于大规模程序;此外,本发明不需要依赖源代码重编译,能够很好的适应目前数目众多的闭源软件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711104808.4/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种汽车诊断系统及方法
- 下一篇:电动机控制装置、控制方法以及计算机可读介质





