CN110059010A - 基于动态符号执行与模糊测试的缓冲区溢出检测方法 - Google Patents
基于动态符号执行与模糊测试的缓冲区溢出检测方法 Download PDFInfo
- Publication number
- CN110059010A CN110059010A CN201910293815.6A CN201910293815A CN110059010A CN 110059010 A CN110059010 A CN 110059010A CN 201910293815 A CN201910293815 A CN 201910293815A CN 110059010 A CN110059010 A CN 110059010A
- Authority
- CN
- China
- Prior art keywords
- program
- value
- measured
- test
- symbol
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于动态符号执行与模糊测试的缓冲区溢出检测方法,用于解决现有缓冲区溢出检测方法检测率低的技术问题。技术方案是首先,对待测程序的待测方法参数进行符号化的处理,生出初始的测试值。之后,创建待测程序的控制流图,使用基于即时编译的动态插桩技术对控制流图进行插桩,以查看测试用例是否触发了新状态。最后,使用各种变异操作来改变初始测试值,以生成新的测试值。本发明能够对包含非线性条件路径的待测程序进行检测,检测率高。
Description
技术领域
本发明涉及一种缓冲区溢出检测方法,特别涉及一种基于动态符号执行与模糊测试的缓冲区溢出检测方法。
背景技术
文献“张俊贤,李舟军.基于动态符号执行的C代码缓冲区溢出检测[J].北京邮电大学学报,2016,39(z1).”中公开了一个基于底层虚拟机中间代码的缓冲区溢出检测工具PathChecker。该工具基于动态符号执行方法,使用无量词谓词公式刻画缓冲区操作的安全性质,并利用可满足模型理论求解器技术检验缓冲区操作的安全性。该文献使用了动态符号执行技术并结合了模糊测试技术,但是由于模糊测试技术只用于生成初始值,没有用于解决符号执行面临的约束求解问题。导致在检测一些包含复杂非线性约束条件的程序时,该工具检测效果不突出。
发明内容
为了克服现有缓冲区溢出检测方法检测率低的不足,本发明提供一种基于动态符号执行与模糊测试的缓冲区溢出检测方法。该方法首先,对待测程序的待测方法参数进行符号化的处理,生出初始的测试值。之后,创建待测程序的控制流图,使用基于即时编译的动态插桩技术对控制流图进行插桩,以查看测试用例是否触发了新状态。最后,使用各种变异操作来改变初始测试值,以生成新的测试值。本发明能够对包含非线性条件路径的待测程序进行检测,检测率高。
本发明解决其技术问题所采用的技术方案:一种基于动态符号执行与模糊测试的缓冲区溢出检测方法,其特点是包括以下步骤:
步骤一、初始测试值的生成。
首先,对待测程序的待测方法参数进行符号化的处理,利用随机的具体值对程序进行探索,在执行的过程中收集分支处的符号约束,将符号约束组成对应的符号约束树。之后,从具体值探索的终点向符号约束树的上层回溯,依此利用线性转换对分支处的约束进行简化操作,完成约束简化后对其取反,并将取反后的条件送入约束求解器得出新的具体值,使用新的值探索出新的路径,直到遍历完程序中所有路径,最终,得出每条路径对应的初始测试值。
步骤二、基于控制流图的插桩。
首先在表示程序语句节点的每个方法中添加构建控制流图的代码。与控制语句对应的节点类中的每个访问方法负责创建该语句的子控制流图。然后,在遍历抽象语法树的过程中,根据逻辑关系逐个连接这些子控制流程图。在创建好控制流图之后,使用基于即时编译的动态插桩技术对控制流图进行插桩。程序运行时,目标程序被动态编译,分析代码直接插入到待测程序中,并对待测程序控制流图的每条边进行编号。根据分析代码和路径编号,在评估测试用例时确定测试用例遍历了程序中的哪些路径从而确定检测到了程序的哪些部分,并查看测试用例是否触发了新状态。
步骤三、基于变异操作的测试值生成。
将初始的测试值加载到测试值队列中。逐个从队列中取出测试数据,并使用简单突变、统一变异、边界突变来改变数据,以生成新的测试值。将这些新的测试值作为待测程序的输入,当待测程序使用这些值开始执行时,对执行结果进行监视。在监控期间,捕获程序错误并判断此错误是否已经出现过。如果此错误从未出现过,将记录导致该结果的测试值。最后,获得一组有用的测试值,通过使用它们来重现程序中隐藏的缺陷。
本发明的有益效果是:该方法首先,对待测程序的待测方法参数进行符号化的处理,生出初始的测试值。之后,创建待测程序的控制流图,使用基于即时编译的动态插桩技术对控制流图进行插桩,以查看测试用例是否触发了新状态。最后,使用各种变异操作来改变初始测试值,以生成新的测试值。本发明能够对包含非线性条件路径的待测程序进行检测,检测率高。
为了验证发明效果,收集了来源于github的12组包含缓冲区溢出错误的程序。检测结果如表1所示,最终发现10组待测程序中的缓冲区溢出漏洞,检测率高达83.33%。
表1待测程序及测试结果
将仅仅使用动态符号执行进行测试的结果与结合了符号执行和模糊测试的检测结果进行了对比。对比结果如表2。从表2可以看出本发明的检测率要高于只使用动态符号执行的检测率。
表2动态符号执行和使用本方法的测试结果比较
下面结合附图和具体实施方式对本发明作详细说明。
附图说明
图1是本发明基于动态符号执行与模糊测试的缓冲区溢出检测方法的流程图。
图2是本发明方法生成变异测试值的伪代码实现图。
具体实施方式
参照图1-2。本发明基于动态符号执行与模糊测试的缓冲区溢出检测方法具体步骤如下:
步骤一、初始测试值的生成。
首先,对待测程序的待测方法参数进行符号化的处理,利用随机的具体值对程序进行探索,在执行的过程中收集分支处的符号约束,将符号约束组成对应的符号约束树。之后,从具体值探索的终点向符号约束树的上层回溯,依此利用线性转换对分支处的约束进行简化操作,完成约束简化后对其取反,并将取反后的条件送入约束求解器得出新的具体值,使用新的值探索出新的路径,直到遍历完程序中所有路径,最终,得出每条路径对应的初始测试值。
步骤二、基于控制流图的插桩。
首先在表示程序语句节点的每个方法中添加构建控制流图的代码。与控制语句对应的节点类中的每个访问方法负责创建该语句的子控制流图。然后,在遍历抽象语法树的过程中,根据逻辑关系逐个连接这些子控制流程图。在创建好控制流图之后,使用基于即时编译的动态插桩技术对控制流图进行插桩。程序运行时,目标程序被动态编译,分析代码直接插入到待测程序中,并对待测程序控制流图的每条边进行编号。根据分析代码和路径编号,在评估测试用例时确定测试用例遍历了程序中的哪些路径从而确定检测到了程序的哪些部分,并查看测试用例是否触发了新状态。
步骤三、基于变异操作的测试值生成。
将初始的测试值加载到测试值队列中。逐个从队列中取出测试数据,并使用简单突变、统一变异、边界突变来改变数据,以生成新的测试值。将这些新的测试值作为待测程序的输入,当待测程序使用这些值开始执行时,对执行结果进行监视。在监控期间,捕获程序错误并判断此错误是否已经出现过。如果此错误从未出现过,将记录导致该结果的测试值。最后,获得一组有用的测试值,可以通过使用它们来重现程序中隐藏的缺陷。
Claims (1)
1.一种基于动态符号执行与模糊测试的缓冲区溢出检测方法,其特征在于包括以下步骤:
步骤一、初始测试值的生成;
首先,对待测程序的待测方法参数进行符号化的处理,利用随机的具体值对程序进行探索,在执行的过程中收集分支处的符号约束,将符号约束组成对应的符号约束树;之后,从具体值探索的终点向符号约束树的上层回溯,依此利用线性转换对分支处的约束进行简化操作,完成约束简化后对其取反,并将取反后的条件送入约束求解器得出新的具体值,使用新的值探索出新的路径,直到遍历完程序中所有路径,最终,得出每条路径对应的初始测试值;
步骤二、基于控制流图的插桩;
首先在表示程序语句节点的每个方法中添加构建控制流图的代码;与控制语句对应的节点类中的每个访问方法负责创建该语句的子控制流图;然后,在遍历抽象语法树的过程中,根据逻辑关系逐个连接这些子控制流程图;在创建好控制流图之后,使用基于即时编译的动态插桩技术对控制流图进行插桩;程序运行时,目标程序被动态编译,分析代码直接插入到待测程序中,并对待测程序控制流图的每条边进行编号;根据分析代码和路径编号,在评估测试用例时确定测试用例遍历了程序中的哪些路径从而确定检测到了程序的哪些部分,并查看测试用例是否触发了新状态;
步骤三、基于变异操作的测试值生成;
将初始的测试值加载到测试值队列中;逐个从队列中取出测试数据,并使用简单突变、统一变异、边界突变来改变数据,以生成新的测试值;将这些新的测试值作为待测程序的输入,当待测程序使用这些值开始执行时,对执行结果进行监视;在监控期间,捕获程序错误并判断此错误是否已经出现过;如果此错误从未出现过,将记录导致该结果的测试值;最后,获得一组有用的测试值,通过使用它们来重现程序中隐藏的缺陷。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910293815.6A CN110059010B (zh) | 2019-04-12 | 2019-04-12 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910293815.6A CN110059010B (zh) | 2019-04-12 | 2019-04-12 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110059010A true CN110059010A (zh) | 2019-07-26 |
CN110059010B CN110059010B (zh) | 2023-01-31 |
Family
ID=67318973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910293815.6A Active CN110059010B (zh) | 2019-04-12 | 2019-04-12 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110059010B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108959056A (zh) * | 2017-05-17 | 2018-12-07 | 富士通株式会社 | 测试用例生成方法和测试用例生成装置 |
CN113485926A (zh) * | 2021-07-05 | 2021-10-08 | 浙江大学 | 一种用于验证cpu指令模拟执行效果一致性的方法 |
CN114416598A (zh) * | 2022-03-28 | 2022-04-29 | 广州番禺职业技术学院 | 一种基于测试切片的众包测试扩增方法 |
CN116501604A (zh) * | 2023-03-07 | 2023-07-28 | 开元华创科技(集团)有限公司 | 基于java语言代码质量模糊测试系统及方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050229044A1 (en) * | 2003-10-23 | 2005-10-13 | Microsoft Corporation | Predicate-based test coverage and generation |
WO2014082908A1 (en) * | 2012-11-28 | 2014-06-05 | Siemens Aktiengesellschaft | Method and apparatus for generating test case for fuzz test |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN108021507A (zh) * | 2017-12-25 | 2018-05-11 | 首都师范大学 | 符号执行的并行路径搜索方法及装置 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN108647520A (zh) * | 2018-05-15 | 2018-10-12 | 浙江大学 | 一种基于脆弱性学习的智能模糊测试方法与系统 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
US20180365139A1 (en) * | 2017-06-15 | 2018-12-20 | Microsoft Technology Licensing, Llc | Machine learning for constrained mutation-based fuzz testing |
-
2019
- 2019-04-12 CN CN201910293815.6A patent/CN110059010B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050229044A1 (en) * | 2003-10-23 | 2005-10-13 | Microsoft Corporation | Predicate-based test coverage and generation |
WO2014082908A1 (en) * | 2012-11-28 | 2014-06-05 | Siemens Aktiengesellschaft | Method and apparatus for generating test case for fuzz test |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
US20180365139A1 (en) * | 2017-06-15 | 2018-12-20 | Microsoft Technology Licensing, Llc | Machine learning for constrained mutation-based fuzz testing |
CN108021507A (zh) * | 2017-12-25 | 2018-05-11 | 首都师范大学 | 符号执行的并行路径搜索方法及装置 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN108647520A (zh) * | 2018-05-15 | 2018-10-12 | 浙江大学 | 一种基于脆弱性学习的智能模糊测试方法与系统 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
Non-Patent Citations (2)
Title |
---|
张俊贤等: "基于动态符号执行的C代码缓冲区溢出检测", 《北京邮电大学学报》 * |
王嘉捷等: "基于软件代码差异分析的智能模糊测试", 《清华大学学报(自然科学版)》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108959056A (zh) * | 2017-05-17 | 2018-12-07 | 富士通株式会社 | 测试用例生成方法和测试用例生成装置 |
CN108959056B (zh) * | 2017-05-17 | 2021-11-16 | 富士通株式会社 | 测试用例生成方法和测试用例生成装置 |
CN113485926A (zh) * | 2021-07-05 | 2021-10-08 | 浙江大学 | 一种用于验证cpu指令模拟执行效果一致性的方法 |
CN114416598A (zh) * | 2022-03-28 | 2022-04-29 | 广州番禺职业技术学院 | 一种基于测试切片的众包测试扩增方法 |
CN116501604A (zh) * | 2023-03-07 | 2023-07-28 | 开元华创科技(集团)有限公司 | 基于java语言代码质量模糊测试系统及方法 |
CN116501604B (zh) * | 2023-03-07 | 2023-10-10 | 开元华创科技(集团)有限公司 | 基于java语言代码质量模糊测试系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110059010B (zh) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110059010A (zh) | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 | |
US7958400B2 (en) | Detecting unexpected impact of software changes using coverage analysis | |
Chen et al. | Understanding metric-based detectable smells in Python software: A comparative study | |
Gong et al. | Automatic detection of infeasible paths in software testing | |
Lyu et al. | An empirical study on testing and fault tolerance for software reliability engineering | |
Pascarella et al. | Re-evaluating method-level bug prediction | |
Gonzalez‐Sanchez et al. | Prioritizing tests for software fault diagnosis | |
Aghamohammadi et al. | Statement frequency coverage: a code coverage criterion for assessing test suite effectiveness | |
CN108459954A (zh) | 应用程序漏洞检测方法和装置 | |
Liu et al. | Statement-oriented mutant reduction strategy for mutation based fault localization | |
CN103995780A (zh) | 一种基于语句频度统计的程序错误定位方法 | |
Huo et al. | Interpreting coverage information using direct and indirect coverage | |
US20070180411A1 (en) | Method and apparatus for comparing semiconductor-related technical systems characterized by statistical data | |
Zhao et al. | Event handler-based coverage for GUI testing | |
Perez et al. | A theoretical and empirical analysis of program spectra diagnosability | |
Li et al. | Locating vulnerability in binaries using deep neural networks | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
CN107817784A (zh) | 一种基于并发偏最小二乘的过程故障检测方法 | |
Jain et al. | Contextual Predictive Mutation Testing | |
Mirshokraie | Effective test generation and adequacy assessment for JavaScript-based web applications | |
Papakitsos | Robust Software Quality Assurance | |
CN111367789A (zh) | 静态报告合并分析技术 | |
Khatun et al. | An automatic test suite regeneration technique ensuring state model coverage using UML diagrams and source syntax | |
Pan et al. | SpotMe effective co-optimization of design and defect inspection for fast yield ramp | |
Vancsics | NFL: Neighbor-based fault localization technique |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |