一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于消息队列的插件式漏洞自动化扫描方法与流程

2021-11-05 19:30:00 来源:中国专利 TAG:


1.本发明涉及网络信息安全漏洞自动化扫描的方法,特别涉及一种基于消息队列的插件式漏洞自动化扫描方法。


背景技术:

2.安全漏洞扫描技术是一类重要的网络安全技术,是企业内部网络信息安全管理必不可少的工具之一,与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。目前市面上的漏洞扫描工具大部分是基于开源的漏洞扫描软件进行二次开发而来,开源漏洞扫描软件有openvas、tripwire ip360、nessus等,这类开源漏洞扫描软件大部分都是针对软件的版本信息通过静态脚本文件进行扫描,采用静态脚本文件的方式实现漏洞扫描,可以在不重启漏洞扫描软件的情况下扩展漏洞扫描插件,但是由于静态脚本文件运行效率较低,导致了漏洞扫描软件运行效率低,扫描周期长。


技术实现要素:

3.发明目的:为解决背景技术中存在的技术问题,本发明提出一种基于消息队列的插件式漏洞自动化扫描方法,包括以下步骤:
4.包括以下步骤:
5.步骤1,创建漏洞扫描任务管理程序,并载入任务配置信息;
6.步骤2,漏洞扫描任务管理程序创建漏洞扫描任务,漏洞扫描任务执行完成后,输出漏洞扫描报告。
7.步骤1中,所述漏洞扫描任务管理程序能够根据任务配置信息创建漏洞扫描任务;
8.所述漏洞扫描任务是一个五元组<id,taskname,taskplan,taskpar,taskcreatetime>,其中id是漏洞扫描任务的唯一标识;taskname表示漏洞扫描任务的名称;taskplan表示漏洞扫描任务的执行计划;taskpar表示漏洞扫描任务的配置参数;taskcreatetime表示漏洞扫描任务的创建时间.
9.步骤1中,所述任务配置信息包括扫描策略、目标互联网协议地址或互联网协议地址段,当漏洞扫描任务管理程序创建漏洞扫描任务时会将任务配置信息中的基本配置参数(即扫描策略、目标互联网协议地址或互联网协议地址段)载入到taskpar中。
10.步骤2包括:
11.步骤2

1,创建漏洞扫描任务队列、漏洞扫描结果队列;
12.步骤2

2,创建队列消费服务,所述队列消费服务包括扫描任务消费服务、扫描结果消费服务;
13.步骤2

3,创建扫描插件宿主程序;
14.步骤2

4,定义宿主程序与扫描插件之间的接口规范;
15.步骤2

5,按照步骤2

4中的接口规范建立网络资产扫描插件和漏洞扫描插件;
16.步骤2

6,漏洞扫描任务管理程序根据载入的任务配置信息创建漏洞扫描任务,推
送到漏洞扫描任务队列;
17.步骤2

7,扫描任务消费服务从漏洞扫描任务队列中取出漏洞扫描任务信息,根据漏洞扫描任务信息创建扫描任务执行线程;
18.步骤2

8,扫描任务执行线程调用网络资产扫描插件,对目标地址进行扫描,获取网络资产属性和版本信息;
19.步骤2

9,根据网络资产的属性和版本信息调用漏洞扫描插件进行漏洞扫描;
20.步骤2

10,扫描任务执行线程完成后,获取扫描结果数据,推送到漏洞扫描结果队列;
21.步骤2

11,扫描结果消费服务从漏洞扫描结果队列中取出漏洞扫描结果数据,推送给扫描结果解析服务;
22.步骤2

12,扫描结果解析服务对漏洞扫描结果数据进行解析,输出漏洞扫描报告。
23.步骤2

1中,漏洞扫描任务队列记为scantaskqueue,用于存放步骤1中漏洞扫描任务管理程序创建的漏洞扫描任务;漏洞扫描结果队列记为scanresultqueue,用于存放扫描任务执行线程返回的漏洞扫描结果数据。
24.步骤2

