CN103399780B - 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 - Google Patents
一种基于虚拟机技术和动态符号执行的整数溢出检测方法 Download PDFInfo
- Publication number
- CN103399780B CN103399780B CN201310277338.7A CN201310277338A CN103399780B CN 103399780 B CN103399780 B CN 103399780B CN 201310277338 A CN201310277338 A CN 201310277338A CN 103399780 B CN103399780 B CN 103399780B
- Authority
- CN
- China
- Prior art keywords
- integer
- symbol
- code
- semiology analysis
- virtual machine
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 31
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000013519 translation Methods 0.000 claims abstract description 10
- 230000014616 translation Effects 0.000 claims abstract description 10
- 238000012360 testing method Methods 0.000 claims abstract description 8
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 238000007689 inspection Methods 0.000 claims description 2
- 230000003068 static effect Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000005574 cross-species transmission Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明的目的在于提供一种基于虚拟机技术和动态符号执行的整数溢出检测方法,能够直接对x86平台下的二进制程序进行测试,该基于虚拟机技术和动态符号执行的整数溢出检测方法,利用虚拟机技术将目标二进制程序进行模拟执行,在执行的过程中对其进行二进制翻译,通过将目标二进制代码翻译成中间表示,再将中间表示翻译成本地可执行代码进行具体执行;同时将中间表示翻译成LLVM代码进行符号执行;将具体执行和符号执行进行结合,在符号执行的过程中将目标代码翻译成LLVM语言表示,在LLVM语言的基础上进行整数溢出检测,并采用符号执行和约束求解方法产生测试用例,利用具体执行的方式进行检测。
Description
技术领域
本发明涉及一种整数溢出检测方法,其中涉及到虚拟机技术和动态符号技术。
背景技术
动态符号执行是介于符号执行和具体执行之间的概念,具体执行是指在执行一个程序时只根据一种输入得出相应的一种输出结果,而符号执行是指在执行一个程序时将输入按照不同的结果符号化,使得输出结果尽可能地覆盖所有的可能性,动态符号执行则是在具体执行的过程中对想要符号执行的模块进行符号执行。
整数溢出检测技术分为静态检测和动态检测两种。静态整数溢出检测技术是指对程序的源码进行分析,对其中可能存在整数溢出的地方进行判断,最后将判断结果为能够发生整数溢出的代码信息收集起来。动态整数溢出检测技术是指在程序源码中***整数溢出的检测和提示代码,在程序运行时如果发生了整数溢出,***的代码会将溢出发生的具体信息输出。
现有技术实现选择性符号执行的工具是S2E,S2E结合了qemu虚拟机、Klee符号执行工具等,S2E在使用qemu虚拟机运行一个***的同时可以使用自己的插件来对运行中的***进行操作。静态整数溢出检测工具有Kint,是基于LLVM&Clang研发的工具。动态整数溢出检测工具有IOC,也是基于Clang研发的工具。
静态整数溢出检测技术对源码的分析比较全面,但因为没有真正执行,所以误报较高,而且不容易验证。动态整数溢出检测技术几乎没有误报,但因为必须程序真正发生溢出才能检测到,所以覆盖率不高,尤其对于大型程序来说,运行一次的代价相当高。结合考虑静态检测和动态检测各自的优缺点,我们认为凭借S2E这个选择性符号执行平台可以很好地将静态检测和动态检测的优点结合起来,并且同时又能避免它们的缺点。
发明内容
本发明的目的在于提供一种基于虚拟机技术和动态符号执行的整数溢出检测方法,能够直接对x86平台下的二进制程序进行测试,
该基于虚拟机技术和动态符号执行的整数溢出检测方法,利用虚拟机技术将目标二进制程序进行模拟执行,在执行的过程中对其进行二进制翻译,通过将目标二进制代码翻译成中间表示,再将中间表示翻译成本地可执行代码进行具体执行;同时将中间表示翻译成LLVM代码进行符号执行;将具体执行和符号执行进行结合,在符号执行的过程中将目标代码翻译成LLVM语言表示,在LLVM语言的基础上进行整数溢出检测,并采用符号执行和约束求解方法产生测试用例,利用具体执行的方式进行检测。
所述二进制翻译采用以下步骤:
第一步:将要检测的目标二进制文件进行反编译,得到相应的中间代码;
第二步:对中间代码进行再次翻译,翻译为本地可执行代码和LLVM中间表示两种语言,分别用于具体执行和符号执行;
第三步:在具体执行和符号执行之间进行切换,首先进行具体执行,碰到符号变量时切换到符号执行,符号执行完再切换到具体执行。
所述的整数溢出检测采用如下表1中所述方法:UADD:为无符号加法溢出、SADD:有符号加法、USUB:无符号减法、SSUB:有符号减法、UMUL:无符号乘法、SMUL:有符号乘法、UDIV,REM:无符号除法、取余运算、SDIV:有符号除法、SHL,ASHR,LSHR:像左移位操作、算术右移操作、逻辑右移操作、ARRAY:对数组越界的判断、SIZE:对描述数据大小的变量的判断、CAST:对整数的符号转换和精度转换的判断;其中x--左运算数、y--右运算数、UINTMAX--无符号整数最大值、SINTMIN--有符号整数最小值、Index--数组索引值、ARRAY_MAX--数组的长度、size--数据大小、n--运算数的位数、z--被转换的数、m--转换目标类型的位数、sizeof()--计算指定整数的位数、MUINTMAX--m位的无符号整数最大值、MSINTMAX--m位的有符号整数最大值、MSINTMIN--m位的有符号整数最小值;
表1
本发明的优点在于将选择性符号执行和整数溢出错误检测结合,在脱离了源码依赖的基础上又提高了检测结果的正确性和全面性,而且在时间消耗上也比完全符号执行更有优势,这是目前单纯的动态和静态整数溢出错误检测所无法同时达到的。
附图说明
图1是本发明所提出的工作流程图。
具体实施方式
下面结合具体实施例和附图详细说明本发明,但本发明并不仅限于此。
如图1所示,本发明的总体分为预处理、动态二进制翻译阶段、整数溢出检测阶段和结果验证阶段这四个阶段。
一、预处理阶段
这一阶段主要将目标程序进行加载,并对其进行预处理分析。预处理分析包括对目标程序的初步静态分析,提取目标程序基本信息,以及对目标程序输入进行符号化。
二、动态二进制翻译阶段
这一阶段主要包括以下步骤:
1、将要检测的目标二进制文件进行反编译,得到相应的中间代码;
2、对中间代码进行再次翻译,翻译为本地可执行代码和LLVM中间表示两种语言,分别用于具体执行和符号执行。
3、在具体执行和符号执行之间进行切换。首先进行具体执行,碰到符号变量时切换到符号执行,符号执行完再切换到具体执行;
三、整数溢出检测阶段
在对目标程序的检测过程中,我们结合具体执行和符号执行的方法,在运行到第一阶段***的检测点的时候,进行整数溢出检测,该检测主要在程序切换到符号执行的时候进行,因此是基于LLVM中间语言进行检测。其语法形式介于传统的汇编语言和高级语言之间,在LLVM中间表示中,一个源码文件被表示为类Module的对象,文件中的函数使用类Function来表示,Module中包含Function,Function中又包含BasicBlock,BasicBlock中包含的则是一条条的Instruction。这四个类一层包含一层,每个Module都组成了一个树状结构。可以看到,Module和Function的结构和高级语言类似,而BasicBlock和Instruction的结构像是传统的汇编语言。如下所示:
判断是否发生整数溢出不能简单地按照溢出条件进行判断,例如两个无符号32位整数x,y相加,不能用if(x+y>0xffffffff)来判断,因为在计算机中这个条件是永远不会成立的,x+y的结果就算发生溢出也会在32位无符号整数所能表示的数值范围内,只是最后的结果因为溢出而与正确的结果不符。所以可以采用变形后的不等式来进行判断,如x+y<x等。
在本发明中,我们提出了针对各类整数溢出的判断方法,总结如下表所示:
其中x--左运算数、y--右运算数、UINTMAX--无符号整数最大值、SINTMIN--有符号整数最小值、Index--数组索引值、ARRAY_MAX--数组的长度、size--数据大小、n--运算数的位数、z--被转换的数、m--转换目标类型的位数、sizeof()--计算指定整数的位数、MUINTMAX--m位的无符号整数最大值、MSINTMAX--m位的有符号整数最大值、MSINTMIN--m位的有符号整数最小值;
表1
其中,SADD、SSUB和SMUL的常用检测方法比相应的无符号运算要复杂,这是因为需要对运算数的符号作分类讨论,详细解释如下:
(1)SADD。当两个异号的有符号整数相加时不会发生溢出,因为结果的取值范围肯定在两个运算数之间,不会超出其中任意一个运算数。两个同号的有符号整数相加,如果结果的符号和运算数不同,那么说明发生了溢出,因为发生溢出后会向符号位产生进位,使得结果的符号发生改变。不等式(((x+y)^x)&((x+y)^y))<0想要表达的意思是x+y的结果的符号和两个运算数的符号位都不同,只有前面叙述的能够发生溢出的条件才能满足该不等式。
(2)SSUB。和SADD相反,两个同号的有符号整数相减时不会发生溢出,因为同号相减等价于异号相加。同理,异号相减等价于同号相加,当结果的符号和被减数的符号不同时说明发生了溢出,因为异号相减的结果在不发生溢出的情况下肯定和被减数同号。不等式(((x-y)^x)&(x^y))<0表达的意思是x-y的结果的符号位和被减数x的符号位不同而且x和y的符号位也不同,只有前面叙述的能够发生溢出的条件才能满足该不等式。
(3)SMUL。有符号乘法的检测方法比较复杂,由于不能确定有符号乘法在溢出时共有多少进位,所以无法单纯地以结果的符号位来判断,因此采用扩展位数的方法进行判断,如不等式(n)(((2n)x*(2n)y)>>n)!=((n)((2n)x*(2n)y))>>(n-1),该不等式的含义是将n位的整数x和y扩展成2n位并进行乘法运算,然后比较将乘法结果右移n位后再转换成n位整数的结果和先将乘法结果转换成n位整数再右移n-1位的结果是否不同,如果不同则表示发生了溢出。这个不等式的原理为:由于计算机在计算乘法时是使用补码来计算的,扩展成2n位x和y的相乘结果在不发生溢出的情况下第n-1到2n-2位一定都是相同的(结果为正则都为0,结果为负则都为1,符号位在第2n-1位),这样右移n位后再转换成n位整数的结果应该是原2n位乘法结果的第n到2n-1位,如果先将2n位乘法结果转换成n位再右移n-1位的话,结果除符号位外都应该是一样的(结果为正则都为0,结果为负则都为1,有符号数移位是算术移位),因此两者不等的话应该表示发生了溢出。
四、结果验证阶段
这一阶段对检测出来报告整数溢出的地方进行验证,通过符号执行和约束求解技术,产生一组满足整数溢出条件,且能够到达该路径的测试用例,使用具体执行的方法进行再次执行,如果该测试用例能够按照预期路径运行,且在检测点与报告结果的溢出现象一致,则可以确定该整数溢出是确实存在,可重现的。如果不一致,则为误报。
虽然参考优选实施例对本发明进行描述,但以上所述实例并不构成本发明保护范围的限定,任何在本发明的精神及原则内的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围内。
Claims (3)
1.基于虚拟机技术和动态符号执行的整数溢出检测方法,其特征在于,利用虚拟机技术将目标二进制程序进行模拟执行,在执行的过程中对其进行二进制翻译,通过将目标二进制代码翻译成中间表示,再将中间表示翻译成本地可执行代码进行具体执行;同时将中间表示翻译成LLVM代码进行符号执行;将具体执行和符号执行进行结合,在符号执行的过程中将目标代码翻译成LLVM语言表示,在LLVM语言的基础上进行整数溢出检测,并采用符号执行和约束求解方法产生测试用例,利用具体执行的方式进行检测。
2.如权利要求1所述的基于虚拟机技术和动态符号执行的整数溢出检测方法,其特征在于,所述二进制翻译采用以下步骤:
第一步:将要检测的目标二进制文件进行反编译,得到相应的中间代码;
第二步:对中间代码进行再次翻译,翻译为本地可执行代码和LLVM中间表示两种语言,分别用于具体执行和符号执行;
第三步:在具体执行和符号执行之间进行切换,首先进行具体执行,碰到符号变量时切换到符号执行,符号执行完再切换到具体执行。
3.如权利要求1或2所述的基于虚拟机技术和动态符号执行的整数溢出检测方法,其特征在于,所述的整数溢出检测采用如下表1中所述方法:UADD:为无符号加法溢出、SADD:有符号加法、USUB:无符号减法、SSUB:有符号减法、UMUL:无符号乘法、SMUL:有符号乘法、UDIV,REM:无符号除法、取余运算、SDIV:有符号除法、SHL,ASHR,LSHR:像左移位操作、算术右移操作、逻辑右移操作、ARRAY:对数组越界的判断、SIZE:对描述数据大小的变量的判断、CAST:对整数的符号转换和精度转换的判断;
其中x--左运算数、y--右运算数、UINTMAX--无符号整数最大值、SINTMIN--有符号整数最小值、Index--数组索引值、ARRAY_MAX--数组的长度、size--数据大小、n--运算数的位数、z--被转换的数、m--转换目标类型的位数、sizeof()--计算指定整数的位数、MUINTMAX--m位的无符号整数最大值、MSINTMAX--m位的有符号整数最大值、MSINTMIN--m位的有符号整数最小值。
表1
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310277338.7A CN103399780B (zh) | 2013-07-03 | 2013-07-03 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310277338.7A CN103399780B (zh) | 2013-07-03 | 2013-07-03 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103399780A CN103399780A (zh) | 2013-11-20 |
CN103399780B true CN103399780B (zh) | 2016-08-17 |
Family
ID=49563414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310277338.7A Active CN103399780B (zh) | 2013-07-03 | 2013-07-03 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103399780B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN105912459A (zh) * | 2016-04-01 | 2016-08-31 | 北京理工大学 | 一种基于符号执行的数组越界检测方法 |
CN111124723B (zh) * | 2019-11-04 | 2023-04-14 | 北京轩宇信息技术有限公司 | 基于干扰变量的中断驱动型程序整数溢出模型检测方法 |
CN112181833A (zh) * | 2020-09-28 | 2021-01-05 | 全球能源互联网研究院有限公司 | 一种智能化模糊测试方法、装置及*** |
CN114510429B (zh) * | 2022-02-28 | 2024-05-07 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、***和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测***及检测方法 |
-
2013
- 2013-07-03 CN CN201310277338.7A patent/CN103399780B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测***及检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103399780A (zh) | 2013-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103399780B (zh) | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 | |
Leavens et al. | Specification and verification challenges for sequential object-oriented programs | |
CN113901745A (zh) | 芯片测试方法、装置、电子设备及计算机可读存储介质 | |
Dinu et al. | Opportunities of using artificial intelligence in hardware verification | |
CN108874656A (zh) | 代码测试方法、装置、可读存储介质及计算机设备 | |
Kim et al. | How to automate millions lines of top-level uvm testbench and handle huge register classes | |
US10666255B1 (en) | System and method for compacting X-pessimism fixes for gate-level logic simulation | |
Sadasivam et al. | Test generation approach for post-silicon validation of high end microprocessor | |
CN104462055A (zh) | 一种名称相似度获取方法及装置 | |
Kothari et al. | Human-machine resolution of invisible control flow? | |
CN109933948B (zh) | 一种形式验证方法、装置、形式验证平台及可读存储介质 | |
McFadden et al. | Survey of aspect mining case study software and benchmarks | |
US8875069B1 (en) | System and method for generating constrained random values associated with an electronic design | |
Yang et al. | Distributed assertion checking using symbolic execution | |
Malburg et al. | Automated feature localization for hardware designs using coverage metrics | |
Su et al. | Automated coverage-driven testing: combining symbolic execution and model checking | |
Zeng et al. | A unified framework for evaluating test criteria in model-checking-assisted test case generation | |
CN101882190A (zh) | 字节码中间表示程序的分模块形式化验证方法 | |
Pomeranz et al. | $ z $-Diagnosis: A Framework for Diagnostic Fault Simulation and Test Generation Utilizing Subsets of Outputs | |
Angius et al. | OpenTrace: an open source workbench for automatic software traceability link recovery | |
Ferres | [Master] Modular Analysis for Formal Verification of Integrated Circuits at Transistor Level | |
Connors et al. | Exploring alternative flexible OpenCL (FlexCL) core designs in FPGA-based MPSoC systems | |
Azad et al. | The impact of information technology facilities on knowledge management lifecycle | |
Phelan | An Evaluation on the Performance of Code Generated with WebAssembly Compilers | |
Marcus et al. | Student cluster competition 2017, team Northeastern University: Reproducing vectorization of the Tersoff multi-body potential on the NVIDIA V100 |
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 |