一种支持多维数组的符号执行方法及漏洞检测系统技术方案

技术编号:27006150 阅读:17 留言:0更新日期:2021-01-08 17:09
本发明专利技术公开了一种支持多维数组的符号执行方法及漏洞检测系统。该方法在程序输入值为复杂数据结构时,依据手动设置和自动调整获得的最佳固定长度值,懒初始化复杂数据结构,在访问复杂数据结构时,通过判断访问偏移量的有效性,初始化调用的数据类型并获取具体数值,依据访问结果,调用约束求解器对路径条件的可满足性进行求解,调用程序计数器,触发计算目标代码的具体值。该漏洞检测系统包含程序指令分析模块、参数分析模块、符号引擎模块及测试引擎模块。本发明专利技术解决了在符号执行时针对复杂数据结构懒初始化失效问题,能够确保复杂数据结构符号化的准确性,提高复杂数据结构情况下符号执行的程序稳定性。

【技术实现步骤摘要】
一种支持多维数组的符号执行方法及漏洞检测系统
本专利技术涉及符号执行
,尤其涉及一种支持多维数组的符号执行方法及漏洞检测系统。
技术介绍
符号执行是一种程序分析技术,它可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在到达目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。对于简单程序,静态符号执行即可完成全部动作,而当程序规模大或复杂时,复杂数据结构成为符号执行的一个重要问题。通常对于复杂数据结构通过懒初始化进行处理,针对指针可以使用。但当复杂数据结构为多维数组的符号化索引时,该如何初始化以及初始化为多大的数组,同时因为非确定的初始化结果导致的程序误报或运行错误成为当前需要解决的问题。
技术实现思路
本专利技术所要解决的技术问题是:克服现有技术存在的上述缺陷,提供一种支持多维数组的符号执行方法及漏洞检测系统,优化对多维数组中符号化索引的初始化。本专利技术的技术解决方案是:提供一种支持多维数组的符号执行方法,其特征在于,包含以下步骤:S1:程序输入值分析,确定是否为复杂数据结构的符号处理,若是复杂数据结构,则对复杂数据结构采用懒初始化方法进行处理,反之,则对输入数据采用静态符号执行进行处理;S2:懒初始化复杂数据结构时,依据手动设置及程序执行过程中的自动调整,获取最佳固定长度值,利用该最佳固定长度值初始化复杂数据结构;S3:在访问复杂数据结构的数据时,判断访问偏移量是否有效;若偏移量有效,则指针调用初始化为已有数据类型的最佳固定长度数据,并获取访问的符号数据;若偏移量无效,则访问越界;S4:依据访问结果进行程序分析,调用约束求解器对路径条件的可满足性进行求解,判断各程序路径的可行性,产生对应路径的输入;S5:调用程序计数器,触发计算目标代码的具体值。优选的,所述最佳固定长度值在首次初始化时为30,在程序运行过程中,通过固定值调优函数,逐步自增,获取内存范围内有效数据长度值。优选的,所述复杂数据结构保存在堆中。优选的,所述复杂数据结构为多维数组。优选的,所述多维数组中存放符号化索引。优选的,所述访问偏移量为访问的指针引用相对于多维数组基地址的偏移量,有效访问偏移量值大于0且小于最佳固定长度值,无效访问偏移量值小于0或大于最佳固定长度值。优选的,所述最佳固定长度值可在多次访问时使用。优选的,所述符号化索引在初始化多维数组时即直接符号化全部可能的成员。另一方面,本专利技术还提供一种支持多维数组的符号执行漏洞检测系统,基于其上任一项所述的一种支持多维数组的符号执行方法,所述符号执行漏洞检测系统包含程序指令分析模块、参数分析模块、符号执行模块及漏洞测试模块,其中:程序指令分析模块接收用户输入的指令及数据,对用户输入进行处理并传递测试参数给参数分析模块;参数分析模块接收程序指令分析模块输入的测试参数,处理测试参数,将符号化的测试参数传递给符号执行模块;符号执行模块接收参数分析模块发送的符号化的测试参数,依据符号化的测试参数进行符号化执行,对路径条件的可满足性进行求解及判断,将路径求解结果传递给漏洞测试模块;漏洞测试模块接收符号执行模块传递的路径求解结果,对各条路径的具体目标代码进行执行,并得出测试结果。本专利技术产生的有益效果是:本专利技术自主研发了一种支持多维数组的符号执行方法及漏洞检测系统。在程序规模较大或复杂时,复杂数据结构成为符号执行需要面临的问题,而复杂数据结构保存在堆中,懒初始化成为复杂堆数据结构的常用方法。但对于数组和数组符号化索引,懒初始化无法解决初始化数组大小的问题。本专利技术通过在懒初始化过程中,通过手动配置及程序自动调整,逐步确定初始化数组大小,符号化时通过判断指针偏移量的有效性,减少了符号执行过程中的误报,同时通过求解空间限制,保证了符号执行的实际可行性。附图说明图1为本专利技术提供的一种支持多维数组的符号执行方法的流程图;图2为本专利技术提供的一种支持多维数组的符号执行漏洞检测系统的结构框图。具体实施方式为使本领域技术人员更加清楚和明确本专利技术的技术方案,下面结合实施例及附图对本专利技术作进一步详细的描述,需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互结合。参见图1,图1为本实施例提供的一种支持多维数组的符号执行方法流程图,该方法包含五个步骤。S1:程序输入值分析,确定是否复杂数据结构的符号处理,若是,则对复杂数据结构采用懒初始化方法进行处理,反之,则对输入数据采用静态符号执行进行处理。其中复杂数据结构指结构体、线性链表、队列、树等,复杂数据结构一般保存在堆中。S2:懒初始化复杂数据结构时,依据手动设置及程序执行过程中的自动调整,获取最佳固定长度值,利用该最佳固定长度值初始化复杂数据结构;需要说明的是,该最佳固定长度值可以在多次访问中被重复使用。以二维数组为例,给定函数func(structA,*a),其中,struct表示结构体,结构体A具有一个int型的指针变量p,该指针在访问二维数组数据时用到;定义默认设置固定长度值n=30,其中30为初始值,定义变量i,j;若i,j为具体值,第一次访问a[i]时,实例化默认的n个结构体A数组;下一次访问a[i][j]时,继续为a[i]分配n个int成员。S3:在访问复杂数据结构为多维数组的数据时,若偏移量有效,则指针调用初始化为已有数据类型的最佳固定长度数据,并获取访问的符号数据;若偏移量无效,则访问越界;优选地,步骤S3通过引用指针与多维数组基地址的比对判断偏移量是否有效。该步骤其实现逻辑如下:若f未初始化{若f为T类型的指针引用若存在以f为基地址,偏移量大于0的访问{将f非确定化地初始化为1.null2.一个T类型的固定大小为n的数组3.一个已有的T类型数组若某性质成立的谓词不成立回溯做其余选择}否则{将f非确定化地初始化为1.null2.一个T类型的对象3.一个已有的T类型对象若某性质成立的谓词不成立回溯做其余选择}若f为原始类型或字符串将f初始化为对应类型的符号值}以访问二维数组为例,分别考虑i>=n或i<0、0<i<n两种情况,第一种情况,访问报越界错误,第二情况下则初始化所有a[0].p、a[1].p…a[n].p。判断本次访问越界后,若i>=n且i值在初始化内存大小范围内,可设定n的可能最大值为1000,程序自动对固定长度值n通过固定长度调优函数进行自增调整,获取一个较优固定长度值,作为下一步最佳固定长度值,返回S2继续执行;若i<0或i>1000,退出程序。S4:依据访问结果进行程序分析,调用约束求解器对路径条件本文档来自技高网...

