漏洞检测方法及装置、电子设备与流程

文档序号:32055968发布日期:2022-11-04 21:25阅读:86来源:国知局
漏洞检测方法及装置、电子设备与流程

1.本公开涉及模糊测试技术,更具体地讲,涉及漏洞检测方法及装置、电子设备。


背景技术:

2.目前,从linux系统暴露出的漏洞来看,43.9%来源于设备驱动,而设备驱动代码在linux总代码中占比约73.4%,所以如何有效的对设备驱动进行漏洞挖掘是非常重要的。为了检测设备驱动的漏洞,提出了针对设备驱动的模糊测试,其目的在于利用设备驱动对外接口相互依赖的特性,来更有效的发现其中的漏洞。但是由于设备驱动调用接口之间的强依赖关系,目前的模糊测试方法不能够很深入的对其进行测试。如,设备驱动在实际应用场景中,通常需要多个系统调用配合使用,这些系统调用之间有着严格的调用顺序,且待处理的目标数据必须是指定的格式(如指定格式的视频文件)才能调用成功。在这种场景下,当前的模糊测试方法就会存在以下问题:
3.1.系统调用之间存在复杂依赖关系,而目前的模糊测试方法随机生成的系统调用序列很难满足这种依赖关系,也就是说随机生成的系统调用序列的调用顺序不可控,满足设备驱动正常运行所需的调用顺序的概率很小,所以很难覆盖到深层次的处理逻辑,导致测试一直停留在浅层的处理逻辑中,无法发现更深层次的漏洞。
4.2.在某些复杂系统调用序列中,对每一个系统调用的输入参数有严格的要求。如果输入参数没有满足要求,也会导致测试一直停留在浅层的处理逻辑中,无法发现更深层次的漏洞。


技术实现要素:

