CN102495795A - 一种基于中间语言分析的软件脆弱性测试方法 - Google Patents
一种基于中间语言分析的软件脆弱性测试方法 Download PDFInfo
- Publication number
- CN102495795A CN102495795A CN2011103802320A CN201110380232A CN102495795A CN 102495795 A CN102495795 A CN 102495795A CN 2011103802320 A CN2011103802320 A CN 2011103802320A CN 201110380232 A CN201110380232 A CN 201110380232A CN 102495795 A CN102495795 A CN 102495795A
- Authority
- CN
- China
- Prior art keywords
- intermediate language
- program
- irstmt
- stain
- statement
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明为一种基于中间语言分析的软件脆弱性测试方法,首先采用基于动态二进制插桩方法将程序执行中的上下文信息记录到trace文件中;其次对程序trace进行离线分析,顺次读取每一条指令,并将上下文信息保存到对应数据结构中,将指令机器码转换为中间语言表示;然后针对中间语言进行污点分析,通过分析中间语句,通过判断语句和源操作数类型,判定操作是否会引起污点传播;约束条件收集,基于上述中间语言分析,依据路径搜索策略对布尔方程进行变换,通过约束求解,得到各个路径对应输入值。本发明测试对象的运行平台即可以为PC或服务器,也可以为嵌入式***。
Description
技术领域
本发明涉及软件测试技术领域,具体涉及到虚拟化技术、动态二进制插桩技术、中间语言分析技术、符号执行技术。
背景技术
在软件生命周期中,软件测试是非常重要的一个环节,高效完备的测试是保证软件质量的重要手段。基于测试的粒度,软件测试可以分为***测试、模块测试、策略级测试。基于测试收集数据的类型,软件测试可以分为性能测试、功能测试、稳定性测试等。此外,根据测试过程是否依赖于程序内部结构,软件测试可以分为白盒测试、黑盒测试、灰盒测试。
基于分层和抽象的原则,计算机***在不同层面上实现虚拟化技术,以提供多个同构或异构的平台。在硬件、***以及应用程序各个层次上,虚拟化提供很好的物理隔离和逻辑隔离,并提供细粒度的运行时信息,在程序分析领域有广泛的应用。
动态二进制插桩是指在程序运行时,除了正常执行原始程序外,在相关位置***执行其他代码,用于完成程序运行时信息收集、分析、优化等工作。根据是否对原始程序执行逻辑产生影响,插桩可以分为有损插桩和无损插桩。
中间语言分析和优化在编译技术领域有着广泛的应用。通过对程序源代码或机器指令进行翻译,转换为中间语言形式,导出某些隐含信息,从而方便程序的分析和优化。
与实际执行不同,在符号执行中,程序的输入数据是一个符号,这个符号代表任何可能的输入,而不是局限某个特定的输入。程序在执行计算、拷贝、比较、分支跳转等语句时,都可以表达为对应的符号操作。符号执行在软件测试和程序证明中有着广泛的应用。
发明内容
在传统测试方法中,普遍存在着代码覆盖率较低、测试效率低下的缺陷,无法根据实际需求,对特定的代码路径进行高效测试。有鉴于此,本发明提供了一种基于中间语言分析的软件脆弱性测试方法,用于发现程序潜在的设计缺陷。
该基于中间语言分析的软件脆弱性测试方法是这样实现的:
第一步:运行目标测试程序,采用基于动态二进制插桩方法将程序执行中的上下文信息记录到trace文件中;
其中上下文信息包括指令机器码、寄存器、访存数据。
第二步:对程序trace进行离线分析,顺次读取每一条指令,并将上下文信息保存到对应数据结构中,将指令机器码转换为中间语言表示;
其中中间语言包括7种基本操作,分别如下:
IRStmt_Mark:标记原始指令信息;
IRStmt_Put:临时变量向寄存器写数据
IRStmt_WrTmp:寄存器向临时变量写数据
IRStmt_Store:临时变量向内存写数据
IRStmt_Exit:退出中间语言某个代码块
IRStmt_PutE:临时变量向寄存器写浮点数据
IRStmt_Nop:空操作,无实际意义
将中间语言分成3个层次,即超级块、语句、表达式;一个Trace映射多个超级块,每个超级块包括多条语句,每条语句由多个表达式构成。
第三步:针对中间语言进行污点分析,包括污点标记和污点传播两个方面;污点标记通过分析Trace中的***调用,将从外部设备读进内存的数据标记为污染源;污点传播通过分析中间语句,通过判断语句和源操作数类型,判定操作是否会引起污点传播;
第四步:约束条件收集:程序发生分支跳转时,污点对分支条件的影响即为约束条件;在中间语言中,如果分支跳转语句的条件被污染,那么收集对应的约束条件;
第五步:基于上述中间语言分析,某一条路径对应多个约束条件PC,对各个约束条件进行逻辑合取,生成布尔方程F=PC1∩PC2∩…∩PCn;
第六步:依据路径搜索策略对布尔方程进行变换,不同的方程对应程序所走的不同路径,如果方程有解,则存在输入使程序走对应路径,否则该路径不可达;
第七步:通过约束求解,得到各个路径对应输入值,基于输入模板,通过在相关位置上修改数据,生成新的测试用例,驱动程序继续执行。
本发明的有益效果为:
基于中间语言进行测试用例的自动化生成,使得在测试过程中,污点分析和符号执行的对象不再局限于某一个固定指令集,而是支持包括x86、arm等多种体系架构。因此,基于中间语言进行自动化测试,测试对象的运行平台即可以为PC或服务器,也可以为嵌入式***。
附图说明
图1为基于中间语言进行自动化测试的***框架;
图2为中间语言的翻译机制;
图3为中间语言的内部操作机制。
具体实施方式
下面结合附图对本发明作进一步介绍。
图1为基于中间语言进行自动化测试的***框架。***分模拟器和离线分析模块两大部分,前者主要完成对目标程序运行时信息的捕获,后者主要完成测试用例的自动化生成。
图2为中间语言的翻译机制。中间语言分析模块将每一条机器指令翻译成等价的中间代码,并对中间代码解释执行。在解释过程中,维护程序的上下文信息,并进行污点传播分析。
图3为中间语言的内部操作机制。中间语言内部维护三个对象,即寄存器、临时变量以及内存数据,其中临时变量是对象之间传递数据的媒介,任何数据操作必须通过对中间变量的读写来实现。
一、收集目标程序运行时信息
1、虚拟机启动操作***:启动操作***。测试目标可以是运行在PC平台下的Windows程序,也可以是运行在嵌入式平台下的Linux程序。模拟器根据目标程序所在的硬件平台和软件平台的不同,加载对应的配置,并启动操作***。
2、启动二进制插桩工具:二进制插桩工具用于在二进制级别对目标进程进行追踪和监控。记录程序的运行时信息,用于后续的进一步分析。运行时信息,具体包括程序指令的机器码、寄存器数据、内存读写数据、线程信息、加载的模块信息等。
3、初始化目标程序:命令行或图形界面启动目标程序,根据程序的输入类型(网络报文、磁盘文件或终端输入),向程序输入初始数据,驱动程序执行,并收集目标程序运行时上下文信息。如图1所示,***框架左半部分是模拟器部分,用于加载操作***和测试对象。
以上三个部分,完成程序运行时上下文信息的收集,并将对应数据转储到Trace文件中。
二、中间语言分析
1、指令回放:Trace文件记录程序运行时的指令上下文信息,包括指令机器码、寄存器、访存数据等。如图1所示,离线分析模块顺次读取每一条指令,并将上下文信息保存到对应数据结构中。
2、中间语言分析:在PC、服务器以及嵌入式平台存在各种各样的指令集,包括x86,ppc,sparc,arm等。各种指令集在语法和语义上存在着很大差异,加之指令集本身存在隐含信息,使得指令分析存在较大困难。
如图3所示,本发明设计三种变量,即寄存器,中间变量,内存变量。三种变量顺次编号,并依次映射对应资源。为了将原指令集操作进行等价转换,中间语言引入7种基本操作,分别如下:
IRStmt_Mark:标记原始指令信息(机器码,内存地址)
IRStmt_Put:临时变量向寄存器写数据
IRStmt_WrTmp:寄存器(临时变量、内存)向临时变量写数据
IRStmt_Store:临时变量向内存写数据
IRStmt_Exit:退出中间语言某个代码块
IRStmt_PutE:临时变量向寄存器写浮点数据
IRStmt_Nop:空操作,无实际意义
同时,本方案将中间语言分成3个层次,即超级块(SuperBlock)、语句(IRStmt)、表达式(IRExpr),并维护一个中间语言上下文。一个原始的Trace可以映射多个超级块,每个超级块包括多条语句,每条语句又有多个表达式构成。分层设计和实现,便于中间语言根据需求,在各个层次上进行分析和优化。
3、污点分析及约束条件收集:针对中间语言进行污点分析,包括污点标记和污点传播两个方面。污点标记主要是通过分析Trace中某些***调用(如读取文件数据、接受网络报文),将某些内存区域或寄存器标记为污染源。污点传播主要是通过分析中间语句,根据语句类型来判断是否引起污点传播。例如,IRStmt Dest,Src;如果Src变量已被污染,并且中间语句能够引起数据传播,那么Dest变量亦会被污染。在本方案设计的中间语言中,可能引起污点传播的有IRStmt_Put,IRStmt_WrTmp,IRStmt_Store三种类型语句。程序在执行过程中,会通过***调用(read、receive等)从磁盘或网络中读取数据,并放入内存。这些读进内存的数据,即可认定程序的初始输入,通过将这些从外部设备读进内存的数据标记为污染源,即可以开始监控输入数据对程序状态的影响。在中间语言中,赋值、计算、条件判断等操作会引起值的直接或间接传播,通过判断语句和源操作数类型,判定操作是否会引起污点传播。
约束条件收集:程序发生分支跳转时,污点对分支条件的影响即为约束条件。在中间语言中,如果分支跳转语句的条件被污染,那么需要收集对应的约束条件。约束条件是一个布尔表达式,例如下面语句。
If(REG(0)eq 0)THEN
IRStmt;
ELSE
IRStmt;
如果REG(0)被污染,那么此分支的约束条件即为PC=REG(0)eq 0。
三、程序路径探测及测试用例生成
1、程序路径探测:基于上述中间语言分析,某一条路径对应多个约束条件(PC),对各个约束条件进行逻辑合取,生成布尔方程F。路径搜索包括深度优先、宽度优先等策略。依据具体的搜索策略,本方案对布尔方程采用不同的变换策略。例如基于深度优先,对方程F=PC1∩PC2∩…∩PCn可以生成n个新的方程,如下所示。
Fn=PC1∩PC2∩…∩^PCn
Fn-1=PC1∩PC2∩…∩^PCn-1
………
F2=PC1∩^PC2
F1=^PC1
通过对方程n个条件逐个取反,生成n个新的布尔方程,这n个布尔方程分别对应着n个不同的程序路径。
依据路径搜索策略,对布尔方程进行变换,不同的方程对应程序所走的不同路径。如果方程有解,则存在输入使程序走对应路径,否则该路径不可达。
2、测试用例生成:通过符号执行和约束求解,路径探测空间探测模块会得到各个路径对应输入值。基于输入模板,通过在相关位置上修改数据,生成新的测试用例,驱动程序继续执行。布尔方程是否有解,是通过求解器来验证的。如果某个布尔方程存在解,则求解器会返回方程的某个输入值,否则求解器会告知无解。由于不同的布尔方程对应不同的程序路径,所以方程解即对应路径的输入。
Claims (3)
1.基于中间语言分析的软件脆弱性测试方法,其特征在于,包括以下步骤:
第一步:运行目标测试程序,采用基于动态二进制插桩方法将程序执行中的上下文信息记录到trace文件中;
第二步:对程序trace进行离线分析,顺次读取每一条指令,并将上下文信息保存到对应数据结构中,将指令机器码转换为中间语言表示;
第三步:针对中间语言进行污点分析,包括污点标记和污点传播两个方面;污点标记通过分析Trace中的***调用,将从外部设备读进内存的数据标记为污染源;污点传播通过分析中间语句,通过判断语句和源操作数类型,判定操作是否会引起污点传播;
第四步:约束条件收集:程序发生分支跳转时,污点对分支条件的影响即为约束条件;在中间语言中,如果分支跳转语句的条件被污染,那么收集对应的约束条件;
第五步:基于上述中间语言分析,某一条路径对应多个约束条件PC,对各个约束条件进行逻辑合取,生成布尔方程F=PC1∩PC2∩…∩PCn;
第六步:依据路径搜索策略对布尔方程进行变换,不同的方程对应程序所走的不同路径,如果方程有解,则存在输入使程序走对应路径,否则该路径不可达;
第七步:通过约束求解,得到各个路径对应输入值,基于输入模板,通过在相关位置上修改数据,生成新的测试用例,驱动程序继续执行。
2.如权利要求1所述的基于中间语言分析的软件脆弱性测试方法,其特征在于,其中上下文信息包括指令机器码、寄存器、访存数据。
3.如权利要求1或2所述的基于中间语言分析的软件脆弱性测试方法,其特征在于,其中中间语言包括7种基本操作,分别如下:
IRStmt_Mark:标记原始指令信息;
IRStmt_Put:临时变量向寄存器写数据
IRStmt_WrTmp:寄存器向临时变量写数据
IRStmt_Store:临时变量向内存写数据
IRStmt_Exit:退出中间语言某个代码块
IRStmt_PutE:临时变量向寄存器写浮点数据
IRStmt_Nop:空操作,无实际意义
将中间语言分成3个层次,即超级块、语句、表达式;一个Trace映射多个超级块,每个超级块包括多条语句,每条语句由多个表达式构成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110380232 CN102495795B (zh) | 2011-11-25 | 2011-11-25 | 一种基于中间语言分析的软件脆弱性测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110380232 CN102495795B (zh) | 2011-11-25 | 2011-11-25 | 一种基于中间语言分析的软件脆弱性测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102495795A true CN102495795A (zh) | 2012-06-13 |
CN102495795B CN102495795B (zh) | 2013-04-24 |
Family
ID=46187620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110380232 Expired - Fee Related CN102495795B (zh) | 2011-11-25 | 2011-11-25 | 一种基于中间语言分析的软件脆弱性测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102495795B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104104659A (zh) * | 2013-04-07 | 2014-10-15 | 中国科学技术大学 | 一种通信指纹的提取方法以及装置 |
CN104866765A (zh) * | 2015-06-03 | 2015-08-26 | 康绯 | 基于行为特征相似性的恶意代码同源性分析方法 |
CN112988563A (zh) * | 2019-12-18 | 2021-06-18 | 中国电信股份有限公司 | 污点动态分析方法和装置 |
CN113268427A (zh) * | 2021-06-15 | 2021-08-17 | 中国电子科技网络信息安全有限公司 | 一种针对二进制程序的崩溃分析方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070011741A1 (en) * | 2005-07-08 | 2007-01-11 | Alcatel | System and method for detecting abnormal traffic based on early notification |
CN101872323A (zh) * | 2009-04-22 | 2010-10-27 | 曾凡平 | 一种基于虚拟机的故障注入测试方法 |
-
2011
- 2011-11-25 CN CN 201110380232 patent/CN102495795B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070011741A1 (en) * | 2005-07-08 | 2007-01-11 | Alcatel | System and method for detecting abnormal traffic based on early notification |
CN101872323A (zh) * | 2009-04-22 | 2010-10-27 | 曾凡平 | 一种基于虚拟机的故障注入测试方法 |
Non-Patent Citations (1)
Title |
---|
黄强 等: "基于信息流策略的污点传播分析及动态验证", 《软件学报》, vol. 22, no. 9, 30 September 2011 (2011-09-30), pages 2036 - 2047 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104104659A (zh) * | 2013-04-07 | 2014-10-15 | 中国科学技术大学 | 一种通信指纹的提取方法以及装置 |
CN104104659B (zh) * | 2013-04-07 | 2017-02-08 | 中国科学技术大学 | 一种通信指纹的提取方法以及装置 |
CN104866765A (zh) * | 2015-06-03 | 2015-08-26 | 康绯 | 基于行为特征相似性的恶意代码同源性分析方法 |
CN104866765B (zh) * | 2015-06-03 | 2017-11-10 | 康绯 | 基于行为特征相似性的恶意代码同源性分析方法 |
CN112988563A (zh) * | 2019-12-18 | 2021-06-18 | 中国电信股份有限公司 | 污点动态分析方法和装置 |
CN113268427A (zh) * | 2021-06-15 | 2021-08-17 | 中国电子科技网络信息安全有限公司 | 一种针对二进制程序的崩溃分析方法及*** |
CN113268427B (zh) * | 2021-06-15 | 2022-03-29 | 中国电子科技网络信息安全有限公司 | 一种针对二进制程序的崩溃分析方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN102495795B (zh) | 2013-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105678169B (zh) | 一种二进制程序漏洞挖掘方法和*** | |
CN101814053B (zh) | 一种基于功能模型的二进制代码漏洞发现方法 | |
Khan et al. | A comparative study of white box, black box and grey box testing techniques | |
CN103678110B (zh) | 提供修改相关信息的方法和装置 | |
CN109144882B (zh) | 一种基于程序不变量的软件故障定位方法及装置 | |
US8930919B2 (en) | Modernization of legacy software systems based on modeled dependencies | |
Chen et al. | Coverage prediction for accelerating compiler testing | |
CN103389939B (zh) | 一种针对堆可控分配漏洞的检测方法及*** | |
CN1908895B (zh) | 验证应用程序全球化问题的***和方法 | |
CN106354630A (zh) | 一种基于动态符号执行的软件缺陷检测方法 | |
CN102495795B (zh) | 一种基于中间语言分析的软件脆弱性测试方法 | |
CN102289362A (zh) | 分段符号执行装置及其工作方法 | |
CN103218297A (zh) | 测试数据的筛选方法及装置 | |
CN102495796B (zh) | 一种基于单元测试的软件脆弱性测试方法 | |
Chi et al. | Multi-level random walk for software test suite reduction | |
CN117435505A (zh) | 一种性能测试脚本可视化生成方法 | |
CN110457208B (zh) | 符号执行的引导方法、装置、设备及计算机可读存储介质 | |
WO2014142876A1 (en) | Kernel functionality checker | |
Wang et al. | Invariant based fault localization by analyzing error propagation | |
Nöhrer et al. | Positive effects of utilizing relationships between inconsistencies for more effective inconsistency resolution (NIER track) | |
CN114996111A (zh) | 一种配置项对软件***性能影响的分析方法及*** | |
CN117520199B (zh) | 基于静态符号执行的数值软件缺陷检测方法及装置 | |
Zhang et al. | ReInstancer: An automatic refactoring approach for Instanceof pattern matching | |
Silva et al. | Characterizing the control logic of web applications’ user interfaces | |
CN102129406A (zh) | 一种基于条件值的软件静态预测方法及工具 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130424 Termination date: 20151125 |