[发明专利]一种支持多维数组的符号执行方法及漏洞检测系统有效
申请号: | 202011108279.7 | 申请日: | 2020-10-16 |
公开(公告)号: | CN112199289B | 公开(公告)日: | 2022-10-28 |
发明(设计)人: | 蒋斌 | 申请(专利权)人: | 湖南泛联新安信息科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/57 |
代理公司: | 长沙市护航专利代理事务所(特殊普通合伙) 43220 | 代理人: | 莫晓齐 |
地址: | 410000 湖南省长沙市开福区伍家*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 多维 数组 符号 执行 方法 漏洞 检测 系统 | ||
本发明公开了一种支持多维数组的符号执行方法及漏洞检测系统。该方法在程序输入值为复杂数据结构时,依据手动设置和自动调整获得的最佳固定长度值,懒初始化复杂数据结构,在访问复杂数据结构时,通过判断访问偏移量的有效性,初始化调用的数据类型并获取具体数值,依据访问结果,调用约束求解器对路径条件的可满足性进行求解,调用程序计数器,触发计算目标代码的具体值。该漏洞检测系统包含程序指令分析模块、参数分析模块、符号引擎模块及测试引擎模块。本发明解决了在符号执行时针对复杂数据结构懒初始化失效问题,能够确保复杂数据结构符号化的准确性,提高复杂数据结构情况下符号执行的程序稳定性。
技术领域
本发明涉及符号执行技术领域,尤其涉及一种支持多维数组的符号执行方法及漏洞检测系统。
背景技术
符号执行是一种程序分析技术,它可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在到达目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。
对于简单程序,静态符号执行即可完成全部动作,而当程序规模大或复杂时,复杂数据结构成为符号执行的一个重要问题。通常对于复杂数据结构通过懒初始化进行处理,针对指针可以使用。但当复杂数据结构为多维数组的符号化索引时,该如何初始化以及初始化为多大的数组,同时因为非确定的初始化结果导致的程序误报或运行错误成为当前需要解决的问题。
发明内容
本发明所要解决的技术问题是:克服现有技术存在的上述缺陷,提供一种支持多维数组的符号执行方法及漏洞检测系统,优化对多维数组中符号化索引的初始化。
本发明的技术解决方案是:提供一种支持多维数组的符号执行方法,其特征在于,包含以下步骤:
S1:程序输入值分析,确定是否为复杂数据结构的符号处理,若是复杂数据结构,则对复杂数据结构采用懒初始化方法进行处理,反之,则对输入数据采用静态符号执行进行处理;
S2:懒初始化复杂数据结构时,依据手动设置及程序执行过程中的自动调整,获取最佳固定长度值,利用该最佳固定长度值初始化复杂数据结构;
S3:在访问复杂数据结构的数据时,判断访问偏移量是否有效;若偏移量有效,则指针调用初始化为已有数据类型的最佳固定长度数据,并获取访问的符号数据;若偏移量无效,则访问越界;
S4:依据访问结果进行程序分析,调用约束求解器对路径条件的可满足性进行求解,判断各程序路径的可行性,产生对应路径的输入;
S5:调用程序计数器,触发计算目标代码的具体值。
优选的,所述最佳固定长度值在首次初始化时为30,在程序运行过程中,通过固定值调优函数,逐步自增,获取内存范围内有效数据长度值。
优选的,所述复杂数据结构保存在堆中。
优选的,所述复杂数据结构为多维数组。
优选的,所述多维数组中存放符号化索引。
优选的,所述访问偏移量为访问的指针引用相对于多维数组基地址的偏移量,有效访问偏移量值大于0且小于最佳固定长度值,无效访问偏移量值小于0或大于最佳固定长度值。
优选的,所述最佳固定长度值可在多次访问时使用。
优选的,所述符号化索引在初始化多维数组时即直接符号化全部可能的成员。
另一方面,本发明还提供一种支持多维数组的符号执行漏洞检测系统,基于其上任一项所述的一种支持多维数组的符号执行方法,所述符号执行漏洞检测系统包含程序指令分析模块、参数分析模块、符号执行模块及漏洞测试模块,其中:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于湖南泛联新安信息科技有限公司,未经湖南泛联新安信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011108279.7/2.html,转载请声明来源钻瓜专利网。