2中,所述扫描任务消费服务记为scantaskconsumeservice,所述扫描结果消费服务记为scanresultconsumeservice,其中,所述扫描任务消费服务scantaskconsumeservice监听漏洞扫描任务队列scantaskqueue,当漏洞扫描任务队列scantaskqueue中存在扫描任务时取出任务数据进行处理,根据任务的属性创建扫描任务执行线程,包含:
25.(1)根据任务的执行计划,可以创建周期性的扫描任务执行线程,比如创建的扫描任务为每天的某个时间点,则创建的扫描任务在每天的固定时间点执行。
26.(2)扫描任务类型分为资产探测和漏洞扫描。通过输入目标互联网协议地址或互联网协议地址段信息创建扫描任务执行线程,其中资产探测主要针对资产的存活情况,端口开发情况,资产所运行的服务情况进行探测,漏洞扫描在资产探测的基础上对资产的漏洞情况进行扫描。
27.所述扫描结果消费服务scanresultconsumeservice监听漏洞扫描结果队列scanresultqueue,扫描结果解析服务scanresultanalysisservice,当漏洞扫描结果队列scanresultqueue中存在漏洞扫描结果时取出漏洞扫描结果数据,推送给扫描结果解析服务scanresultanalysisservice进行扫描结果数据的解析。
28.步骤2

3中,所述扫描插件宿主程序包含如下功能:
29.注册插件:在扫描插件宿主程序中注册扫描插件,定位插件的执行路径;
30.反注册插件:对于不再使用的扫描插件,能够在扫描插件宿主程序中对插件进行反注册,从扫描插件宿主程序中删除插件;
31.插件测试:对于在扫描插件宿主程序中进行注册的插件,扫描插件宿主程序能够对插件进行测试,从而判断插件程序是否能够正常运行,对于通过测试的插件能够进行启用操作,对于未通过测试的插件则无法进行启用操作;
32.启用插件:启用已经注册并通过测试的插件;
33.停用插件:当不再使用一个正在运行的插件时,能够停用正在运行的插件;
34.更新插件:对于发生了功能变更的插件,能够对插件的信息进行更新。
35.步骤2

4中,所述接口规范采用抽象接口的方式来实现,包括bundle、start、end、plier、regist、invok、track、createobject八个抽象接口,其中bundle为注册服务接口,start和end为捆绑激活器接口,plier为服务对象抽象类,regist为注册对象接口,invok为调用服务实例的抽象类,track为服务跟踪实例的抽象类,createobject为动态链接库扫描接口,实现动态链接库插件的扫描。
36.步骤2

5中,按照步骤2

4中的接口规范编写网络资产扫描插件和漏洞扫描插件,网络资产扫描插件和漏洞扫描插件用动态链接库技术来实现。
37.步骤2

