一种基于模型的网络协议模糊测试系统及测试方法

文档序号:32992833发布日期:2023-01-17 23:45阅读:250来源:国知局
一种基于模型的网络协议模糊测试系统及测试方法

1.本发明涉及网络协议安全技术领域,特别涉及一种基于模型的网络协议模糊测试系统及测试方法。


背景技术:

2.随着现代科技的发展进步,互联网技术迅速发展。互联网技术的应用离不开网络通信协议,为了满足各种场景下的应用需求,人们设计并实现了各种各样的网络通信协议。网络通信协议的设计应保证其可靠性,不可靠的网络通信协议轻则影响通信质量,重则导致通信安全性丧失。网络通信协议规范或协议实现中的漏洞可能造成拒绝服务、信息泄露、代码执行等安全问题。
3.近年来,网络空间安全问题层出不穷。网络通信协议应用范围广,是互联网技术的基础之一,如果在网络通信协议中出现漏洞,就有可能被不法分子利用,造成严重的后果。因此,网络通信协议的可靠性至关重要。然而,随着需求的变化,网络通信协议的种类在增加,同一种网络通信协议也有着不同的实现,网络通信协议规范或协议实现出现漏洞的概率也越来越大。为了保证协议安全,对协议可靠性进行分析成为协议设计、实现过程中不可忽视的环节。网络通信协议的可靠性分析技术旨在使用软件安全分析技术对网络通信协议进行分析,发现网络通信协议中的错误或者验证网络通信协议的安全性,对于网络空间安全有重大意义。
4.网络通信协议规范由协议设计者们设计,如果要实际应用这些协议,需要软件开发者们按照协议规范编写代码,实现服务器、客户端等软件,这就是协议实现。直接对网络通信协议规范进行安全性分析是困难的,因为网络通信协议规范是一种抽象的概念。协议安全要保证协议规范是安全的,也要保证协议实现是安全的。安全的协议规范并不一定意味着安全的协议实现,因为软件开发者们在开发软件时,可能对协议规范的理解有偏差,也可能受限于自身的开发水平,也可能出现粗心大意等情况,即使协议规范是完全安全的,开发出来的软件也可能是不安全的。协议在实际应用过程中是以软件形式存在的,所以可以使用软件安全分析方法来分析协议安全。
5.模糊测试是目前软件安全分析中最有效的方法之一,模糊测试可以自动化生成测试用例,将测试用例送入目标程序执行,监测目标程序是否出现崩溃等非预期的行为。协议实现本质上是软件,所以可以使用模糊测试技术。尽管当前模糊测试技术在协议实现中可以发现漏洞,但是仍然存在困难,这是因为:(1)网络通信协议的状态空间大,当前模糊测试技术多数以代码覆盖率为导向,并不关注状态覆盖率,这使得现有的技术难以发现状态空间深处的复杂错误。(2)网络通信协议只能处理特定结构的消息,模糊测试在生成测试用例时存在随机性,测试过程中容易生成大量无效测试用例,导致大量的时间用于运行无效的测试用例,测试效率低下。(3)基于代码覆盖率的模糊测试需要在编译时对代码进行插桩,插桩后的程序在运行时可以记录代码覆盖率信息并进行反馈。然而,这种方法只适用于开源协议实现,对于闭源协议实现则无法在编译时进行插桩。


技术实现要素:

