一种符号执行方法、装置及系统制造方法及图纸

技术编号:8532693 阅读:282 留言:0更新日期:2013-04-04 15:37
本发明专利技术公开了一种符号执行方法、装置及系统,主要内容包括:应用于包含负载均衡器和至少两个控制器的系统中,控制器执行待测试程序中的某条路径的同时将待测试程序中与该路径相关的路径进行分解,生成路径种子,并将生成的路径种子发送至负载均衡器,由负载均衡器将路径种子分发给多个空闲的控制器。通过本发明专利技术实施例的方案,一方面由于采用了分布式并行方式对待测试程序进行符号执行分析,有效解决了基于生成的符号执行中遇到的路径爆炸问题;另一方面,负载均衡器仅需保存路径种子,占用的内存资源较少,且每个分布式控制器在执行完本次的符号执行任务后就释放了占用的内存资源,因此有效地解决了资源耗尽问题。

【技术实现步骤摘要】

本专利技术涉及计算机软件安全领域,尤其涉及一种符号执行方法、装置及系统
技术介绍
符号执行是通过使用符号变量取代输入中的具体值来模拟程序执行的程序分析方法(即用静态分析的形式完成动态分析的工作)。该方法既具有动态分析方法的可靠性(路径敏感,无误报),又具有静态分析方法的完备性(可保证覆盖率,理论上有可能做到无漏报),在软件漏洞检测中正得到越来越多的关注。符号执行也是一种形式化和自动化的软件分析技术,其核心思想是用符号表示程序的输入数据,并将程序的运算过程逐指令或逐语句地转换为数学表达式,再在程序控制流图的基础上生成符号执行树,并为每一条路径建立一系列的以输入数据为变量的表达式。通常,可以使用一个三元组〈指令指针,路径函数,路径条件〉来表示符号执行过程。其中,指令指针用于标识当前被分析的指令,路径函数表示程序路径中不同点处变量的值是变量初始值的函数,路径条件是程序路径在各分支点满足的分支条件的合取。路径条件是约束在符号执行中的一种具体表现形式。约束通常是一组等式或不等式的合取,而约束求解的目的是得到等式或不等式组的可满足解。根据获取约束(路径条件和分支条件)的不同方法,可将当前的符号执行方法划分为基于变异和基于生成两类。其中,基于生成的符号执行依次解释程序中的每一条指令。具体地说,对于非分支指令,其通常需要更新路径函数(通过函数的复合实现);而对于分支指令,其可能需要创建新的符号进程(执行一条新的路径)以探测每个分支目标,并将原路径条件与每个分支目标满足的分支条件取合取作为每个新路径的路径条件。当有多个符号进程时,按照一定的路径选择策略(例如先创建的符号进程先分析)依次选择每一个符号进程进行分析。当某个符号进程结束时,调用约束求解器求解路径条件以获取一个具体输入向量,该向量可驱使程序执行该路径。当所有符号进程结束时,整个符号执行过程结束。以示例I所示的程序片段为例,下面对现有技术中基于生成的符号执行处理进行说明 01if(a < 100)%判断a是否小于100; 02printf(a<100);%在&小于 100时,打印;03else if(b < 100)%在3不小于100时,判断b是否小于100; 04priritf(a>-100&&b<100); %在&不小于丨00且b<IOO时,打印;05else06printf(0 && a>=i00&&b>=100); %否則,a不小干 100且b不小于 100: -j 叩07end:示例 I第一步在行01,查询(a〈100)在当前路径条件(true)下的恒真与恒假性恒真则前进到行02,恒假则前进到行03,此处即非恒真又非恒假,因此创建一个新的符号进程(#1)以同时分析每条路径,原符号进程(#0)前进到行02,并更新路径条件为(a〈100),新符号进程(#1)前进到行03,并更新路径条件为i(a〈100),所述原符号进程以及新符号进程是逻辑上的虚拟进程,并不是实际的一个进程。第二步按照先创建的符号进程先分析策略,分析#0符号进程,即解释行02,然后转向行07,求解路径条件(a〈100)得测试用例(0,0);第三步按照先创建的符号进程先分析策略,分析#1符号进程,即解释行03 ;第四步在行03,查询(KlOO)在当前路径条件(](a〈100))下的恒真与恒假性恒真则前进到行04,恒假则前进到 行05,此处即非恒真又非恒假,因此创建一个新的符号进程以同时分析每条路径,原符号进程(#1)前进到行04,并更新路径条件为i(a〈100)八(b〈 100),新符号进程(#2)前进到行05,并更新路径条件为I(a〈 100) A^(b<100);第五步按照先创建的符号进程先分析策略,分析#1符号进程,即解释行04,然后转向行07,求解路径条件q(a〈100) A(KlOO)得测试用例(100,0);第六步按照先创建的符号进程先分析策略,分析#2符号进程,即解释行05,然后转向行06-07,求解路径条件q(a〈100) Ai(KlOO)得测试用例(100,100)。目前,基于符号执行的程序分析方法在理论上已经基本成熟,而阻止其实用化的最主要问题是路径爆炸。理论上,符号执行技术能够遍历程序中的每一条执行路径并生成测试用例。实际上,程序中的路径数目随着程序中分支的数目近似指数增长,在出现循环的情况下,路径数目的增长更加迅速。由于需要探测的路径是如此之多,这就会产生的路径爆炸问题。在基于生成的符号执行中,与路径爆炸息息相关的另一个问题是资源耗尽,这是因为上述基于生成的符号执行过程的所有符号进程(逻辑上的进程,也可称为虚拟进程)均在单个符号执行器进程中进行,各符号进程执行过程通常需要在内存中存储与对应路经相关的数据信息,随着需要分析的路径数量增多,需要的内存空间也越来越大,最终不可避免出现资源耗尽。
技术实现思路
本专利技术实施例提供了一种符号执行方法、装置及系统,用以解决现有的符号执行技术存在的路径爆炸问题,以及使用单个符号执行器进程而引起的资源耗尽问题。本专利技术实施例提供的具体技术方案如下一种符号执行方法,应用于包含负载均衡器和至少两个控制器的系统中,所述方法包括负载均衡器向选择的一控制器发送第一指示指令;接收到第一指示指令的控制器,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子;将生成的路径种子发送至负载均衡器,并收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每个分支指令的取向;负载均衡器接收路径种子后,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同;收到第二指示指令的控制器,确定所述第二指示指令中的路径种子所表示的第一段路径,在该第一段路径的基础上按照设定的执行策略确定能与第一段路径结合构成第N条路径的第二段路径,并在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,将生成的路径种子发送至负载均衡器,收集该第N条路径上的路径条件,获得满足所述第N条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,所述N为大于I的正整数。一种符号执行系统,所述符号执行系统包括负载均衡器和至少两个控制器;所述负载均衡器,用于向选择的一控制器发送第一指示指令,接收来自控制器的路径种子和进入空闲状态通知,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同;所述控制器,用于在接收到第一指示指令时,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每本文档来自技高网
...

【技术保护点】
一种符号执行方法,其特征在于,应用于包含负载均衡器和至少两个控制器的系统中,所述方法包括:负载均衡器向选择的一控制器发送第一指示指令;接收到第一指示指令的控制器,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径的过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子;将生成的路径种子发送至负载均衡器,并收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每个分支指令的取向;负载均衡器接收路径种子后,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同;收到第二指示指令的控制器,确定所述第二指示指令中的路径种子所表示的第一段路径,在该第一段路径的基础上按照设定的执行策略确定能与第一段路径结合构成第N条路径的第二段路径,并在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,将生成的路径种子发送至负载均衡器,收集该第N条路径上的路径条件,获得满足所述第N条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,所述N为大于1的正整数。...

【技术特征摘要】
1.一种符号执行方法,其特征在于,应用于包含负载均衡器和至少两个控制器的系统中,所述方法包括 负载均衡器向选择的一控制器发送第一指示指令; 接收到第一指示指令的控制器,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径的过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子;将生成的路径种子发送至负载均衡器,并收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每个分支指令的取向; 负载均衡器接收路径种子后,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同; 收到第二指示指令的控制器,确定所述第二指示指令中的路径种子所表示的第一段路径,在该第一段路径的基础上按照设定的执行策略确定能与第一段路径结合构成第N条路径的第二段路径,并在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,将生成的路径种子发送至负载均衡器,收集该第N条路径上的路径条件,获得满足所述第N条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,所述N为大于I的正整数。2.如权利要求1所述的方法,其特征在于,在待测试程序中存在多路分支指令时,在所述按照设定的执行策略确定待测试程序中的第一条路径之前,所述方法还包括 将多路分支指令转换为多条二路分支指令。3.如权利要求2所述的方法,其特征在于,所述在确定第一条路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子具体包括 确定该第一条路径中起始分支指令到该第一条路径中的每一条最终引起路径分叉的分支指令前的路径对应的路径种子; 在确定的该路径种子后添加一个表示与第一条路径在该最终引起路径分叉的分支指令的取向相反的元素,得到一个新的路径种子,将该新的路径种子作为生成的路径种子; 所述在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,具体包括 确定所述第N条路径中起始分支指令到该第二段路径中的每一条最终引起路径分叉的分支指令前的路径对应的路径种子; 在确定的该路径种子后添加一个表示与第N条路径在该最终引起路径分叉的分支指令的取向相反的元素,得到一个新的路径种子,将该新的路径种子作为生成的路径种子。4.如权利要求1所述的方法,其特征在于,所述负载均衡器包括一个主线程、一个消费者线程、一个生产者线程和一个任务列表,所述主线程作为消费者线程和生产者线程的守护线程,对消费者线程和生产者线程进行管理; 所述将生成的路径种子发送至负载均衡器具体为 将生成的路径种子发送至生产者线程,该路径种子被生产者线程存放至任务列表; 所述负载均衡器接收路径种子后,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令具体为消费者线程从任务列表中取出路径种子,并向至少一个空闲的控制器分别发送含有该路径种子的第二指示指令。5.如权利要求1所述的方法,其特征在于,所述负载均衡器和至少两个控制器运行在不同的主机内。6.—种符号执行系统,其特征在于,所述符号执行系统包括负载均衡器和至少两个控制器; 所述负载均衡器,用于向选择的一控制器发送第一指示指令,接收来自控制器的路径种子和进入空闲状态通知,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同; 所述控制器,用于在接收到第一指示指令时,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每个分支指令的取向;在接收到第二指示指令时,确定所述第二指示指令中的路径种子所表示的第一段路径,在该第一段路径的基础上按照设定的执行策略确定能与第一段路径结合构成第N条路径的第二段路径,并在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,收集该第N条路径上的路径条件,获得满足所述第N条路径上的路径条件的测试用例,所述N为大于I的正整数。7.如权利要求6所述的符号执行系统,其特征在于, 所述控制器,具体用于在待测试程序中存在多路分支指令时,在所述按照设定的执行策略确定待测试程序中的第一条路径之前,将多路分支指令转换为多条二路分支指令。8.如权利要求7所述的符号执行系统,其特征在于, 所述控制器,具体用于在接收到第一指示指令时...

【专利技术属性】
技术研发人员:忽朝俭曲富平左磊赵粮薛一波
申请(专利权)人:北京神州绿盟信息安全科技股份有限公司北京神州绿盟科技有限公司
类型:发明
国别省市:

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

1