8中,网络资产扫描插件对目标地址进行扫描的具体过程包括:
38.步骤2
‑8‑
1,主机发现:通过发送不同类型的数据探测包到目标主机,以得到的结果来判断目标主机是否处于开启状态;
39.步骤2
‑8‑
2,端口扫描:通过脚本扫描所有可能开放的端口,并确定端口的开闭状态和屏蔽状态;
40.步骤2
‑8‑
3,应用程序与版本侦测:对端口扫描的开放端口进行建立连接,接收目标主机发送的信息,通过脚本对接收到的信息进行签名对比,查找对应应用程序的名字、资产属性和版本信息;
41.步骤2
‑8‑
4,操作系统侦测:将已知系统进行唯一身份标识匹配,建立已知系统的样本库;通过脚本向端口扫描得到的端口发送数据包,根据数据包返回的数据生成一个身份标识,然后用生成的身份标识在样本库中进行比对,返回对应的操作系统,如果无法得到准确的操作系统,则返回出可能的操作系统。
42.本发明将消息队列和插件式开发框架应用在漏洞扫描技术中,提供了一种基于消息队列的插件式漏洞自动化扫描方法。与现有技术相比,具有的有益效果是:
43.(1)本发明在漏洞扫描任务、漏洞扫描结果的处理过程中引入了消息队列技术,能够有效提高漏洞扫描任务的处理能力。
44.(2)本发明引入了插件式开发框架,用动态链接库技术实现漏洞扫描插件,既实现了漏洞扫描插件的动态扩展,也克服了开源漏洞扫描软件使用静态脚本文件进行漏洞扫描效率低的问题。
附图说明
45.下面结合附图和具体实施方式对本发明做更进一步的具体说明,使本发明的上述优点和其他方面的优点将会变得更加清楚。
46.图1是本发明基于消息队列的插件式漏洞自动化扫描方法的实现过程。
47.图2是宿主程序管理扫描插件的流程图。
具体实施方式
48.图1为基于消息队列的插件式漏洞自动化扫描方法的实现过程,首先漏洞扫描任务管理程序加载任务配置信息,创建漏洞扫描任务并推送到漏洞扫描任务队列中,扫描任务消费服务监听漏洞扫描任务队列,当漏洞扫描任务队列中有任务信息时则取出漏洞扫描任务,针对任务的具体配置参数创建扫描任务执行线程,扫描任务执行线程根据任务配置信息调用扫描插件,扫描插件主要包括网络资产扫描和漏洞扫描两类插件,其中网络资产
扫描插件针对目标地址探测操作系统、中间件及应用软件的类型及版本号,漏洞扫描根据资产探测的结果进行漏洞扫描,扫描任务执行线程完成后将扫描结果推送至漏洞扫描结果队列中,漏洞扫描结果消费服务监听漏洞扫描结果队列,当队列中有漏洞扫描结果时则取出漏洞扫描结果推送给扫描结果解析服务,扫描结果解析服务对漏洞扫描结果进行解析,输出漏洞扫描报告信息。
49.步骤1,创建漏洞扫描任务管理程序,并载入任务配置信息。
50.漏洞扫描任务管理程序根据任务配置信息创建漏洞扫描任务scantask。scantask扫描任务是一个五元组<id,taskname,taskplan,taskpar,taskcreatetime>,其中id是该漏洞扫描任务的唯一标识;taskname表示漏洞扫描任务的名称;taskplan表示漏洞扫描任务的执行计划;taskpar表示漏洞扫描任务的配置参数;taskcreatetime表示漏洞扫描任务的创建时间。
51.任务配置信息主要包括扫描策略、目标互联网协议地址或互联网协议地址段等相关信息,当漏洞扫描任务管理程序创建漏洞扫描任务时会将任务配置信息中的基本配置参数载入到taskpar中。如表1所示。
52.表1
53.模块作用扫描任务对象模块特点实体类名(对象名)scantask数据成员id,taskname,taskplan,taskpar,taskcreatetime
54.步骤2,创建漏洞扫描任务队列、漏洞扫描结果队列;创建漏洞扫描任务队列scantaskqueue,用于存放步骤1中漏洞扫描任务管理程序创建的漏洞扫描任务;创建漏洞扫描结果队列scanresultqueue,用于存放扫描任务执行线程返回的漏洞扫描结果数据;扫描任务队列scantaskqueue和扫描结果队列scanresultqueue主要接口有push接口,用于添加任务pop接口,用于从任务队列获取任务。如表2所示。
55.表2
[0056][0057]
[0058]
步骤3,创建消费服务,创建队列消费服务,包括扫描任务消费服务、扫描结果消费服务;创建扫描任务消费服务scantaskconsumeservice和扫描结果消费服务scanresultconsumeservice,其中扫描任务消费服务scantaskconsumeservice监听漏洞扫描任务队列scantaskqueue,当队列中存在扫描任务时取出任务数据进行处理,根据任务的属性创建扫描任务执行线程。扫描结果消费服务scanresultconsumeservice监听漏洞扫描结果队列scanresultqueue,当队列中存在漏洞扫描结果时取出漏洞扫描结果数据,推送给扫描结果解析服务进行扫描结果数据的解析。如表3、表4所示。
[0059]
表3
[0060]
模块作用用于监听漏洞扫描任务队列模块特点抽象类,用于被继承类名(对象名)scantaskconsumeservice主要接口virtual bool monitor(scantaskqueue queue)=0;参数scantaskqueue类型,漏洞扫描任务队列返回值布尔类型,类所实现的方法操作结果。
[0061]
表4
[0062]
模块作用用于监听漏洞扫描结果队列模块特点抽象类,用于被继承类名(对象名)scanresultconsumeservice主要接口virtual bool monitor(scanresultqueue queue)=0;参数scanresultqueue类型,漏洞扫描结果队列返回值布尔类型,类所实现的方法操作结果。
[0063]
步骤4,创建扫描插件宿主程序;
[0064]
扫描插件宿主程序包含功能如下:
[0065]
(1)注册插件:在宿主程序中注册扫描插件,定位插件的执行路径;
[0066]
(2)反注册插件:对于不再使用的扫描插件,可以在宿主程序对插件进行反注册,从宿主程序中删除插件;
[0067]
(3)插件测试:对于在宿主程序中进行注册的插件,宿主程序可以对插件进行测试,从而判断插件程序是否能够正常运行,对于通过测试的插件可以进行启用操作,对于未通过测试的插件则无法进行启用操作。
[0068]
(4)启用插件:启用已经注册并通过测试的插件;
[0069]
(5)停用插件:当不再使用某个正在运行的插件时,可停用正在运行的插件。
[0070]
(6)更新插件:对于发生了功能变更的插件,可对插件的信息进行更新;
[0071]
步骤5,定义宿主程序与扫描插件之间的接口规范;扫描插件能够被宿主程序识别,并在宿主环境中运行,需要定义一套宿主程序与扫描插件之间的接口规范,接口规范采用抽象接口的方式来实现,包括bundle、start、end、plier、regist、invok、track、createobject八个抽象接口,其中bundle为注册服务接口,start和end为捆绑激活器接口,plier为服务对象抽象类,regist为注册对象接口,invok为调用服务实例的抽象类,track为服务跟踪实例的抽象类,createobject为动态链接库扫描接口,实现动态链接库插件的扫描。
[0072]
(1)插件注册服务接口如表5所示:
[0073]
表5
[0074]
模块作用注册服务接口模块特点抽象类,用于被继承类名(对象名)iplugunitbundlecontext主要接口virtual string bundle(string classname)=0;参数string类型,当前类的类名返回值string类型,类所实现的方法操作结果。
[0075]
(2)插件捆绑激活器接口如表6所示:
[0076]
表6
[0077][0078]
(3)服务对象类如表7所示:
[0079]
表7
[0080]
模块作用服务对象类模块特点抽象类,用于被继承类名(对象名)multiplierimpl主要接口virtual string plier(string classname)=0;参数string类型,当前类的类名返回值string类型,类所实现的方法操作结果。
[0081]
(4)注册对象接口如表8所示:
[0082]
表8
[0083]
模块作用注册对象接口模块特点抽象类,用于被继承类名(对象名)iserviceregistration主要接口virtual string regist(string classname)=0;参数string类型,当前类的类名返回值string类型,类所实现的方法操作结果。
[0084]
(5)调用服务实例类如表9所示:
[0085]
表9
[0086]
模块作用调用服务实例类模块特点抽象类,用于被继承类名(对象名)registerplugunitservice
主要接口virtual string invok(string classname)=0;参数string类型,当前类的类名返回值string类型,类所实现的方法操作结果。
[0087]
(6)创建服务跟踪类如表10所示:
[0088]
表10
[0089]
模块作用创建服务跟踪类模块特点抽象类,用于被继承类名(对象名)plugunitservicetracker主要接口virtual string track(iplugunitbundlecontext context)=0;参数iplugunitbundlecontext类型,插件上下文返回值string类型,类所实现的方法操作结果。
[0090]
(7)跟踪服务接口如表11所示:
[0091]
表11
[0092][0093][0094]
(8)动态链接库扫描接口如表12所示:
[0095]
表12
[0096]
模块作用动态链接库扫描接口模块特点抽象类,用于被继承类名(对象名)objectcreator主要接口virtual iplugunitbundleactivator createobject()=0;参数无参数返回值iplugunitbundleactivator类型,捆绑激活器对象。
[0097]
步骤6,按照步骤5中的接口规范编写网络资产扫描插件和漏洞扫描插件;扫描插件需要实现步骤5中的抽象接口,扫描插件用动态链接库技术来实现,动态链接库(dll)是一定功能的可执行软件模块,本身不能独立运行,只能输出变量、函数或者类,通过其他能独立运行的程序(宿主程序)调用其内部的功能。基于动态链接库及宿主程序的方式实现插件式开发框架,在插件式开发框架的基础上编写漏洞扫描的插件,插件是按照一定规约编写的。
[0098]
插件式开发框架包含中央管理组件,用于保存有关已注册服务和服务侦听器的所有信息。以公共对象请求代理体系结构作为通信层,可远程调用服务对象。框架包含接口定义语言文件。插件接口为实现远程调用,需要在接口定义语言文件中定义服务接口,服务接口必须从基础接口继承。在接口定义语言文件中定义服务接口之后,由编译器生成特定于语言的代码,在指定目录生成一个可执行文件,并生成指定后缀的文件(.h后缀文件和.cpp
后缀文件)。生成的代码封装了通信的细节。插件式开发框架的实现步骤包括:
[0099]
(1)实现iplugunitbundleactivator接口,所述iplugunitbundleactivator接口提供了开始方法和结束方法。使用宏指令来实现注册捆绑激活器类的类型和名称。
[0100]
(2)实现iplugunitbundlecontext接口用于注册服务。iplugunitbundleactivator接口提供的开始方法和结束方法以iplugunitbundlecontext为参数类型。multiplierimpl(服务对象类)和iserviceregistration(注册对象类)的成员变量在文件头中定义每个服务实例。在开始方法中设置服务实例的属性并创建服务对象,服务对象通过registerplugunitservice类进行注册。
[0101]
(3)用plugunitservicetracker类创建服务跟踪,实现iplugunitservicetracker接口用于跟踪服务。该plugunitservicetracker类实现了如何创建和使用服务跟踪对象来查找已注册的服务。并封装了远程服务的特征(服务名称、属性、对服务对象的引用),用于服务跟踪。
[0102]
(4)应用动态链接库(dll)技术,创建动态链接库。本链接库使用了隐式链接。首先通过创建动态链接库并整合入项目中。动态链接库包括的函数过程有:打开动态库文件;查看动态库使用过程中的错误;获取动态库中的函数指针;调用动态库函数;关闭动态库句柄资源。最后调用动态链接库实现扫描插件。objectcreator类实现了createobject方法,用于返回已加载包的包激活器实例iplugunitbundleactivator。
[0103]
步骤7,漏洞扫描任务管理程序根据载入的任务配置信息创建漏洞扫描任务,推送到漏洞扫描任务队列;
[0104]
步骤8,扫描任务消费服务从漏洞扫描任务队列中取出漏洞扫描任务信息,根据漏洞扫描任务信息创建任务执行线程;
[0105]
步骤9,扫描任务执行线程调用网络资产扫描插件,对目标地址进行扫描,获取网络资产属性、版本等基础信息;
[0106]
网络资产扫描插件扫描过程包括:主机发现、端口扫描、应用程序与版本侦测、操作系统侦测。
[0107]
(1)主机发现:通过发送不同类型的数据探测包到目标主机,以得到的结果来判断目标主机是否处于开启状态。
[0108]
(2)端口扫描:通过脚本扫描所有可能开放的端口。并确定端口的开闭状态和屏蔽状态。
[0109]
(3)应用程序与版本侦测:对端口扫描的开放端口进行建立连接,接收目标主机发送的信息,通过脚本对接收到的信息进行签名对比,查找对应应用程序的名字以及资产属性和版本信息。
[0110]
(4)操作系统侦测:将已知系统进行唯一身份标识匹配,建立已知系统的样本库。通过脚本向端口扫描得到的端口发送数据包。根据数据包返回的数据生成一个身份标识。然后用生成的身份标识在样本库中进行比对。返回对应的操作系统,如果无法得到准确的操作系统,则返回出可能的操作系统。
[0111]
例子:进行测试资产172.16.121.10扫描。
[0112]
1、构造请求包。包含信息如下表13所示:
[0113]
表13
[0114][0115]
2、主机发现,如表14所示。
[0116]
表14
[0117][0118]
3、端口扫描,如表15所示。
[0119]
表15
[0120][0121][0122]
4、应用程序与版本侦测,如表16所示。
[0123]
表16
[0124][0125]
5、操作系统侦测,如表17所示。
[0126]
表17
[0127][0128][0129]
6、构造扫描结果,如表18所示。
[0130]
表18
[0131]
[0132]
步骤10,根据网络资产的属性、版本等信息调用漏洞扫描插件进行漏洞扫描;
[0133]
漏洞扫描插件扫描需要在项目初始建立漏洞脚本探测库。当得到资产扫描的结果信息后,根据资产标识类别,通过插件调用对应的漏洞脚本。得到脚本运行的响应结果。
[0134]
漏洞扫描过程分为来源分析,漏洞检测,结果生成三部分:如表19、表20、表21所示。
[0135]
表19
[0136]
第一部分来源分析模块作用整个漏洞检测的入口,对来源进行分析处理。入口分类被动代理、爬虫、url、原始请求文件
[0137]
表20
[0138]
第二部分漏洞检测模块作用用于处理第一部分产生的标准化的请求。主要脚本config.py、scan_tasks.py、worker.sh、scheduler.py
[0139]
表21
[0140]
第三部分结果生成模块作用用于生成漏洞扫描和运行时的状态以及产出物。输出结果类型json数据集合
[0141]
例子:幽灵猫漏洞扫描。
[0142]
根据资产扫描出的结果进行幽灵猫漏洞扫描。
[0143]
首先定义tomcat_ajp_verification类,此类是幽灵猫漏洞扫描执行类。
[0144]
1、首先通过资产信息构造对象,对象包含:目标地址,端口,目标服务器配置文件地址。
[0145]
2、初始化构造默认包头,包体。包含内容如下表22所示:
[0146]
表22
[0147][0148][0149]
3、装配连接。通过装配函数进行连接,如表23所示。
[0150]
表23
[0151]
函数作用连接目标地址函数名称start_socket参数目标地址和端口
返回值无示例start_socket(172.16.121.10,80),传入参数后执行。进行连接。
[0152]
4、通过构造验证性测试消息,进行包头,包体的验证,调用脚本,得到ajpmessage(用于web服务器和服务器之间通信的单个数据包)对象,如表24、表25所示。
[0153]
表24
[0154][0155]
表25
[0156]
函数作用验证函数名称verification参数包头和包体返回值boolean,函数操作的结果示例verification(headers,body),得到结果true。
[0157]
5、得到结果,构造输出结果json数据集合,如表26所示。
[0158]
表26
[0159][0160][0161]
步骤11,扫描任务执行线程完成后,获取扫描结果数据封装到数据结果对象scanresult,推送到漏洞扫描结果队列,如表27所示;
[0162]
表27
[0163]
模块作用扫描结果数据对象模块特点实体类名(对象名)scanresult数据成员map集合
[0164]
步骤12,扫描结果消费服务从漏洞扫描结果队列中取出漏洞扫描结果数据,推送
给扫描结果解析服务;
[0165]
步骤13,扫描结果解析服务对漏洞扫描结果数据进行解析,输出漏洞扫描报告。
[0166]
本发明提供了一种基于消息队列的插件式漏洞自动化扫描方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献