一种分段式符号执行方法技术

技术编号:19778894 阅读:28 留言:0更新日期:2018-12-15 11:31
本发明专利技术采用一种分段式符号执行方法,对程序段进行粗粒度划分,并采用各程序段独立执行的方式对程序进行符号化分析,以改进目前的符号执行工具针对大规模程序进行分析以及现有分段式符号执行顺序分析方法的分析效率和分析准确度。一种分段式符号执行方法,通过聚类方法将程序划分为较大的多个程序段,进而对各程序段进行独立符号执行,然后将各个程序段的符号执行结果进行合并,完成对整个程序的分析。

【技术实现步骤摘要】
一种分段式符号执行方法
本专利技术属于信息安全中的漏洞挖掘
,具体涉及一种分段式符号执行方法。
技术介绍
符号执行是一种通过使用符号值代替具体值进行软件漏洞检测的工具,它可以通过分析路径约束的方式来检测程序的错误。符号执行已经成为查找程序中错误和安全漏洞的有效技术之一,它已被微软等主要软件公司用于安全测试和质量保证。符号执行通常通过获取程序执行的路径并进行路径取反的方式来测试程序,其目标是通过计算程序逻辑表达式来代替人工分析代码的方式,提高程序的分析效率和测试覆盖率。虽然符号执行的路径树过于复杂可能会导致路径爆炸问题,但由于其路径约束可以进行计算,因此可以获得其他检测技术,例如模糊测试,等技术得不到的路径,从而可以有效地发现一些特殊错误。在实践中,这种方式也得到了应用,符号执行已经成为软件错误分析和安全漏洞检查的一种重要技术。目前有很多符号执行工具,比如angr、KLEE、JPF等。angr是由加州大学圣巴巴拉分校开发的二进制自动化分析工具,并在其中实现了目前流行的符号执行技术,具备对二进制程序的动静态符号分析能力。angr起初是用来寻找程序中的后门,现在可以应用于软件分析领域。KLEE是由斯坦福大学开发的使用符号执行技术构造程序测试用例的工具。KLEE在分析程序构造测试用例的同时,也利用符号执行和约束求解技术在关键的程序点上对符号的取值范围进行分析,检查是否在安全范围内。JPF是NASA的一个针对JAVA字节码程序的开源符号执行工具,它能够提供完整的符号执行功能,包括输入变量符号化、基本路径约束的生成以及程序路径搜索等功能。这些工具作为目前流行的符号执行工具,在程序分析方面具有较好的实用性,但它们都存在着相同的弊病。它们在分析大型程序时都存在着路径爆炸和分析效率较低的问题,这将会导致巨大的开销。分段式符号执行是将程序分为多个段进行分析,目前也有研究人员进行了相关研究,与本专利技术相类似的方法有XiaoQ,ChenY,WuC,etal.pbSE:Phase-BasedSymbolicExecution[C]//IEEE/IFIPInternationalConferenceonDependableSystemsandNetworks.IEEE,2017:133-144;范文庆.分段符号执行模型及其环境交互问题研究[D].北京邮电大学,2010。但是,这些方法存在着一些问题。第一,这些方法主要是为了解决外部过程的分析问题,而不是处理符号执行中的路径爆炸问题;第二,这些方法主要是基于函数对程序进行划分,通常会划分出过多的程序段,而过多分段会严重隔断各程序段之间的数据联系,从而导致程序执行状态信息缺失,进而使得符号执行的分析结果不准确;第三,这些方法都是采用顺序方式对程序段进行符号执行,各个程序段执行之间有着先后顺序关系以及相应的状态数据,不能明显提升符号执行的效率。
技术实现思路
针对上述不足,本专利技术采用一种分段式符号执行方法,对程序段进行粗粒度划分,并采用各程序段独立执行的方式对程序进行符号化分析,以改进目前的符号执行工具针对大规模程序进行分析以及现有分段式符号执行顺序分析方法的分析效率和分析准确度。本专利技术通过以下技术方案实现:一种分段式符号执行方法,通过聚类方法将程序划分为较大的多个程序段,进而对各程序段进行独立符号执行,然后将各个程序段的符号执行结果进行合并,完成对整个程序的分析。进一步地,将程序划分前首先从程序中提取出控制流图,其节点是程序基本块,有向边是基本块之间的跳转,然后通过聚类的方法将控制流图划分为多个控制流子图。进一步地,对所述控制流图中的各个节点设置权值,所述控制流图中节点表示控制流图中的单个基本块,将每个基本块中的指令数量作为该节点的权值,表示该基本块的大小。进一步地,通过聚类方法将程序控制流图划分为多个较大的控制流子图,具体采用以下划分方式:步骤一、根据聚类算法选出控制流图中的边;步骤二、删除控制流图中由步骤一选出的边;步骤三、计算控制流图的模块度,如果模块度得到提升,则更新控制流图,否则返回步骤一;步骤四、控制流图划分完毕,得到划分后的子图即为程序分段的结果。进一步地,所述的各程序段独立符号执行具体采用以下方式:(1)确定每个程序段内的起始节点与终止节点;(2)补全缺失的基本块间的跳转信息;(3)遍历每个程序段,并选择相应的分析策略;(4)根据采用的相应分析策略进行分析。进一步地,所述结果合并包括状态数据合并以及约束条件合并。结果合并是对于两个相连的程序段而言的,对所有相连的程序段的状态数据和约束条件合并完成后,得到整个程序符号执行的结果。本专利技术的有益效果:本专利技术针对大规模程序符号执行和现有分段式符号执行的顺序分析方法效率不高的问题,通过采用分段式符号执行的独立分析方法对程序进行分析。这种方法可以对程序段进行独立分析。通过程序段划分,对各个程序段进行独立的符号执行,并进行结果合并,从而提高符号执行的效率。本专利技术针对现有分段式符号执行分段过多,严重隔离程序段数据流信息传播而导致运算结果不准确的问题,通过聚类算法对程序段进行粗粒度划分,在尽可能保证程序段规模不会产生路径爆炸问题的前提下,尽量减少划分得到的程序段数量,从而缓解由于分段造成的程序分析不准确问题。附图说明图1为本专利技术分段式符号执行方法流程图。具体实施方式本专利技术针对原始符号执行对大规模程序分析效率不高和原有分段式符号执行中存在的分析不准确等问题,提出了一种分段式符号执行方法。该方法不同于以往分段式符号执行按照顺序分析方式对程序进行符号执行的方法,采用了对程序段独立分析的方式进行符号执行。本方法通过聚类方法将程序划分为较大的多个段,进而对每个段进行独立的符号执行,然后将各个段符号执行结果进行合并,完成对整个程序的分析。本专利技术对符号执行工具具有通用性,具体实施在angr工具上,它同样可以用于KLEE和JPF等其他符号执行工具。如图1中所示,本专利技术的输入为程序,通过控制流分析以生成控制流图,进而将通过基于聚类的程序段划分方法对控制流图进行划分,从而划分出各个程序段。下一步中,将对每一个程序段进行独立符号执行分析,并且对于程序分段造成的跳转信息缺失进行补全。在对每个程序段完成符号执行之后,将进行各程序段处理结果的合并,包括了状态数据的合并、约束条件的合并以及获得符号执行的结果。下面将分别介绍控制流分析、程序段划分方法、单程序段符号执行和结果合并的处理过程。1、控制流分析控制流分析首先从程序中提取出控制流图。控制流图的节点是程序基本块,有向边是基本块之间的跳转。本实施例中,采用angr工具提取控制流图。可以理解,在具体实施过程中,控制流图的获取也可以籍由其他工具获得。在利用angr获得控制流图的基础上,对所述控制流图进行修改,进一步添加了节点权值。节点权值是程序基本块中的指令数量,用于表示该基本块的大小。这一步生成的控制流图用于后续的程序段划分。2、程序段划分接下来将进行程序段划分。具体地说,就是将上一步得到的控制流图使用聚类算法进行划分,划分的步骤如下:(1)根据聚类算法选出控制流图中的边。(2)删除控制流图中由步骤一选出的边。(3)计算聚类算法的模块度,如果模块度得到提升,则更新控制流图,否则返回第(1)步。(4)控制流图本文档来自技高网
...

【技术保护点】
1.一种分段式符号执行方法,其特征在于,通过聚类方法将程序划分为多个程序段,进而对各程序段进行独立符号执行,然后将各个程序段的符号执行结果进行合并,完成对整个程序的分析。

【技术特征摘要】
1.一种分段式符号执行方法,其特征在于,通过聚类方法将程序划分为多个程序段,进而对各程序段进行独立符号执行,然后将各个程序段的符号执行结果进行合并,完成对整个程序的分析。2.如权利要求1所述的一种分段式符号执行方法,其特征在于,将程序划分前首先从程序中提取出控制流图,其节点是程序基本块,有向边是基本块之间的跳转,然后通过聚类的方法将控制流图划分为多个控制流子图。3.如权利要求2所述的一种分段式符号执行方法,其特征在于,对所述控制流图中的各个节点设置权值,所述控制流图中节点表示控制流图中的单个基本块,将每个基本块中的指令数量作为该节点的权值,表示该基本块的大小。4.如权利要求3所述的一种分段式符号执行方法,其特征在于,通过聚类方法将程序控制流图划分为多个控制流子图,具体采用以下划分方式:...

【专利技术属性】
技术研发人员:胡昌振马锐窦伯文王龙高浩然
申请(专利权)人:北京理工大学
类型:发明
国别省市:北京,11

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

1