CN105487983B - 基于智能路径引导的敏感点逼近方法 - Google Patents
基于智能路径引导的敏感点逼近方法 Download PDFInfo
- Publication number
- CN105487983B CN105487983B CN201510997194.1A CN201510997194A CN105487983B CN 105487983 B CN105487983 B CN 105487983B CN 201510997194 A CN201510997194 A CN 201510997194A CN 105487983 B CN105487983 B CN 105487983B
- Authority
- CN
- China
- Prior art keywords
- point
- branch point
- sensitive spot
- path
- intermediate language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于智能路径引导的敏感点逼近方法,包含:提取不同类型的漏洞模型,通过静态分析识别敏感点位置;以敏感点为起点,采用路径回溯算法向上回溯,查找所有路径分支点,直至回溯到离程序入口点最近的路径分支点;对被测程序进行指令级插桩,输入初始样本,记录与污点有关的二进制指令序列;将二进制指令序列提升为中间语言描述;获得中间语言描述的路径分支点,根据分支点是否位于集合中,对分支点进行翻转,引导控制流抵达敏感点;从翻转后的中间语言描述中提取约束范式,使用STP约束求解器进行求解,产生新的样本,返回重新输入样本。本发明通过敏感点引导控制流抵达敏感点位置,有效缓解路径爆炸的问题,提高漏洞挖掘的效率。
Description
技术领域
本发明涉及漏洞挖掘和信息安全技术领域,特别涉及一种基于智能路径引导的敏感点逼近方法。
背景技术
动态数据流分析是研究与发现软件漏洞的有效手段,其中动态污点分析技术的使用最为突出。动态污点分析从软件安全漏洞利用的本质出发,标记外部输入为污点数据,跟踪污点数据在内存中的扩散过程,检测程序是否非法使用污点数据,譬如覆盖栈中返回地址,作为EIP的值等等。动态污点分析技术广泛运用于软件回归测试、软件脆弱性分析、网络渗透攻击检测分析等领域中。由于其抓住了软件安全漏洞利用的实质,无论安全漏洞是否已经公开,该检测技术在原理上都是行之有效的。但是如何高效地进行动态污点分析是软件分析中的重要问题。为解决测试案例集覆盖率低下的问题,目前研究的热点是将程序抽象为形式化模型,采用测试案例自动生成算法对形式化模型中的各种信息进行提取、生成一个完备的测试案例集,其中最常用的方法是符号执行。符号执行是一种基于符号化的模型检验方法,广泛用于符号调试,测试案例生成等。其核心思想是使用符号值代替具体的变量输入,并使用符号表达式来表示程序中各变量的值。最终,程序的输出值被转化为一个以符号值作为输入的函数。符号执行将程序抽象为符号执行树,其中顺序语句对应着树的计算节点,分支语句对应着分支节点,而对于循环语句,将其按循环次数展开为语义上等价的分支语句。一般,一条循环语句对应一组分支节点。可以认为,在符号执行过程中,程序只有顺序和分支两种结构。符号执行的过程本质上是路径条件的构造过程。路径条件指的是对于执行该路径的测试案例,程序输入值所需要满足的数学约束条件。因而一个路径条件唯一地对应一条执行路径。一个路径条件由一组子条件(sub-condition)组成,每一个被执行分支的条件作为一个子条件。在初始时路径条件为true,在探索程序的过程中,每遇到一个分支语句,就更新路径条件,将被执行分支的条件加入到路径条件中,公式为PC=PC^newsub-condition。由于每一个分支语句都对应着true和false两个分支,而符号执行基于静态分析,变量没有具体的数值,因而无法确定执行哪一条分支。所以对两条分支都进行探索(搜索顺序可按需定义,深度优先,广度优先等),即分别以两个分支的条件作为子条件来更新路径条件。这样就得到了两个新的路径条件,对应两条不同的执行路径。之后,继续对这两条路径分别进行探索。符号执行实现了对程序的全路径探索。当程序探索结束时就得到了被测程序所有执行路径的路径条件。最后,检查所有得到的路径条件,如果路径条件是无法被满足的,则说明该路径是一条不可执行路径,如果路径条件可以被满足,则说明该路径是一条可执行路径。将路径条件输入约束求解器即可解出对应的测试案例。
但是现阶段符号执行的使用仍存在一定阻碍,使得其难以大规模使用。首先符号执行是一种基于搜索的遍历算法,需要对程序的所有分支进行遍历,虽然可以通过一些附加的剪枝条件进行优化,但其算法的复杂度非常高,为O(2n),其中n为被测程序中分支点的数目,导致路径爆炸,测试的效率就受到较大影响。其次针对二进制代码,由于其缺乏包含语义和语法的类型信息。使得对其的污点分析污染源往往是外部输入的比特流,只能按字节等内存操作数的粒度来定义污点数据;同样地,对于符号执行来说,对输入数据的符号化也将针对字节粒度等。这不仅增加了技术实现的复杂性,也会使得符号执行得到的符号表达式往往非常庞大、冗余很多,由此得到的路径条件往往相当复杂或难于求解。
发明内容
针对现有技术中的不足,本发明提供一种基于智能路径引导的敏感点逼近方法,根据漏洞模型识别出可疑漏洞位置,有效缓解路径爆炸问题,提高漏洞挖掘的效率。
按照本发明所提供的设计方案,一种基于智能路径引导的敏感点逼近方法,包含如下步骤:
步骤1.标记敏感点,提取不同类型的漏洞模型,通过静态分析,识别出可疑的漏洞位置,标记为敏感点;
步骤2.以敏感点为起点,采用路径回溯算法向上回溯,查找所有路径分支点,找到跳转指令地址,直至回溯到离程序入口点最近的路径分支点,将所有的路径分支点放入可达路径集合T=(t1,t2...tm);
步骤3.对被测程序进行指令级插桩,输入初始样本,记录与污点有关的二进制指令序列;
步骤4.将二进制指令序列提升为中间语言描述;
步骤5.获得中间语言描述的路径分支点P=(p1,p2...pn),第一个分支点p1肯定在集合T=(t1,t2...tm)中,并且p1=t1,根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,若pi∈T且(1≤i<n),则将中间语言描述中的分支点pi进行翻转,若pi∈T且pi+1∈T(1≤i<n),则不改变分支点,找到不在集合T中的分支点,若所有分支点都在集合T中,说明控制流已抵达敏感点,算法结束,否则,进入步骤6;
步骤6.从翻转后的中间语言描述中提取约束范式,使用STP约束求解器进行求解,产生新的样本,回到步骤3,重新输入样本。
上述的,步骤2具体包含如下内容:
步骤2.1、将敏感点位置记为A,建立队列L1、L2,并初始化为空;
步骤2.2、获取A的交叉引用(A1,A2…)=f(A),(A1,A2…)表示交叉引用结果的集合,判断集合中元素的个数N,若N为0,执行步骤2.5;若N为1,执行步骤2.3;若大于1,则执行步骤2.4;
步骤2.3、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在,则保存到最终结果集合RES中;若存在,则不保存,将元素位置设为A,执行步骤2.2;
步骤2.4、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在,则保存到最终结果集合RES中;若存在,则不保存,并判断元素是否在L1或者L2中,不在的元素结果入队L2;
步骤2.5、获取队列L2队头,位置设为A,将A入队L1,执行步骤2.2,并判断队列L2,若队列L2为空,则算法结束。
上述的,所述步骤5中根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,具体包含如下内容:
步骤5.1、输入当前分析的路径分支点序号i,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称;
步骤5.2、查询集合T,判断路径分支点pi相对地址是否在集合T中,若pi相对地址不在集合T中或pi为当前路径最后分支点,则算法结束,否则进入步骤5.3;
步骤5.3、查询集合T,判断路径分支点pi+1相对地址是否在集合T中,若pi+1相对地址不在集合T中,则将分支点pi翻转,得到翻转后的中间语言文件,否则,进入步骤5.4;
步骤5.4、不翻转当前路径分支点pi,i递增1,将当前分析的路径分支点切换为下一个,跳转步骤5.1执行。
上述的,所述步骤5.1中,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称,具体包含如下步骤:
步骤5.1.1、打开中间语言描述文件,设置bool型变量found为false;
步骤5.1.2、判断是否到达文件终止处,若是,则跳转至步骤5.1.8,否则,读取一行文件内容到字符串line中,备份读取该行前的文件指针值到curpos1,备份读取该行后的文件指针值到curpos2;
步骤5.1.3、判断line中保存的内容是否是assert语句所在行内容,若是,则进入步骤5.1.4,否则,跳转至步骤5.1.6执行;
步骤5.1.4、判断该assert语句对应的分支点深度是否等于i,若是,则将found变量赋值为true,并进入步骤5.1.5,否则,跳转至步骤5.1.2执行;
步骤5.1.5、利用curpos1读取上一行的内容,使用字符串截取出内容中该分支点指令的绝对地址addr,跳转至步骤5.1.2执行;
步骤5.1.6、通过字符串比较操作,判断line中保存的内容是否是loaded module所在行内容,若是,则进入步骤5.1.7,否则,跳转至步骤5.1.2执行;
步骤5.1.7、截取出模块名称、模块低地址和模块高地址,存放于结构体数组module中,跳转至步骤5.1.2执行;
步骤5.1.8、文件扫描结束时,如果found变量为false,则在输出结果中插入错误路径标记,并进入步骤5.1.10,如果found变量为true,则进入步骤5.1.9;
步骤5.1.9、比较分支点绝对地址addr和结构体数组module中保存的模块低地址和模块高地址,判断出指定分支点所在的模块名称modulename,并计算分支点相对地址relativeaddr,将modulename和relativeaddr写入输出结果,进入步骤5.1.10;
步骤5.1.10、算法结束,从输出结果中查找到分支点地址。
本发明的有益效果:
1、本发明根据漏洞模型识别出敏感点位置,通过敏感点来引导控制流抵达敏感点位置,有效缓解现有技术中路径爆炸的问题,提高漏洞挖掘的效率,因敏感点是漏洞挖掘的终点,如何构造测试样本抵达敏感点位置是关键,通过深度和广度优先算法,抵达敏感点需要产生样本个数为O(2^n),通过本发明的智能引导,产生样本的数量可以减少为O(n),其中,n为被测程序中分支点的数目。
2、本发明目的性强,可以专门测试特定类型的漏洞,通过静态分析扫描漏洞模型,识别出符合特定漏洞模式的敏感点,通过动态符号执行,智能逼近敏感点,验证该敏感点是否为真实漏洞,通过异常监控,若发现触发异常,则判定为真实漏洞,否则说明静态分析扫描结果为误判,有效降低静态扫描的误报率,大大提高测试效率。
附图说明:
图1为现有技术中基于深度优先遍历算法的全局翻转点示意图;
图2为本发明的流程示意图;
图3为本发明的全局翻转点示意图。
具体实施方式:
下面结合附图和技术方案对本发明作进一步详细的说明,并通过优选的实施例详细说明本发明的实施方式,但本发明的实施方式并不限于此。
实施例一,参见图2所示,一种基于智能路径引导的敏感点逼近方法,包含如下步骤:
步骤1.标记敏感点,提取不同类型的漏洞模型,通过静态分析,识别出可疑的漏洞位置,标记为敏感点;
步骤2.以敏感点为起点,采用路径回溯算法向上回溯,查找所有路径分支点,找到跳转指令地址,直至回溯到离程序入口点最近的路径分支点,将所有的路径分支点放入可达路径集合T=(t1,t2...tm);
步骤3.对被测程序进行指令级插桩,输入初始样本,记录与污点有关的二进制指令序列;
步骤4.将二进制指令序列提升为中间语言描述;
步骤5.获得中间语言描述的路径分支点P=(p1,p2...pn),第一个分支点p1肯定在集合T=(t1,t2...tm)中,并且p1=t1,根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,若pi∈T且(1≤i<n),则将中间语言描述中的分支点pi进行翻转,若pi∈T且pi+1∈T(1≤i<n),则不改变分支点,找到不在集合T中的分支点,若所有分支点都在集合T中,说明控制流已抵达敏感点,算法结束,否则,进入步骤6;
步骤6.从翻转后的中间语言描述中提取约束范式,使用STP约束求解器进行求解,产生新的样本,回到步骤3,重新输入样本。
实施例二,参见图2~3所示,一种一种基于智能路径引导的敏感点逼近方法,通过下述步骤对路径进行智能引导,最终抵达缓冲区溢出敏感点,具体如下:
步骤1.标记敏感点,提取不同类型的漏洞模型,通过静态分析,识别出可疑的漏洞位置,标记为敏感点;
步骤2.以敏感点为起点,采用路径回溯算法向上回溯,查找所有路径分支点,找到跳转指令地址,直至回溯到离程序入口点最近的路径分支点,将所有的路径分支点放入可达路径集合T=(t1,t2...tm),具体包含如下内容:
步骤2.1、将敏感点位置记为A,建立队列L1、L2,并初始化为空;
步骤2.2、获取A的交叉引用(A1,A2…)=f(A),(A1,A2…)表示交叉引用结果的集合,判断集合中元素的个数N,若N为0,执行步骤2.5;若N为1,执行步骤2.3;若大于1,则执行步骤2.4;
步骤2.3、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在则保存到最终结果集合RES中;若存在则不保存,将元素位置设为A,执行步骤2.2;
步骤2.4、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在则保存到最终结果集合RES中;若存在则不保存,并判断元素是否在L1或者L2中,不在的元素结果入队L2;
步骤2.5、获取队列L2队头,位置设为A,将A入队L1,执行步骤2.2,并判断队列L2,若队列L2为空,则算法结束。
步骤3.对被测程序进行指令级插桩,输入初始样本,记录与污点有关的二进制指令序列;
步骤4.将二进制指令序列提升为中间语言描述;
步骤5.获得中间语言描述的路径分支点P=(p1,p2...pn),第一个分支点p1肯定在集合T=(t1,t2...tm)中,并且p1=t1,根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,若pi∈T且(1≤i<n),则将中间语言描述中的分支点pi进行翻转,若pi∈T且pi+1∈T(1≤i<n),则不改变分支点,找到不在集合T中的分支点,若所有分支点都在集合T中,说明控制流已抵达敏感点,算法结束,否则,进入步骤6;
根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,具体包含如下内容:
步骤5.1、输入当前分析的路径分支点序号i,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称,具体包含如下步骤:
步骤5.1.1、打开中间语言描述文件,设置bool型变量found为false;
步骤5.1.2、判断是否到达文件终止处,若是,则跳转至步骤5.1.8,否则,读取一行文件内容到字符串line中,备份读取该行前的文件指针值到curpos1,备份读取该行后的文件指针值到curpos2;
步骤5.1.3、判断line中保存的内容是否是assert语句所在行内容,若是,则进入步骤5.1.4,否则,跳转至步骤5.1.6执行;
步骤5.1.4、判断该assert语句对应的分支点深度是否等于i,若是,则将found变量赋值为true,并进入步骤5.1.5,否则,跳转至步骤5.1.2执行;
步骤5.1.5、利用curpos1读取上一行的内容,使用字符串截取出内容中该分支点指令的绝对地址addr,跳转至步骤5.1.2执行;
步骤5.1.6、通过字符串比较操作,判断line中保存的内容是否是loaded module所在行内容,若是,则进入步骤5.1.7,否则,跳转至步骤5.1.2执行;
步骤5.1.7、截取出模块名称、模块低地址和模块高地址,存放于结构体数组module中,跳转至步骤5.1.2执行;
步骤5.1.8、文件扫描结束时,如果found变量为false,则在输出结果中插入错误路径标记,并进入步骤5.1.10,如果found变量为true,则进入步骤5.1.9;
步骤5.1.9、比较分支点绝对地址addr和结构体数组module中保存的模块低地址和模块高地址,判断出指定分支点所在的模块名称modulename,并计算分支点相对地址relativeaddr,将modulename和relativeaddr写入输出结果,进入步骤5.1.10;
步骤5.1.10、算法结束,从输出结果中查找到分支点地址;
步骤5.2、查询集合T,判断路径分支点pi相对地址是否在集合T中,若pi相对地址不在集合T中或pi为当前路径最后分支点,则算法结束,否则进入步骤5.3;
步骤5.3、查询集合T,判断路径分支点pi+1相对地址是否在集合T中,若pi+1相对地址不在集合T中,则将分支点pi翻转,得到翻转后的中间语言文件,否则,进入步骤5.4;
步骤5.4、不翻转当前路径分支点pi,i递增1,将当前分析的路径分支点切换为下一个,跳转步骤5.1执行。
步骤6.从翻转后的中间语言描述中提取约束范式,使用STP约束求解器进行求解,产生新的样本,回到步骤3,重新输入样本。
随着程序版本升级,会引入新的代码块,称为增量代码,增量代码在增多程序功能同时,也可能引入新的安全风险;原来的代码已经经过之前的多次测试,相对安全,所以针对增量代码的测试,能够提高测试效率,首先通过静态分析技术,识别出可增量代码位置,记为敏感点;以敏感点为起点,采用路径回溯算法,向上回溯查找所有路径分支点,即跳转指令的地址,直至回溯到离程序入口点最近的一个路径分支点,将所有的路径分支点放入一个可达路径集合T=(t1,t2...tm);对被测试程序进行指令级插桩,输入初始样本,记录与污点有关的二进制指令序列,同时通过对程序进行异常监控,若发生异常,很有可能触发了漏洞,进一步保存异常上下文,包括发生异常时的指令,寄存器,以及内存等信息,以待人工进一步进行漏洞可用性判定;将记录的二进制指令序列提升为中间语言描述;获得中间语言描述的路径分支点P=(p1,p2...pn),第一个分支点p1肯定在集合T中,并且p1=t1,但是之后的分支点不一定在集合中,若pi∈T且(1≤i<n),则将中间语言描述中的分支点pi翻转;若pi∈T且pi+1∈T(1≤i<n),则不改变分支点,一直找到不在集合T中的分支点,若所有分支点都在集合T中,那么说明控制流已经抵达敏感点,算法结束;从翻转后的中间语言描述中提取约束范式,然后使用STP约束求解器求解,产生新的样本,然后回到前述输入样本步骤重新执行。
根据漏洞模型识别出敏感点位置,通过敏感点来引导控制流抵达敏感点位置,有效缓解现有技术中路径爆炸的问题,提高漏洞挖掘的效率,因敏感点是漏洞挖掘的终点,如何构造测试样本抵达敏感点位置是关键,通过深度和广度优先算法,如图1所示,抵达敏感点需要产生样本个数为O(2^n),通过本发明的智能引导,参见图3所示,产生样本的数量可以减少为O(n),其中,n为被测程序中分支点的数目。
本发明并不局限于上述具体实施方式,本领域技术人员还可据此做出多种变化,但任何与本发明等同或者类似的变化都应涵盖在本发明权利要求的范围内。
Claims (2)
1.一种基于智能路径引导的敏感点逼近方法,其特征在于:包含如下步骤:
步骤1.标记敏感点,提取不同类型的漏洞模型,通过静态分析,识别出可疑的漏洞位置,标记为敏感点;
步骤2.以敏感点为起点,采用路径回溯算法向上回溯,查找所有路径分支点,找到跳转指令地址,直至回溯到离程序入口点最近的路径分支点,将所有的路径分支点放入可达路径集合T=(t1,t2...tm);
步骤3.对被测程序进行指令级插桩,输入初始样本,记录与敏感点有关的二进制指令序列;
步骤4.将二进制指令序列提升为中间语言描述;
步骤5.获得中间语言描述的路径分支点P=(p1,p2...pn),第一个分支点p1肯定在集合T=(t1,t2...tm)中,并且p1=t1,根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,若pi∈T且则将中间语言描述中的分支点pi进行翻转,若pi∈T且pi+1∈T(1≤i<n),则不改变分支点,找到不在集合T中的分支点,若所有分支点都在集合T中,说明控制流已抵达敏感点,算法结束,否则,进入步骤6;其中,根据分支点是否位于集合T中,对分支点进行翻转,引导控制流抵达敏感点,具体包含如下内容:
步骤5.1、输入当前分析的路径分支点序号i,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称;其中,查找指定分支点,包括路径分支点pi的相对地址和模块名称,逐行扫描中间语言描述文件,计算出指定路径分支点序号i的程序分支点的相对地址和所在模块名称,具体包含如下步骤:
步骤5.1.1、打开中间语言描述文件,设置bool型变量found为false;
步骤5.1.2、判断是否到达文件终止处,若是,则跳转至步骤5.1.8,否则,读取一行文件内容到字符串line中,备份读取该行前的文件指针值到curpos1,备份读取该行后的文件指针值到curpos2;
步骤5.1.3、判断line中保存的内容是否是assert语句所在行内容,若是,则进入步骤5.1.4,否则,跳转至步骤5.1.6执行;
步骤5.1.4、判断该assert语句对应的分支点深度是否等于i,若是,则将found变量赋值为true,并进入步骤5.1.5,否则,跳转至步骤5.1.2执行;
步骤5.1.5、利用curpos1读取上一行的内容,使用字符串截取出内容中该分支点指令的绝对地址addr,跳转至步骤5.1.2执行;
步骤5.1.6、通过字符串比较操作,判断line中保存的内容是否是loaded module所在行内容,若是,则进入步骤5.1.7,否则,跳转至步骤5.1.2执行;
步骤5.1.7、截取出模块名称、模块低地址和模块高地址,存放于结构体数组module中,跳转至步骤5.1.2执行;
步骤5.1.8、文件扫描结束时,如果found变量为false,则在输出结果中插入错误路径标记,并进入步骤5.1.10,如果found变量为true,则进入步骤5.1.9;
步骤5.1.9、比较分支点绝对地址addr和结构体数组module中保存的模块低地址和模块高地址,判断出指定分支点所在的模块名称modulename,并计算分支点相对地址relativeaddr,将modulename和relativeaddr写入输出结果,进入步骤5.1.10;
步骤5.1.10、算法结束,从输出结果中查找到分支点地址;
步骤5.2、查询集合T,判断路径分支点pi相对地址是否在集合T中,若pi相对地址不在集合T中或pi为当前路径最后分支点,则算法结束,否则进入步骤5.3;
步骤5.3、查询集合T,判断路径分支点pi+1相对地址是否在集合T中,若pi+1相对地址不在集合T中,则将分支点pi翻转,得到翻转后的中间语言文件,否则,进入步骤5.4;
步骤5.4、不翻转当前路径分支点pi,i递增1,将当前分析的路径分支点切换为下一个,跳转步骤5.1执行;
步骤6.从翻转后的中间语言描述中提取约束范式,使用STP约束求解器进行求解,产生新的样本,回到步骤3,重新输入样本。
2.根据权利要求1所述的基于智能路径引导的敏感点逼近方法,其特征在于:
步骤2具体包含如下内容:
步骤2.1、将敏感点位置记为A,建立队列L1、L2,并初始化为空;
步骤2.2、获取A的交叉引用(A1,A2…)=f(A),(A1,A2…)表示交叉引用结果的集合,判断集合中元素的个数N,若N为0,执行步骤2.5;若N为1,执行步骤2.3;若大于1,则执行步骤2.4;
步骤2.3、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在,则保存到最终结果集合RES中;若存在,则不保存,将元素位置设为A,执行步骤2.2;
步骤2.4、获取元素对应的汇编指令,若为跳转指令,则判断元素是否存在于最终结果集合RES中,若不存在,则保存到最终结果集合RES中;若存在,则不保存,并判断元素是否在L1或者L2中,不在的元素结果入队L2;
步骤2.5、获取队列L2队头,位置设为A,将A入队L1,执行步骤2.2,并判断队列L2,若队列L2为空,则算法结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510997194.1A CN105487983B (zh) | 2015-12-24 | 2015-12-24 | 基于智能路径引导的敏感点逼近方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510997194.1A CN105487983B (zh) | 2015-12-24 | 2015-12-24 | 基于智能路径引导的敏感点逼近方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105487983A CN105487983A (zh) | 2016-04-13 |
CN105487983B true CN105487983B (zh) | 2018-01-12 |
Family
ID=55674975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510997194.1A Expired - Fee Related CN105487983B (zh) | 2015-12-24 | 2015-12-24 | 基于智能路径引导的敏感点逼近方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105487983B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371999B (zh) * | 2016-10-20 | 2019-08-06 | 腾讯科技(深圳)有限公司 | 程序代码测试方法及装置 |
CN107038378B (zh) * | 2016-11-14 | 2018-06-26 | 平安科技(深圳)有限公司 | 应用软件安全漏洞检测方法和系统 |
CN109902024B (zh) * | 2019-03-18 | 2022-04-29 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
CN111428245B (zh) * | 2020-03-30 | 2023-04-25 | 电子科技大学 | 面向自主芯片硬件逻辑漏洞的激活序列生成方法 |
CN111832026B (zh) * | 2020-06-18 | 2022-04-26 | 广州大学 | 一种漏洞利用定位方法、系统、装置及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714119A (zh) * | 2009-12-09 | 2010-05-26 | 北京邮电大学 | 基于二进制程序的测试数据生成器和方法 |
CN103559122A (zh) * | 2013-10-14 | 2014-02-05 | 西安交通大学 | 基于程序行为切片的测试案例约减方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8302080B2 (en) * | 2007-11-08 | 2012-10-30 | Ntt Docomo, Inc. | Automated test input generation for web applications |
-
2015
- 2015-12-24 CN CN201510997194.1A patent/CN105487983B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714119A (zh) * | 2009-12-09 | 2010-05-26 | 北京邮电大学 | 基于二进制程序的测试数据生成器和方法 |
CN103559122A (zh) * | 2013-10-14 | 2014-02-05 | 西安交通大学 | 基于程序行为切片的测试案例约减方法 |
Non-Patent Citations (3)
Title |
---|
一种目标制导的混合执行测试方法;崔展齐 等;《计算机学报》;20110630;第34卷(第6期);第953-964页 * |
分布式计算环境下恶意代码行为检测技术研究;席丽萍 等;《第二十三届全国信息保密学术会议(IS2013)论文集》;20130930;第101-107页 * |
基于回溯与引导的关键代码区域覆盖的二进制程序测试技术研究;崔宝江 等;《电子与信息学报》;20120131;第34卷(第1期);第108-114页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105487983A (zh) | 2016-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105487983B (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN103455759B (zh) | 一种页面漏洞检测装置及检测方法 | |
CN102693396B (zh) | 一种基于虚拟执行模式的Flash漏洞检测方法 | |
CN104732152B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN104881608B (zh) | 一种基于模拟浏览器行为的xss漏洞检测方法 | |
CN106599695B (zh) | 一种基于路径合并的可引导符号执行漏洞检测方法 | |
CN104881607B (zh) | 一种基于模拟浏览器行为的xss漏洞检测系统 | |
CN105138335B (zh) | 一种基于控制流图的函数调用路径提取方法及装置 | |
CN105787367A (zh) | 一种软件更新的补丁安全性检测方法及系统 | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN109885479A (zh) | 基于路径记录截断的软件模糊测试方法及装置 | |
US20180114026A1 (en) | Method and system automatic buffer overflow warning inspection and bug repair | |
CN104794401A (zh) | 一种静态分析辅助的符号执行漏洞检测方法 | |
CN101751530B (zh) | 检测漏洞攻击行为的方法及设备 | |
CN110162457A (zh) | 用户界面的测试方法、装置、设备及存储介质 | |
CN110197072A (zh) | 软件安全漏洞的发掘方法及系统、存储介质和计算机设备 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN109460641A (zh) | 一种针对二进制文件的漏洞定位发掘系统和方法 | |
CN102073825A (zh) | 基于路径驱动的可执行程序安全性检测方法及系统 | |
KR101696694B1 (ko) | 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치 | |
CN114911711A (zh) | 一种代码缺陷分析方法、装置、电子设备及存储介质 | |
CN101388055A (zh) | 一种用于漏洞模型检测的程序操作特征提取方法 | |
CN102681932B (zh) | 一种检测软件异常输入处理正确性的方法 | |
CN102789417B (zh) | 一种移动智能终端上的定向符号执行程序检测系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180112 Termination date: 20211224 |
|
CF01 | Termination of patent right due to non-payment of annual fee |