【技术实现步骤摘要】
本专利技术涉及计算机软件安全领域,尤其涉及一种符号执行方法、装置及系统。
技术介绍
符号执行是通过使用符号变量取代输入中的具体值来模拟程序执行的程序分析方法(即用静态分析的形式完成动态分析的工作)。该方法既具有动态分析方法的可靠性(路径敏感,无误报),又具有静态分析方法的完备性(可保证覆盖率,理论上有可能做到无漏报),在软件漏洞检测中正得到越来越多的关注。符号执行也是一种形式化和自动化的软件分析技术,其核心思想是用符号表示程序的输入数据,并将程序的运算过程逐指令或逐语句地转换为数学表达式,再在程序控制流图的基础上生成符号执行树,并为每一条路径建立一系列的以输入数据为变量的表达式。通常,可以使用一个三元组〈指令指针,路径函数,路径条件〉来表示符号执行过程。其中,指令指针用于标识当前被分析的指令,路径函数表示程序路径中不同点处变量的值是变量初始值的函数,路径条件是程序路径在各分支点满足的分支条件的合取。路径条件是约束在符号执行中的一种具体表现形式。约束通常是一组等式或不等式的合取,而约束求解的目的是得到等式或不等式组的可满足解。根据获取约束(路径条件和分支条件)的不同方法,可将当前的符号执行方法划分为基于变异和基于生成两类。其中,基于生成的符号执行依次解释程序中的每一条指令。具体地说,对于非分支指令,其通常需要更新路径函数(通过函数的复合实现);而对于分支指令,其可能需要创建新的符号进程(执行一条新的路径)以探测每个分支目标,并将原路径条件与每个分支目标满足的分支条件取合取作为每个新路径的路径条件。当有多个符号进程时,按照一定的路径选择策略(例如先创建的符号 ...
【技术保护点】
一种符号执行方法,其特征在于,应用于包含负载均衡器和至少两个控制器的系统中,所述方法包括:负载均衡器向选择的一控制器发送第一指示指令;接收到第一指示指令的控制器,按照设定的执行策略确定待测试程序中的第一条路径,且在确定第一条路径的过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子;将生成的路径种子发送至负载均衡器,并收集该第一条路径上的路径条件,获得满足所述第一条路径上的路径条件的测试用例,向负载均衡器发送进入空闲状态的通知,其中,所述路径种子是由设定个数的元素组成的顺序字节流,所述元素是表示程序路径中依次遇到的每个分支指令的取向;负载均衡器接收路径种子后,向至少一个空闲的控制器分别发送含有路径种子的第二指示指令,且每个空闲的控制器对应的第二指示指令中的路径种子不同;收到第二指示指令的控制器,确定所述第二指示指令中的路径种子所表示的第一段路径,在该第一段路径的基础上按照设定的执行策略确定能与第一段路径结合构成第N条路径的第二段路径,并在确定第二段路径过程中在每一条最终引起路径分叉的分支指令处生成相应的路径种子,将生成的路径种子发送至负载均衡器,收集该第N条路径上的路径条件,获 ...
【技术特征摘要】
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所述的符号执行系统,其特征在于, 所述控制器,具体用于在接收到第一指示指令时...
【专利技术属性】
技术研发人员:忽朝俭,曲富平,左磊,赵粮,薛一波,
申请(专利权)人:北京神州绿盟信息安全科技股份有限公司,北京神州绿盟科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。