1.本说明书一个或多个实施例涉及网络安全技术领域,尤其涉及一种应用软件漏洞扫描方法及相关设备。
背景技术:
2.随着计算机技术、网络技术的飞速发展和普及,网络安全已日渐成为人们关注的焦点问题之一。近几年来,各种线上应用的不断发展,越来越多的用户需求需要得到满足,随之而来的其程序源代码的规模也不断增大,同时由于程序开发时出现的高耦合性,使得易被利用的安全漏洞、代码后门也不再局限于过去的形式,这大大增加了使用传统方法检测源代码中安全漏洞的难度。因此,如何有效提高当前检测源代码漏洞的效率变成了亟待解决的问题
3.保障应用软件安全的最好方法,就是从其源代码入手进行检测和分析,既可以确保应用软件不被设立后门,也可以提前发现并解决潜在的漏洞安全威胁。灰盒测试是目前常见的源代码缺陷测试技术之一,该方法的主要特点是检测效率比白盒测试更高,从程序的整体出发,而非陷入程序的细节,同时具有一定的先验知识,比黑盒测试更加关注程序的内部逻辑,常常会通过一些表征性的现象、事件、标志来判断内部的运行状态。
4.目前主流的模糊测试器在测试种子的选择中没有较好的方法,这会导致后续模糊测试的效率降低,同时在对测试种子进行变异时,缺乏良好的变异调度策略会导致模糊测试器在调用变异方法时,对于能产生较多新路径的变异方法和产生新路径较低的变异方法没有足够的区分对待。因此,现有的模糊测试器在对应用软件进行模糊测试时没有一个令人满意的效率。
技术实现要素:
5.有鉴于此,本说明书一个或多个实施例在于提出一种应用软件漏洞扫描方法及相关设备,以解决检测应用软件漏洞时效率低的问题。
6.基于上述目的,本说明书一个或多个实施例提出了一种应用软件漏洞扫描方法,包括:
7.获取所述应用软件的程序源代码和程序基本信息;
8.对所述程序源代码进行插桩;
9.通过所述程序基本信息与程序信息数据库进行匹配,得到测试种子;
10.根据预先设定的变异策略对所述测试种子进行变异,得到第一测试用例;
11.通过所述第一测试用例对所述程序源代码进行预设轮数测试,得到所述应用软件的崩溃结果;
12.根据所述应用软件的崩溃结果确定所述应用软件的漏洞。
13.进一步,所述通过所述第一测试用例对所述程序源代码进行预设轮数测试,包括:
14.利用所述第一测试用例对所述程序源代码进行第一轮测试;
15.获取基于边和块的代码覆盖率;
16.根据所述代码覆盖率,得到产生新路径的变异策略;
17.在进行下一轮测试时增加产生新路径的变异策略的调度次数;
18.基于产生新路径的变异策略对所述测试种子进行变异,以得到第二测试用例;
19.利用所述第二测试用例对所述程序源代码进行新一轮测试,并返回步骤所述获取基于边和块的代码覆盖率的步骤继续执行,直至达到所述预设轮数。
20.进一步,所述根据所述应用软件的崩溃结果确定所述应用软件的漏洞,之后还包括:
21.获取所述应用软件崩溃时操作系统内核函数产生的第一崩溃信号;
22.基于所述程序基本信息,确定所述程序源代码发生崩溃时相应产生的第二崩溃信号;
23.响应于确定所述第一崩溃信号与所述第二崩溃信号相同,所述崩溃结果为程序源代码漏洞。
24.进一步,所述程序基本信息包括编程语言类型、编程框架、面向工作类型中的一项或者多项。
25.进一步,通过所述程序基本信息与程序信息数据库进行匹配,得到测试种子,包括:
26.所述程序信息数据库基于所述应用程序的所述编程语言类型、所述编程框架以及所述面向工作类型中的一项,选择相应的种子作为所述测试种子;或者
27.所述程序信息数据库基于所述应用程序的所述编程语言类型、所述编程框架以及所述面向工作类型中的多项,分别选择相应的种子并取交集作为所述测试种子。
28.进一步,所述变异策略包括加、乘、字节翻转、位翻转、以及字节设置中的一项或者多项。
29.进一步,所述对所述程序源代码进行插桩,包括:
30.对所述程序源代码进行词法分析和语法分析获得关键代码的位置;
31.在所述关键代码的位置插入探针。
32.基于同一发明构思,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一项所述的方法。
33.基于同一发明构思,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一所述方法。
34.从上面可以看出,本说明书一个或多个实施例提供的应用软件漏洞扫描方法及相关设备,通过程序基本信息与程序信息数据库匹配得到对应的测试种子,此时的测试种子对测试应用软件更具针对性,同时循环的代码覆盖率反馈机制可不断提高代码覆盖率,漏洞检测的效率有显著的提升。
附图说明
35.为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将
对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
36.图1为本说明书一个或多个实施例的应用软件漏洞扫描方法流程图;
37.图2为本说明书一个或多个实施例的应用软件漏洞扫描方法的进行预设轮数测试流程图;
38.图3为本说明书一个或多个实施例的电子设备结构示意图。
具体实施方式
39.为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
40.需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
41.如背景技术部分所述,现有的应用软件漏洞扫描方法在检测效率上还难以满足需要。申请人在实现本公开的过程中发现,现有的应用软件漏洞扫描方法主要存在的问题在于:在测试种子的选择中没有较好的方法,会导致对应用软件进行模糊测试的效率变低;并且没有良好的变异策略对产生较多新路径的变异方法和产生较少新路径的变异方法进行筛选,进一步降低对应用软件进行模糊测试的效率。
42.为了解决上述技术问题,结合图1,本说明书一个或多个实施例提供了一种应用软件扫描方法,该方法可以由模糊测试器执行,包括以下步骤:
43.步骤s101:获取应用软件的程序源代码和程序基本信息。
44.本步骤中,可通过代码托管平台(github)中的get命令直接将应用软件的项目文件拉取到模糊测试器对应的输入文件夹下,进而获得程序源代码;或者通过因特网下载应用软件的程序源代码,并将存放程序源代码的路径输入模糊测试器中。
45.上述程序基本信息包括编程语言类型、编程框架、面向工作类型中的一项或多项。
46.步骤s102:对所述程序源代码进行插桩。
47.本步骤中,可以通过模糊测试器提供的编译器进行编译,编译过程中可对程序源代码进行词法分析和语法分析获得具体关键代码的位置,在不改变被测程序源代码原有逻辑完整性的前提下在关键代码的位置上插入探针,用来进行信息的采集,对程序源代码进行插桩是为了方便后续的代码覆盖率统计。
48.步骤s103:通过程序基本信息与程序信息数据库进行匹配,得到测试种子。
49.本步骤中,利用步骤s101中获取的程序基本信息,在程序信息数据库中根据应用的编程语言类型、编程框架、面向工作类型中的一项或者多项选择对应的测试种子。
50.具体的,当应用程序的程序基本信息包括编程语言类型、编程框架以及面向工作类型中的一项时,直接将对应选择的种子作为测试种子;当应用程序的程序基本信息包括编程语言类型、编程框架以及面向工作类型中的多项时,分别选择相应的种子后取交集作为模糊测试所需要的的测试种子。
51.步骤s104:根据预先设定的变异策略对所述测试种子进行变异,得到第一测试用例。
52.本步骤中,上述变异策略包括加、乘、字节翻转、位翻转以及字节设置等中的一项或者多项。预先设定变异策略后,可避免模糊测试器随机选择变异策略,使变异后生成的测试用例更具针对性。
53.步骤s105:通过第一测试用例对程序源代码进行预设轮数测试,以得到所述应用软件的崩溃结果。
54.进一步地,结合图2,通过第一测试用例对程序源代码进行预设轮数测试,包括以下步骤:
55.步骤s201:利用所述第一测试用例对程序源代码进行第一轮测试。
56.本步骤中,具体是将第一测试用例的每一个元素,循环输入至已进行插桩的程序源代码中。
57.步骤s202:获取基于边和块的代码覆盖率。
58.本步骤中,通过插桩代码段进行获取基于边和块综合评价下的代码覆盖率。
59.步骤s203:根据代码覆盖率,得到产生新路径的变异策略。
60.本步骤中,可根据代码覆盖率和对应的变异策略形成的键值对,选择出产生新路径的变异策略,即选择出代码覆盖率高的变异策略。
61.步骤s204:在进行下一轮测试时增加产生新路径的变异策略的调度次数。
62.本步骤中,通过不同变异策略得到的测试用例,对程序源代码的测试完成后,所产生的代码覆盖率同样会存在差异;产生新路径的变异策略,也就是提高代码覆盖率的变异策略。因此在下一轮的测试中,需要增加产生新路径的变异策略的调度次数,目的是为了提高代码覆盖率。此外,增加的调度次数可根据实际情况进行选择,此处不做具体限定。
63.步骤s205:基于产生新路径的变异策略及相应的调度次数对测试种子进行变异,以得到第二测试用例。
64.本步骤中,增加字节翻转、加、乘、位翻转以及字节设置中已产生新路径的变异策略的调度次数,利用当前已分配调度次数的变异策略对测试种子进行变异后,得到能够进一步提升代码覆盖率的第二测试用例。
65.步骤s206:利用第二测试用例对程序源代码进行新一轮测试,并返回步骤s202继续执行,直至达到预设轮数。
66.本步骤中,经过预设轮数的测试后,代码覆盖率不断进行调优,最终收敛为在预设轮数内最高的代码覆盖率,以获得更多的崩溃结果。
67.步骤s106:根据所述应用软件的崩溃结果确定所述应用软件的漏洞。
68.下面,给出本实施例的应用软件漏洞扫描方法的一个具体的应用场景。应用程序为libtiff,是用于读写标签图像文件格式的库,通过因特网下载libtiff的应用程序源代码,libtiff的编程语言类型为c语言,还使用jpeg库和tiff库,其面向工作类型是图形、图
像处理。利用模糊测试器提供的编译器对libtiff程序源代码进行编译,在程序源代码中各个关键元组进行插桩。进一步,程序信息数据库通过c语言,图形、图像处理这些关键词匹配种子,其中c语言编程更面向底层,根据这个特征选中一些容易触发操作系统底层机制的种子,而jpeg库和tiff库是针对图片完成操作,相应的程序信息数据库会根据这一特征选中相应的图片种子,将根据以上两种特征检索到的种子取交集作为测试种子。利用加、乘、字节翻转、位翻转、以及字节设置对测试种子进行变异,得到第一测试用例。接下来对程序源代码测试20轮,利用第一测试用例对libtiff的程序源代码进行第一轮测试,通过插桩代码段获取基于边和块综合评价下的代码覆盖率,根据此时的代码覆盖率和相应的变异策略形成的键值对,选择出产生新路径的变异策略;并增加进行下一轮测试中产生新路径的变异策略的调度次数。进一步,基于产生新路径的变异策略和相应的调度次数对测试种子再次进行变异,得到第二测试用例,并利用第二测试用例对程序源代码进行新一轮的测试,再转到获取基于边和块综合评价下的代码覆盖率循环执行操作,直至完成20轮测试,最终得到libtiff的崩溃结果,最终根据libtiff的崩溃结果确定libtiff的漏洞。
69.在本公开的一个或多个实施例中,上述步骤中根据所述应用软件的崩溃结果确定所述应用软件的漏洞还可以包括:
70.获取应用软件崩溃时操作系统内核函数产生的第一崩溃信号;
71.基于程序基本信息,确定程序源代码发生崩溃时相应产生的第二崩溃信号;
72.响应于确定第一崩溃信号与第二崩溃信号相同,所述崩溃结果为程序源代码漏洞。
73.可理解的是,通过判断应用软件崩溃时操作系统产生的第一崩溃信号和程序源代码自身产生的第二崩溃信号的一致性,进而确定此时的崩溃结果是否为程序代码漏洞,若一致则说明此时的崩溃结果属于程序代码漏洞,否则属于程序漏洞以外的其他漏洞,进一步提高了漏洞检测的效率。相应的,可通过第二崩溃信号的相关信息进行反推程序源代码中存在的信息安全漏洞。
74.由此可见,本说明书一个或多个实施例提供的应用软件漏洞扫描方法,根据不同应用软件的对应的程序基本信息,与程序信息数据库进行匹配,得到更具针对性的测试种子,减少无效的测试种子对检测效率的影响,提高漏洞检测效率,基于循环的代码覆盖率反馈机制在预设测试轮数内不断优化,大大提升了漏洞检测效率。同时,进一步比较分析漏洞为程序源代码漏洞或其他漏洞,提升了漏洞检测的准确率。
75.需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
76.需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
77.基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的应用软件漏洞扫描方法。
78.图3示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
79.处理器1010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
80.存储器1020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
81.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
82.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
83.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
84.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
85.上述实施例的电子设备用于实现前述任一实施例中相应的应用软件漏洞扫描方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
86.基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的应用软件漏洞扫描方法。
87.本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器
(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd
‑
rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
88.上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的应用软件漏洞扫描方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
89.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
90.另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
91.尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
92.本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
技术特征:
1.一种应用软件漏洞扫描方法,包括:获取所述应用软件的程序源代码和程序基本信息;对所述程序源代码进行插桩;通过所述程序基本信息与程序信息数据库进行匹配,得到测试种子;根据预先设定的变异策略对所述测试种子进行变异,得到第一测试用例;通过所述第一测试用例对所述程序源代码进行预设轮数测试,得到所述应用软件的崩溃结果;根据所述应用软件的崩溃结果确定所述应用软件的漏洞。2.根据权利要求1所述的方法,其中,所述通过所述第一测试用例对所述程序源代码进行预设轮数测试,包括:利用所述第一测试用例对所述程序源代码进行第一轮测试;获取基于边和块的代码覆盖率;根据所述代码覆盖率,得到产生新路径的变异策略;在进行下一轮测试时增加产生新路径的变异策略的调度次数;基于产生新路径的变异策略对所述测试种子进行变异,以得到第二测试用例;利用所述第二测试用例对所述程序源代码进行新一轮测试,并返回步骤所述获取基于边和块的代码覆盖率的步骤继续执行,直至达到所述预设轮数。3.根据权利要求1所述的方法,其中,所述根据所述应用软件的崩溃结果确定所述应用软件的漏洞,之后还包括:获取所述应用软件崩溃时操作系统内核函数产生的第一崩溃信号;基于所述程序基本信息,确定所述程序源代码发生崩溃时相应产生的第二崩溃信号;响应于确定所述第一崩溃信号与所述第二崩溃信号相同,所述崩溃结果为程序源代码漏洞。4.根据权利要求1所述的方法,其中,所述程序基本信息包括编程语言类型、编程框架、面向工作类型中的一项或者多项。5.根据权利要求4所述的方法,其中,通过所述程序基本信息与程序信息数据库进行匹配,得到测试种子,包括:所述程序信息数据库基于所述应用程序的所述编程语言类型、所述编程框架以及所述面向工作类型中的一项,选择相应的种子作为所述测试种子;或者所述程序信息数据库基于所述应用程序的所述编程语言类型、所述编程框架以及所述面向工作类型中的多项,分别选择相应的种子并取交集作为所述测试种子。6.根据权利要求1所述的方法,其中,所述变异策略包括加、乘、字节翻转、位翻转、以及字节设置中的一项或者多项。7.根据权利要求1所述的方法,其中,所述对所述程序源代码进行插桩,包括:对所述程序源代码进行词法分析和语法分析获得关键代码的位置;在所述关键代码的位置插入探针。8.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任意一项所述的方法。
9.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1至7任一所述方法。
技术总结
本公开的一个或多个实施例提供一种应用软件漏洞扫描方法及相关设备;所述方法包括:获取所述应用软件的程序源代码和程序基本信息;对所述程序源代码进行插桩;通过所述程序基本信息与程序信息数据库进行匹配,得到测试种子;根据预先设定的变异策略对所述测试种子进行变异,得到第一测试用例;通过所述第一测试用例对所述程序源代码进行预设轮数测试,得到所述应用软件的崩溃结果;根据所述应用软件的崩溃结果确定所述应用软件的漏洞。本方法提高了应用程序漏洞检测时的效率。高了应用程序漏洞检测时的效率。高了应用程序漏洞检测时的效率。
技术研发人员:张嘉玮 何跃鹰 张晓明 曹可建 杜鹏 孙中豪 罗冰 何连瑶 关广振 周雨晨 涂腾飞 王华伟 秦佳伟 崔栋
受保护的技术使用者:中时瑞安(北京)网络科技有限责任公司 北京邮电大学
技术研发日:2021.02.23
技术公布日:2021/6/29
转载请注明原文地址:https://doc.8miu.com/read-28463.html