背景技术:
1、为了对软件进行测试而尤其是使用动态软件测试方法fuzzing(模糊测试)。模糊测试,也称为fuzz testing(模糊测试),特别适合于测试鲁棒性或生成负面测试用例,并且是一种针对软件测试的自动化技术,其中在一个或多个输入接口处对要测试的程序一再发送随机数据。然后,检查该程序是否有异常,例如崩溃、失败的内置代码断言(英文:assertions)或潜在的内存泄漏。通常,模糊器被用于测试处理结构化输入的程序。该结构例如以文件格式或文件格式或协议来指定,并且区分有效和无效输入。有效的模糊器会生成半有效的输入,它们是“足够有效的”,使得它们不会被解析器直接拒绝但会在程序中导致意外的行为模式,并且它们是“足够无效”的,以揭示未正确实现的边界情况。
2、当前的非统计学的模糊器、例如afl、honggfuzz或libfuzzer提供基于变异的、覆盖率引导的模糊测试,以便以较少耗费来测试软件。在此,每轮,从输入语料库中选择一个种子输入(seed-eingabe),随机变异并发送到目标程序。如果新生成的输入触发了以前未见过的行为(例如新执行的代码路径),则会将其添加到输入语料库中。通过这种方式,可以在几乎不了解输入格式的情况下探索程序的输入空间。
3、存在用于网络协议的反馈引导的模糊器(状态相关的模糊器),例如:aflnwe,这是afl的网络支持的版本,它通过tcp/ip套接字(tcp/ip-socket)而不是文件来发送输入,(https://github.com/aflnet/aflnwe);aflnet,这是专为状态相关的网络服务器定制的模糊器(https://github.com/aflnet/aflnet);以及stateafl,这是另一种针对状态相关的网络服务器的模糊器(https://github.com/stateafl/stateafl)。迄今为止的工具并不是指定模糊器随后遵循的协议(如在peach和boofuzz工具的情况下),而是在模糊测试期间学习该协议。实际的学习或协议估计基于对协议伙伴响应的观察以及可以通过协议伙伴、即模糊目标的插装(instrumentierung)获得的内部信息。
4、抖动、例如经由网络的消息中的随机延迟的形式的抖动会破坏状态相关的模糊器的状态机学习过程。当前的方法和工具需要或多或少精确(或确定性)的协议消息计时。
5、okech等人的论文(investigating execution path non-determinismin thelinuxkernel.in proc.14threaltime linuxworkshop,lugano.osadl,2013)研究了使用linux内核的程序的非确定性(nicht-deterministisch)行为。该论文表明了重复执行测试程序期间的时间和路径变化。在非确定性行为中应预期:该程序期望在不同的独立执行中在相同的时间段内执行相同的指令。在非确定性硬件上运行的复杂软件系统具有一定程度的固有随机性,这在相关代码路径中导致系统波动。
6、非确定性行为的原因是非确定性硬件本身,例如页面错误或内存缓存分配请求;中断;与其他进程/线程的交互,例如系统资源仲裁或写入共享内存;消息的随机延迟,例如通过网络或机器内部。
7、当程序访问内存时也会发生抖动。wen等人(memlock:memory usage guidedfuzzing.in proceedings ofthe acm/ieee 42nd international conference onsoftware engineering,第765-777页,2020)优化模糊器以揭示内存消耗中的错误。该方法试图避免和减少抖动。wen等人试图通过两种措施来避免抖动形式的随机性。首先,这些措施在较长运行时间内测试每个程序。其次,这些措施对多次测试轮次的结果进行平均。
8、现有技术无法处理观察模糊测试反馈时的非确定性延迟,例如有抖动的网络消息或中断。
技术实现思路
1、本公开的第一概括方面涉及一种方法,所述方法用于处理针对具有模糊器的模糊测试系统中的非确定性的模糊执行(fuzz-ausführungen)的不可靠性估计
2、该方法包括:通过将模糊器的观察值(beobachtungen)置空(leer setzen)或设置为在目标程序上执行的一个或多个初始测试用例来初始化模糊测试系统;执行测试用例;为测试用例创建输出报告,其中所述输出报告包括关于目标程序的代码覆盖率(code-abdeckung)的信息;重复执行测试用例以确定出该测试用例是否导致目标程序中的抖动或非确定性行为;使用基于估计的优化器针对产生抖动或非确定性行为的测试用例而决定应以何种频率执行所述测试用例,以获得代码路径分布的经优化估计;使用所述基于估计的优化器来决定是否以及如何使测试用例变异以最小化总体不可靠性并检查目标程序中的更多区域;并将引起目标程序新行为的新测试用例采纳到测试用例语料库中。
3、目标程序可以例如是嵌入式系统的一部分。所述目标程序和/或嵌入式系统可以为至少部分自主的机器人、特别是为自主车辆提供自主驾驶功能或其他控制功能。车辆例如可以设计为机动车辆和/或载客机动车辆。
4、例如,输出报告可以包括一个或多个机器可读文件。输出报告被输出到模糊器并且可由模糊器读取。
5、引起目标程序的新行为例如包括:引起新行为的测试用例、更大的和/或其他的代码覆盖率以及达到新状态。
6、例如,优化器可以被设置用于,估计不可靠性并基于所述不可靠性而进行优化,并且可以具体地是贝叶斯优化器。
7、本公开的第二概括方面涉及一种被设计为执行根据第一概括方面(或其实施方式)的方法的计算机系统。
8、本公开的第三概括方面涉及一种被设计为执行根据第一概括方面(或其实施方式)的方法的计算机程序。
9、本公开的第四概括方面涉及一种存储和/或包含根据第三概括方面(或其实施方式)的计算机程序的计算机可读介质或信号。
10、第一、第二、第三和第四概括方面的技术在一些情况下可以具有以下优点中的一个或多个。
11、使得能够将模糊器操纵(steuern)到代码的确定性或非确定性的位置(stelle)或部分。因此,可以实现容易抖动的模糊目标的有效模糊测试。
12、一般来说,应该避免系统中(或测试系统时)的抖动。但已证明的是,将模糊器操纵到非确定性位置可以揭示更多和另外的错误。引起系统中的一定随机性(例如网络延迟或存储器访问)的代码位置可能更容易受到不期望行为的影响。这种不期望行为可能相应于随机性,例如过度的网络延迟或过度的内存消耗。现在可以向着(或远离)这些代码位置地操纵模糊器。当达到非确定性位置时,模糊器可以更改其模糊测试模式,以便能够相应地处理所述随机性。
13、实现了:处理模糊目标中的抖动或随机延迟,并因此为这些目标提供反馈引导的模糊测试。反馈引导的模糊测试比随机测试更好、更快几个数量级。此外还使得能够使用状态学习方法,这使得手动指定协议和工作密集型的(arbeitsintensiv)实现方案变得不必要。以此获得的不可靠性估计可用于朝着被测试程序的有抖动的区域的方向引导模糊测试或使模糊测试远离这些区域。最后,可以考虑加密和丢弃网络数据包。
14、通过估计代码中有抖动的部分的不确定性,可以减少针对模糊测试的总体耗费。一方面,通过引导模糊测试远离抖动,可以照常执行正常的模糊测试。另一方面,可以将执行引导到非确定性代码部分,从而允许更好地测试这些代码部分并获得比平常更多的关于这些代码部分的信息。
15、一些术语在本公开中按以下方式使用。
16、“模糊测试”或“fuzz-testing(模糊测试)”是将随机生成的输入发送到目标或目标程序并观察目标响应的自动化过程。
17、“模糊器”或“模糊引擎”是自动生成输入的程序。因此它们不一定连接到要测试的软件,并且也不执行插装。然而,它们有能力插装代码、创建测试用例和执行要测试的程序。已知的示例是afl和libfuzzer。
18、“模糊目标或者目标”是应由模糊测试来测试的软件程序或函数。模糊目标的一个主要特征应该是:所述模糊目标潜在地接受了在模糊测试过程期间由模糊器产生的不可信输入。
19、“fuzz(随机坏数据)测试”是模糊器和模糊目标的组合版本。于是,可以在其输入上使用模糊器进行插装。fuzz测试是可执行的。模糊器还可以启动、观察和停止多个运行中的fuzz测试(通常每秒数百或数千个),其中,每个所使用的由模糊器生成的输入都略有不同。
20、“测试用例”是fuzz测试中的特定输入和特定测试轮次。为了确保可重现性,感兴趣的轮次(其发现新的代码路径或崩溃)被存储。通过这种方式,测试用例利用其相应输入也在未连接到模糊器的模糊目标上、也即其发布版本中执行。
21、“静态插装”是将命令插入到程序中以获得关于所述执行的反馈。这通常由编译器实现,并且例如可以描述在所述执行期间所到达的代码块。
22、“动态插装”是在运行时期间对程序的执行的控制,以便从执行中生成反馈。这通常通过操作系统的系统功能性或通过使用仿真器来实现。
23、“覆盖率引导的模糊测试(coverage-guided fuzzing)”是:使用代码覆盖率信息作为模糊测试中的反馈,以识别出输入是否引起了执行新的代码路径或代码块。
24、“基于变异的模糊测试”通过使用(来自语料库的)已知输入的集合并随机对它们应用变异来生成新输入。
25、“基于生成的模糊测试”从头开始生成新的输入,例如通过使用输入模型或输入语法。
26、“总体不可靠性或不可靠性”在此上下文中被用于描述目标程序的程序行为的不可靠性或不明确性。
27、“共享内存区域”是多个进程共享并且通常由操作系统管理的内存区域。
1.一种用于处理针对具有模糊器(11)的模糊测试系统(10)中的非确定性的模糊执行的不可靠性估计的方法,包括:
2.根据权利要求1所述的方法,所述方法包括:
3.根据权利要求1或2所述的方法,其中当达到所述目标程序(14)中的非确定性位置时将所述模糊器(11)变换为其他的模糊测试模式。
4.根据权利要求1至3中任一项所述的方法,其中,所述输出报告包括关于行覆盖率、分支覆盖率、函数覆盖率和/或边缘覆盖率的信息。
5.根据权利要求1至4中任一项所述的方法,其中,所述输出报告在测试有状态的目标程序的情况下包括时间信息(16)。
6.根据权利要求1至5中任一项所述的方法,其中能够选择新测试用例(13)用于进一步的变异。
7.根据权利要求1至6中任一项所述的方法,其中所述模糊测试系统(10)包括加密和/或丢弃网络数据包。
8.根据权利要求1至7中任一项所述的方法,其中所述优化器(19)包括贝叶斯优化器。
9.一种计算机系统,所述计算机系统被设计为执行根据权利要求1至8中任一项所述的方法。
10.一种计算机程序,所述计算机程序被设计为执行根据权利要求1至8中任一项所述的方法。
11.一种计算机可读介质或信号,所述计算机可读介质或信号存储和/或包含根据权利要求10所述的计算机程序。
