CN103049377A - 基于路径簇规约的并行符号执行方法 - Google Patents

基于路径簇规约的并行符号执行方法 Download PDF

Info

Publication number
CN103049377A
CN103049377A CN2012105422104A CN201210542210A CN103049377A CN 103049377 A CN103049377 A CN 103049377A CN 2012105422104 A CN2012105422104 A CN 2012105422104A CN 201210542210 A CN201210542210 A CN 201210542210A CN 103049377 A CN103049377 A CN 103049377A
Authority
CN
China
Prior art keywords
function
program
point
call
path cluster
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012105422104A
Other languages
English (en)
Other versions
CN103049377B (zh
Inventor
吴世忠
郭涛
张普含
王嘉捷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Information Technology Security Evaluation Center
Original Assignee
China Information Technology Security Evaluation Center
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Information Technology Security Evaluation Center filed Critical China Information Technology Security Evaluation Center
Priority to CN201210542210.4A priority Critical patent/CN103049377B/zh
Publication of CN103049377A publication Critical patent/CN103049377A/zh
Application granted granted Critical
Publication of CN103049377B publication Critical patent/CN103049377B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于程序符号执行路径簇划分的计算机软件安全性测试方法。一种基于路径簇规约的并行符号执行方法,将被测可执行程序进行反汇编;得到被测可执行程序的汇编代码,并转换为统一的中间汇编语言形式;然后根据中间汇编语言形式生成被测可执行程序的函数调用图和控制流图;通过对函数调用图的静态分析,找到危险函数和输入函数;分别建立“程序进入点、调用输入函数、调用危险函数、程序结束点”两两之间的路径,并归约成路径簇;将得到的路径簇进行点到点的连接形成“程序进入点→程序结束点”的完整路径簇链集合;以前述步骤形成的“程序进入点→程序结束点”一个完整路径簇链作为一个负载单位,生成相应的测试用例进行实际程序安全测试。

Description

基于路径簇规约的并行符号执行方法
技术领域
本发明涉及一种计算机软件安全性测试方法,尤其是涉及一种基于程序符号执行路径簇划分的并行测试方法。
背景技术
目前,符号执行技术在软件安全性测试领域得到了日益广泛的关注和应用。符号执行和Fuzzing等随机生成测试用例的技术相比,能够更加深入地理解目标软件,显著提高软件测试的代码覆盖率,进而生成更有针对性的测试用例。但是符号执行的最大问题是,由于软件分支数目和循环次数巨大,存在着指数级增长的执行路径,导致符号执行在实际应用中具有路径爆炸的问题,这已成为符号执行应用的最大瓶颈。
为了有效缓解或解决符号执行中路径空间爆炸的问题,可以利用计算能力更强的硬件体系架构实现,比如分布式多处理器、多核、众核、云计算等。这就需要将传统的符号执行改造成具有并行执行能力的技术。
当前已有的并行符号执行技术,多是根据实际使用的分布式硬件平台特点,有效缓解了并行符号执行的分布式测试节点通信、负载调度等关键问题。但是在测试节点负载分配上多是采用了简单的路径拆分或随机将分支树迁移,由于没有深入理解程序内部结构,缺少对程序执行空间可并行化测试路径关系的分析。如果将可并行测试的路径分配到同一个测试节点测试,或者不适宜并行测试的路径分配到了不同的测试节点,就会造成无谓的通信开销和冗余测试,降低并行处理能力。
发明内容
本发明针对目前并行符号执行效率不高的问题,提出一种基于路径簇划分的并行符号执行方法。
本发明所采用的技术方案:
一种基于路径簇规约的并行符号执行方法,包括下述步骤:
1)使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;
2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差异;
3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流图;
4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;
5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数;
6)分别建立“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点” 两两之间的路径,并归约成路径簇;
7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点à程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;
8)以步骤7)形成的“程序进入点→程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。
所述的基于路径簇规约的并行符号执行方法,在步骤4)中,定义了4类危险函数,分别是:字符串拷贝、内存拷贝、格式化、格式转换。
所述的基于路径簇规约的并行符号执行方法,在步骤5)中,定义了6类输入函数,分别是:文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。
所述的基于路径簇规约的并行符号执行方法,在步骤3)中,通过编写反汇编工具插件,实现被测可执行程序控制流图和函数调用图的生成。
所述的基于路径簇规约的并行符号执行方法,在步骤6)中,以分析被测可执行程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点”3组点到点的多条路径进行规约,形成点到点的路径簇;被测可执行程序中两点之间的路径簇规约概述为2个步骤:                                                
Figure 980645DEST_PATH_IMAGE001
确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合;
Figure 437165DEST_PATH_IMAGE002
找到与
Figure 834649DEST_PATH_IMAGE001
中语句集合有控制依赖关系的语句集合。
本发明的有益积极效果:
1、本发明基于路径簇规约的并行符号执行方法,能够切实提高并行符号执行处理的能力和测试效率。针对当前符号执行存在路径空间爆炸,对大型应用程序的代码测试覆盖率较低的问题,运用分布式测试平台进行并行符号执行,显著减少了符号执行的时间开销,提高了测试的覆盖率和执行路径深度。路径簇之间彼此独立进行程序的符号分析,同一路径簇内部共享控制依赖条件,据此可以将程序以路径簇为单位进行并行符号执行时的负载分配,切实提高了并行符号执行处理的能力和测试效率。
2、本发明基于路径簇规约的并行符号执行方法,运用程序依赖分析技术进行路径簇划分,有效地改进了目前并行符号执行负载分配不均衡、并行效率不高的问题,在相同分布式硬件平台下,大大提高了并行处理能力和执行效率。本发明较好解决了单一依靠Fuzz动态测试带来的路径状态空间爆炸的问题,大大提高了路径覆盖的命中率和软件测试分析的效率。
附图说明
图1为本发明基于路径簇规约的并行符号执行方法流程方块图;
图2为基于程序控制依赖分析的路径簇规约方法流程图。
具体实施方式
实施例一:参见图1,本发明基于路径簇规约的并行符号执行方法,具体包括下述步骤:1)使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;
2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差异;
3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流图;
4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;
5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数;
6)分别建立“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点” 两两之间的路径,并归约成路径簇;
7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点→程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;
8)以步骤7)形成的“程序进入点→程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。
实施例二:本实施例的基于路径簇规约的并行符号执行方法,与实施例一不同的是,进一步的,在步骤4)中,定义了4类危险函数,分别是:字符串拷贝、内存拷贝、格式化、格式转换等。在步骤5)中,定义了6类输入函数,分别是:文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数等。
实施例三:参见图2,本实施例的基于路径簇规约的并行符号执行方法,与实施例二不同的是,进一步的,在步骤6)中,以分析程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点”3组点到点的多条路径进行规约,形成点到点的路径簇。
程序中两点之间的路径簇规约的可以概述为2个步骤:
Figure 376620DEST_PATH_IMAGE001
确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合;
Figure 455434DEST_PATH_IMAGE002
找到与
Figure 15728DEST_PATH_IMAGE001
中语句集合有控制依赖关系的语句集合。 
本发明基于路径簇规约的并行符号执行方法,在步骤3)中,通过编写反汇编器插件,实现被测程序控制流图和函数调用图(CG)的生成。
实施例四:本实施例结合附图,进一步说明本发明基于路径簇规约的并行符号执行方法的具体实现方式。参见图1、图2。本发明基于路径簇规约的并行符号执行方法,实现的流程包括:
步骤一:将被测可执行程序进行反汇编,并将汇编代码转换为统一的中间汇编语言形式,从而构建二进制文件的控制流图和调用图;
步骤二:根据危险函数(敏感点)和输入函数特征,搜寻敏感点及输入点所处函数位置;
步骤三:进行路径簇的规约与链接,形成路径簇链,以路径簇链为单位进行分布式并行符号执行测试。
下面详细说明步骤一、步骤二、步骤三所包含的相关内容:
步骤一:将可执行文件输入反汇编器中,反汇编器识别二进制文件编译的机器语言,将其反汇编成对应的X86。中间汇编翻译模块将反汇编代码转换成统一形式的中间汇编语言。
中间汇编语言设计的主要原则如下:(1)精简指令集的设计思想;(2)足够多的寄存器数量以适应各种硬件体系结构;(3)尽量简单的寻址方式,去除不利于阅读的复杂寻址方式;(4)3-操作数指令格式。
步骤二:在二进制目标代码分析过程中,由外部输入引发的异常是分析和检测的重点,因为这种系统或者程序的异常都是不可信数据检查不完备,很有可能被恶意利用。非法用户通常利用程序处理外部输入过程中存在的漏洞,构造畸形输入对程序的关键内存区域,如栈、跳转目的地址、函数返回地址等进行改写,依此劫持程序的执行路径,在获得程序控制权后使得非法输入中的恶意代码如shellcode得到执行。鉴于上述原因,软件安全测试将关注的输入函数和危险函数作为分析的重点。因此,本发明将同时覆盖输入函数和危险函数的关键路径作为测试对象,并以此进行并行符号执行时的负载分配。
1.危险函数的定义
危险就是系统的脆弱点,这里定义了4类敏感点,分别是:分别是:字符串拷贝、内存拷贝、格式化、格式转换等。
反汇编器提供了方便的接口,用于获取下表等库函数的调用位置。
函数功能分类 代表函数
字符串拷贝 strcpy、strncpy、wcscpy、strcat、……
内存拷贝 memcpy、CopyMemory、bcopy、……
格式化 wsprintf、sprintf、vsprintf、swprintf、……
格式转换 scanf、vscanf、sscanf、MultiByteToWideChar、……
2.输入函数的定义
函数功能分类 代表函数
文件读取 fread、ReadFile、fgets、ZwReadFile、……
网络数据读取 recv、recvfrom、WSARecv、WSARecvFrom、……
管道及消息读取 TransactNamePile、GetMessage、……
用户输入 gets、getchar、……
环境变量读取 getenv、GetEnvironmentStrings、GetEnvironmentVariable、……
连接函数 Connect、ConnectEx、……
步骤三:对于被测程序中任意两条语句之间的路径簇规约方法,通过如图2所示的步骤实现:
步骤201:用户选择路径簇规约的程序起点和终点,起点可以是:程序进入点、调用输入函数、调用危险函数。终点可以是:调用输入函数、调用危险函数、程序结束点;
步骤202:利用静态分析中获得的函数调用图和控制流图,扫描由步骤202得到的起点语句和终点语句的所有路径,并作切片;
步骤203:在步骤202切片范围,确定与终点符号值有数据依赖关系的程序语句集合D;
步骤204:在步骤202切片范围,找到与D中语句有控制依赖关系的语句集合C;
步骤205:根据C中语句条件构建路径簇;
步骤206:将不同路径簇起点和终点重合的路径簇首尾相连,形成覆盖调用输入函数和调用危险函数的从程序进入点到程序结束点的完成路径簇链。

Claims (6)

1.一种基于路径簇规约的并行符号执行方法,其特征是:包括下述步骤:
1)使用反汇编工具将被测可执行程序进行反汇编,得到被测可执行程序的汇编代码;
2)将所述汇编代码转换为统一的中间汇编语言形式,以屏蔽底层具体汇编语言的差异;
3)根据中间汇编语言形式,生成被测可执行程序的函数调用图和控制流图;
4)定义危险函数特征,通过对函数调用图的静态分析,找到危险函数;
5)定义输入函数特征,通过对函数调用图的静态分析,找到输入函数;
6)分别建立“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点” 两两之间的路径,并归约成路径簇;
7)将步骤6)的3组路径簇进行点到点的连接,形成“程序进入点→程序结束点”的完整路径簇链集合,形成覆盖输入函数和危险函数的完整程序执行路径;
8)以步骤7)形成的“程序进入点→程序结束点”一个完整路径簇链作为一个负载单位,分配到不同的分布式测试节点,生成相应的测试用例进行实际程序安全测试。
2.根据权利要求1所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤4)中,定义了4类危险函数,分别是:字符串拷贝、内存拷贝、格式化、格式转换。
3.根据权利要求2所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤5)中,定义了6类输入函数,分别是:文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。
4.根据权利要求1所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤5)中,定义了6类输入函数,分别是:文件读取、网络数据读取、管道及消息读取、用户输入、环境变量读取、连接函数。
5.根据权利要求1~4任一项所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤3)中,通过编写反汇编工具插件,实现被测可执行程序控制流图和函数调用图的生成。
6.根据权利要求5所述的基于路径簇规约的并行符号执行方法,其特征是,在步骤6)中,以分析被测可执行程序控制依赖和数据依赖关系为基础,分别对进行“程序进入点→调用输入函数”,“调用输入函数→调用危险函数”,“调用危险函数→程序结束点”3组点到点的多条路径进行规约,形成点到点的路径簇;被测可执行程序中两点之间的路径簇规约概述为2个步骤:                                                
Figure 961453DEST_PATH_IMAGE001
确定与符号执行目标点结果符号值有数据依赖关系的程序语句集合;
Figure 878593DEST_PATH_IMAGE002
找到与
Figure 284429DEST_PATH_IMAGE001
中语句集合有控制依赖关系的语句集合。
CN201210542210.4A 2012-12-14 2012-12-14 基于路径簇归约的并行符号执行方法 Active CN103049377B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210542210.4A CN103049377B (zh) 2012-12-14 2012-12-14 基于路径簇归约的并行符号执行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210542210.4A CN103049377B (zh) 2012-12-14 2012-12-14 基于路径簇归约的并行符号执行方法

Publications (2)

Publication Number Publication Date
CN103049377A true CN103049377A (zh) 2013-04-17
CN103049377B CN103049377B (zh) 2016-01-13

Family

ID=48062024

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210542210.4A Active CN103049377B (zh) 2012-12-14 2012-12-14 基于路径簇归约的并行符号执行方法

Country Status (1)

Country Link
CN (1) CN103049377B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104360938A (zh) * 2014-10-21 2015-02-18 北京邮电大学 一种故障确认方法及其系统
CN104536896A (zh) * 2015-01-12 2015-04-22 牟永敏 面向函数调用路径的回归测试用例选择与排序方法及系统
CN105760219A (zh) * 2016-01-29 2016-07-13 中国人民解放军信息工程大学 基于多Agent分布式调度的并行符号执行系统
CN108959056A (zh) * 2017-05-17 2018-12-07 富士通株式会社 测试用例生成方法和测试用例生成装置
CN109002723A (zh) * 2018-07-24 2018-12-14 北京理工大学 一种分段式符号执行方法
CN109977005A (zh) * 2019-02-13 2019-07-05 网易(杭州)网络有限公司 端到端测试方法、介质、装置和计算设备
CN113961475A (zh) * 2021-12-22 2022-01-21 清华大学 基于规约导向的错误处理缺陷的检测方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1949186A (zh) * 2006-11-17 2007-04-18 深圳市领测科技有限公司 一种程序调测系统及用于程序调测系统的映射方法
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN101714119A (zh) * 2009-12-09 2010-05-26 北京邮电大学 基于二进制程序的测试数据生成器和方法
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
CN102279799A (zh) * 2011-08-31 2011-12-14 中国信息安全测评中心 基于路径包含处理方法的源代码静态分析方法及其装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1949186A (zh) * 2006-11-17 2007-04-18 深圳市领测科技有限公司 一种程序调测系统及用于程序调测系统的映射方法
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN101714119A (zh) * 2009-12-09 2010-05-26 北京邮电大学 基于二进制程序的测试数据生成器和方法
CN102279799A (zh) * 2011-08-31 2011-12-14 中国信息安全测评中心 基于路径包含处理方法的源代码静态分析方法及其装置

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104360938A (zh) * 2014-10-21 2015-02-18 北京邮电大学 一种故障确认方法及其系统
CN104536896A (zh) * 2015-01-12 2015-04-22 牟永敏 面向函数调用路径的回归测试用例选择与排序方法及系统
CN105760219A (zh) * 2016-01-29 2016-07-13 中国人民解放军信息工程大学 基于多Agent分布式调度的并行符号执行系统
CN105760219B (zh) * 2016-01-29 2019-02-12 中国人民解放军信息工程大学 基于多Agent分布式调度的并行符号执行系统
CN108959056A (zh) * 2017-05-17 2018-12-07 富士通株式会社 测试用例生成方法和测试用例生成装置
CN108959056B (zh) * 2017-05-17 2021-11-16 富士通株式会社 测试用例生成方法和测试用例生成装置
CN109002723A (zh) * 2018-07-24 2018-12-14 北京理工大学 一种分段式符号执行方法
CN109002723B (zh) * 2018-07-24 2021-09-07 北京理工大学 一种分段式符号执行方法
CN109977005A (zh) * 2019-02-13 2019-07-05 网易(杭州)网络有限公司 端到端测试方法、介质、装置和计算设备
CN109977005B (zh) * 2019-02-13 2022-11-25 网易(杭州)网络有限公司 端到端测试方法、介质、装置和计算设备
CN113961475A (zh) * 2021-12-22 2022-01-21 清华大学 基于规约导向的错误处理缺陷的检测方法及系统
CN113961475B (zh) * 2021-12-22 2022-04-15 清华大学 基于规约导向的错误处理缺陷的检测方法及系统

Also Published As

Publication number Publication date
CN103049377B (zh) 2016-01-13

Similar Documents

Publication Publication Date Title
CN103049377B (zh) 基于路径簇归约的并行符号执行方法
CN107832619B (zh) Android平台下应用程序漏洞自动化挖掘系统及方法
CN102799529B (zh) 一种动态的二进制代码测试用例生成方法
CN102945203B (zh) 一种用于移动互联网应用的代码安全测试方法
CN101853200B (zh) 一种高效动态软件漏洞挖掘方法
CN103761476A (zh) 特征提取的方法及装置
CN103678115B (zh) 在混合模式程序中检测源代码差错的位置的设备和方法
CN102360334A (zh) 一种动静态结合的软件安全性测试方法
Jin et al. Fast: Fpga-based subgraph matching on massive graphs
CN103136107A (zh) 一种嵌入式程序动态分配内存的变量调试方法
CN108090360B (zh) 一种基于行为特征的安卓恶意应用分类方法及系统
CN102708043B (zh) 静态数据竞争检测和分析
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN104392151B (zh) 一种软件保护方法及系统
Buinevich et al. Method and prototype of utility for partial recovering source code for low-level and medium-level vulnerability search
CN103440457A (zh) 基于进程模拟的二进制程序分析系统
Buinevich et al. Method for partial recovering source code of telecommunication devices for vulnerability search
CN106502720A (zh) 一种数据处理方法和装置
Huang et al. GPU computing performance analysis on matrix multiplication
Lin et al. Graph-based seed object synthesis for search-based unit testing
CN114389978B (zh) 一种基于静态污点分析的网络协议侧信道检测方法和系统
Tang et al. Xdebloat: Towards automated feature-oriented app debloating
Yaâ et al. A systematic mapping study on cloud-based mobile application testing
CN116841564B (zh) 一种数据处理方法、装置、设备以及计算机可读存储介质
Stratis et al. Speeding up test execution with increased cache locality

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant