CN116414722B - 模糊测试处理方法、装置、模糊测试系统及存储介质 - Google Patents
模糊测试处理方法、装置、模糊测试系统及存储介质 Download PDFInfo
- Publication number
- CN116414722B CN116414722B CN202310665048.3A CN202310665048A CN116414722B CN 116414722 B CN116414722 B CN 116414722B CN 202310665048 A CN202310665048 A CN 202310665048A CN 116414722 B CN116414722 B CN 116414722B
- Authority
- CN
- China
- Prior art keywords
- system call
- kernel
- fuzzy
- fuzzy test
- memory
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 318
- 238000003672 processing method Methods 0.000 title claims abstract description 32
- 238000000034 method Methods 0.000 claims abstract description 138
- 230000008569 process Effects 0.000 claims abstract description 80
- 230000009471 action Effects 0.000 claims abstract description 59
- 238000012545 processing Methods 0.000 claims abstract description 21
- 206010000117 Abnormal behaviour Diseases 0.000 claims description 42
- 238000012544 monitoring process Methods 0.000 claims description 16
- 238000013522 software testing Methods 0.000 abstract description 2
- 230000007547 defect Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 8
- 238000010998 test method Methods 0.000 description 7
- 238000001514 detection method Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 208000025174 PANDAS Diseases 0.000 description 4
- 208000021155 Paediatric autoimmune neuropsychiatric disorders associated with streptococcal infection Diseases 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012038 vulnerability analysis Methods 0.000 description 1
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/3664—Environments for testing or debugging software
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
技术领域
本申请涉及软件测试技术领域,尤其涉及一种模糊测试处理方法、装置、模糊测试系统及存储介质。
背景技术
操作系统内核中可能存在未知缺陷和软件漏洞,这导致操作系统内核运行过程中可能会产生异常,或者,攻击者可能会利用软件漏洞攻击操作系统内核,影响操作系统内核的运行稳定性及安全性。因此,发现操作系统内核中的未知缺陷和软件漏洞,以针对性的采取相应措施进行修复,对操作系统内核安全稳定的运行至关重要。
目前,模糊测试是发现操作系统内核中未知缺陷和漏洞的常用方法,该种方法通过生成模糊测试用例,并将该模糊测试用例输入至操作系统内核的方式,实现对操作系统内核中未知缺陷和漏洞的发现。
针对闭源操作系统内核,存在难以生成符合闭源操作系统内核的系统调用接口要求的模糊测试用例的问题,进而导致模糊测试效率较低。
发明内容
本申请提供一种模糊测试处理方法、装置、模糊测试系统及存储介质,用以解决难以生成符合闭源操作系统内核的系统调用接口要求的模糊测试用例,进而导致模糊测试效率较低的问题。
第一方面,本申请提供一种模糊测试处理方法,所述方法包括:
构建闭源操作系统的虚拟运行环境,并在所述虚拟运行环境中模拟运行所述闭源操作系统的内核;
录制所述内核在运行过程中程序的执行轨迹;
对所述执行轨迹进行重放,并在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息;所述描述信息用于生成符合所述内核的系统调用接口要求的模糊测试用例,所述描述信息包括系统调用列表,以及,每个所述系统调用接口所需的参数数量以及每个参数的数据类型。
可选的,所述在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息,包括:
若所述关键执行动作包括至少一个系统调用指令执行动作,则根据所述系统调用指令执行时所述系统调用指令相关的寄存器的取值,获取所述系统调用指令对应的系统调用编号,并添加至所述系统调用列表中;
若所述关键执行动作包括至少一个通过系统调用接口进行内存访问的动作,则根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型。
可选的,所述根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型,包括:
将所述内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值小于预设阈值,则将所述内存位置重新标记为指针类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,且其原始数据能够以字符串编码格式进行解码,则将所述内存位置重新标记为字符串类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,其原始数据无法以字符串编码格式进行解码,且参数流向已知要求句柄值的程序位置,则将所述内存位置重新标记为句柄类型的系统调用参数。
第二方面,本申请提供一种模糊测试处理方法,所述方法包括:
创建至少两个虚拟机;
在创建的至少两个虚拟机上分别运行闭源操作系统和模糊测试器,并控制所述模糊测试器根据所述闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例,并使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试;所述描述信息为采用如权利要求1-3任一项所述的方法得到的。
可选的,所述方法还包括:
若接收到任一模糊测试器反馈的模糊测试用例,则将该模糊测试用例反馈至其他模糊测试器中,以使其他模糊测试器使用该模糊测试用例更新自身的模糊测试用例。
可选的,所述方法还包括:
若与任一模糊测试器的连接断开,则保存该模糊测试器连接断开前所部署于的虚拟机的模糊测试状态;
重启该虚拟机,并将该虚拟机恢复至连接断开前的模糊测试状态。
第三方面,本申请提供一种模糊测试处理方法,所述方法包括:
根据闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例;所述描述信息为采用如权利要求1-3任一项所述的方法得到的;
使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试,并在测试过程中,监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
若检测到存在异常行为,则记录所述异常行为的相关信息。
可选的,所述监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为,包括:
当识别到所述闭源操作系统的内核中发生内存分配时,使用垃圾数据填充分配出来的内存块;
监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
和/或,
当识别到所述闭源操作系统的内核中发生内存释放时,使用垃圾数据填充释放出来的内存块;
监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为。
第四方面,本申请提供一种模糊测试处理装置,所述装置包括:
构建模块,用于构建闭源操作系统的虚拟运行环境,并在所述虚拟运行环境中模拟运行所述闭源操作系统的内核;
录制模块,用于录制所述内核在运行过程中程序的执行轨迹;
获取模块,用于对所述执行轨迹进行重放,并在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息;所述描述信息用于生成符合所述内核的系统调用接口要求的模糊测试用例,所述描述信息包括系统调用列表,以及,每个所述系统调用接口所需的参数数量以及每个参数的数据类型。
第五方面,本申请提供一种模糊测试处理装置,所述装置包括:
创建模块,用于创建至少两个虚拟机;
模糊测试模块,用于在创建的至少两个虚拟机上分别运行闭源操作系统和模糊测试器,并控制所述模糊测试器根据所述闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例,并使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试;所述描述信息为采用如第一方面任一项所述的方法得到的。
第六方面,本申请提供一种模糊测试处理装置,所述装置包括:
生成模块,用于根据闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例;所述描述信息为采用如第一方面任一项所述的方法得到的;
监测模块,用于使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试,并在测试过程中,监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
记录模块,用于若检测到存在异常行为,则记录所述异常行为的相关信息。
第七方面,本申请提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现第一方面,和/或,第二方面,和/或,第三方面中任一项所述的方法。
第八方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面,和/或,第二方面,和/或,第三方面中任一项所述的方法。
第九方面,本申请提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现第一方面,和/或,第二方面,和/或,第三方面中的方法。
本申请提供的模糊测试处理方法、装置、模糊测试系统及存储介质,首先,动态程序分析器在构建的闭源操作系统的虚拟运行环境中模拟运行闭源操作系统的内核,并在运行过程中录制上述内核在运行过程中程序的执行轨迹;后续的,动态程序分析器对上述执行轨迹进行重放,并在重放过程中根据所捕捉的内核中的关键执行动作,获取内核中的系统调用接口的描述信息,该描述信息包括系统调用列表,以及,每个系统调用接口所需的参数数量以及每个参数的数据类型,以便于后续模糊测试器可以根据该描述信息生成符合内核的系统调用接口要求的模糊测试用例。通过上述方法,动态程序分析器可以通过对闭源操作系统内核运行过程中的关键执行动作的分析,即通过动态程序分析的方式,准确确定闭源操作系统内核的系统调用接口的描述信息。后续的,模糊测试器可以基于该闭源操作系统内核的系统调用接口描述准确生成符合闭源操作系统内核的系统调用接口要求的模糊测试用例,以提高针对闭源操作系统的模糊测试的测试效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请提供的一种模糊测试系统的结构示意图;
图2为本申请提供的第一种模糊测试处理方法的流程示意图;
图3为本申请提供的第二种模糊测试处理方法的流程示意图;
图4为本申请提供的第三种模糊测试处理方法的流程示意图;
图5为本申请提供的第四种模糊测试处理方法的流程示意图;
图6为本申请提供的第五种模糊测试处理方法的流程示意图;
图7为本申请提供的第一种模糊测试处理装置的结构示意图;
图8为本申请提供的第二种模糊测试处理装置的结构示意图;
图9为本申请提供的第三种模糊测试处理装置的结构示意图;
图10为本申请提供的电子设备900的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
下面对本申请涉及的部分名词进行解释说明:
程序分析:程序分析一般泛指各种利用自动化手段对计算机程序在某方面的属性和特征进行分析的方法。程序分析可大致分为两类:静态程序分析和动态程序分析。静态程序分析的具体分析目标是被分析程序的静态算法描述,动态程序分析的分析目标则是被分析程序的运行状态和特征。一般来说,静态程序分析完备性好,但存在准确性低、计算资源消耗多的问题;动态程序分析准确度高、消耗的计算资源也相对可控。
句柄:是操作系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控件、位图资源、文件等。
内存转储文件:系统崩溃时,将内存中的数据转储保存在文件中,供给运维人员进行排错分析的过程被称为内存转储,过程中所保存生成的文件就叫做内存转储文件。
计算机软件是人类劳动的产物,其中存在大量因人为失误而引入的缺陷。这些缺陷中的大部分为无害缺陷,仅会影响用户使用软件的体验;少部分缺陷则为有害缺陷,黑客可以利用这些缺陷对运行软件的计算机系统进行攻击,并最终侵入系统引发进一步危害。这些可以被利用于攻击计算机系统的有害软件缺陷也被称为漏洞。为了从源头阻止计算机软件中的漏洞被黑客恶意利用,需要在黑客利用这些漏洞发起攻击前,发现、定位和修复计算机软件中的未知缺陷和漏洞,这个过程中,发现计算机软件中的未知缺陷和漏洞是后续漏洞定位和修复的基础,也是非常重要的一步。
目前,可以通过模糊测试的方法实现对计算机软件中的未知缺陷和漏洞的发现。模糊测试是一种通过向待测试的目标软件或操作系统提供非预期的输入,并监视异常结果来发现软件漏洞的方法。目前,通过模糊测试系统(又称为模糊测试工具)对计算机软件中的未知缺陷和漏洞进行挖掘。现有技术中,模糊测试系统通常包括模糊测试管理器,以及,多个模糊测试器。具体的,在进行模糊测试的过程中,模糊测试器将会为待测试的目标软件自动随机生成大量的模糊测试用例,作为目标软件的输入数据,并将这些模糊测试用例交由目标软件处理。目标软件在接受并处理模糊测试用例时,模糊测试器会监控目标软件是否产生了异常行为。若目标软件产生了异常行为,则标志着其中存在某种缺陷或漏洞,模糊测试器将记录异常行为的相关信息,例如导致异常发生的模糊测试用例和/或内存转储文件。其中,模糊测试管理器则负责模糊测试器的管理。例如,模糊测试管理器可以与模糊测试器连接,以实现在模糊测试器之间进行模糊测试用例的共享。
模糊测试的方法不仅可以用于测试各种应用软件,还可以用于测试各种系统软件,例如操作系统内核。操作系统内核中的漏洞近年来已经成为黑客攻击计算机系统的热门突破口,因此,及时发现操作系统内核中的漏洞对于保障操作系统运行的稳定性和安全性至关重要。
操作系统内核运行在较高权限的内核态运行环境中,而模糊测试方法则运行在具有较低权限的用户态运行环境。因此,区别于普通应用软件的模糊测试过程,若要通过模糊测试方法对操作系统内核的漏洞进行测试,模糊测试器需要通过系统调用的方式才能将输入数据呈递到运行在高权限级别的待测试的操作系统内核中,以进行模糊测试。
因此,在测试操作系统内核时,模糊测试器生成的模糊测试用例需要包括系统调用接口的描述信息,包括两部分:一部分是系统调用序列,表征需要调用的待测试的操作系统内核的系统调用编号,以及,系统调用顺序;另一部分是针对系统调用序列中每个系统调用所需的参数数据,也即输入数据。只有通过向操作系统内核输入上述内容,才能实现操作系统内核的模糊测试。
由于操作系统内核提供了大量的系统调用,不同系统调用中可接收的系统调用参数的数量,以及,类型各不相同;一个系统调用中可接收的系统调用参数的类型也不相同,因此,模糊测试器为操作系统内核生成合理的,符合操作系统内核的系统调用接口要求的模糊测试用例十分困难。
另外,区别于开源操作系统内核,闭源操作系统内核通常不公开其提供的系统调用接口,即无法知悉闭源操作系统内核的系统调用对应的系统调用参数的数量,以及,参数类型,这就导致进一步提升了在采用模糊测试的方法进行闭源操作系统内核测试的过程中,生成符合闭源操作系统的系统调用接口要求的模糊测试用例的难度。这里所说的闭源操作系统可以是任意不开放源码的操作系统,例如Windows操作系统。
这样,在生成针对闭源操作系统内核的模糊测试用例的过程中,往往就会生成大量的无法被闭源操作系统内核接收的模糊测试用例,即无效的模糊测试用例,降低了电子设备针对闭源操作系统内核进行模糊测试的测试效率。
综上,针对闭源操作系统内核,存在难以生成符合闭源操作系统的系统调用接口要求的模糊测试用例,进而导致模糊测试效率低的问题。
有鉴于此,本申请提供一种模糊测试处理方法,该方法通过动态程序分析的方式,获取闭源操作系统内核的系统调用接口的描述信息,从而能够基于此生成符合闭源操作系统内核的系统调用接口要求的模糊测试用例,进而可以提高针对闭源操作系统内核的模糊测试效率。
基于本申请提供的模糊测试处理方法,本申请提供一种模糊测试系统,不同于现有技术中的模糊测试系统仅包括模糊测试管理器和模糊测试器,且该模糊测试系统仅能够基于已知的系统调用接口描述生成模糊测试用例,进行模糊测试,本申请提供的模糊测试系统除了包括至少两个模糊测试器、模糊测试管理器之外,还包括动态程序分析器。图1为本申请提供的一种模糊测试系统的结构示意图,如图1所示,该示意图为以模糊测试系统包括3个模糊测试器为例的示意图。
其中,上述至少两个模糊测试器、模糊测试管理器,以及,动态程序分析器可以均部署于同一个硬件实体上,也可以分别部署于不同的硬件实体上,还可以有的部署于同一个硬件实体上,有的部署于不同的硬件实体上,具体部署方式和实际需求相关。这里所说的硬件实体例如可以是计算机、服务器等。应理解,本申请不限定具体哪些模块部署于同一硬件实体,哪些模块部署于不同硬件实体。动态程序分析器和模糊测试管理器连接,模糊测试管理器和模糊测试器连接。
上述动态程序分析器可以采用动态程序分析的方式,获取针对闭源操作系统内核的系统调用接口的描述;模糊测试管理器可以创建至少两个虚拟机,并在创建的至少两个虚拟机上分别运行闭源操作系统和至少两个模糊测试器,同时控制至少两个虚拟机和至少两个模糊测试器的运行,并从动态程序分析器处获取针对闭源操作系统内核的系统调用接口的描述,并分发至模糊测试器;至少两个模糊测试器可以根据闭源操作系统内核的系统调用接口描述生成模糊测试用例并进行模糊测试。本申请包括上述三部分内容,下面首先对动态程序分析器具体如何获取针对闭源操作系统内核的系统调用接口的描述进行说明。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请提供的第一种模糊测试处理方法的流程示意图,如图2所示,该方法包括以下步骤:
S101、构建闭源操作系统的虚拟运行环境,并在虚拟运行环境中模拟运行闭源操作系统的内核。
上述虚拟运行环境即通过软件方式模拟可以运行闭源操作系统的真实运行环境而构建的运行环境。本步骤中,动态程序分析器构建闭源操作系统的虚拟运行环境,并在虚拟运行环境中模拟运行闭源操作系统的内核,以实现后续可以进一步获取闭源操作系统内核运行过程中所执行系统调用的接口的描述。动态程序分析器可以采用任意动态程序分析技术构建闭源操作系统的虚拟运行环境,并在虚拟运行环境中模拟运行闭源操作系统的内核,具体实现方式可参照现有技术,在此不再赘述。
S102、录制闭源操作系统的内核在运行过程中程序的执行轨迹。
上述程序的执行轨迹可以包括内存访问轨迹和程序指令执行轨迹。该程序指令例如可以包括系统调用指令。本步骤中,动态程序分析器在闭源操作系统的内核运行过程中录制其程序的执行轨迹,以便于后续可以基于该执行轨迹分析获取闭源操作系统的内核在运行过程所涉及的系统调用接口的描述。
具体的,动态程序分析器可以利用任意动态程序分析技术录制闭源操作系统的内核在运行过程中程序的执行轨迹,具体实现方式可参照现有技术,在此不再赘述。
示例性的,动态程序分析器例如可以通过动态分析平台Panda-re实现本步骤和上述步骤S101的执行。例如,动态程序分析器例如可以利用Panda-re构建闭源操作系统的虚拟运行环境,并在虚拟运行环境中模拟运行闭源操作系统的内核,然后在操作系统内核运行过程中录制闭源操作系统的内核的程序的执行轨迹。具体实现方式可参照现有技术,在此不再赘述。
S103、对执行轨迹进行重放,并在重放过程中根据所捕捉的内核中的关键执行动作,获取内核中的系统调用接口的描述信息。
上述关键执行动作例如可以是通过系统调用接口进行内存访问的动作,和/或,系统调用执行动作。
上述描述信息用于生成符合内核的系统调用接口要求的模糊测试用例,该描述信息包括系统调用列表,以及,每个系统调用接口所需的参数数量以及每个参数的数据类型。
该系统调用列表中包括执行轨迹重放过程中所涉及的每个系统调用的系统调用编号。参数的数据类型例如可以包括整数类型、指针类型、字符串类型、句柄类型中的一项或多项。
示例性的,动态程序分析器例如可以在利用Panda-re完成对执行轨迹的录制之后,通过Panda-re实现对执行轨迹的重放。同时,在重放过程中,若关键执行动作包括至少一个系统调用指令,则动态程序分析器例如可以根据系统调用指令执行时系统调用指令相关的寄存器的取值,获取系统调用指令对应的系统调用编号,并添加至系统调用列表中。
系统调用指令执行过程中,动态程序分析器会在对应的寄存器中写入当前正在执行的系统调用指令的系统调用编号。这里所说的系统调用指令相关的寄存器即系统调用指令执行时,被写入系统调用指令对应的系统调用编号的寄存器。因此,动态程序分析器可以在系统调用指令执行时,读取系统调用指令相关的寄存器的取值,以获取系统调用指令对应的系统调用编号,进而获取系统调用列表。
或者,动态程序分析器可以通过分析闭源操作系统内核映像文件的方式,从中提取系统调用编号列表,具体实现方式可参照现有技术,在此不再赘述。然后,动态程序分析器在重放过程中获取每个系统调用接口所需的参数数量以及每个参数的数据类型。
若关键执行动作包括至少一个通过系统调用接口进行内存访问的动作,则动态程序分析器可以根据至少一个内存访问动作,获取该系统调用接口所需的参数数量以及每个参数的数据类型。
例如,动态程序分析器可以首先将内存访问动作所访问的内存位置标记为整数类型的系统调用参数,这里所说的内存位置例如可以是用户态内存。然后,动态程序分析器分别根据不同类型的参数的特点,判断已经标记为整数类型的系统调用参数是否为指针类型、句柄类型,或者,字符串类型的参数。
或者,动态程序分析器可以依次,或者,同时判断内存访问动作所访问的内存位置是否为指针类型、句柄类型,或者,字符串类型的参数,然后,将剩余的不属于上述3种类型的内存位置标记为整数类型的系统调用参数。
本申请不限定动态程序分析器根据闭源操作系统内核的系统调用接口的描述信息,生成符合上述内核的系统调用接口要求的模糊测试用例的方式,具体可参照现有技术,在此不再赘述。
本实施例中,动态程序分析器首先在构建的闭源操作系统的虚拟运行环境中模拟运行闭源操作系统的内核,并在运行过程中录制上述内核在运行过程中程序的执行轨迹;后续的,动态程序分析器对上述执行轨迹进行重放,并在重放过程中根据所捕捉的内核中的关键执行动作,获取内核中的系统调用接口的描述信息,该描述信息包括系统调用列表,以及,每个系统调用接口所需的参数数量以及每个参数的数据类型,以便于后续可以根据该描述信息生成符合内核的系统调用接口要求的模糊测试用例。
通过上述方法,动态程序分析器可以通过对闭源操作系统内核运行过程中的关键执行动作的分析,即通过动态程序分析的方式,准确确定闭源操作系统内核的系统调用接口的描述信息。后续的,动态程序分析器可以基于该闭源操作系统内核的系统调用接口描述准确生成符合闭源操作系统内核的系统调用接口要求的模糊测试用例,以提高针对闭源操作系统的模糊测试的测试效率。
下面以参数的数据类型包括整数类型、指针类型、字符串类型、句柄类型为例,对动态程序分析器如何根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型,即上述实施例中步骤S103进行说明。图3为本申请提供的第二种模糊测试处理方法的流程示意图,如图3所示,上述步骤S103可以包括以下步骤:
S201、将内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量。
由于动态程序分析器无法直接根据系统调用指令知悉系统调用指令中所包括的系统调用编号以及系统调用参数的数量、类型、以及数值。因此,本步骤中,动态程序分析器通过监控系统调用指令执行过程中,内存访问动作在内存位置写入的内容,获取系统调用指令中系统调用参数的相关信息。
本步骤中,动态程序分析器初步将执行系统调用指令过程中,内存访问动作所访问的内存位置均标记为整数类型的系统调用参数,即将该系统调用指令执行过程中,与内存位置对应的系统调用参数标记为整数类型的系统调用参数,以便于后续可以据此确定其他类型的系统调用参数。同时,动态程序分析器可以通过读取内存的方式,记录内存中写入的参数的数量。
由于内存访问动作所访问的内存位置写入的系统调用参数必然是上述4种类型的系统调用参数之一,本步骤中先将内存访问动作所访问的内存位置均标记为整数类型的系统调用参数,后续进一步的基于已经标记的整数类型的系统调用参数判断是否为其他类型的系统调用参数,并在确定是其他类型的系统调用参数时修改已有的标记,则剩余的内存位置写入的系统调用参数即为真正的整数类型的系统调用参数。通过这种方式,由于开始就将全量的内存访问动作访问的内存位置标记为整数类型,可以避免由于逐个类型分别标记可能造成的参数类型的漏标,同时操作简便,可以提高整体的标记精准度。
S202、判断内存位置对应的内存地址,以及,内存位置存储的系统调用参数的数值的差值是否小于预设阈值。
本申请不限定上述预设阈值的具体值,本领域技术人员可根据实际情况进行设定。指针类型的系统调用参数的数值和其所指向的内存位置对应的内存地址的相同或相近,因此,本步骤中,动态程序分析器判断内存位置对应的内存地址,以及,内存位置存储的系统调用参数的数值的差值是否小于预设阈值,进而判断该内存位置都否为指针类型的系统调用参数。
若是,表明该内存位置写入的系统调用参数,符合指针类型的系统调用参数的特点,则执行步骤S203。
若否,表明已经标记的内存位置中不存在指针类型的系统调用参数,则保持当前标记不变。
S203、将内存位置重新标记为指针类型的系统调用参数。
由于该内存位置写入的系统调用参数,符合指针类型的系统调用参数的特点,因此,本步骤中动态程序分析器将内存位置重新标记为指针类型的系统调用参数。
S204、判断内存位置对应的内存地址,以及,内存位置存储的系统调用参数的数值的差值是否大于或等于预设阈值,且其原始数据能够以字符串编码格式进行解码。
上述原始数据即内存位置存储的系统调用参数对应的字节。上述字符串编码格式和当前待进行漏洞分析的闭源操作系统内核的类型相关。示例性的,若当前闭源操作系统内核为Windows操作系统内核,则上述字符串编码格式例如可以是Unicode转换格式(Unicode Transformation Format,UTF)-16的。
本步骤中,动态程序分析器判断当前标记为整数类型的系统调用参数是否能够以字符串编码格式进行解码,进而判断当前标记为整数类型的系统调用参数是否为字符串类型
若是,表明该内存位置写入的系统调用参数,符合字符串类型的系统调用参数的特点,则执行步骤S205。
若否,表明已经标记的内存位置中不存在字符串类型的系统调用参数,则保持当前标记不变。S205、将内存位置重新标记为字符串类型的系统调用参数。
由于该内存位置写入的系统调用参数,符合字符串类型的系统调用参数的特点,因此,本步骤中动态程序分析器将内存位置重新标记为字符串类型的系统调用参数。S206、判断内存位置对应的内存地址,以及,内存位置存储的系统调用参数的数值的差值是否大于或等于预设阈值,其原始数据无法以字符串编码格式进行解码,且参数流向已知要求句柄值的程序位置。
由于要求句柄的程序位置是已知的,因此,本步骤中,动态程序分析器可以通过跟踪整数类型的系统调用参数的数据流向,判断该参数是否为句柄类型的参数。
示例性的,动态程序分析器例如可以利用污点分析技术在重放的闭源操作系统内核的程序的执行轨迹中追踪所有整数类型的系统调用参数的数据流向。
若是,表明该内存位置写入的系统调用参数,符合句柄类型的系统调用参数的特点,则执行步骤S207。
若否,表明已经标记的内存位置中不存在字符串类型的系统调用参数,即当前标记的内存位置均为整数类型的系统调用参数,则保持当前标记不变。
S207、将内存位置重新标记为句柄类型的系统调用参数。
由于该内存位置写入的系统调用参数,符合句柄类型的系统调用参数的特点,因此,本步骤中动态程序分析器将内存位置重新标记为句柄类型的系统调用参数。
应理解,上述步骤S202、S204、S206执行顺序不分先后,并且可以顺序执行,也可以并列执行,图3是以步骤S202、S204、S206顺序执行为例的示意图。
本实施例中,动态程序分析器首先将内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量;然后,分别根据指针类型、句柄类型,以及,字符串类型的系统调用参数的特性,从已经标记为整数类型的系统调用参数中重新标记为与特征对应的类型的系统调用参数。通过这种方式,动态程序分析器可以准确的通过动态程序分析的方式,实现对系统调用接口所需的系统调用参数的类型的确定,后续的,动态程序分析器即可基于明确的系统调用参数的类型,生成符合系统调用接口要求的模糊测试用例,提高生成的模糊测试用例的合理性,进而提高针对闭源操作系统内核的模糊测试效率。
下面对模糊测试管理器如何创建至少两个虚拟机,并在创建的至少两个虚拟机上分别运行闭源操作系统和至少两个模糊测试器,同时控制至少两个虚拟机和至少两个模糊测试器的运行进行说明。图4为本申请提供的第三种模糊测试处理方法的流程示意图,如图4所示,该方法包括以下步骤:
S301、创建至少两个虚拟机。
本步骤中,模糊测试管理器创建至少两个虚拟机,以使该至少两个虚拟机同时运行上述实施例中的闭源操作系统。示例性的,模糊测试管理器例如可以利用虚拟机管理器创建至少两个虚拟机,具体实现方式可参照现有技术,在此不再赘述。模糊测试管理器例如可以和虚拟机管理器共同部署于宿主机上。示例性的,图5为本申请提供的第四种模糊测试处理方法的流程示意图,该图是以模糊测试管理器创建了两个虚拟机用于模糊测试为例的示意图。
S302、在创建的至少两个虚拟机上分别运行闭源操作系统和模糊测试器,并控制模糊测试器根据闭源操作系统内核中的系统调用接口的描述信息,生成符合该内核的系统调用接口要求的模糊测试用例,并使用模糊测试用例,对闭源操作系统的内核进行模糊测试。
上述描述信息为采用上述实施例中的模糊测试处理方法得到的。上述模糊测试用例包括系统调用序列,以及,系统调用序列中每个系统调用接口所需使用的系统调用参数数据。
在通过上述实施例中所提供的方法获取闭源操作系统内核的系统调用接口描述之后,动态程序分析器将该系统调用接口描述发送至模糊测试管理器,然后由模糊测试管理器发送至模糊测试器,由模糊测试器基于该系统调用接口描述生成模糊测试用例,进行模糊测试。
示例性的,在模糊测试管理器的控制下,模糊测试器首先根据上述实施例生成的系统调用列表生成系统调用序列。例如,模糊测试器可以通过随机排列的方式,对系统调用列表中的系统调用编号进行排序,以生成系统调用序列。
可选的,模糊测试器可以根据系统调用之间的依赖关系,生成系统调用序列。例如,若系统调用A的执行需要依赖于系统调用B的执行结果,则系统调用A依赖于系统调用B,即系统调用A和系统调用B之间存在依赖关系。此时,若模糊测试器要生成系统调用序列,则模糊测试器将系统调用B的执行顺序排列于系统调用A之前。在此基础上,本申请不限定其余不存在依赖关系的系统调用的排列顺序。
在生成系统调用序列之后,模糊测试器生成系统调用序列中每个系统调用接口所需的系统调用参数。
示例性的,若该系统调用接口所需的系统调用参数包括整数类型的系统调用参数,则针对整数类型的系统调用参数,模糊测试器通过生成随机数、临界值以及特殊值等方式为该参数生成数据。上述临界值例如可以是该整数类型的系统调用参数在对应的内存位置可以写入的最大值或最小值;上述特殊值可以是预设的值,例如根据运维人员经验预设的值,本申请不对其具体取值进行限定。
若该系统调用接口所需的系统调用参数包括指针类型的系统调用参数,则针对整数类型的系统调用参数,模糊测试器首先递归地生成该指针所指向的数据。具体生成方式依赖于指针所指向的数据的类型,示例性的,若指针所指向的数据的类型为整数类型,则可参照上述方式生成指针所指向的数据。后续的,模糊测试器为该数据分配存储地址。本申请不限定模糊测试器为该数据分配存储地址的方式,例如可以是随机分配或者按照现有技术中任意存储地址分配方式进行分配。然后,模糊测试器将为上述数据分配的存储地址作为指针类型的系统调用参数。
若该系统调用接口所需的系统调用参数包括句柄类型的系统调用参数,则针对句柄类型的系统调用参数,模糊测试器根据上述依赖关系首先生成输出句柄所在的系统调用,然后在该系统调用执行完成之后,将该系统调用执行完成后的返回结果作为句柄类型的系统调用参数的值。
关于上述依赖关系的确定,示例性的,模糊测试器例如可以通过污点分析技术确定句柄类型的系统调用参数引用的对象的类型,以及,句柄类型的系统调用参数是输入句柄还是输出句柄。具体实现方式可参照现有技术,在此不再赘述。若两个系统调用之间,某一系统调用的输入句柄所引用的对象的类型和另一系统调用的输出句柄所引用的对象的类型相同,则可以据此确定两个系统之间存在依赖关系,即输入句柄所在的系统调用依赖于输出句柄所在的系统调用。
若该系统调用接口所需的系统调用参数包括字符串类型的系统调用参数,则针对字符串类型的系统调用参数,模糊测试器生成符合闭源操作系统内核中字符串编码格式的字符串数据。
继续参照图5,在生成系统调用序列中每个系统调用接口所需的系统调用参数之后,模糊测试器根据系统调用序列以及上述系统调用参数生成模糊测试用例。后续的,模糊测试器将该模糊测试用例输入至闭源操作系统内核执行,以对闭源操作系统的内核进行模糊测试。本申请不限定上述模糊测试的具体实现方式,可选的,上述模糊测试例如可以是覆盖率导向的灰盒模糊测试。这里所说的覆盖率导向的灰盒模糊测试,即模糊测试以增加闭源操作系统内核代码的覆盖率为导向。
本实施例中,模糊测试管理器创建了至少两个虚拟机,在创建的至少两个虚拟机上运行闭源操作系统内核以及模糊测试器,并控制模糊测试器根据上述实施例中获取闭源操作系统内核中的系统调用接口的描述信息,生成符合上述内核的系统调用接口要求的模糊测试用例,以对闭源操作系统的内核进行模糊测试。通过这种方式,一方面,模糊测试器可以准确生成符合上述内核的系统调用接口要求的模糊测试用例,提升针对闭源操作系统内核的模糊测试的测试效率;另一方面,模糊测试管理器创建两个虚拟机,并在其上同时运行闭源操作系统以及模糊测试器,可以提升模糊测试的效率。
可选的,继续参照图5,任一模糊测试器可以向模糊测试管理器反馈自身执行的模糊测试用例。可选的,模糊测试管理器可以存储有所有其创建的虚拟机执行过的,和/或,待执行的模糊测试用例。若模糊测试管理器接收到任一模糊测试器反馈的模糊测试用例,则可以将该模糊测试用例反馈至其他模糊测试器中,以使其他模糊测试器根据该模糊测试用例更新自身的模糊测试用例。
模糊测试器可以向模糊测试管理器反馈全部执行过的模糊测试用例;也可以反馈执行异常的模糊测试用例;还可以向模糊测试管理器反馈执行后可以使闭源操作系统的内核代码覆盖率提高的模糊测试用例。
示例性的,继续参照图5,当本申请所使用的模糊测试方法为覆盖率导向的模糊测试方法,则模糊测试器可以监测模糊测试用例执行过程中的闭源操作系统内核的代码覆盖率。
示例性的,模糊测试器例如可以跟踪模糊测试例中任一系统调用执行过程中的程序执行轨迹,进而获取整个模糊测试例执行完成后的代码覆盖率。例如,模糊测试器可以通过Intel中央处理器(Central Processing Unit,CPU)提供的Intel处理器跟踪(ProcessorTrace,Intel PT)硬件机制对闭源操作系统内核的代码覆盖率进行收集和记录。例如,当模糊测试器执行模糊测试用例中任一系统调用时,Intel PT功能开启,模糊测试器通过IntelPT跟踪当前系统调用执行过程中的程序执行轨迹;当当前系统调用执行结束后,Intel PT关闭,结束程序执行轨迹的跟踪;当下一系统调用被执行时,Intel PT再次开启,模糊测试器记录该系统调用执行过程中的程序执行轨迹,直至当前模糊测试用例中所有的系统调用被执行完毕。后续的,模糊测试器会将上述程序执行轨迹转换为代码覆盖率,具体实现方式可参照现有技术,在此不再赘述。
后续的,模糊测试器对比当前模糊测试用例执行后的闭源操作系统内核的代码覆盖率,以及,上一模糊测试用例执行后的闭源操作系统内核的代码覆盖率,若当前模糊测试用例执行后的代码覆盖率高于上一模糊测试用例执行后的代码覆盖率,则模糊测试器将当前模糊测试用例发送至模糊测试管理器。后续的,模糊测试管理器可以将该模糊测试用例发送至其他模糊测试器,以供其他模糊测试器据此生成自身的模糊测试用例。
本申请不限定模糊测试器使用该模糊测试用例更新自身的模糊测试用例的方式。示例性的,模糊测试器例如可以将该模糊测试用例的系统调用序列作为自身的模糊测试用例的系统调用序列,然后,在此基础上生成模糊测试用例;或者,模糊测试器可以将该模糊测试用例中的部分系统调用的系统调用数据作为自身模糊测试用例的系统调用的系统调用数据,然后,然后据此生成其他系统调用的系统调用数据。
由于该模糊测试用例可以提升闭源操作系统内核的代码覆盖率,基于该模糊测试用例进行变异而生成的新的模糊测试用例执行后提升覆盖率的可能性较高,因此,通过上述方式可以提高模糊测试效率。
可选的,继续参照图5,模糊测试管理器可以接收由模糊测试器发送的所有虚拟机在执行模糊测试用例时的程序执行轨迹,进而据此获取整体模糊测试过程的闭源操作系统内核的代码覆盖率。
可选的,若模糊测试管理器与任一模糊测试器的连接断开,则模糊测试管理器可以保存该模糊测试器连接断开前所部署于的虚拟机的模糊测试状态;然后重启该虚拟机,并将该虚拟机恢复至连接断开前的模糊测试状态。
当模糊测试器运行过程中由于检测到异常行为而崩溃时,模糊测试器可能断开和模糊测试管理器的连接。模糊测试管理器可以监测和模糊测试器的连接状态,以保证模糊测试的顺利进行。
示例性的,继续参照图5,模糊测试器例如可以按照预设时间间隔向模糊测试管理器发送心跳数据包。本申请不限定上述预设时间间隔的具体取值,本领域技术人员可根据实际情况确定。模糊测试管理器若超过预设时间阈值未接收到模糊测试器发送的心跳数据包,则确定与该模糊测试器的连接断开。本申请不限定上述预设时间阈值的具体取值。
上述模糊测试状态例如可以是虚拟机执行模糊测试用例的状态。例如,模糊测试管理器可以接收所有模糊测试器生成的模糊测试用例,并记录虚拟机历史执行的模糊测试用例,和/或,当前执行的模糊测试例,和/或,存储于待执行的模糊测试用例队列中的模糊测试用例,以实现对整体模糊测试过程的全局把控。当模糊测试管理器重启该虚拟机之后,模糊测试管理器将上述模糊测试状态发送至与该虚拟机对应的模糊测试器,以使该虚拟机恢复至连接断开前的模糊测试状态。
通过上述方式,模糊测试管理器可以监测运行有闭源操作系统内核的模糊测试器的运行状态,当模糊测试器运行出现异常时,可以及时自动重启模糊测试器对应的虚拟机,并恢复断开前虚拟机的模糊测试状态,确保模糊测试的顺利进行,提高模糊测试效率,提高整体方法的可行性与稳定性,避免模糊测试过程被打断,提升模糊测试的持续性。
下面对至少两个模糊测试器具体如何根据闭源操作系统内核的系统调用接口描述生成模糊测试用例并进行模糊测试进行说明。图6为本申请提供的第五种模糊测试处理方法的流程示意图,如图6所示,该方法包括如下步骤:
S401、根据闭源操作系统内核中的系统调用接口的描述信息,生成符合内核的系统调用接口要求的模糊测试用例。
上述描述信息为采用上述实施例中任一项的方法得到的。本步骤具体实现方式可参照上述实施例,在此不再赘述。
S402、使用模糊测试用例,对闭源操作系统的内核进行模糊测试,并在测试过程中,监测闭源操作系统的内核中执行测试用例过程中产生的异常行为。
上述异常行为例如可以是闭源操作系统内核崩溃的行为。若闭源操作系统内核运行过程中产生异常行为,表明闭源操作系统内核在执行当前模糊测试用例的过程中触发了闭源操作系统内核的未知缺陷或漏洞,进而导致其产生异常行为。因此本步骤中,模糊测试器检测闭源操作系统的内核中执行测试用例过程中产生的异常行为,进而实现对闭源操作系统内核未知缺陷和漏洞的检测。
可选的,在监测闭源操作系统的内核中执行测试用例过程中产生的异常行时,模糊测试器可以在执行模糊测试用例过程中填充垃圾数据,以提高异常行为触发概率。这里所说的垃圾数据即并非闭源操作系统内核运行过程中所需的数据,例如可以是随机数据,或者,预设的无意义数据。
闭源操作系统运行过程中,内存使用过程往往容易出现问题,也容易遭到攻击者的攻击。然而,有的时候虽然内存使用过程中存在缺陷,但是由于不至于导致闭源操作系统崩溃等可以被模糊测试器识别的异常行为,导致内存使用过程中存在的缺陷无法被及时发现,造成隐患。通过上述填充垃圾数据的方式可以提高异常行为触发概率,进而提高漏洞检出率,提高模糊测试过程中漏洞检测准确性。
可选的,模糊测试器例如可以在内存分配,和/或,内存释放过程中写入垃圾数据,以提高异常行为检出率。
内存使用过程中通常容易存在访问未初始化变量、释放后内存使用等缺陷,且不易触发系统崩溃等系统行为。这里所说的访问未初始化变量,即当闭源操作系统内核中发生内存分配动作时,闭源操作系统内核未对该分配的内存初始化,便读取使用其中的数据的缺陷;释放后内存使用,即当闭源操作系统内核中发生内存释放动作时,闭源操作系统内核在释放该内存块后仍然读取使用其中的数据的缺陷。通过在上述两个过程中写入垃圾数据,可以提高该种类型的缺陷的检出的概率。
示例性的,当模糊测试器识别到闭源操作系统的内核中发生内存分配时,可以使用垃圾数据填充分配出来的内存块;然后,模糊测试器监测填充垃圾数据之后闭源操作系统的内核中模糊测试用例执行过程中产生的异常行为。
例如,模糊测试器可以挂钩闭源操作系统内核中的内存分配函数以实现对内存分配动作的识别。例如,当模糊测试器识别到源操作系统内核中的内存分配函数运行时,则确定闭源操作系统的内核中发生内存分配。
和/或,当模糊测试器识别到闭源操作系统的内核中发生内存释放时,使用垃圾数据填充释放出来的内存块;然后,模糊测试器监测填充垃圾数据之后闭源操作系统的内核中执行模糊测试用例过程中产生的异常行为。例如,模糊测试器可以挂钩闭源操作系统内核中的内存释放函数以实现对内存释放动作的识别。例如,当模糊测试器识别到源操作系统内核中的内存释放函数运行时,则确定闭源操作系统的内核中发生内存释放。
S403、若检测到存在异常行为,则记录异常行为的相关信息。
上述异常行为的相关信息例如可以是内存转储文件。示例性的,当闭源操作系统崩溃时,模糊测试器可以记录内存转储文件,以便于后续可以基于该内存转储文件,分析获取闭源操作系统内核存在的漏洞。
本实施例中,模糊测试器根据上述实施例得到的闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例;然后,模糊测试器使用该模糊测试用例,对闭源操作系统的内核进行模糊测试,并在测试过程中,监测闭源操作系统的内核中模糊测试用例执行过程中产生的异常行为,并在监测到存在异常行为时,记录异常行为的相关信息。
通过上述方式,模糊测试器可以根据明确的闭源操作系统的系统调用接口的描述生成合理的符合闭源操作系统内核系统调用接口要求的模糊测试用例,进而通过获取记录异常行为的相关信息,实现对闭源操作系统内核中未知缺陷和漏洞的检出。上述方式不受闭源操作系统不公开系统调用接口的限制,可以灵活准确的实现对闭源操作系统内核中的未知缺陷和漏洞的挖掘,可操作性强,扩大了模糊测试方法的应用场景,且可以通过生成合理的模糊测试用例的方式,提升针对闭源操作系统的模糊测试的测试效率。
图7为本申请提供的第一种模糊测试处理装置的结构示意图,如图7所示,该装置包括:构建模块11、录制模块12、获取模块13。
构建模块11,用于构建闭源操作系统的虚拟运行环境,并在所述虚拟运行环境中模拟运行所述闭源操作系统的内核;
录制模块12,用于录制所述内核在运行过程中程序的执行轨迹;
获取模块13,用于对所述执行轨迹进行重放,并在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息;所述描述信息用于生成符合所述内核的系统调用接口要求的模糊测试用例,所述描述信息包括系统调用列表,以及,每个所述系统调用接口所需的参数数量以及每个参数的数据类型。
可选的,获取模块13,具体用于若所述关键执行动作包括至少一个系统调用指令执行动作,则根据所述系统调用指令执行时所述系统调用指令相关的寄存器的取值,获取所述系统调用指令对应的系统调用编号,并添加至所述系统调用列表中;若所述关键执行动作包括至少一个通过系统调用接口进行内存访问的动作,则根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型。
例如,获取模块13,具体用于将所述内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量;若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值小于预设阈值,则将所述内存位置重新标记为指针类型的系统调用参数;若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,且其原始数据能够以字符串编码格式进行解码,则将所述内存位置重新标记为字符串类型的系统调用参数;若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,其原始数据无法以字符串编码格式进行解码,且参数流向已知要求句柄值的程序位置,则将所述内存位置重新标记为句柄类型的系统调用参数。
本申请提供的模糊测试处理装置,可以执行上述方法实施例中的模糊测试处理方法,其实现原理和技术效果类似,在此不再赘述。需要说明的是,上述图7所示的各模块的划分仅是一种示意,本申请对各模块的划分,以及,各模块的命名并不进行限定。
图8为本申请提供的第二种模糊测试处理装置的结构示意图,如图8所示,该装置包括:创建模块21、模糊测试模块22。可选的,该模糊测试处理装置还可以包括下述任意一项或多项:传输模块23、重启模块24。
创建模块21,用于创建至少两个虚拟机;
模糊测试模块22,用于在创建的至少两个虚拟机上分别运行闭源操作系统和模糊测试器,并控制所述模糊测试器根据所述闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例,并使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试;所述描述信息为采用如权利要求1-3任一项所述的方法得到的。
可选的,传输模块23,用于若接收到任一模糊测试器反馈的模糊测试用例,则将该模糊测试用例反馈至其他模糊测试器中,以使其他模糊测试器使用该模糊测试用例更新自身的模糊测试用例。
可选的,重启模块24,用于若与任一模糊测试器的连接断开,则保存该模糊测试器连接断开前的模糊测试状态;重启该虚拟机,并将该虚拟机恢复至连接断开前所部署于的虚拟机的模糊测试状态。
本申请提供的模糊测试处理装置,可以执行上述方法实施例中的模糊测试处理方法,其实现原理和技术效果类似,在此不再赘述。需要说明的是,上述图8所示的各模块的划分仅是一种示意,本申请对各模块的划分,以及,各模块的命名并不进行限定。
图9为本申请提供的第三种模糊测试处理装置的结构示意图,如图9所示,该装置包括:生成模块31、监测模块32、记录模块33。
生成模块31,用于根据闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例;所述描述信息为采用如权利要求1-3任一项所述的方法得到的;
监测模块32,用于使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试,并在测试过程中,监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
记录模块33,用于若检测到存在异常行为,则记录所述异常行为的相关信息。
可选的,监测模块32,具体用于当识别到所述闭源操作系统的内核中发生内存分配时,使用垃圾数据填充分配出来的内存块;监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;和/或,当识别到所述闭源操作系统的内核中发生内存释放时,使用垃圾数据填充释放出来的内存块;监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为。
本申请提供的模糊测试处理装置,可以执行上述方法实施例中的模糊测试处理方法,其实现原理和技术效果类似,在此不再赘述。需要说明的是,上述图9所示的各模块的划分仅是一种示意,本申请对各模块的划分,以及,各模块的命名并不进行限定。
图10为本申请提供的一种电子设备900的结构示意图。如图10所示,该电子设备可以包括:至少一个处理器901、存储器902。
存储器902,用于存储程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
存储器902可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器901用于执行存储器902存储的计算机执行指令,以实现前述方法实施例所描述的模糊测试处理方法。其中,处理器901可能是一个中央处理器(Central ProcessingUnit,简称为CPU),或者是特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。
该电子设备900还可以包括通信接口903,以通过通信接口903可以与外部设备进行通信交互,外部设备例如可以是其他电子设备,或者,终端设备(例如,手机、平板)。在具体实现上,如果通信接口903、存储器902和处理器901独立实现,则通信接口903、存储器902和处理器901可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(PeripheralComponent,简称为PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,简称为EISA)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口903、存储器902和处理器901集成在一块芯片上实现,则通信接口903、存储器902和处理器901可以通过内部接口完成通信。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述实施例中的模糊测试处理方法。
本申请还提供一种计算机程序产品,该程序产品包括执行指令,该执行指令存储在可读存储介质中。电子设备的至少一个处理器可以从可读存储介质读取该执行指令,至少一个处理器执行该执行指令使得电子设备实施上述的各种实施方式提供的模糊测试处理方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (11)
1.一种模糊测试处理方法,其特征在于,所述方法包括:
构建闭源操作系统的虚拟运行环境,并在所述虚拟运行环境中模拟运行所述闭源操作系统的内核;
录制所述内核在运行过程中程序的执行轨迹;
对所述执行轨迹进行重放,并在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息;所述描述信息用于生成符合所述内核的系统调用接口要求的模糊测试用例,所述描述信息包括系统调用列表,以及,每个所述系统调用接口所需的参数数量以及每个参数的数据类型;
所述在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息,包括:
若所述关键执行动作包括至少一个通过系统调用接口进行内存访问的动作,则根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型;
所述根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型,包括:
将所述内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值小于预设阈值,则将所述内存位置重新标记为指针类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,且其原始数据能够以字符串编码格式进行解码,则将所述内存位置重新标记为字符串类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,其原始数据无法以字符串编码格式进行解码,且参数流向已知要求句柄值的程序位置,则将所述内存位置重新标记为句柄类型的系统调用参数。
2.根据权利要求1所述的方法,其特征在于,所述在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息,还包括:
若所述关键执行动作包括至少一个系统调用指令执行动作,则根据所述系统调用指令执行时所述系统调用指令相关的寄存器的取值,获取所述系统调用指令对应的系统调用编号,并添加至所述系统调用列表中。
3.一种模糊测试处理方法,其特征在于,所述方法包括:
创建至少两个虚拟机;
在创建的至少两个虚拟机上分别运行闭源操作系统和模糊测试器,并控制所述模糊测试器根据所述闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例,并使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试;所述描述信息为采用如权利要求1或2所述的方法得到的。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若接收到任一模糊测试器反馈的模糊测试用例,则将该模糊测试用例反馈至其他模糊测试器中,以使其他模糊测试器使用该模糊测试用例更新自身的模糊测试用例。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
若与任一模糊测试器的连接断开,则保存该模糊测试器连接断开前所部署于的虚拟机的模糊测试状态;
重启该虚拟机,并将该虚拟机恢复至连接断开前的模糊测试状态。
6.一种模糊测试处理方法,其特征在于,所述方法包括:
根据闭源操作系统内核中的系统调用接口的描述信息,生成符合所述内核的系统调用接口要求的模糊测试用例;所述描述信息为采用如权利要求1或2任一项所述的方法得到的;
使用所述模糊测试用例,对所述闭源操作系统的内核进行模糊测试,并在测试过程中,监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
若检测到存在异常行为,则记录所述异常行为的相关信息。
7.根据权利要求6所述的方法,其特征在于,所述监测所述闭源操作系统的内核中执行测试用例过程中产生的异常行为,包括:
当识别到所述闭源操作系统的内核中发生内存分配时,使用垃圾数据填充分配出来的内存块;
监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为;
和/或,
当识别到所述闭源操作系统的内核中发生内存释放时,使用垃圾数据填充释放出来的内存块;
监测填充所述垃圾数据之后所述闭源操作系统的内核中执行测试用例过程中产生的异常行为。
8.一种模糊测试处理装置,其特征在于,所述装置包括:
构建模块,用于构建闭源操作系统的虚拟运行环境,并在所述虚拟运行环境中模拟运行所述闭源操作系统的内核;
录制模块,用于录制所述内核在运行过程中程序的执行轨迹;
获取模块,用于对所述执行轨迹进行重放,并在重放过程中根据所捕捉的所述内核中的关键执行动作,获取所述内核中的系统调用接口的描述信息;所述描述信息用于生成符合所述内核的系统调用接口要求的模糊测试用例,所述描述信息包括系统调用列表,以及,每个所述系统调用接口所需的参数数量以及每个参数的数据类型;
所述获取模块,具体用于:
若所述关键执行动作包括至少一个通过系统调用接口进行内存访问的动作,则根据至少一个内存访问动作获取该系统调用接口所需的参数数量以及每个参数的数据类型;
所述获取模块,具体用于:
将所述内存访问动作所访问的内存位置标记为整数类型的系统调用参数,并记录内存中写入的参数的数量;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值小于预设阈值,则将所述内存位置重新标记为指针类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,且其原始数据能够以字符串编码格式进行解码,则将所述内存位置重新标记为字符串类型的系统调用参数;
若所述内存位置对应的内存地址,以及,所述内存位置存储的系统调用参数的数值的差值大于或等于预设阈值,其原始数据无法以字符串编码格式进行解码,且参数流向已知要求句柄值的程序位置,则将所述内存位置重新标记为句柄类型的系统调用参数。
9.一种模糊测试系统,其特征在于,所述系统包括:模糊测试管理器,至少两个模糊测试器、动态程序分析器;
其中,所述动态程序分析器用于执行如权利要求1或2所述的方法;
所述模糊测试管理器用于执行如权利要求3至5任一项所述的方法;
所述模糊测试器用于执行如权利要求6至7任一项所述的方法。
10.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-7中任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310665048.3A CN116414722B (zh) | 2023-06-07 | 2023-06-07 | 模糊测试处理方法、装置、模糊测试系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310665048.3A CN116414722B (zh) | 2023-06-07 | 2023-06-07 | 模糊测试处理方法、装置、模糊测试系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116414722A CN116414722A (zh) | 2023-07-11 |
CN116414722B true CN116414722B (zh) | 2023-10-20 |
Family
ID=87059647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310665048.3A Active CN116414722B (zh) | 2023-06-07 | 2023-06-07 | 模糊测试处理方法、装置、模糊测试系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116414722B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750602A (zh) * | 2013-12-27 | 2015-07-01 | 阿里巴巴集团控股有限公司 | 一种动态污点数据分析方法及装置 |
WO2020252529A1 (en) * | 2019-06-19 | 2020-12-24 | Swinburne University Of Technology | System for automatically detecting software vulnerability |
CN113204498A (zh) * | 2021-06-07 | 2021-08-03 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
WO2022134975A1 (zh) * | 2020-12-24 | 2022-06-30 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于注解的模糊测试方法 |
CN114860586A (zh) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于动态插桩的二进制多执行体软件插桩方法 |
CN115617410A (zh) * | 2022-11-01 | 2023-01-17 | 清华大学 | 驱动接口识别方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11586532B2 (en) * | 2021-07-02 | 2023-02-21 | Grammatech, Inc. | Software test environment with automated configurable harness capabilities, and associated methods and computer readable storage media |
-
2023
- 2023-06-07 CN CN202310665048.3A patent/CN116414722B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750602A (zh) * | 2013-12-27 | 2015-07-01 | 阿里巴巴集团控股有限公司 | 一种动态污点数据分析方法及装置 |
WO2020252529A1 (en) * | 2019-06-19 | 2020-12-24 | Swinburne University Of Technology | System for automatically detecting software vulnerability |
WO2022134975A1 (zh) * | 2020-12-24 | 2022-06-30 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于注解的模糊测试方法 |
CN113204498A (zh) * | 2021-06-07 | 2021-08-03 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
CN114860586A (zh) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | 一种基于动态插桩的二进制多执行体软件插桩方法 |
CN115617410A (zh) * | 2022-11-01 | 2023-01-17 | 清华大学 | 驱动接口识别方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
Healer:RelationLearning Guided Kernel Fuzzing;Hao Sun等;Proceedings of the ACM SIGOPS 28th Symposium on Operating Systems Principles;第344-358页 * |
基于DDPG强化学习算法的模糊测试技术研究;张政等;《中国优秀硕士学位论文全文数据库(基础科学辑)》;第1-69页 * |
操作系统内核模糊测试技术综述;李贺,张超等;小型微型计算机系统(第9期);第1994-1999页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116414722A (zh) | 2023-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111353146B (zh) | 应用程序敏感权限的检测方法、装置、设备和存储介质 | |
CN107066390B (zh) | 一种动态内存泄漏检测方法及系统 | |
CN108694320B (zh) | 一种多安全环境下敏感应用动态度量的方法及系统 | |
CN108255716B (zh) | 一种基于云计算技术的软件测评方法 | |
CN112181833A (zh) | 一种智能化模糊测试方法、装置及系统 | |
CN112463581B (zh) | 一种对分布式系统进行模糊测试的方法及系统 | |
CN114866300A (zh) | 一种基于重放分析的网络协议软件状态变量识别方法 | |
CN111428240B (zh) | 一种用于检测软件的内存违规访问的方法及装置 | |
CN116414722B (zh) | 模糊测试处理方法、装置、模糊测试系统及存储介质 | |
CN111783094A (zh) | 一种数据分析方法、装置、服务器及可读存储介质 | |
CN116820610A (zh) | 一种可观测领域中对用户态程序动态跟踪的方法和装置 | |
CN116166535A (zh) | 一种基于模糊测试自动化挖掘非易失内存堆漏洞的方法 | |
CN111858307B (zh) | 模糊测试方法和设备 | |
CN115617668A (zh) | 一种兼容性测试方法、装置及设备 | |
CN110633210A (zh) | 文件执行方法、装置、存储介质和电子设备 | |
CN112363870B (zh) | 应用程序开发处理方法、装置、计算机设备和存储介质 | |
EP3739484B1 (en) | Method and system for detection of post compilation modification of binary images | |
CN113094221B (zh) | 故障注入方法、装置、计算机设备以及可读存储介质 | |
CN114741700B (zh) | 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置 | |
CN111966599B (zh) | 一种虚拟化平台可靠性测试方法、系统、终端及存储介质 | |
CN113076540B (zh) | 一种攻击检测的方法、装置、电子设备及存储介质 | |
CN112035314B (zh) | 内存泄漏的监控方法、装置及电子设备 | |
CN117931540A (zh) | 预留指令处理方法、装置、电子设备和存储介质 | |
CN116737526A (zh) | 一种代码段动态度量方法、装置及电子设备 | |
Liu et al. | Anatomist: Enhanced Firmware Vulnerability Discovery Based on Program State Abnormality Determination with Whole-System Replay |
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 |