CN112286823A - 一种操作系统内核的测试方法和装置 - Google Patents
一种操作系统内核的测试方法和装置 Download PDFInfo
- Publication number
- CN112286823A CN112286823A CN202011296420.0A CN202011296420A CN112286823A CN 112286823 A CN112286823 A CN 112286823A CN 202011296420 A CN202011296420 A CN 202011296420A CN 112286823 A CN112286823 A CN 112286823A
- Authority
- CN
- China
- Prior art keywords
- test
- kernel
- operating system
- testing
- test result
- 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/3676—Test management for coverage 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/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种操作系统内核的测试方法和装置,该方法包括:步骤S1对测试种子集合进行筛选得到第一测试例集合;步骤S2根据第一测试例集合对操作系统内核进行测试得到第一测试结果,第一测试结果至少包括每个目标测试例对应的测试覆盖率;步骤S3将测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合;步骤S4根据第二测试例集合对操作系统内核进行测试得到第二测试结果;步骤S5若第二测试结果的测试覆盖率符合预设条件循环执行步骤S3至步骤S4直到对操作系统内核进行测试得到的测试结果中的覆盖率不符合预设条件为止根据每次的测试结果得到目标测试结果,解决了相关技术中对操作系统内核测试覆盖率低的问题。
Description
技术领域
本申请涉及网络测试技术领域,具体而言,涉及一种操作系统内核的测试方法和装置。
背景技术
网络空间已经成为当今世界不可或缺的一处生存空间,大量工业产业和生活基础设施都依赖网络空间这个载体。网络空间安全已经成为一个国际交锋的新热点。
操作系统作为网络空间中信息基础设施重要的组成部分,其安全漏洞也就关乎了整个社会信息系统体系及网络空间的安全。操作系统内核是操作系统的核心构建。主流的Windows、Linux、Android、MacOS、ios等操作系统在设计实现其内核时都提供了大量防护措施,但操作系统内核开发语言本身的缺陷、庞大的代码体量、越来越复杂的功能需求等诸多因素都使得内核漏洞客观上不可避免。
操作系统内核漏洞的防护对于整个网络空间的安全防御有着非常重要的意义。目前,学术界和工业界都投入巨大精力研究如何防御内核漏洞的攻击和破坏。防护内核漏洞,需要对已有的内核漏洞进行深入的研究分析,更需要利用内核漏洞挖掘工具对内核中存在的未知漏洞进行挖掘。内核漏洞挖掘可以有效地验证内核安全防护机制是否完善,不仅仅能够修复单一的内核漏洞,而且能通过对内核漏洞存在的共性问题进行分析,实现整个系统内核防护措施的改进。并且由于目前Windows、Linux、MacOS等主流操作系统都与美国等西方国家有着千丝万缕的联系,针对内核的漏洞挖掘也对于防范操作系统中可能埋入的后门等恶意行为有着重要意义,内核漏洞挖掘也可以看作是对此类手段的有效的反制措施。另外,为实现自主可控而实现的操作系统平台与主流操作系统相比,都存在开发力量相对较为薄弱的问题,良好的内核模糊测试工具可以有效挖掘自主可控系统内核中存在的漏洞,提高自主可控系统安全防护水平。
现有技术中对操作系统内核进行测试的方法主要包括基于生成的模糊测试方法和基于变异的模糊测试方法,基于生成的模糊测试方法是在分析目标软件输入的结构的基础上,构造大致符合输入格式的测试例,通过随机变异特定字段的方法来测试目标软件的处理逻辑,该方法主要缺点是需要消耗大量的人力分析输入的格式,常被应用于文档处理程序、网络协议通信等输入格式较为固定的软件系统的漏洞挖掘,而用于操作系统内核的测试会导致代码测试覆盖率太低。基于变异的模糊测试方法是对目标程序相应已经存在的文件种子,进行比特翻转、异或、增加字节,剪切破坏等操作,经过这些操作后再将种子进行测试。这种方式在遇到比较复杂的校验时难以通过,变异能否出现新的分支覆盖纯粹依靠运气。同时,该方案覆盖率非常低,并且执行效率低,运行时开销很大。
针对相关技术中对操作系统内核测试覆盖率低的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种操作系统内核的测试方法和装置,以解决相关技术中对操作系统内核测试覆盖率低的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种操作系统内核的测试方法。该方法包括:步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;步骤S5,若所述第二测试结果中的所述测试覆盖率符合所述预设条件,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
进一步地,对测试种子集合进行筛选,得到第一测试例集合包括:运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,所述第三测试结果至少包括测试覆盖率和执行时间;根据所述测试覆盖率和所述执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;确定所述测试分数符合所述预设条件的测试种子为目标测试种子;根据所述目标测试种子得到第一测试例集合。
进一步地,在运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,所述方法还包括:获取系统调用模板,所述系统调用模板中存储有多个系统应用程序接口的调用规则;根据所述各个初始测试种子和所述系统调用模板生成系统调用序列;将所述系统调用序列输入到操作系统内核,用于在所述操作系统内核中运行所述各个初始测试种子。
进一步地,在步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,和步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试的过程中,所述方法包括:若出现操作系统内核崩溃,对导致操作系统崩溃的所述测试例进行记录,继续循环执行步骤S3至步骤S4。
进一步地,所述方法应用于支持Intel PT技术的计算机中,所述计算机中设置有虚拟机和虚拟机管理器,所述虚拟机中运行有待测试的操作系统内核;所述计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,所述虚拟机管理器中设置有PT解码器。
进一步地,步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,以及,步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,包括:通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录,得到PT数据包;通过所述PT解码器对所述PT数据包进行解码,得到所述第一测试结果和所述第二测试结果。
进一步地,在通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录之前,所述方法包括:通过所述虚拟机发送超级调用请求;所述Intel PT内核控制器响应所述超级调用请求,开启监控功能,以实现对所述操作系统内核的测试过程进行记录。
为了实现上述目的,根据本申请的另一方面,提供了一种操作系统内核的测试装置。该装置包括:筛选单元,用于执行步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;第一测试单元,用于执行步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;处理单元,用于执行步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;第二测试单元,用于执行步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;判断单元,用于在所述第二测试结果中的所述测试覆盖率符合所述预设条件的情况下,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
通过本申请,采用以下步骤:步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;步骤S5,若所述第二测试结果中的所述测试覆盖率符合所述预设条件,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。解决了相关技术中对操作系统内核测试覆盖率低的问题。进而达到了提高操作系统内核测试覆盖率的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的操作系统内核的测试方法的流程图一。
图2是根据本申请实施例提供的操作系统内核的测试方法的软硬件系统层级图。
图3是根据本申请实施例提供的操作系统内核的测试方法的系统通信模型图。
图4是根据本申请实施例提供的操作系统内核的测试方法的流程图二。
图5是根据本申请实施例提供的操作系统内核的测试方法的逻辑关系图。
图6是根据本申请实施例提供的操作系统内核的测试方法的架构图。
图7是根据本申请实施例提供的操作系统内核的测试方法的时序图。
图8是根据本申请实施例提供的操作系统内核的测试装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请的实施例,提供了一种操作系统内核的测试方法。图1是根据本申请实施例的一种操作系统内核的测试方法的流程图。如图1所示,该方法包括以下步骤:
步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,测试种子集合包括多个预置的初始测试种子,第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例。
在开展操作系统内核测试的工作中,通常会预先维护一套语料库,语料库中包括多个测试种子,测试种子即用来对操作系统内核进行测试的特定的程序,这些程序在运行的时候,可能会触发操作系统内核的漏洞,达到对操作系统内核进行测试的效果。具体到一项测试任务时,为了有针对性地进行测试,需要根据预先设置好的条件对测试种子集合进行筛选,将符合预设条件的测试种子筛选出来作为目标测试种子,并根据目标测试种子生成目标测试例,用于对操作系统内核进行测试。例如,将测试时产生新的路径及
可选地,在本申请实施例提供的操作系统内核的测试方法中,对测试种子集合进行筛选,得到第一测试例集合包括:运行测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,第三测试结果至少包括测试覆盖率和执行时间;根据测试覆盖率和执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;确定测试分数符合预设条件的测试种子为目标测试种子;根据目标测试种子得到第一测试例集合。
为了从初始测试种子集合中准确地筛选出符合条件的测试种子,需要将每个初始测试种子输入到待测试的操作系统中运行一遍,得到各个初始测试种子对应的测试结果,并将测试结果符合预设条件的初始测试种子筛选出来作为目标测试种子。为了提高测试覆盖率和测试效率,通常会选择产生新的路径以及执行时间短的测试种子。因此,在根据测试结果对初始测试种子进行筛选的时候,要求测试结果至少包括测试覆盖率和执行时间,这样就可以根据测试覆盖率和执行时间对每个初始测试种子的测试质量进行加权评分,并将测试分数符合预设条件,也即产生新的路径且执行时间较短的初始测试种子作为目标测试种子,再根据目标测试种子得到用于对操作系统内核进行测试的测试例集合。
可选地,在本申请实施例提供的操作系统内核的测试方法中,在运行测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,该方法还包括:获取系统调用模板,系统调用模板中存储有多个系统应用程序接口的调用规则;根据各个初始测试种子和系统调用模板生成系统调用序列;将系统调用序列输入到操作系统内核,用于在操作系统内核中运行各个初始测试种子。
为了在操作系统内核中运行各个测试种子,需要将各测试种子输入到操作系统内核,从用户态程序跨越安全边界进入内核态一般有系统调用和数据处理两种形式,本实施例对具体采用哪种方式不做限定,仅以系统调用的方式进行举例说明。系统调用是操作系统内核为用户空间程序提供支持的功能接口,由于操作系统内核功能及其丰富,系统调用接口数目相对普通程序而言也数量上多出很多,因此使用基于生成的模糊测试思想,采用系统调用模板的方式结构化定义系统调用接口,系统调用模板中存有多个操作系统内核功能接口的调用规则。此外,一些系统功能接口需要按照指定的顺序进行调用,需要根据系统功能接口和测试种子生成系统调用序列,以便输入到操作系统内核进行处理。模块化的设计提高了整个框架的扩展性,可对不同操作系统的系统调用接口进行模糊测试,并根据系统调用模板规范生成该系统调用的各个参数,实现了高质量测试例生成。
步骤S2,根据第一测试例集合对操作系统内核进行测试,得到第一测试结果,第一测试结果中至少包括每个目标测试例对应的测试覆盖率。
第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例,将目标测试例按照与系统匹配的规范化的格式输入到操作系统内核中运行,得到目标测试例的测试结果。与上述运行初始测试种子一样,根据需要测试的系统功能,从系统调用模板中选择相应的系统功能接口对第一测试例集合中的目标测试例进行处理,生成系统调用序列,将目标测试例对应的系统调用序列输入到操作系统内核运行,即可得到目标测试例的测试结果。为了对目标测试例的质量进行评估,需要测试结果中至少包括各个目标测试例的测试覆盖率。
步骤S3,将测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,第二测试例集合包括多个经过变异处理后的目标测试例。
为了提高操作系统内核的测试覆盖率,在运行第一操作系统集合中的目标测试例后,将第一操作系统集合中的高质量目标测试例筛选出来,期望根据这些高质量的目标测试例继续对操作系统内核进行测试,以实现对操作系统内核更全面地测试,得到更好的测试结果。上述高质量目标测试例可以是第一测试例集合中测试覆盖率较高,或者生成新的测试路径的目标测试例。通过对这些目标测试例进行变异处理,得到第二测试例集合,用于继续对操作系统内核进行测试。
步骤S4,根据第二测试例集合对操作系统内核进行测试,得到第二测试结果,其中,第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率。
第二测试例集合中包括筛选出来的经过变异处理后的目标测试例,继续运行这些变异处理后的目标测试例,对操作系统内核进行测试,得到新的测试结果。同样地,为了评估第二测试例集合中各个目标测试例的质量,为下一步测试例的筛选提供依据,需要第二测试结果中至少包括各测试例对应的测试覆盖率。
可选地,在本申请实施例提供的操作系统内核的测试方法中,在步骤S2,根据第一测试例集合对操作系统内核进行测试,和步骤S4,根据第二测试例集合对操作系统内核进行测试的过程中,该方法包括:若出现操作系统内核崩溃,对导致操作系统崩溃的测试例进行记录,继续循环执行步骤S3至步骤S4。
对操作系统内核进行测试的目的是通过测试确认操作系统内核中的每个功能是否存在漏洞,在测试过程中,若在运行测试例时触发了操作系统内核的漏洞,可能会导致操作系统内核的崩溃,在这种情况下,测试程序需要保存崩溃信息,记录造成崩溃的测试例,并重新启动和返回崩溃前的测试步骤,继续执行测试循环。
可选地,在本申请实施例提供的操作系统内核的测试方法中,该方法应用于支持Intel PT技术的计算机中,计算机中设置有虚拟机和虚拟机管理器,虚拟机中运行有待测试的操作系统内核;计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,虚拟机管理器中设置有PT解码器。
传统技术中,在进行操作系统内核测试时,通常需要在物理机中搭建两套虚拟机,其中一套虚拟机用于运行被测操作系统内核,另一套虚拟机用于运行第一套虚拟机,并对第一套虚拟机测运行结果进行记录。为了提高操作系统内核测试的效率,本实施例采用基于硬件的操作系统内核测试方法,仅需要在物理机上运行一套用于运行操作系统内核的虚拟机,使用物理机对操作系统内核测试的结果进行记录。针对现有物理机工作无法对操作系统内核模块进行源码插桩,进而无法实现覆盖率引导的模糊测试的问题,本实施例采用了基于Intel PT的内核运行状态记录技术的方法,针对Windows等闭源操作系统覆盖率难以记录的问题,采用硬件非侵入调试技术Intel Processor Trace(PT),结合硬件虚拟化技术KVM及QEMU,对硬件虚拟化环境中运行的操作系统内核态程序执行路径进行记录,实现了高效的代码覆盖率记录及生成,有效支撑覆盖率引导的内核模糊测试。
针对Intel PT在硬件虚拟化环境中无法监控被测目标内核的多个并行执行进程的问题,提出基于虚拟机内省(introspection)的Intel PT多进程并行跟踪技术,使用Intel PT结合虚拟机内省实现了记录多个内核进程的代码运行轨迹,并将其转换为代码覆盖率信息,支撑对内核多进程的模糊测试。
为了使用Intel PT技术记录被测内核运行轨迹,本实施例的操作系统模糊测试框架需要5个层级的软硬件实体配合运行,首先需要CPU硬件支持Intel PT技术,能够使用Intel PT非侵入调试技术记录虚拟机内核运行情况;其次需要虚拟机管理器调用宿主机内核提供的硬件虚拟化平台运行被测操作系统;最后在被测虚拟机内核态运行测试例测试操作系统内核。Intel PT在对目标程序进行监控时,需要CPU、内核态管理器以及PT解码器三个部分进行配合使用,Intel PT可以借由Intel VT虚拟化技术对虚拟机中运行的程序进行监控,为实现这一功能,在设计上本实施例将Intel PT内核控制器附加到硬件虚拟化内核模块中,硬件虚拟化内核模块需要通过用户态虚拟机管理器进行调用才能正常工作,所以对测试例进行测试和监控时还需要用户态虚拟机管理器的参与,为了方便实现,在用户态虚拟机管理器扩展了PT解码器相关功能,上述模块的层级结构如图2所示。
可选地,在本申请实施例提供的操作系统内核的测试方法中,步骤S2,根据第一测试例集合对操作系统内核进行测试,得到第一测试结果,以及,步骤S4,根据第二测试例集合对操作系统内核进行测试,得到第二测试结果,包括:通过Intel PT内核控制器对操作系统内核的测试过程进行记录,得到PT数据包;通过PT解码器对PT数据包进行解码,得到第一测试结果和第二测试结果。
本实施例中被测操作系统内核运行在虚拟机中,在操作系统内核运行测试例进行测试的过程中,所有的测试数据都会在宿主机中留下记录,因此,在运行测试例之前,先启动PT监控,在宿主机中对操作系统内核的测试数据进行记录,在测试例运行结束后,关闭PT监控,得到测试例运行过程的PT数据包。例如,在运行测试例前,可以发出请求,通过虚拟机到虚拟机管理器,再从虚拟机管理器到PT控制器的路径传递给PT控制器,开启PT的监控;同样地,在测试例执行返回后,关闭PT监控。在关闭PT监控得到PT数据包后,虚拟机管理器中的PT解码器会自动发送驱动I/O请求获得PT记录的数据包,并进行解码,进而虚拟机中运行的程序通过调用获取解码后的内核执行路径。
可选地,在本申请实施例提供的操作系统内核的测试方法中,在通过Intel PT内核控制器对操作系统内核的测试过程进行记录之前,该方法包括:通过虚拟机发送超级调用请求;Intel PT内核控制器响应超级调用请求,开启监控功能,以实现对操作系统内核的测试过程进行记录。
为了实现虚拟机中运行的程序对覆盖率进行读取,需要让虚拟机中运行的程序能够向虚拟化内核模块请求覆盖率计算的相关功能。本实施例利用Intel VT-x硬件虚拟机在运行中遇到特权指令时会退出VMX Non-root模式的机制,选用vmcall指令来触发这个机制。在进入VMX root模式后,根据vCPU寄存器的内容来完成不同的功能。也即,虚拟机中运行的程序在需要对测试过程进行记录时,先发送一个超级调用请求,例如,发送vmcall指令,此时,Intel PT内核控制器会响应该超级调用请求,根据寄存器的内容执行相应的功能,例如,可以对寄存器的内容进行预先设置,实现在Intel PT内核控制器响应超级调用请求后,开启PT监控,对操作系统内核的测试过程进行记录。上述机制与半虚拟化中客户机向宿主机通信的Hypercall(超级调用)操作类似,另外,为了减少对客户机运行环境的修改,可以直接利用这个通信机制使执行器与用户态虚拟机管理器进行通信,整体通信模型如图3所示。
步骤S5,若第二测试结果中的测试覆盖率符合预设条件,循环执行步骤S3至步骤S4,直到对操作系统内核进行测试得到的测试结果中的覆盖率不符合预设条件为止,根据每次的测试结果得到目标测试结果。
本实施例提供的操作系统内核测试方法,通过覆盖率引导循环执行测试过程,在每一步测试中,根据测试结果筛选出测试覆盖率较高或者生成新的测试路径的测试例,用于下一轮对操作系统内核的测试,同样的,在下一步测试中,也会根据该轮测试结果筛选出符合要求的测试例。反复循环进行测试,直到测试结果都不符合循环的要求或者人为操作终止。通过上述覆盖率引导的循环测试方法,可以实现对操作系统内核更全面地测试,提高测试覆盖率。
图4是根据本申请实施例提供的操作系统内核的测试方法的流程图,如图4所示,操作系统内核的测试流程分为测试例生成和测试例执行监控两部分,在测试例生成部分,通过系统调用模板生成测试例,进而生成与系统功能接口匹配的系统调用序列,并输入到操作系统内核进行测试;在测试例执行监控部分,对测试结果进行记录,并将记录到的测试结果反馈给测试例生成部分,根据对测试结果的分析对测试例进行变异处理,并根据变异处理后的测试例继续对操作系统内核进行测试,反复执行上述循环直到测试结果都不满足预设条件为止。在对操作系统内核进行测试的过程中,如果测试例在运行时触发了操作系统内核的漏洞,需要对捕获到的漏洞进行记录,如果由于触发漏洞导致操作系统内核的崩溃,测试程序需要保存崩溃信息,记录造成崩溃的测试例,并重新启动和返回崩溃前的测试步骤,继续执行测试循环。
为了更便于理解本发明中的内核模糊测试框架,设计将模糊测试框架在逻辑上为三个主要模块:管理器、模糊器和执行器,三个主要模块的逻辑关系如图5所示。在功能上,三个主要模块的设计分别如下:
(一)管理器功能设计
(1)模糊测试配置的处理。为了提高内核模糊测试框架的可扩展性,需要让模糊测试框架能够采用可配置的方式启用不同的功能模块,提高自动化整个模糊测试的自动化水平。另外,由于模糊器和执行器运行在被测操作系统上,针对不同操作系统平台,也需要使用配置文件来管理启动不同平台的模糊器和执行器。
(2)虚拟机管理。被测操作系统需要运行在虚拟机上,管理这些虚拟机也是提高整个模糊测试自动化水平的最基本方法。虚拟化管理模块主要完成虚拟机的启动、关闭、运行监控等工作。另外,虚拟机管理模块还有一部分重要的功能是在内核执行发生错误后保存崩溃信息,记录造成崩溃的测试例。
(3)管理模糊器。模糊器和执行器运行在被测操作系统内部,管理器需要在被测操作系统开机完毕后,启动内部的模糊器和执行器。管理器需要将外部的配置以及系统调用模板等信息传给模糊器,并接受模糊器反馈回来的系统调用序列执行结果,传给语料库管理模块进行处理。
(4)语料库管理。为了记录整个模糊测试的结果,模糊测试框架需要构建语料库保存系统调用序列的执行返回结果以及每个系统调用的覆盖率。另外,语料库管理模块还需要负责语料的最小化、合并覆盖率、复现崩溃等任务。
(5)用户界面处理。为了实时展示模糊测试测试例执行速度、覆盖率、吞吐率等运行状态,需要使用一套较为友好的界面为用户提供服务。
(6)与其他管理器通信及语料库同步,让管理器能够简单的与其他物理机上运行的管理器进行语料库同步。
管理器用来管理整个模糊测试流程的启动和维护,并对于不同实体采用不同的通信方式:例如,使用shell命令启动或者关闭虚拟机;通过SSH与虚拟机中系统相互通信;用RPC(远程过程调用)与模糊器相连;使用HTTP接口展示用户界面并与hub通信。在启动管理器时,必须指定模糊测试的配置参数,主要包括模糊测试的目标操作系统、用户界面HTTP地址、工作目录、磁盘镜像、连接虚拟机的SSH密钥、模糊器进程数、是否启用覆盖率、虚拟机运行的参数等,另外还可以指定测试的目标系统调用(Windows库函数)。
管理器在读取完配置文件后开始初始化各项配置,如用户界面、模糊器连接接口、用于测试例生成和变异的系统调用模板等。之后管理器初始化Crash保存目录并载入语料库,初始化用户界面,启动与模糊器通信的RPC端口。
在上述动作执行完成后,启动配置中指定的虚拟机,为了配合本实施例设计的PT覆盖率生成机制,优选地,在配置文件中指定虚拟机使用定制化的QEMU。这里需要说明的是,在启动QEMU的时候需要去掉虚拟机CPU迁移选项(-cpu host,migrata ble=off),否则无法启动PT监控。虚拟机启动后,管理器通过使用SSH连接的方式检查虚拟机的启动状态,检查完毕后开始真正的模糊测试。管理器在启动模糊器以后,会一直检查与模糊器的通信状态,维护语料库和Crash样本文件目录,保持整个模糊测试一直在工作的状态。在与虚拟机建立SSH连接以后,管理器会使用SCP命令将目标操作系统对应的模糊器与执行器拷贝到虚拟机中,并在SSH中使用shell命令启动模糊器。模糊器首先会检查启动参数,并开始执行管理器通信、管理执行器、生成和变异测试例等功能。
(二)模糊器功能设计
模糊器在整个模糊测试中起到了承上启下的作用。模糊器在启动时,首先检查启动参数并根据启动参数初始化测试例执行环境。主要包括获取当前测试的目标操作系统类型,配置与执行器的通信的IPC接口、沙盒环境、程序执行中断处理句柄。之后,模糊器开始连接管理器并根据管理器的指令进行自检,主要包括各个组件功能、覆盖率能否正常生成等。自检通过的模糊器需要管理器上连接的其他模糊器进行同步,获取其他模糊器的本地语料库和需要执行的测试例。而后构建系统调用选择表,记录需要测试的目标系统调用(Windows库函数),并分配选择其构建系统调用序列(测试例)的概率。
然后模糊器开始根据管理器指定的数量,使用shell命令启动执行器。执行器的启动参数中包括IPC管道,模糊器和执行器通过IPC管道以及共享内存进行通信。在模糊器执行过程中,会保持与管理器进行连接,当连接中断时,管理器就可以对模糊器所在的虚拟机进行读取日志、关闭电源等操作。模糊器主要功能如下:
(1)测试例生成。在选择表中以一定概率随机挑选系统调用,并根据系统调用模板规范生成该系统调用的各个参数。
(2)测试例变异。模糊器会根据系统调用执行的结果变异整个的测试例。这个变异包括两个维度:系统调用的序列以及每个系统调用的参数。系统调用的变异主要使用随机增加减少某个系统调用的方法来变换系统调用序列。参数的变异过程主要根据参数类型的不同采用对应的变异方法。如整型参数就采用代数放大缩小,缓冲区类型的参数采用字节翻转、字节拼接、重新生成等等。需要说明的是,为了方便测试例的传输,测试例在生成或变异后需要进行序列化,传输给执行器反序列化才能执行。
(3)模糊测试流程管理。模糊器主要根据测试例执行反馈的覆盖率,调整优先执行的测试例。举例来说,对于相同系统调用,模糊器优先对产生了新路径的参数组合进行变异,并将其记录到模糊器自带的本地语料库中。
(4)执行器管理。主要管理执行器的启动、测试例投送以及测试例执行结果的收集。
(5)语料库管理。根据执行器执行系统调用的返回值和内核代码覆盖率,将产生新路径的测试例进行记录。模糊器需要将这些本地语料库的内容同步给管理器中真正的语料库,另外,还需要与管理器下属的其他模糊器进行同步,避免重复劳动。
(三)执行器功能设计
执行器主要负责系统调用序列的执行、返回值和覆盖率的记录。执行器首先初始化整个测试例执行环境,包括执行权限、覆盖率计算环境、与模糊器连接的连接等。在与模糊器建立连接后,接收系统调用序列,对接收系统调用序列进行反序列化,并同时进行参数检查。参数检查主要思路是根据参数类型检查对应的参数是否合法,由于在模糊器中已经进行了一次参数检查,所以这里的检查主要对系统调用号等参数进行粗略的检查。另外,对于校验和参数,直接根据校验内容生成校验和。
执行测试例需要根据不同的系统平台采用不同的方法,所以在每个平台上都需要专门地实现。例如,对于Linux等类Unix系统,可以使用syscall())函数直接根据调用号执行系统调用序列,而对于Windows系统则需要模糊器和执行器约定一套直接使用库函数地址的方式来执行测试例。在Linux系统上,执行器需要首先根据启动参数初始化namespace、SELinux、异常处理句柄等。读取模糊器传入的命令,开启或者关闭对应的功能,初始化覆盖率记录所使用的目标模块地址范围、记录缓冲区等。记录覆盖率的缓冲区需要进行多次擦除写入,保证该内存对象所有地址已经都分配了物理页。
在初始化完成后,模糊器通过IPC管道向执行器传入序列化的测试例,执行器就开始反序列化输入并解析出系统调用和其参数。执行每个系统调用前,需要使用超级调用提交目标进程顶级页表目录并启动覆盖率记录,在执行结束后就关闭覆盖率记录,并读取基本块地址序列。这个基本块地址序列格式采用前四个字节代表数组长度n,后n个字节为基本块地址。执行器会将这些基本块地址计算成覆盖率的边,并一同与系统调用序列的返回值反馈给模糊器。在获得了内核代码路径信息后,需要将这些信息转化为代码覆盖率。本发明采用两种覆盖率计算方式,一种是计算基本块,另一种是计算基本块之间跳转关系,前者为计算顶点,后者为计算边,通常采用边覆盖率作为语料比较的主要指标。
图6是根据本申请实施例提供的操作系统内核的测试方法的架构图,优选地,整个框架采用QEMU-KVM虚拟机进行内核模糊测试,管理器运行在物理机中,模糊器和执行器运行在虚拟机中,在虚拟机中运行被测操作系统。通过系统调用测试被测操作系统内核的功能,通过宿主机内核中的Intel PT内核控制器对测试结果进行记录,并将记录得到的PT数据包发送到虚拟机管理器中的PT解码器,解码后生成控制流跳转地址,进而将解码后的结果发送至执行器,获得控制流图代码基本块的覆盖率,同时监控被测操作系统内核是否存在违例状态。
图7是根据本申请实施例提供的操作系统内核的测试方法的时序图,如图7所示,QEMU管理机首先通过/dev/kvm接口启动KVM虚拟机,同时对内核态PT控制器进行初始化。在被测虚拟机启动完成后,管理器在虚拟机中启动模糊器,模糊器启动执行器。在执行器在初始化完成后,执行超级调用指令发送PT配置,KVM捕获超级调用中断,而后将参数转发给QEMU管理机。QEMU管理机在收到配置PT的请求后,通过ioctl向内核态PT控制器发送初始化PT配置的请求,而后内核态PT控制器对MSR进行相应配置。执行器在执行测试例之前使用超级调用请求启动PT监控,通过相同的流程,请求通过KVM虚拟机到QEMU管理机,从QEMU管理机到PT控制器的路径传递给PT控制器,开启intel PT的监控功能;同样地,在测试例执行返回后,执行器通过超级调用关闭PT监控。关闭监控后,解码器会自动发送驱动I/O请求获得PT记录的数据包,并进行解码,而后执行器使用超级调用获取解码后的内核执行路径。
本申请实施例提供的操作系统内核的测试方法,通过步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,测试种子集合包括多个预置的初始测试种子,第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;步骤S2,根据第一测试例集合对操作系统内核进行测试,得到第一测试结果,第一测试结果中至少包括每个目标测试例对应的测试覆盖率;步骤S3,将测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,第二测试例集合包括多个经过变异处理后的目标测试例;步骤S4,根据第二测试例集合对操作系统内核进行测试,得到第二测试结果,其中,第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;步骤S5,若第二测试结果中的测试覆盖率符合预设条件,循环执行步骤S3至步骤S4,直到对操作系统内核进行测试得到的测试结果中的覆盖率不符合预设条件为止,根据每次的测试结果得到目标测试结果。解决了相关技术中对操作系统内核测试覆盖率低的问题。进而达到了提高操作系统内核测试覆盖率的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例还提供了一种操作系统内核的测试装置,需要说明的是,本申请实施例的操作系统内核的测试装置可以用于执行本申请实施例所提供的用于操作系统内核的测试方法。以下对本申请实施例提供的操作系统内核的测试装置进行介绍。
图8是根据本申请实施例的操作系统内核的测试装置的示意图。如图8所示,该装置包括:筛选单元801、第一测试单元802、处理单元803、第二测试单元804、判断单元805。
具体地,筛选单元801,用于执行步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;
第一测试单元802,用于执行步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;
处理单元803,用于执行步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;
第二测试单元804,用于执行步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;
判断单元805,用于在所述第二测试结果中的所述测试覆盖率符合所述预设条件的情况下,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
综上,本申请实施例提供的操作系统内核的测试装置,通过筛选单元,用于执行步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;第一测试单元,用于执行步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;处理单元,用于执行步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;第二测试单元,用于执行步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;判断单元,用于在所述第二测试结果中的所述测试覆盖率符合所述预设条件的情况下,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。解决了相关技术中对操作系统内核测试覆盖率低的问题。进而达到了提高操作系统内核测试覆盖率的效果。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述筛选单元包括:运行模块,用于运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,所述第三测试结果至少包括测试覆盖率和执行时间;评分模块,用于根据所述测试覆盖率和所述执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;确定模块,用于确定所述测试分数符合所述预设条件的测试种子为目标测试种子;获取模块,用于根据所述目标测试种子得到第一测试例集合。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述装置还包括:获取单元,用于在运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,获取系统调用模板,所述系统调用模板中存储有多个系统应用程序接口的调用规则;生成单元,用于根据所述各个初始测试种子和所述系统调用模板生成系统调用序列;输入单元,用于将所述系统调用序列输入到操作系统内核,用于在所述操作系统内核中运行所述各个初始测试种子。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述装置包括:记录单元,用于在步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,和步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试的过程中,在出现操作系统内核崩溃的情况下,对导致操作系统崩溃的所述测试例进行记录,继续循环执行步骤S3至步骤S4。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述装置应用于支持Intel PT技术的计算机中,所述计算机中设置有虚拟机和虚拟机管理器,所述虚拟机中运行有待测试的操作系统内核;所述计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,所述虚拟机管理器中设置有PT解码器。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述第一测试单元和所述第二测试单元包括:记录模块,用于通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录,得到PT数据包;解码模块,用于通过所述PT解码器对所述PT数据包进行解码,得到所述第一测试结果和所述第二测试结果。
可选地,在本申请实施例提供的操作系统内核的测试装置中,所述装置包括:发送单元,用于在通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录之前,通过所述虚拟机发送超级调用请求;响应单元,用于所述Intel PT内核控制器响应所述超级调用请求,开启监控功能,以实现对所述操作系统内核的测试过程进行记录。
本申请实施例提供的操作系统内核的测试装置,通过筛选单元,执行步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;第一测试单元,执行步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;处理单元,执行步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;第二测试单元,执行步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;判断单元,在所述第二测试结果中的所述测试覆盖率符合所述预设条件的情况下,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。解决了相关技术中对操作系统内核测试覆盖率低的问题。进而达到了提高操作系统内核测试覆盖率的效果。
所述操作系统内核的测试装置包括处理器和存储器,上述筛选单元801、第一测试单元802、处理单元803、第二测试单元804和判断单元805等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提高操作系统内核测试覆盖率。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述操作系统内核的测试方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述操作系统内核的测试方法。
本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;步骤S5,若所述第二测试结果中的所述测试覆盖率符合所述预设条件,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。本文中的设备可以是服务器、PC、PAD、手机等。
处理器执行程序时还实现以下步骤:对测试种子集合进行筛选,得到第一测试例集合包括:运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,所述第三测试结果至少包括测试覆盖率和执行时间;根据所述测试覆盖率和所述执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;确定所述测试分数符合所述预设条件的测试种子为目标测试种子;根据所述目标测试种子得到第一测试例集合。
处理器执行程序时还实现以下步骤:在运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,所述方法还包括:获取系统调用模板,所述系统调用模板中存储有多个系统应用程序接口的调用规则;根据所述各个初始测试种子和所述系统调用模板生成系统调用序列;将所述系统调用序列输入到操作系统内核,用于在所述操作系统内核中运行所述各个初始测试种子。
处理器执行程序时还实现以下步骤:在步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,和步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试的过程中,所述方法包括:若出现操作系统内核崩溃,对导致操作系统崩溃的所述测试例进行记录,继续循环执行步骤S3至步骤S4。
处理器执行程序时还实现以下步骤:所述方法应用于支持Intel PT技术的计算机中,所述计算机中设置有虚拟机和虚拟机管理器,所述虚拟机中运行有待测试的操作系统内核;所述计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,所述虚拟机管理器中设置有PT解码器。
处理器执行程序时还实现以下步骤:步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,以及,步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,包括:通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录,得到PT数据包;通过所述PT解码器对所述PT数据包进行解码,得到所述第一测试结果和所述第二测试结果。
处理器执行程序时还实现以下步骤:在通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录之前,所述方法包括:通过所述虚拟机发送超级调用请求;所述Intel PT内核控制器响应所述超级调用请求,开启监控功能,以实现对所述操作系统内核的测试过程进行记录。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;步骤S5,若所述第二测试结果中的所述测试覆盖率符合所述预设条件,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:对测试种子集合进行筛选,得到第一测试例集合包括:运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,所述第三测试结果至少包括测试覆盖率和执行时间;根据所述测试覆盖率和所述执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;确定所述测试分数符合所述预设条件的测试种子为目标测试种子;根据所述目标测试种子得到第一测试例集合。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,所述方法还包括:获取系统调用模板,所述系统调用模板中存储有多个系统应用程序接口的调用规则;根据所述各个初始测试种子和所述系统调用模板生成系统调用序列;将所述系统调用序列输入到操作系统内核,用于在所述操作系统内核中运行所述各个初始测试种子。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,和步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试的过程中,所述方法包括:若出现操作系统内核崩溃,对导致操作系统崩溃的所述测试例进行记录,继续循环执行步骤S3至步骤S4。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:所述方法应用于支持Intel PT技术的计算机中,所述计算机中设置有虚拟机和虚拟机管理器,所述虚拟机中运行有待测试的操作系统内核;所述计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,所述虚拟机管理器中设置有PT解码器。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,以及,步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,包括:通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录,得到PT数据包;通过所述PT解码器对所述PT数据包进行解码,得到所述第一测试结果和所述第二测试结果。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录之前,所述方法包括:通过所述虚拟机发送超级调用请求;所述Intel PT内核控制器响应所述超级调用请求,开启监控功能,以实现对所述操作系统内核的测试过程进行记录。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种操作系统内核的测试方法,其特征在于,所述方法包括:
步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;
步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;
步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;
步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;
步骤S5,若所述第二测试结果中的所述测试覆盖率符合所述预设条件,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
2.根据权利要求1所述的方法,其特征在于,对测试种子集合进行筛选,得到第一测试例集合包括:
运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果,其中,所述第三测试结果至少包括测试覆盖率和执行时间;
根据所述测试覆盖率和所述执行时间对对应的初始测试种子进行加权评分,得到各个初始测试种子对应的测试分数;
确定所述测试分数符合所述预设条件的测试种子为目标测试种子;
根据所述目标测试种子得到第一测试例集合。
3.根据权利要求2所述的方法,其特征在于,在运行所述测试种子集合中的各个初始测试种子,得到与各个初始测试种子对应的第三测试结果之前,所述方法还包括:
获取系统调用模板,所述系统调用模板中存储有多个系统应用程序接口的调用规则;
根据所述各个初始测试种子和所述系统调用模板生成系统调用序列;
将所述系统调用序列输入到操作系统内核,用于在所述操作系统内核中运行所述各个初始测试种子。
4.根据权利要求1所述的方法,其特征在于,在步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,和步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试的过程中,所述方法包括:
若出现操作系统内核崩溃,对导致操作系统崩溃的所述测试例进行记录,继续循环执行步骤S3至步骤S4。
5.根据权利要求1所述的方法,其特征在于,所述方法应用于支持Intel PT技术的计算机中,所述计算机中设置有虚拟机和虚拟机管理器,所述虚拟机中运行有待测试的操作系统内核;所述计算机的硬件虚拟化内核模块中设置有Intel PT内核控制器,所述虚拟机管理器中设置有PT解码器。
6.根据权利要求5所述的方法,其特征在于,步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,以及,步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,包括:
通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录,得到PT数据包;
通过所述PT解码器对所述PT数据包进行解码,得到所述第一测试结果和所述第二测试结果。
7.根据权利要求5或者6所述的方法,其特征在于,在通过所述Intel PT内核控制器对所述操作系统内核的测试过程进行记录之前,所述方法包括:
通过所述虚拟机发送超级调用请求;
所述Intel PT内核控制器响应所述超级调用请求,开启监控功能,以实现对所述操作系统内核的测试过程进行记录。
8.一种操作系统内核的测试装置,其特征在于,所述装置包括:
筛选单元,用于执行步骤S1,对测试种子集合进行筛选,得到第一测试例集合,其中,所述测试种子集合包括多个预置的初始测试种子,所述第一测试例集合中包括多个用于对操作系统内核进行测试的目标测试例;
第一测试单元,用于执行步骤S2,根据所述第一测试例集合对所述操作系统内核进行测试,得到第一测试结果,所述第一测试结果中至少包括每个目标测试例对应的测试覆盖率;
处理单元,用于执行步骤S3,将所述测试覆盖率符合预设条件的目标测试例进行变异处理,得到第二测试例集合,其中,所述第二测试例集合包括多个经过变异处理后的目标测试例;
第二测试单元,用于执行步骤S4,根据所述第二测试例集合对所述操作系统内核进行测试,得到第二测试结果,其中,所述第二测试结果中至少包括每个经过变异处理后的目标测试例对应的测试覆盖率;
判断单元,用于在所述第二测试结果中的所述测试覆盖率符合所述预设条件的情况下,循环执行步骤S3至步骤S4,直到对所述操作系统内核进行测试得到的测试结果中的所述覆盖率不符合所述预设条件为止,根据每次的测试结果得到目标测试结果。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序执行权利要求1至7中任意一项所述的操作系统内核的测试方法。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至7中任意一项所述的操作系统内核的测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011296420.0A CN112286823A (zh) | 2020-11-18 | 2020-11-18 | 一种操作系统内核的测试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011296420.0A CN112286823A (zh) | 2020-11-18 | 2020-11-18 | 一种操作系统内核的测试方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112286823A true CN112286823A (zh) | 2021-01-29 |
Family
ID=74399231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011296420.0A Pending CN112286823A (zh) | 2020-11-18 | 2020-11-18 | 一种操作系统内核的测试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286823A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051153A (zh) * | 2021-02-23 | 2021-06-29 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN113190441A (zh) * | 2021-04-26 | 2021-07-30 | 交叉信息核心技术研究院(西安)有限公司 | 一种链码测试种子生成方法、系统、设备及存储介质 |
CN113312254A (zh) * | 2021-03-29 | 2021-08-27 | 阿里巴巴新加坡控股有限公司 | 内核代码的测试方法、装置、存储介质和处理器 |
CN113468053A (zh) * | 2021-07-02 | 2021-10-01 | 建信金融科技有限责任公司 | 一种应用系统的测试方法和装置 |
CN113542034A (zh) * | 2021-07-28 | 2021-10-22 | 山石网科通信技术股份有限公司 | 网元信息处理系统、网元管理方法及装置 |
CN113709174A (zh) * | 2021-09-03 | 2021-11-26 | 国网山东省电力公司电力科学研究院 | 一种电力监控系统网络漏洞热复现及修补方法 |
CN114490314A (zh) * | 2021-12-08 | 2022-05-13 | 中国科学院信息工程研究所 | 一种覆盖率引导的虚拟网络设备模糊测试的方法及装置 |
CN114840437A (zh) * | 2022-05-24 | 2022-08-02 | 中南大学 | 一种操作系统内核模糊测试种子评估分配方法 |
CN116069672A (zh) * | 2023-03-23 | 2023-05-05 | 中南大学 | 操作系统内核定向模糊测试的种子变异方法及测试方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111709031A (zh) * | 2020-05-28 | 2020-09-25 | 杭州电子科技大学 | 一种覆盖率引导的VxWorks内核模糊测试方法 |
-
2020
- 2020-11-18 CN CN202011296420.0A patent/CN112286823A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111709031A (zh) * | 2020-05-28 | 2020-09-25 | 杭州电子科技大学 | 一种覆盖率引导的VxWorks内核模糊测试方法 |
Non-Patent Citations (1)
Title |
---|
李贺等: "操作系统内核模糊测试技术综述", 《小型微型计算机系统》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051153B (zh) * | 2021-02-23 | 2022-11-15 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN113051153A (zh) * | 2021-02-23 | 2021-06-29 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN113312254A (zh) * | 2021-03-29 | 2021-08-27 | 阿里巴巴新加坡控股有限公司 | 内核代码的测试方法、装置、存储介质和处理器 |
CN113190441A (zh) * | 2021-04-26 | 2021-07-30 | 交叉信息核心技术研究院(西安)有限公司 | 一种链码测试种子生成方法、系统、设备及存储介质 |
CN113190441B (zh) * | 2021-04-26 | 2024-03-26 | 交叉信息核心技术研究院(西安)有限公司 | 一种链码测试种子生成方法、系统、设备及存储介质 |
CN113468053A (zh) * | 2021-07-02 | 2021-10-01 | 建信金融科技有限责任公司 | 一种应用系统的测试方法和装置 |
CN113468053B (zh) * | 2021-07-02 | 2022-11-15 | 中国建设银行股份有限公司 | 一种应用系统的测试方法和装置 |
CN113542034B (zh) * | 2021-07-28 | 2024-03-19 | 山石网科通信技术股份有限公司 | 网元信息处理系统、网元管理方法及装置 |
CN113542034A (zh) * | 2021-07-28 | 2021-10-22 | 山石网科通信技术股份有限公司 | 网元信息处理系统、网元管理方法及装置 |
CN113709174A (zh) * | 2021-09-03 | 2021-11-26 | 国网山东省电力公司电力科学研究院 | 一种电力监控系统网络漏洞热复现及修补方法 |
CN113709174B (zh) * | 2021-09-03 | 2023-04-18 | 国网山东省电力公司电力科学研究院 | 一种电力监控系统网络漏洞热复现及修补方法 |
CN114490314A (zh) * | 2021-12-08 | 2022-05-13 | 中国科学院信息工程研究所 | 一种覆盖率引导的虚拟网络设备模糊测试的方法及装置 |
CN114840437A (zh) * | 2022-05-24 | 2022-08-02 | 中南大学 | 一种操作系统内核模糊测试种子评估分配方法 |
CN116069672A (zh) * | 2023-03-23 | 2023-05-05 | 中南大学 | 操作系统内核定向模糊测试的种子变异方法及测试方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112286823A (zh) | 一种操作系统内核的测试方法和装置 | |
Talebi et al. | Charm: Facilitating dynamic analysis of device drivers of mobile systems | |
EP4004738B1 (en) | Time-travel debugging with hot code replacement | |
US9063766B2 (en) | System and method of manipulating virtual machine recordings for high-level execution and replay | |
US8170859B1 (en) | Methods, apparatuses and computer program products for simulating arbitrary unmodified code | |
JP6297715B2 (ja) | コンピューティングデバイスの初期化トレース | |
US20100153924A1 (en) | Method and System for Performing Software Verification | |
EP4018319B1 (en) | Data preservation using memory aperture flush order | |
US20090320011A1 (en) | Accelerating replayed program execution to support decoupled program analysis | |
Kuo et al. | Set the configuration for the heart of the os: On the practicality of operating system kernel debloating | |
RU2451990C2 (ru) | Способ обработки объема данных, используемого во время фазы отладки функционального программного обеспечения системы, установленной на борту летательного аппарата, и устройство для его осуществления | |
Pfaff et al. | The pintos instructional operating system kernel | |
CN107368739B (zh) | 一种内核驱动的监视方法和装置 | |
Wang et al. | RSDS: Getting system call whitelist for container through dynamic and static analysis | |
Yang et al. | Uefi firmware fuzzing with simics virtual platform | |
Klemperer et al. | High-performance memory snapshotting for real-time, consistent, hypervisor-based monitors | |
US7752030B2 (en) | Virtualization as emulation support | |
Dakic et al. | Mastering KVM Virtualization: Design expert data center virtualization solutions with the power of Linux KVM | |
Campos et al. | On configuring a testbed for dependability experiments: Guidelines and fault injection case study | |
Rechert et al. | Towards a Risk Model for Emulation-based Preservation Strategies: A Case Study from the Software-based Art Domain | |
US11947420B2 (en) | Hardware memory error tolerant software system | |
CN114064212B (zh) | Pci设备的访问地址跟踪方法、设备及计算机可读存储介质 | |
KR102494791B1 (ko) | 컨테이너 환경에서 알려지지 않은 바이너리 검사 및 차단 방법 및 장치 | |
Sironi et al. | Capturing information flows inside android and qemu environments | |
Campos et al. | A Dataset of Linux Failure Data for Dependability Evaluation and Improvement |
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 |