[发明专利]基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法有效
申请号: | 201510161507.X | 申请日: | 2015-04-07 |
公开(公告)号: | CN104732152B | 公开(公告)日: | 2017-11-24 |
发明(设计)人: | 王林章;鲍铁匀;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 南京瑞弘专利商标事务所(普通合伙)32249 | 代理人: | 杨晓玲 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法,首先使用漏洞特征匹配方法得到大量含有误报的漏洞疑似路径,其次利用基于状态空间缩减和路径剪枝的符号执行技术验证设定的漏洞疑似静态分析路径,在检测点处通过构建溢出模型以及约束求解判断该漏洞是否有测试用例能够触发。本发明使用动静态结合的方法自动加测缓冲区溢出漏洞,能够运用于漏洞检测以及安全审计,代替人工自动验证静态分析缓冲区溢出漏洞的结果等方向,能够快速进行自动检测并生成溢出漏洞触发测试用例,有效节省时间和人力成本。 | ||
搜索关键词: | 基于 符号 执行 路径 剪枝 缓冲区 溢出 漏洞 自动检测 方法 | ||
【主权项】:
一种基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法,其特征在于该方法包含的具体步骤为:步骤1:程序源码漏洞特征匹配扫描程序源代码,匹配源代码中缓冲区溢出漏洞,用可扩展标记语言存储缓冲区溢出漏洞疑似路径,一条漏洞路径由多个程序位置点组成,一个程序位置点由程序的行号位置以及该位置所属于的文件名所唯一标识,漏洞路径的起始点和结束点分别表示缓冲区的内存分配语句和缓冲区溢出语句,位于起始点和结束点的位置点代表该缓冲区相关的操作语句;步骤2:搜索基本块路径为待测试的程序或者系统构建控制流图,所谓控制流图是一个有向图,控制流图中每个节点代表一个基本块,程序中的每个语句都对应图中的一个节点,控制流在离开基本块之前不会跳转或者停机;将缓冲区溢出漏洞疑似路径中的每一个程序位置点映射到控制流图的基本块,多个程序位置点可能会映射到同一个控制流图的基本块,从而形成一条不完整的由基本块组成路径;根据设定的路径搜索策略获取从程序入口至程序溢出点的一条完整基本块路径;步骤3:抽取动态测试路径上述的基本块组成路径不能够用于引导符号执行的分析过程,原因在于符号执行的过程是对符号执行中间码指令的解释过程,每个指令都能映射到所属于的基本块,基本块内部的指令不存在跳转关系,基本块之间则存在跳转关系;只有在到达基本块入口时,删除该入口指令才有可能阻止符号执行进入无用的基本块,抽取基本块路径中每一个基本块的入口指令的信息即:指令对应程序所在文件名称以及行号,获取以上信息重新生成一条动态测试路径;步骤4:符号执行路径剪枝将当前准备分析的系统或者程序编译到符号执行平台,将动态测试路径以及符号执行编译指令作为输入给符号执行平台,符号执行的过程其实是对中间码指令的逐条解释的过程,在执行过程中,抽取指令的所属于的程序源码的文件以及行号信息,与动态测试路径中的配置信息相对比,跳过不必要执行的中间码,以达到路径剪枝,加快执行速度以及缩减执行状态空间的目的;步骤5:缓冲区溢出漏洞路径误报检测检查符号执行的进程是否到达缓冲区溢出漏洞的疑似点,构建缓冲区溢出漏洞约束条件根据不同的操作设定不同的溢出条件;将溢出条件加入当前路径约束条件,进行约束求解,如果可解,则说明该路径确实存在漏洞,属于溢出路径,如果不可解,则说明该路径是安全路径;步骤6:缓冲区溢出点判定重复以上若干步骤,直到所有的漏洞特征匹配到的路径都已经被验证,对溢出疑似点进行判定:使用如下判定准则:一个缓冲区溢出疑似点对应多条疑似路径,如果缓冲区溢出疑似点的路径集合中有一条为漏洞路径,那么该程序点确认为溢出;如果缓冲区溢出疑似点的路径集合中的每一条都为安全路径,那么该程序点确认为误报点。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201510161507.X/,转载请声明来源钻瓜专利网。