【技术保护点】
1.一种支持多维数组的符号执行方法,其特征在于,包含以下步骤:/nS1:程序输入值分析,确定是否为复杂数据结构的符号处理,若是复杂数据结构,则对复杂数据结构采用懒初始化方法进行处理,反之,则对输入数据采用静态符号执行进行处理;/nS2:懒初始化复杂数据结构时,依据手动设置及程序执行过程中的自动调整,获取最佳固定长度值,利用该最佳固定长度值初始化复杂数据结构;/nS3:在访问复杂数据结构的数据时,判断访问偏移量是否有效;若偏移量有效,则指针调用初始化为已有数据类型的最佳固定长度数据,并获取访问的符号数据;若偏移量无效,则访问越界;/nS4:依据访问结果进行程序分析,调用约束求解器对路径条件的可满足性进行求解,判断各程序路径的可行性,产生对应路径的输入;/nS5:调用程序计数器,触发计算目标代码的具体值。/n

【技术特征摘要】
1.一种支持多维数组的符号执行方法,其特征在于,包含以下步骤:
S1:程序输入值分析,确定是否为复杂数据结构的符号处理,若是复杂数据结构,则对复杂数据结构采用懒初始化方法进行处理,反之,则对输入数据采用静态符号执行进行处理;
S2:懒初始化复杂数据结构时,依据手动设置及程序执行过程中的自动调整,获取最佳固定长度值,利用该最佳固定长度值初始化复杂数据结构;
S3:在访问复杂数据结构的数据时,判断访问偏移量是否有效;若偏移量有效,则指针调用初始化为已有数据类型的最佳固定长度数据,并获取访问的符号数据;若偏移量无效,则访问越界;
S4:依据访问结果进行程序分析,调用约束求解器对路径条件的可满足性进行求解,判断各程序路径的可行性,产生对应路径的输入;
S5:调用程序计数器,触发计算目标代码的具体值。


2.根据权利要求1所述的一种支持多维数组的符号执行方法,其特征在于,所述最佳固定长度值在首次初始化时为30,在程序运行过程中,通过固定值调优函数,逐步自增,获取内存范围内有效数据长度值。


3.根据权利要求2所述的一种支持多维数组的符号执行方法,其特征在于,所述复杂数据结构保存在堆中。


4.根据权利要求3所述的一种支持多维数组的符号执行方法,其特征在于,所述复杂数据结构为多维数组。


5.根据权利要求4所述的一种支持多维数组的符号执行方法,其特征在于...

【专利技术属性】
技术研发人员:蒋斌
申请(专利权)人:湖南泛联新安信息科技有限公司
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1