5.本公开提供了一种漏洞检测方法及装置、电子设备,以至少解决上述相关技术的模糊测试方法很难检测到设备驱动更深层次的漏洞的问题。
6.根据本公开示例性实施方式的第一方面,提供一种漏洞检测方法,包括:获取目标测试程序,其中,目标测试程序包含设备驱动正常运行所需的系统调用和系统调用对应的输入参数,系统调用按设备驱动正常运行的调用关系排列;获取一个序列作为待插入序列,其中,序列包括至少一个系统调用;基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异;基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞。
7.可选地,目标测试程序为针对设备驱动提供的功能测试程序或预先自定义的满足设备驱动正常运行的测试程序。
8.可选地,基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异,包括:将待插入序列和待插入序列对应的输入参数随机插入目标测试程序中,得到变异后的目标测试程序;或,对待插入序列和/或待插入序列对应的输入参数进行变异;将变异后的待插入序列和/或变异后的输入参数随机插入目标测试程序中,得到变异后的目标测试程序。
9.可选地,在基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异之前,还包括:基于待插入序列所需的参数类型,随机生成待插入序列对应的输入参数;或,将符合待插入序列所需的参数类型的预先设定参数作为待插入序列对应的输入参数。
10.可选地,在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,还包括:在运行信息指示设备驱动异常退出的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致或者导致设备驱动异常退出的异常行为信息符合预设条件的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
11.可选地,在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,还包括:在运行信息指示设备驱动正常结束的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
12.根据本公开示例性实施方式的第二方面,提供一种漏洞检测装置,包括:程序获取单元,被配置为获取目标测试程序,其中,目标测试程序包含设备驱动正常运行所需的系统调用和系统调用对应的输入参数,系统调用按设备驱动正常运行的调用关系排列;序列获取单元,被配置为获取一个序列作为待插入序列,其中,序列包括至少一个系统调用;变异单元,被配置为基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异;检测单元,被配置为基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞。
13.可选地,目标测试程序为针对设备驱动提供的功能测试程序或预先自定义的满足设备驱动正常运行的测试程序。
14.可选地,变异单元,还被配置为将待插入序列和待插入序列对应的输入参数随机插入目标测试程序中,得到变异后的目标测试程序;或,对待插入序列和/或待插入序列对应的输入参数进行变异;将变异后的待插入序列和/或变异后的输入参数随机插入目标测试程序中,得到变异后的目标测试程序。
15.可选地,变异单元,还被配置为在基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异之前,基于待插入序列所需的参数类型,随机生成待插入序列对应的输入参数;或,将符合待插入序列所需的参数类型的预先设定参数作为待插入序列对应的输入参数。
16.可选地,检测单元,还被配置为在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,在运行信息指示设备驱动异常退出的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致或者导致设备驱动
异常退出的异常行为信息符合预设条件的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
17.可选地,检测单元,还被配置为在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,在运行信息指示设备驱动正常结束的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
18.根据本公开示例性实施方式的第三方面,提供一种存储有计算机程序的计算机可读存储介质,其中,当所述计算机程序被处理器执行时,实现本公开所述的漏洞检测方法。
19.根据本公开示例性实施方式的第四方面,提供一种电子设备,包括:至少一个处理器;至少一个存储计算机可执行指令的存储器,其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行本公开所述的漏洞检测方法。
20.利用本公开的技术方案,提供了一种漏洞检测方法及装置、电子设备,引入目标测试程序,其包括设备驱动正常运行所需的系统调用和输入参数且系统调用按所述设备驱动正常运行的调用关系排列,由于目标测试程序中系统调用的调用顺序是符合设备驱动正常运行的逻辑的,可以保证每次目标测试程序运行时,设备驱动都可以达到深层代码,而在目标测试程序的运行过程中随机插入一个序列,由于目标测试程序可以保证设备驱动运行到深层代码,这样可以避免相关技术随机生成的测试序列所导致的设备驱动达到深层代码的概率小的问题,比较容易找到设备驱动的更深层次的漏洞,同时也不会遗漏设备驱动浅层次的漏洞。
21.将在接下来的描述中部分阐述本公开总体构思另外的方面和/或优点,还有一部分通过描述将是清楚的,或者可以经过本公开总体构思的实施而得知。
附图说明
22.通过下面结合示例性地示出实施例的附图进行的描述,本公开的示例性实施例的上述和其他目的和特点将会变得更加清楚,其中:
23.图1是相关技术中模糊测试的示意图;
24.图2是根据本公开的示例性实施方式的漏洞检测方法的流程图;
25.图3是根据本公开的示例性实施方式的漏洞检测方法的完整架构图;
26.图4是根据本公开的示例性实施方式的漏洞检测方法的流程示意图;
27.图5是根据本公开的示例性实施方式的漏洞检测装置的框图。
具体实施方式
28.提供下面的具体实施方式以帮助读者获得对在此描述的方法、设备和/或系统的全面理解。然而,在理解本技术的公开之后,在此描述的方法、设备和/或系统的各种改变、修改和等同物将是清楚的。例如,在此描述的操作的顺序仅是示例,并且不限于在此阐述的那些顺序,而是除了必须以特定的顺序发生的操作之外,可如在理解本技术的公开之后将是清楚的那样被改变。此外,为了更加清楚和简明,本领域已知的特征的描述可被省略。
29.在此描述的特征可以以不同的形式来实现,而不应被解释为限于在此描述的示例。相反,已提供在此描述的示例,以仅示出实现在此描述的方法、设备和/或系统的许多可行方式中的一些可行方式,所述许多可行方式在理解本技术的公开之后将是清楚的。
30.在此使用的术语仅用于描述各种示例,并不将用于限制公开。除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。术语“包含”、“包括”和“具有”说明存在叙述的特征、数量、操作、构件、元件和/或它们的组合,但不排除存在或添加一个或多个其他特征、数量、操作、构件、元件和/或它们的组合。
31.除非另有定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与由本公开所属领域的普通技术人员在理解本公开之后通常理解的含义相同的含义。除非在此明确地如此定义,否则术语(诸如,在通用词典中定义的术语)应被解释为具有与它们在相关领域的上下文和本公开中的含义一致的含义,并且不应被理想化或过于形式化地解释。
32.此外,在示例的描述中,当认为公知的相关结构或功能的详细描述将引起对本公开的模糊解释时,将省略这样的详细描述。
33.为了更好的理解本公开方案,下面简单对模糊测试进行介绍,模糊测试主要分为三个模块,如图1所示:种子管理模块,输入生成与执行模块,监控模块。
34.1)种子管理模块:如果在设备驱动中运行一个随机生成的系统调用序列,运行过程中覆盖了新的代码,也就是出现了与之前运行过程中运行的代码不一致的代码,则该系统调用序列会被放入种子输入队列,用于下一次测试,以便进行更充分的测试。
35.2)输入生成与执行模块:为了覆盖更多代码,可以对种子进行序列和参数随机变异,并在设备驱动中运行变异后的序列和参数。
36.3)监控模块:监控代码的覆盖情况及系统异常行为情况。
37.目前大部分的研究主要集中在如何优化种子管理及系统调用序列的生成两个部分,但是,上述研究仍旧不能克服模糊测试方法很难检测到设备驱动更深层次的漏洞的问题。
38.针对上述问题,根据本公开示例性实施方式的一个方面,提供一种漏洞检测方法。图2是根据本公开的示例性实施方式的漏洞检测方法的流程图。参照图2,该漏洞检测方法包括如下步骤:
39.在步骤s201中,获取目标测试程序,其中,目标测试程序包含设备驱动正常运行所需的系统调用和系统调用对应的输入参数,系统调用按设备驱动正常运行的调用关系排列。这里需要说明下系统调用,系统调用可看作是应用程序与操作系统之间的接口,由操作系统提供的系统调用被称为程序接口或应用编程接口(application programming interface,缩写为api)。
40.在本步骤中,为了避免相关技术中随机生成的系统调用序列来测试设备驱动,本公开可以获取一个目标测试程序测试设备驱动,该目标测试程序包含了设备驱动正常运行所需的系统调用和系统调用对应的输入参数,系统调用按设备驱动正常运行的调用关系排列,可以保证在目标测试程序运行时,设备驱动可以达到深层代码。
41.在本公开的实施例中,目标测试程序可以是针对设备驱动提供的功能测试程序或预先自定义的满足设备驱动正常运行的测试程序。根据本实施例,目标测试程序可以是功能测试程序,也可以是根据需要设定的自定义程序,提高了本公开的通用性。
42.例如,上述目标测试程序可以是针对所述设备驱动提供的功能测试程序,也可以是预先自定义的满足设备驱动正常运行的测试程序。如设备驱动上层的用户层应用程序、正常序列的简化模糊模型,或基于简化模糊模型开发的更多场景化的测试程序。再例如,目标测试程序是功能测试程序时,可以是一个完整的功能测试程序,也可以是完整的功能测试程序的一部分即子序列,但提取出的子序列的运行顺序必须和在功能测试程序中的运行顺序是一样的。
43.在步骤s202中,获取一个序列作为待插入序列,其中,序列包括至少一个系统调用。
44.在本公开的实施例中,可以通过以下任一种方式获取一个序列作为待插入序列:从预先配置文件中获取一个序列作为待插入序列;从输入队列中获取一个序列作为待插入序列。根据本实施例,随机获取的序列可以从输入队列中获取,也可以从配置文件中获取,为测试提供丰富待插入序列。
45.例如,上述预先配置文件为根据需要预先配置的。示例地,在刚开始输入队列为空时,可以先从预先配置文件中获取待插入序列;当输入队列不为空时,可以根据预设规则从预先配置文件或输入队列中获取待插入序列,如,可以依次交叉的从预先配置文件或输入队列中获取待插入序列,本公开对预设规则不进行限定。上述输入队列可以是一个集合,其包含了导致设备驱动发生异常退出的序列或者出现与之前运行过程中的运行的代码不一致的代码的序列,后面会详细说明,此处不再展开论述。
46.在步骤s203中,基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异。本步骤可以作为对设备驱动的测试的开始步骤,即获取目标测试程序步骤可以预先实现,当需要对设备驱动进行测试时,才开始本步骤,也即本步骤是响应于目标测试程序对设备驱动的测试而发生的。
47.具体地,在目标测试程序运行时,由于目标测试程序包含设备驱动正常运行所需的系统调用和系统调用对应的输入参数,且系统调用按所述设备驱动正常运行的调用关系排列,因此可以保证每次测试设备驱动时,设备驱动都可以正常运行,即每次运行目标测试程序时设备驱动都可以达到深层代码,避免了随机生成的系统调用序列的顺序不确定,无法使设备驱动达到深层代码。由于目标测试程序可以保证设备驱动运行到深层代码,在目标测试程序运行的过程中随机插入待插入序列和相应的输入参数,从而可以找到设备驱动更深层次存在的漏洞,同时也可以不遗漏浅层次存在的漏洞。
48.在本公开的实施例中,在基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异之前,所述漏洞检测方法还可以包括:基于待插入序列所需的参数类型,随机生成待插入序列对应的输入参数;或,将符合待插入序列所需的参数类型的预先设定参数作为待插入序列对应的输入参数。根据本实施例,输入参数可以随机生成,也可以预先定义,以便可以提供丰富的输入参数。需要说明的是,上述输入参数不管是随机生成的还是预先设定参数,其类型都需要和待插入序列所需的参数类型相匹配。
49.在本公开的实施例中,基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异,可以包括:将待插入序列和待插入序列对应的输入参数随机插入目标测试程序中,得到变异后的目标测试程序;或,对待插入序列和/或待插入序列对应的输入参数进行变异;将变异后的待插入序列和/或变异后的输入参数随机插入目标测试程序中,得
到变异后的目标测试程序。根据本实施例,通过随机插入待插入序列和待插入序列对应的输入参数,可以方便、快速的获取变异后的目标测试程序,而且对待插入序列和输入参数先进行一次变异,可以进一步丰富测试样本。需要说明的是,上述变异方法本公开对此并不进行限定,可以采用已有的任何变异方法。
50.在步骤s204中,基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞。
51.在本公开的实施例中,基于变异后的目标测试程序运行时设备驱动中的运行信息,检测设备驱动的漏洞,可以包括:获取变异后的目标测试程序运行时设备驱动的运行信息;在运行信息指示设备驱动异常退出的情况下,获取导致变异后的目标测试程序异常退出的异常行为信息;基于变异后的目标测试程序和异常行为信息,确定设备驱动的漏洞。根据本实施例,可以基于异常行为信息和目标测试程序中的运行信息方便、快速的确定漏洞。例如,在设备驱动运行过程中异常退出,可以监控设备驱动是否存在内存错误等问题,如内存越界读写和释放后引用,此时可以记录导致异常退出的异常行为,同时结合收集的序列信息(如变异后的目标测试程序所包含的序列)对设备驱动的漏洞进行分析,开发相应的proof of concept(poc)程序。
52.在本公开的实施例中,在基于所述变异后的目标测试程序运行时所述设备驱动的运行信息,检测所述设备驱动的漏洞之后,所述漏洞检测方法还可以包括:在运行信息指示设备驱动异常退出的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致或者导致设备驱动异常退出的异常行为信息符合预设条件的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。根据本实施例,设置了输入队列,在程序异常退出时,则将变异后的待插入序列放入输入队列,以便后续可以用来服务该设备驱动下一次测试。
53.例如,可以基于运行信息监控变异后的目标测试程序运行时设备驱动运行情况,当发现设备驱动异常退出时,可以收集设备驱动运行过程中对代码的覆盖信息,当覆盖信息指示所述运行过程中被运行的代码与之前运行过程中被运行的代码不一致时,也即设备驱动中有新代码被运行,这里的新代码指的是前面运行过程中从未被运行过的代码,则将该变异后的待插入序列加入到输入队列中,以便后续对其做进一步的变异用来测试设备驱动;当覆盖信息指示所述运行过程中被运行的代码与之前运行过程中被运行的代码一致时,则将该变异后的待插入序列进行丢弃。另外,在设备驱动异常退出时,当记录的异常行为信息符合预设条件(如内存越界读写和释放后引用)时,也将此次变异后的待插入序列加入到输入队列中,以便后续对其做进一步的变异用来测试设备驱动。
54.在本公开的实施例中,在基于所述变异后的目标测试程序运行时所述设备驱动的运行信息,检测所述设备驱动的漏洞之后,所述漏洞检测方法还可以包括:在运行信息指示变异设备驱动正常结束的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用
于下一个待插入序列。根据本实施例,设置了输入队列,在程序运行正常结束时,如果有新的代码被运行了,说明该变异后的待插入序列带来有效的测试,此时则将其放入输入队列,以便后续可以用来服务该设备驱动下一次测试。
55.例如,在基于运行信息监控变异后的目标测试程序运行时设备驱动运行情况时,发现设备驱动运行正常结束,此时也需要收集变异后的目标测试程序运行过程中对设备驱动的代码的覆盖信息,当覆盖信息指示所述运行过程中被运行的代码与之前运行过程中被运行的代码不一致时,也即设备驱动中有新代码被运行,这里的新代码指的是前面运行过程中从未被运行过的代码,则将该变异后的待插入序列加入到输入队列中,以便后续对其做进一步的变异用来测试设备驱动;当覆盖信息指示所述运行过程中被运行的代码与之前运行过程中被运行的代码一致时,则将该变异后的待插入序列进行丢弃。因为在程序运行正常结束时,如果有新代码被运行了,说明该变异后的待插入序列带来有效的测试,此时则将其放入输入队列,以便后续可以用来服务该设备驱动下一次测试。
56.下面结合图3和图4对上述实施例进行详细论述,图3是根据本公开的示例性实施方式的漏洞检测方法的完整架构图,图4是根据本公开的示例性实施方式的漏洞检测方法的流程示意图。如图3所示,本公开实施例的架构可以包括模糊管理模块、生成与执行模块和监控反馈模块:
57.1)模糊管理模块。该模块可以包含管理单元和输入队列,其中,管理单元的功能包括:将收集到的序列信息(如变异后的目标测试程序所包含的序列)以及覆盖信息存储到输入队列中;管理生成与执行模块中的随机序列单元和功能序列单元的运行;将监控反馈模块中的异常行为收集单元收集到的异常行为进行记录,为后续生成proof of concept(poc)提供参考。
58.2)生成与执行模块。该模块可以包含随机序列单元和功能序列单元,其中,随机序列单元的功能是根据上述管理单元传送过来的序列,也即从输出队列中随机选取的序列,对该序列进行变异并生成相应的输入参数;功能序列单元的功能是由管理单元进行调度,保证功能测试程序持续不断的运行,以便每次运行设备驱动都可以达到深层代码。需要说明的是,在本实施例中,该模块包含功能测试程序以及功能测试程序运行所需的输入参数。
59.3)监控反馈模块。该模块包含序列监控单元,覆盖率收集单元和异常行为收集单元,其中,序列监控单元主要作用有两个:当生成与执行模块运行在单核模式下时,可以直接获取导致设备驱动异常的序列,后续可利用该序列生成相应的poc程序来验证异常;当生成与执行模块运行在多核模式下时,该模块主要记录当前执行的插入了随机序列的功能测试程序,当设备驱动出现异常时,该随机序列可为后续开发相应的poc提供参考。覆盖率收集单元主要负责收集功能测试程序运行过程中对设备驱动代码的覆盖信息,当覆盖信息指示所述运行过程中被运行的代码与之前运行过程中被运行的代码不一致时,将该变异后的随机序列加入到输入队列中,以便后续对其做进一步的变异用来测试设备驱动;当覆盖信息指示与之前运行过程中被运行的代码一致时,将该变异后的随机序列进行丢弃。异常行为收集单元主要监控设备驱动异常退出时是否存在内存错误等问题,例如内存越界读写和释放后引用,当发生该异常行为时,将此次变异后的随机序列加入到输入队列中,以便后续对其做进一步的变异用来测试设备驱动,同时将异常行为进行记录,为后续开发poc提供参考。
60.如图4所示,在图3所示的架构上,本公开提供了一种利用在功能测试程序中插入随机序列和输入参数来构造模糊测试的输入的方法,通过运行功能测试程序,能让设备驱动处于一个正常执行的深度和多样性状态,目的在于保证可以通过功能测试程序中的各种复杂严格的校验,包括参数,格式,操作顺序等满足设备驱动对输入参数等的严格校验,然后,在功能测试程序运行过程中,引入随机序列和相应的输入参数去扰乱其正常处理流程,这样就可以在更深层的代码中发现更多的漏洞。具体实施步骤可以如下:
61.1)模糊管理模块控制功能序列单元的执行,当其执行过程中出错时需要控制功能序列单元重新恢复执行,目的是使该单元中的功能测试程序持续不断的运行;
62.2)模糊管理模块从输入队列中随机选取序列并传递给随机序列单元,随机序列单元对该序列和输入参数进行变异并传递给设备驱动,随机插入上述功能测试程序,以便在设备驱动中执行随机插入序列后的功能测试程序;
63.3)在执行过程中,监控反馈模块(如,序列监控单元,覆盖率收集单元)会将执行过程中代码的覆盖信息以及序列信息传递给模糊管理模块,如果此次执行使得覆盖信息指示所述执行过程中被运行的代码与之前运行过程中被运行的代码不一致,则将此次随机序列单元中变异后的序列加入到输入队列中;如果此次执行中异常行为收集单元发现有异常行为,也即异常识别反馈有异常行为,如内存错误等问题,将其反馈给模糊管理模块,则此次随机序列单元中变异后的序列也会加入到输入队列中,以便后续会对输入队列中的序列进行更多次的调用和变异;
64.4)如果设备驱动发生异常,如异常识别反馈有异常行为,此时可以结合收集的序列信息以及异常行为对设备驱动的漏洞进行分析,开发相应的poc程序;
65.5)以上步骤循环往复进行,直到找到漏洞或者测试停止为止。
66.综上,本公开通过将现有设备商提供的功能测试程序加以利用,利用此功能测试程序提供已有的系统调用的顺序和参数,让设备驱动处于一个有效的设备驱动状态,解决了随机的系统调用和参数很难覆盖到设备驱动深层次的处理逻辑的问题。然后在此功能测试程序执行过程中,随机插入一个错误的序列去扰乱其正常处理流程,这里的错误既可以指错误的输入参数,也可以是错误的调用顺序,使得原有的处理过程容易触发异常,这样就可以覆盖到设备驱动更深层代码,发现更多的漏洞。
67.根据本公开示例性实施方式的另一个方面,提供了一种漏洞检测装置。图5是根据本公开的示例性实施方式的漏洞检测装置的框图。参照图5,该漏洞检测装置包括:
68.程序获取单元50,被配置为获取目标测试程序,其中,目标测试程序包含设备驱动正常运行所需的系统调用和系统调用对应的输入参数,系统调用按设备驱动正常运行的调用关系排列;序列获取单元52,被配置为获取一个序列作为待插入序列,其中,序列包括至少一个系统调用;变异单元54,被配置为基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异;检测单元56,被配置为基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞。
69.在本公开的实施例中,目标测试程序为针对设备驱动提供的功能测试程序或预先自定义的满足设备驱动正常运行的测试程序。
70.在本公开的实施例中,变异单元54,被配置为将待插入序列和待插入序列对应的输入参数随机插入目标测试程序中,得到变异后的目标测试程序;或,对待插入序列和/或
待插入序列对应的输入参数进行变异;将变异后的待插入序列和/或变异后的输入参数随机插入目标测试程序中,得到变异后的目标测试程序。
71.在本公开的实施例中,变异单元54,还被配置为在基于待插入序列和待插入序列对应的输入参数,对目标测试程序进行变异之前,基于待插入序列所需的参数类型,随机生成待插入序列对应的输入参数;或,将符合待插入序列所需的参数类型的预先设定参数作为待插入序列对应的输入参数。
72.在本公开的实施例中,检测单元56,还被配置为在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,在运行信息指示设备驱动异常退出的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示与所述运行过程中所述设备驱动的代码中的被运行的代码之前运行过程中所述设备驱动的代码中的被运行的代码不一致或者导致设备驱动异常退出的异常行为信息符合预设条件的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
73.在本公开的实施例中,检测单元56还被配置为在基于变异后的目标测试程序运行时设备驱动的运行信息,检测设备驱动的漏洞之后,在运行信息指示设备驱动正常结束的情况下,获取待插入序列对应的覆盖信息,其中,覆盖信息为变异后的目标测试程序运行过程中,设备驱动的代码被运行的信息;在覆盖信息指示所述运行过程中所述设备驱动的代码中的被运行的代码与之前运行过程中所述设备驱动的代码中的被运行的代码不一致的情况下,将变异后的待插入序列加入输入队列,其中,输入队列用于下一个待插入序列。
74.应该理解,根据本公开的示例性实施方式的漏洞检测方法和装置中的各个单元/模块可被实现为硬件组件和/或软件组件。本领域技术人员根据限定的各个单元/模块所执行的处理,可以例如使用现场可编程门阵列(fpga)或专用集成电路(asic)来实现各个单元/模块。
75.根据本公开示例性实施例的再一个方面,提供一种存储有计算机程序的计算机可读存储介质,其中,当所述计算机程序被处理器执行时,实现本公开所述的漏洞检测方法。
76.具体地,根据本公开的示例性实施例的漏洞检测方法可被编写为计算机程序、代码段、指令或它们的任何组合,并被记录、存储或固定在一个或多个非暂时性计算机可读存储介质中或一个或多个非暂时性计算机可读存储介质上。所述计算机可读存储介质是可存储由计算机系统读出的数据的任意数据存储装置。计算机可读存储介质的示例包括:只读存储器、随机存取存储器、只读光盘、磁带、软盘、光数据存储装置和载波(诸如经有线或无线传输路径通过互联网的数据传输)。
77.根据本公开示例性实施例的又一个方面,提供一种电子设备,其中,所述电子设备包括:至少一个处理器;至少一个存储计算机可执行指令的存储器,其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行本公开所述的漏洞检测方法。
78.具体地,所述电子设备可以广义地为平板电脑、智能手机、智能手表,或任何其他具有必要的计算和/或处理能力的电子设备。在一个实施例中,该电子设备可包括通过系统总线连接的处理器、存储器、网络接口、通信接口等。该电子设备的处理器可用于提供必要的计算、处理和/或控制能力。该电子设备的存储器可包括非易失性存储介质和内存储器。
该非易失性存储介质中或上可存储有操作系统、计算机程序等。该内存储器可为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口和通信接口可用于与外部的设备通过网络连接和通信。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1