CN115934504A - 用于模糊测试的方法 - Google Patents
用于模糊测试的方法 Download PDFInfo
- Publication number
- CN115934504A CN115934504A CN202211205674.6A CN202211205674A CN115934504A CN 115934504 A CN115934504 A CN 115934504A CN 202211205674 A CN202211205674 A CN 202211205674A CN 115934504 A CN115934504 A CN 115934504A
- Authority
- CN
- China
- Prior art keywords
- target software
- data
- obfuscation
- read operation
- fuzzy
- 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.)
- Pending
Links
Images
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3692—Test management for test results analysis
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)
- Debugging And Monitoring (AREA)
Abstract
公开了一种用于对运行在计算机上的目标软件进行模糊化的计算机实现方法,包括以下步骤:截取目标软件在共享存储器上的读取操作,用模糊数据来替换所截取的读取操作的数据以创建针对目标软件的输入数据,利用所述输入数据来测试目标软件。
Description
技术领域
本发明涉及用于对目标软件进行模糊化(fuzzing)的计算机实现方法、对应的计算机程序、以及对应的模糊化系统。
背景技术
像AFL、Honggfuzz或Libfuzzer这样的现有技术模糊化器(Fuzzers)提供了基于突变(mutation-based)、覆盖引导(coverage-guided)的模糊化从而以很少的努力来测试软件。由此,每一轮,种子输入从输入语料库中被挑选,随机地变异,并且被发送到目标程序。当新生成的输入触发了先前未见过的行为(如新的执行代码路径)时,它被添加到输入语料库。这样,可以在对输入格式知之甚少或一无所知的情况下探索程序的输入空间。
在DE 10 2021 207248中,描述了一种用于系统性多进程接口模糊化的方法。DE10 2019 211037公开了一种用于系统的动态和静态分析的高效组合的方法。
发明内容
公开了一种用于对运行在计算机上的目标软件进行模糊化的计算机实现方法,包括以下步骤:
- 截取(intercept)目标软件在共享存储器上的读取操作,
- 用模糊数据来替换所截取的读取操作的数据以创建针对目标软件的输入数据,
- 利用该输入数据来测试目标软件。
在特别容易实现的优选实施例中,该模糊测试方法是利用在仿真器中运行的目标应用来实现的。仿真器允许对存储器管理的完全控制。在替代实施例中,可以通过当该程序被编译时相应地准备该程序来操纵在共享存储器区域上的读取操作。它可以以这样的方式被编译:针对每一个存储器访问,检查模糊数据是否应当被插入。
为了自动且可靠地标识读取操作,它可以通过截取对计算机操作系统的系统调用来检测。
对于高效的模糊化,用于创建该输入数据的模糊数据优选地被提前生成、预获取(prefetch)并且被存储在缓冲器中。当模糊数据被耗尽时,优选地终止对目标软件的模糊化,并且可以开始新模糊循环。用于新模糊循环的模糊输入优选地依赖于来自较早模糊循环的反馈。
为了聚焦于软件的主要功能并且避免该方法的早期终止,可以忽略根据初始化例程的读取操作,这意味着没有数据针对它们被替换,并且没有模糊测试针对它们而进行。
对于快速模糊测试,模糊化可以针对目标软件的中间状态而开始。
利用所提出的方法,可以在遵守(respect)目标程序的最终状态行为的同时实现在共享存储器区域上的高效模糊化。
附图说明
参考如下所包括的附图来解释本发明的实施例:
图1示意性地示出了所提出的共享存储器模糊化方法和系统的示例性实施例。
图2示意性地示出了所提出的方法的一个实施例的示例性流程图。
具体实施方式
本发明公开涉及被应用在通过共享存储器区域进行通信的应用上的动态软件测试方法模糊化。共享存储器区域是在多个进程之间被共享的存储器区域,并且通常由操作系统来管理。
模糊化或模糊测试是一种自动化软件测试技术,它涉及向目标计算机程序提供无效的、非预期的或随机的数据作为输入,并且监测其反应,例如该软件是否崩溃或未通过内置的代码断言(code assertion)。
自动地生成输入的程序被称为模糊化器或模糊引擎。它们通常被开发以一般地(generically)测试任何被测软件。它们通常具有用以将代码插桩(instrument)、生成测试用例和运行被测程序的能力。流行的示例是afl和libfuzzer。
意图经由模糊化被测试的软件程序或功能被称为模糊目标。模糊目标的主要特性应当是它消耗潜在的不可信输入,该不可信输入将由模糊化器在模糊化过程期间生成。常常,模糊目标采用结构化输入,例如以文件格式指定的输入。因此,由模糊化器创建的输入应当以这样的方式被创建:它们被解析器接受,但是仍然测试极端情况(corner case)或导致目标的意外行为。
模糊化器和模糊目标的组合版本被称为模糊测试。然后,模糊目标可以利用附接到其输入的模糊化器被插桩代码。模糊测试是可执行的。模糊化器还可以开始、观察和停止多个正在运行的模糊测试(通常每秒数百个或数千个),每个模糊测试具有由模糊化器生成的略微不同的输入。
来自模糊测试的一个具体输入和测试运行被称为测试用例。通常为了再现性(reproducibility),感兴趣的运行(寻找新的代码路径或崩溃)被保存。这样,具体测试用例及其对应的输入也可以在未连接到模糊化器、即处于其发布版本中的模糊目标上运行。
存在各种选项来实现高效的模糊化:
- 可以将指令插入到程序中,以便从执行中生成反馈(静态插桩(instrumentation))。这可以通过编译器来实现,并且可以例如在执行期间描述所到达的代码块。
- 可以在运行时期间控制程序的执行,以便从执行中生成反馈(动态插桩)。它主要通过操作系统功能或通过使用仿真器来实现。
- 可以将代码覆盖信息用作模糊化期间的反馈,以便检测输入是否引起了新代码路径/块的执行(覆盖引导的模糊化)。
- 可以通过使用一组已知输入(语料库)并且对它们随机地应用突变来创建新的输入(基于突变的模糊化)。
- 可以从头开始创建新的输入,例如通过使用输入模型或输入语法(基于生成的模糊化)。
共享存储器区域的输入空间可以由{0,1}(nm)xT来描述,其中n是自然数并且表示共享存储器区域的大小,m是自然数并且表示存储器的字长(通常是8、16、32或64位),并且T表示所执行的目标程序的时间步长(time step)的集合。例如,T中的具体时间步长可以被编码为之前所执行的指令的数量。这种结构允许:在每个机器指令之后,整个共享存储器区域可以被攻击者进程所修改,并且用作来自不同操作系统的不同共享存储器机制的抽象(abstraction)。
由于共享存储器区域可能非常大,并且目标程序运行的时间越长,输入空间就变得甚至越大,因此在共享存储器区域上的天真的模糊化是无效的。这种无效性不仅来自共享存储器区域的大小,而且还来自缺失的关于从共享存储器区域的读取在何处以及何时发生的知识。因此,非常可能的是,随机放置的模糊化输入无法由该目标读取。
附加地,当模糊化数据被连续地写入到单个实例的共享存储器区域上时,目标应用的状态可能在模糊化期间改变,这需要在输入生成和反馈收集时加以考虑。
图1示出了所提出的共享存储器模糊化方法和系统的示例性实施例。实际的模糊化器2由此是可互换的(interchangeable),并且甚至没有意识到发生了共享存储器接口上的模糊化。它创建并提供模糊数据(3),并且可以接收覆盖反馈(4)。模糊化器2可以有权访问种子输入的语料库1,例如用于基于突变的模糊化。为了检测共享存储器区域,由共享存储器检测单元16来截取适当的系统调用146。存储器操作145从存储器管理单元(MMU)15被截取,并且针对从共享存储器区域141的读取操作被检查。如果是这种情况,则来自模糊数据缓冲器11的组块(chunk)被写入(模糊数据组块注入13)到共享存储器区域141,并且目标应用14的执行继续。
图2示意性地示出了所提出的方法的一个实施例的示例性流程图:
- 通过获取缓冲器中的模糊数据来开始该方法,并且在仿真器中开始目标应用(步骤31)。
- 检测目标程序的共享存储器区域(步骤32)。
- 截取在共享存储器区域上的读取操作(步骤33)。
- 通过在读取位置处注入来自缓冲器的模糊数据的部分来替换关于所截取的读取操作的数据(步骤34)。该步骤可以被重复,直到缓冲器中仍然有模糊数据可用。
- 当缓冲器中的模糊数据被耗尽时,结束该过程,例如通过终止目标应用(步骤35)。在此之后,该过程可以重新开始。
在优选实施例中,可以忽略目标应用的最终初始化例程。
可选实施例允许从中间状态进行模糊化而无需重新启动整个应用,例如使用分叉机制(fork mechanism)。
有益的实现方式将如下所示。当目标应用在仿真器中运行时,对所有存储器操作的精确控制是可能的。为了控制在共享存储器上的读取操作,必须首先识别目标应用的共享存储器区域。因此,截取对操作系统的适当系统调用。当在所识别的共享存储器区域上的读取操作发生时,仿真器用来自先前获取的模糊数据的适当组块来替换存储器中的相关位置。该过程被重复,直到具有预获取的模糊数据的缓冲器被耗尽。当模糊数据被耗尽时,该目标应用被杀死(kill),仿真器关闭,并且该循环从头重新开始。在每次执行之后,模糊化器被提供有覆盖反馈,从而允许识别触发了新代码路径的输入序列(其被编码在输入缓冲器中)。因此,我们的发明可以被容易地集成到现有的模糊化设置和模糊化活动中,并且还可以附加地与总体模糊化(ensemble fuzzing)一起使用。
Claims (11)
1.一种用于对运行在计算机上的目标软件进行模糊化的计算机实现方法,其特征在于以下步骤:
- 截取所述目标软件在共享存储器上的读取操作,
- 用模糊数据来替换所截取的读取操作的数据以创建针对所述目标软件的输入数据,
- 利用所述输入数据来测试所述目标软件。
2.根据权利要求1所述的方法,其特征在于,所述目标软件在仿真器中运行。
3.根据权利要求1所述的方法,其特征在于,通过相应地编译所述目标软件来操纵所述目标软件的读取操作。
4.根据前述权利要求中的一项所述的方法,其特征在于,通过截取对计算机操作系统的系统调用来检测所述读取操作。
5.根据前述权利要求中的一项所述的方法,其特征在于,所述模糊数据被预获取并且被存储在缓冲器中。
6.根据前述权利要求中的一项所述的方法,其特征在于,当所述模糊数据被耗尽时,终止对所述目标软件的模糊化,并且开始新模糊循环。
7.根据权利要求6所述的方法,其特征在于,用于新模糊循环的模糊输入依赖于来自较早模糊循环的反馈。
8.根据前述权利要求中的一项所述的方法,其特征在于,针对根据初始化例程的读取操作,没有数据被替换。
9.根据前述权利要求中的一项所述的方法,其特征在于,模糊化是针对所述目标软件的中间状态而开始的。
10.一种计算机程序,其被实现以实行根据前述权利要求中的一项所述的方法。
11.一种模糊化系统,其具有包括根据权利要求10所述的计算机程序的计算机。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102021211083.5 | 2021-10-01 | ||
DE102021211083.5A DE102021211083A1 (de) | 2021-10-01 | 2021-10-01 | Verfahren zur Fuzz-Prüfung |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934504A true CN115934504A (zh) | 2023-04-07 |
Family
ID=85570697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211205674.6A Pending CN115934504A (zh) | 2021-10-01 | 2022-09-30 | 用于模糊测试的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115934504A (zh) |
DE (1) | DE102021211083A1 (zh) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102019211037A1 (de) | 2019-07-25 | 2021-01-28 | Robert Bosch Gmbh | Verfahren zum Testen eines Systems |
-
2021
- 2021-10-01 DE DE102021211083.5A patent/DE102021211083A1/de active Pending
-
2022
- 2022-09-30 CN CN202211205674.6A patent/CN115934504A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE102021211083A1 (de) | 2023-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6634020B1 (en) | Uninitialized memory watch | |
US5911073A (en) | Method and apparatus for dynamic process monitoring through an ancillary control code system | |
US5778230A (en) | Goal directed object-oriented debugging system | |
US8762971B2 (en) | Servicing a production program in an integrated development environment | |
EP2442230B1 (en) | Two pass automated application instrumentation | |
US7926042B2 (en) | System and method for dynamic instrumentation | |
CN101645119B (zh) | 一种基于虚拟硬件环境的恶意代码自动分析方法及系统 | |
US6378087B1 (en) | System and method for dynamically detecting unchecked error condition values in computer programs | |
US9934128B2 (en) | Dynamic per-method probing during runtime | |
US9678816B2 (en) | System and method for injecting faults into code for testing thereof | |
US12093398B2 (en) | Vulnerability analysis and reporting for embedded systems | |
US10089126B2 (en) | Function exit instrumentation for tail-call optimized code | |
US8843899B2 (en) | Implementing a step-type operation during debugging of code using internal breakpoints | |
US8806447B2 (en) | Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints | |
JP2006185211A (ja) | プログラム解析装置、テスト実行装置、その解析方法及びプログラム | |
US7546585B2 (en) | Method, system and computer program product for testing computer programs | |
US6978399B2 (en) | Debug thread termination control points | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
US9710358B2 (en) | Native backtracing | |
EP3619612B1 (en) | Temporary de-optimization of target functions in a cloud debugger | |
CN115934504A (zh) | 用于模糊测试的方法 | |
Al-Sharif et al. | Debugging with dynamic temporal assertions | |
Pasala et al. | An approach based on modeling dynamic behavior of the system to assess the impact of COTS upgrades | |
Quante | Online construction of dynamic object process graphs | |
CN115408007A (zh) | 虚拟设备生成、驱动程序测试方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |