[发明专利]一种二进制程序漏洞自动化定位方法有效
申请号: | 201310104953.8 | 申请日: | 2013-03-28 |
公开(公告)号: | CN103198260A | 公开(公告)日: | 2013-07-10 |
发明(设计)人: | 陈恺;张颖君;赵险峰 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F17/30 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 余长江 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 二进制 程序 漏洞 自动化 定位 方法 | ||
1.一种二进制程序漏洞自动化定位方法,其步骤为:
1)运行待检测二进制程序,记录从该程序开始运行到出错过程中所有指令;
2)根据所记录的指令构建漏洞依赖树,并根据所构建漏洞依赖树从所记录指令中检测指令中的漏洞指令;其中,构建所述漏洞依赖树的过程中,每增加若干个节点检查是否出现漏洞候选节点,如果出现,则产生该漏洞候选节点的临时补丁;
3)观察该临时补丁是否有效,如果有效则停止构建漏洞依赖树,并作为定位到漏洞位置的依据;否则继续构建漏洞依赖树。
2.如权利要求1所述的方法,其特征在于所述漏洞依赖树中的节点表示该程序中的指令,指令之间通过边连接。
3.如权利要求1或2所述的方法,其特征在于所述漏洞依赖树的构建方法为:
1)初始化一工作集wl为空集;对所记录指令中每一执行路径,从该执行路径的最后一条指令开始,顺次取出一指令i;
2)将指令i对应的指令地址加入漏洞依赖树v,将由指令i使用的变量加入工作集wl;
3)初始化一变量branchNum=0;
4)如果指令i不为空且工作集wl不为空,则进行以下循环:如果指令i是依赖输入数据的分支指令,则branchNum=branchNum+1,即对依赖于外部输入的分支进行计数,i指向前一条指令,继续循环过程;如果当前指令i定义的变量var和wl有交集,则从wl中移除这个变量var,并在wl中加入当前指令i使用的变量;计算边长度edgeLen=branchNum-j为指令j到树根的长度,指令j为漏洞依赖树中使用var的节点;然后在漏洞依赖树v中增加节点i,在漏洞依赖树v中增加边(j,i),其长度为edgeLen。
4.如权利要求1或2所述的方法,其特征在于所述每增加若干个节点检查是否出现漏洞候选节点的方法为:a)每增加若干个节点后,检测所述漏洞依赖树中连接每一新增加节点的入边和出边,如果其长度的比值大于设定阈值则将此节点作为漏洞候选节点;b)选择所增加若干个节点中改变变量范围值超过设定比例的节点,将此节点作为漏洞候选节点。
5.如权利要求1或2所述的方法,其特征在于所述记录从该程序开始运行到出错过程中所有指令的方法为:首先设定一阈值;然后从该程序开始运行到出错过程中,对每条指令进行记录,包括每个分支指令和选用的分支进行记录,当记录指令超过设定阈值时则新记录的指令将覆盖最先记录的指令,进行循环记录。
6.如权利要求1或2所述的方法,其特征在于如果该程序的指令指针依赖于外部输入,或者内存引用依赖于外部输入,或者指定的异常函数被触发,则判定该程序出错。
7.如权利要求1所述的方法,其特征在于所述临时补丁的生成方法为:利用指令的执行条件,实现不执行这条指令即可得到程序运行不出错结果的临时补丁。
8.如权利要求7所述的方法,其特征在于如果函数A调用函数B出现问题,但该函数B也被其他函数调用且没出现问题,则对函数A打补丁。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310104953.8/1.html,转载请声明来源钻瓜专利网。