6.为解决上述技术问题,本发明提供了一种基于模型的网络协议模糊测试系统及测试方法,该方法不需要协议实现的源码,也不需要测试人员对协议规范或协议实现有深入的理解,利用模型学习方法自动从协议实现中推断出协议实现对应的模型,利用生成的模型引导模糊测试生成测试用例,得到较高的代码覆盖率和状态覆盖率。
7.为达到上述目的,本发明的技术方案如下:
8.一种基于模型的网络协议模糊测试系统,包括:
9.模型学习模块,所述模型学习模块包括映射器和学习器,所述学习器通过映射器与服务器进行交互,从而获得服务器的状态机模型;
10.模糊测试模块,所述模糊测试模块包括生成器和模糊测试器,所述生成器分析学习器得到的状态机模型,根据生成规则生成模糊测试策略;所述模糊测试器根据生成器生成的模糊测试策略对服务器进行模糊测试;
11.插桩器,所述插桩器用于对输入服务器的协议实现进行插桩,在模糊测试过程中,插桩后的协议实现会反馈信息给模糊测试器,用于引导测试用例生成。
12.上述方案中,所述映射器与服务器之间进行抽象交互,所述学习器与映射器之间进行具体交互。
13.上述方案中,所述映射器中设置了抽象输入与具体输入、抽象输出与具体输出一对多的映射和转换规则,所述映射器可以将抽象输入转换为具体输入,将具体输出转换为抽象输出。
14.一种基于模型的网络协议模糊测试方法,采用如上所述的一种基于模型的网络协议模糊测试系统,包括如下步骤:
15.步骤一:模型学习模块启动并初始化服务器,学习器通过映射器与服务器进行交互,通过抽象模型学习方法获得服务器的状态机模型;
16.步骤二,生成器分析学习器得到的服务器的状态机模型,根据生成规则生成模糊测试策略;
17.步骤三,插桩器对输入服务器的协议实现进行插桩;
18.步骤四,模糊测试器启动并初始化服务器,根据模糊测试策略对服务器进行模糊测试,在模糊测试过程中,插桩后的协议实现会反馈信息给模糊测试器,用于引导测试用例生成。
19.上述方案中,步骤一中,抽象模型学习得到的模型是一个确定有限协议状态机,对于协议实现,模型中记录了协议实现的状态信息和状态转移信息。
20.上述方案中,步骤一中,在每一轮交互中,学习器选取一个抽象报文,输入到映射器,映射器根据转换规则,将抽象报文转换为具体报文,输入到服务器;服务器接收到具体报文后返回一个具体输出到映射器;映射器根据转换规则将具体输出转换为抽象输出,返回到学习器;此时学习器获得了抽象输入对应的抽象输出,并由此更新模型。
21.上述方案中,步骤二中的生成规则是根据协议状态机中的状态转移信息自动生成,所述状态转移信息是状态之间通过输入某种报文进行状态转移,由此转换为报文间的连接关系,具体包括以下几种:
22.(1)使用协议状态机中的所有信息;
23.(2)只使用协议状态机中发生不同状态转移的边;
24.(3)使用两个状态间的最短路径,在协议状态机中可以得到任意两个状态之间的最短路径,将这条路径上的输出进行连接,就得到了报文间的最短路径连接;
25.在后续的模糊测试过程中存在反馈,可以得到代码覆盖率信息,通过反馈可以分析报文顺序规则的质量,模糊测试器会优先使用代码覆盖率较高的报文顺序规则,并且记录报文顺序规则对应的代码覆盖率信息,以供人工优化。
26.上述方案中,步骤三中,插桩器基于e9patch实现,对协议实现进行插桩,在保证程序原有逻辑的前提下直接对二进制文件插桩,每个插桩位置都有一个独特的标识,执行插桩代码时利用标识记录代码覆盖率信息。
27.上述方案中,步骤四中,模糊测试模块基于boofuzz生成,boofuzz启动并初始化服务器,按照生成规则生成报文,输入到服务器中,服务器处理报文,并返回一个响应报文,boofuzz根据服务器的反应分析服务器的状态,判断服务器是否正常运行。
28.上述方案中,步骤四中,插桩后的协议实现可以得到自身的执行路径,将这些路径记录在共享内存中;在模糊测试过程中,模糊测试器与服务器进行进程间通信,除了模糊测试器输入报文、服务器输出报文之外,模糊测试器还可以获得共享内存中的执行路径信息;当出现新的执行路径时,说明此时的输入报文可以使服务器执行之前从未执行过的路径,模糊测试器会对这一报文进行更多的探索,从而实现了代码覆盖率反馈;
29.模糊测试模块可以使用未插桩的协议实现,也可以使用已插桩的协议实现;如果模糊测试模块使用的是已插桩的协议实现,那么就会开启覆盖率反馈功能,在模糊测试过程中收集代码覆盖率信息,反馈到模糊测试器,模糊测试器根据代码覆盖率反馈信息调整测试用例生成方法。
30.通过上述技术方案,本发明提供的一种基于模型的网络协议模糊测试系统及测试方法具有如下有益效果:
31.1、本发明实现了基于aalpy的模型学习模块,采用模型学习技术对协议实现模型进行自动化推断。基于boofuzz实现了模糊测试。boofuzz的测试用例生成规则需要人工编写,本发明可以根据模型自动化生成高效的boofuzz测试用例生成规则;同时实现了在模糊测试过程中收集反馈信息,引导模糊测试生成测试用例。
32.2、本发明的模型学习模块为模糊测试提供了模型。在模糊测试模块,除了记录导致内存错误的测试用例外,还考虑到了协议行为违反协议规范的情况,设计了协议规范检测的接口,对于违反人工定义规则的测试用例以自动化进行语义错误检测。
33.3、本发明实现了基于e9patch的二进制程序插桩,并实现了反馈功能,在模糊测试过程中不断的收集反馈信息引导生成测试用例生成。这种插桩方法直接修改二进制文件而不是动态插桩,效率高,并且模糊测试模块与插桩模块可以做到独立,插桩模块只需一次运行得到插桩后的二进制文件,后续模糊测试模块不再需要插桩模块。
34.4、本发明的方法中,测试人员不需要对目标协议规范有深入的了解,只需要了解协议中的报文格式即可,模型学习模块即可通过和协议实现进行交互自动化学习协议实现模型,模糊测试模块也可以根据该格式生成测试用例。
35.5、本发明的方法仅需要协议实现的二进制文件即可进行测试,而不需要协议实现的源代码。如果二进制文件经过插桩器插桩,模糊测试还可以统计执行时的覆盖率等信息。
学习得到的模型具有大量状态和状态转换信息,可以引导模糊测试生成高效的测试用例,得到较高的代码覆盖率和状态覆盖率。
附图说明
36.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
37.图1为本发明实施例所公开的一种基于模型的网络协议模糊测试系统示意图;
38.图2为本发明实施例所公开的一种基于模型的网络协议模糊测试方法流程图。
具体实施方式
39.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
40.本发明提供了一种基于模型的网络协议模糊测试系统,如图1所示,包括:
41.模型学习模块,模型学习模块包括映射器和学习器,学习器通过映射器与服务器进行交互,从而获得服务器的状态机模型;
42.模糊测试模块,模糊测试模块包括生成器和模糊测试器,生成器分析学习器得到的状态机模型,根据生成规则生成模糊测试策略;模糊测试器根据生成器生成的模糊测试策略对服务器进行模糊测试;
43.插桩器,插桩器用于对输入服务器的协议实现进行插桩,在模糊测试过程中,插桩后的协议实现会反馈信息给模糊测试器,用于引导测试用例生成。
44.由于具体输入、具体输出复杂多样,使用具体交互进行模型学习,效率较低且会得到大量无用数据,为了解决这个问题,本发明使用抽象交互,进行抽象模型学习。在抽象交互中,学习器通过映射器与服务器进行交互,而非直接与服务器进行具体交互。具体地,映射器与服务器之间进行抽象交互,学习器与映射器之间进行具体交互。
45.抽象是对报文类型以及映射关系的描述,以ftp协议为例,已知有用户admin,登录报文为user username,其中username可以为任意值,但只有admin为合法值。由此可以定义抽象报文valid_user和invalid_user,分别对应合法用户和非法用户。同时定义映射关系,抽象报文valid_user对应user admin,invalid_user对应username不为admin的任意报文,如user a、user b等。抽象模型学习过程中,学习器选择一条抽象报文,例如valid_user,输入到映射器中,映射器根据映射关系,将valid_user转换为具体报文user admin输入到服务器。
46.映射器中设置了抽象输入与具体输入、抽象输出与具体输出一对多的映射和转换规则,映射器可以将抽象输入转换为具体输入,将具体输出转换为抽象输出。
47.一种基于模型的网络协议模糊测试方法,采用如上的一种基于模型的网络协议模糊测试系统,如图2所示,包括如下步骤:
48.步骤一:模型学习模块启动并初始化服务器,学习器通过映射器与服务器进行交互,通过抽象模型学习方法获得服务器的状态机模型。
49.抽象模型学习得到的模型是一个确定有限协议状态机,对于协议实现,模型中记录了协议实现的状态信息和状态转移信息。
50.具体地,学习器与映射器进行抽象交互,而非直接与服务器进行具体交互。在每一轮交互中,学习器选取一个抽象报文,输入到映射器,映射器根据转换规则,将抽象报文转换为具体报文,输入到服务器;服务器接收到具体报文后返回一个具体输出到映射器;映射器根据转换规则将具体输出转换为抽象输出,返回到学习器;此时学习器获得了抽象输入对应的抽象输出,并由此更新模型。
51.抽象定义是映射器的核心,由于模型学习得到的是确定性有限状态自动机,在抽象交互过程中应该保证确定性,这就需要良好的抽象定义,抽象定义保证了抽象交互过程中的确定性。人工编写的抽象并不一定能完全保证确定性,有时需要对其进行一定的处理。本发明实现了一种不确定性分析方法,自动分析与人工分析结合,分析不确定性,优化抽象。在人工编写抽象之后,直接用其进行模型学习,若正在学习的确定性有限状态机出现矛盾,学习器抛出异常,并记录导致矛盾的输入抽象报文序列、具体报文序列、期望输出序列、实际输出序列。此时,造成不确定性的原因可能是抽象定义不当或者具体报文触发服务器内存错误。为了减少不确定性,学习器对该输入具体报文序列进行测试,遍历具体报文,每次选中一条,从对应抽象中选择其他具体报文进行替换。每次替换后将新序列输入到服务器中,记录具体输出,并通过映射器转换为抽象输出,若新序列的抽象输出与原序列的抽象输出不同,则替换前后的具体报文不应置于同一抽象中,它们在同一抽象中则会造成不确定性。按照输出将它们从原抽象中分离并置于不同抽象中,并记录输入输出信息,以供人工分析。若在交互过程中出现服务器崩溃等异常现象,可能是具体报文序列触发了服务器的内存错误,直接剔除该具体报文序列并记录,以供人工进一步分析错误。不确定性分析结束后,将被置于同一抽象但会导致服务器不同行为的具体报文分开,剔除了触发服务器内存错误的具体报文,得到了优化后的抽象。测试人员也可以根据记录的信息继续对抽象进行人工优化。
52.步骤二,生成器分析学习器得到的服务器的状态机模型,根据生成规则生成模糊测试策略。
53.生成规则的定义是基于生成的模糊测试技术的关键之一。生成规则可以人工编写,测试人员可以根据自己对协议规范的理解编写生成规则,保证生成的报文满足特定结构。编写生成满足特定结构报文的生成规则已经耗费了较多人力,若编写生成规则,生成顺序良好的输入序列,则需要测试人员对协议规范有更深刻的理解,耗费更多的人力,覆盖的状态越多,意味着耗费越多的人力,而且人工编写并不能保证覆盖所有的状态。另外,由于协议实现可能与协议规范不符,根据协议规范编写的生成规则可能不完全适用于协议实现。
54.本发明根据模型学习得到的协议状态机可以自动化生成规则定义,在模型学习阶段获得的状态机是协议实现的状态机,而不是协议规范的状态机,它更适用于协议实现,甚至比精通协议规范的人更了解协议实现。在协议状态机中,可以得到状态和状态转换信息。本发明的模糊测试模块基于boofuzz实现,boofuzz提供了对测试用例生成规则进行定义的接口,测试人员需要人工编写测试用例生成规则代码,本发明实现了测试用例生成规则代码的自动化生成。由于boofuzz提供了对测试用例生成规则进行定义的接口,生成规则代码可以模板化,为了实现生成规则代码的自动化生成,通过编写生成规则代码的模板,模板中可变的部分可以根据模型中的信息得到。生成器通过分析模型和抽象,将所需信息填充到
模板中,就得到了完整的生成规则代码。
55.在抽象模型学习得到的协议状态机中,所有的输入输出信息都是抽象的。在boofuzz的测试用例生成规则中,报文结构规则是一种抽象的定义,这种定义标记了报文的不可变字段、可变字段、分隔符等信息,可以人工定义,也可以由步骤一中抽象报文和具体报文的转换关系自动化定义。由于抽象报文和具体报文是一对多的映射关系,通过这种关系可以分析出可变字段、可变字段等boofuzz报文结构规则所需的信息,进而自动化生成报文结构规则。
56.boofuzz报文顺序规则是报文之间的连接关系,在定义了报文的报文结构规则后,可以将这些报文按照给定的连接关系进行连接,在模糊测试过程中就会按照这种关系生成测试用例。在抽象模型学习得到的协议状态机中,存在大量的状态转移信息,这种状态转移信息就包含了报文之间的连接关系,利用这些信息可以自动化生成boofuzz报文顺序规则。协议状态机中的状态转移信息是状态之间通过输入某种报文进行状态转移,由此转换为报文间的连接关系有多种转换方法。本发明实现了多种转换方法:
57.1.使用协议状态机中的所有信息,这种方法得到的规则定义是十分复杂的,虽然可以保证最大的覆盖率,但在模糊测试过程中对其进行完全探索是低效的。
58.2.只使用协议状态机中发生不同状态转移的边。在协议状态机中,存在大量的边是不发生不同状态转移的,也就是在某一状态输入某种报文后仍然是这一状态。如果要快速达到较高的状态覆盖率,不应优先考虑这种边。
59.3.使用两个状态间的最短路径,在协议状态机中可以得到任意两个状态之间的最短路径,将这条路径上的输出进行连接,就得到了报文间的最短路径连接。
60.在后续的模糊测试过程中存在反馈,可以得到代码覆盖率信息,通过反馈可以分析报文顺序规则的质量,模糊测试器会优先使用代码覆盖率较高的报文顺序规则,并且记录报文顺序规则对应的代码覆盖率信息,以供人工优化。
61.自动化生成的报文生成规则和报文顺序规则使模糊测试模块可以覆盖协议状态机中的关键状态,提高代码覆盖率,提高发现漏洞的概率。
62.步骤三,插桩器对输入服务器的协议实现进行插桩。
63.插桩器基于e9patch实现,对协议实现进行插桩,在保证程序原有逻辑的前提下直接对二进制文件插桩,每个插桩位置都有一个独特的标识,执行插桩代码时利用标识记录代码覆盖率信息。根据需要收集的路径信息和模糊测试模块中模糊测试器与待测程序的交互方法,可以编写e9patch插桩代码,e9patch可以根据插桩代码对协议实现进行插桩。
64.在模糊测试过程中记录这些信息,反馈给模糊测试器,引导测试用例生成。
65.步骤四,模糊测试器启动并初始化服务器,根据模糊测试策略对服务器进行模糊测试,在模糊测试过程中,插桩后的协议实现会反馈信息给模糊测试器,用于引导测试用例生成。
66.模糊测试模块基于boofuzz生成,测试用例的生成规则在步骤二中获得。
67.boofuzz启动并初始化服务器,按照生成规则生成报文,输入到服务器中,服务器处理报文,并返回一个响应报文,boofuzz根据服务器的反应分析服务器的状态,判断服务器是否正常运行。
68.boofuzz没有代码覆盖率反馈,本发明实现了代码覆盖率反馈功能。插桩后的协议
实现可以得到自身的执行路径,将这些路径记录在共享内存中;在模糊测试过程中,模糊测试器与服务器进行进程间通信,除了模糊测试器输入报文、服务器输出报文之外,模糊测试器还可以获得共享内存中的执行路径信息;当出现新的执行路径时,说明此时的输入报文可以使服务器执行之前从未执行过的路径,模糊测试器会对这一报文进行更多的探索,从而实现了代码覆盖率反馈。
69.模糊测试模块可以使用未插桩的协议实现,也可以使用已插桩的协议实现;如果模糊测试模块使用的是已插桩的协议实现,那么就会开启覆盖率反馈功能,在模糊测试过程中收集代码覆盖率信息,反馈到模糊测试器,模糊测试器根据代码覆盖率反馈信息调整测试用例生成方法。
70.模糊测试过程中会记录导致服务器崩溃的测试用例。当服务器崩溃时,模糊测试器记录导致崩溃的输入序列和崩溃信息,以供人工进一步分析。然后重启服务器,继续模糊测试。
71.模糊测试过程中也会记录导致服务器输出违反人工给定规则的测试用例,这一功能可以发现协议实现中违反协议规范的漏洞。模糊测试器在模糊测试过程中会记录服务器的状态信息和输出,当状态信息与输出违反人工定义的规则时,可能是服务器存在违反协议规范的漏洞。例如,协议规范中定义在某一状态下输入某种报文不应该得到某种输出,可以将这种规则提供给模糊测试器,模糊测试器可以在这一状态下对输出进行分析,若得到不应该得到的输出,就会记录输入序列和输出,以供人工进一步分析。
72.两者结合,在模糊测试过程中既可以发现内存错误,也可以发现语义错误。
73.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1