CN115544518A - 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备 - Google Patents

漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备 Download PDF

Info

Publication number
CN115544518A
CN115544518A CN202211224486.8A CN202211224486A CN115544518A CN 115544518 A CN115544518 A CN 115544518A CN 202211224486 A CN202211224486 A CN 202211224486A CN 115544518 A CN115544518 A CN 115544518A
Authority
CN
China
Prior art keywords
plug
scanning
vulnerability scanning
language
vulnerability
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
Application number
CN202211224486.8A
Other languages
English (en)
Inventor
曹晓栋
杨冀龙
赵伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Knownsec Information Technology Co Ltd
Original Assignee
Beijing Knownsec Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Knownsec Information Technology Co Ltd filed Critical Beijing Knownsec Information Technology Co Ltd
Priority to CN202211224486.8A priority Critical patent/CN115544518A/zh
Publication of CN115544518A publication Critical patent/CN115544518A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates

Abstract

本申请实施例提供了一种漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备,涉及计算机技术领域。漏洞扫描引擎包括扫描器及漏洞扫描插件,扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元,该实现方法包括:根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到词法解析器,目标语言为漏洞扫描插件使用的语言;利用Go语言生成待使用函数、插件加载器、调度器及结果解析单元;获得多个漏洞扫描插件;根据生成的扫描器及多个漏洞扫描插件,生成安装包。如此,基于Go语言实现漏洞扫描引擎,该引擎继承了Go语言高性能的特点,方便分析定位问题,部署方便,并且可以很方便地扩展漏洞扫描插件。

Description

漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备。
背景技术
主机漏洞扫描是基于主机模式的一种扫描方法,也是基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机漏洞系统的安全脆弱性进行检测,发现漏洞的一种安全检测行为。
通过网络漏洞、安全漏洞扫描,系统管理员能够发现所维护的Web服务器的各种TCP/IP端口的分配、开放的服务、Web服务软件版本、以及这些服务及软件呈现在网络上的安全漏洞。网络安全漏洞扫描技术也是采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃,其利用了一系列的脚本模拟对系统进行攻击的行为,并对结果进行分析。这种技术通常被用来进行模拟攻击实验和安全审计。
目前一般会使用OpenVAS进行漏洞扫描。OpenVAS是Greenbone Network的商业漏洞管理解决方案的一部分,它是一个集成了多个服务和工具的框架,提供了强大而全面的漏洞扫描和漏洞管理解决方案。然而,开源的OpenVAS已经形成了完整的框架,包含了众多必要组件,部署相对复杂,而且不易于扩展。
发明内容
本申请提供了一种漏洞扫描引擎实现方法、漏洞扫描方法、装置、电子设备及可读存储介质,其能够基于开源编程语言Golang实现漏洞扫描引擎,该引擎继承了Go语言高性能的特点,方便分析定位问题,部署方便,并且该引擎基于漏洞扫描插件实现漏洞扫描,可以很方便地扩展漏洞扫描插件。
本申请的实施例可以这样实现:
第一方面,本申请实施例提供一种漏洞扫描引擎实现方法,所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元,所述方法包括:
根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;
利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;
获得多个漏洞扫描插件;
根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
第二方面,本申请实施例提供一种漏洞扫描方法,所述方法包括:
向漏洞扫描引擎输入扫描参数,其中,所述漏洞扫描引擎基于前述实施方式中任意一项所述的漏洞扫描引擎实现方法得到,对所述扫描参数进行控制的方式包括通过命令行、文件、环境变量配置方式,所述扫描参数包括扫描目标列表及插件列表,所述扫描目标列表中包括至少一个扫描目标,所述插件列表中包括所述漏洞扫描插件的插件标识;
利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果。
第三方面,本申请实施例提供一种漏洞扫描引擎实现装置,所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元,所述装置包括:
第一获得模块,用于根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;
所述第一获得模块,还用于利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;
第二获得模块,用于获得多个漏洞扫描插件;
安装包生成模块,用于根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
第四方面,本申请实施例提供一种漏洞扫描装置,所述装置包括:
控制模块,用于向漏洞扫描引擎输入扫描参数,其中,所述漏洞扫描引擎基于所述的漏洞扫描引擎实现方法得到,对所述扫描参数进行控制的方式包括通过命令行、文件、环境变量配置方式,所述扫描参数包括扫描目标列表及插件列表,所述扫描目标列表中包括至少一个扫描目标,所述插件列表中包括所述漏洞扫描插件的插件标识;
扫描模块,用于利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果。
第五方面,本申请实施例提供一种电子设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现前述实施方式所述的漏洞扫描引擎实现方法,或实现前述实施方式所述的漏洞扫描方法。
第六方面,本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述实施方式所述的方法。
本申请实施例提供的漏洞扫描引擎实现方法、漏洞扫描方法、装置、电子设备及可读存储介质,漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元;根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;并利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;以及获得多个漏洞扫描插件;最后,根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。如此,基于Go语言实现漏洞扫描引擎,该引擎继承了Go语言高性能的特点,方便分析定位问题,部署方便,并且可以很方便地扩展漏洞扫描插件。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的电子设备的方框示意图;
图2为本申请实施例提供的漏洞扫描引擎实现方法的流程示意图;
图3为图2中步骤S140包括的子步骤的流程示意图;
图4为本申请实施例提供的漏洞扫描方法的流程示意图;
图5为图4中步骤S220包括的子步骤的流程示意图;
图6为图5中子步骤S221包括的子步骤的流程示意图;
图7为本申请实施例提供的漏洞扫描引擎实现装置的方框示意图;
图8为本申请实施例提供的漏洞扫描装置的方框示意图。
图标:100-电子设备;110-存储器;120-处理器;130-通信单元;200-漏洞扫描引擎实现装置;210-第一获得模块;220-第二获得模块;230-安装包生成模块;300-漏洞扫描装置;310-控制模块;320-扫描模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参照图1,图1为本申请实施例提供的电子设备100的方框示意图。所述电子设备100可以是,但不限于,电脑、服务器等。根据所应用的场景,所述电子设备100可以用于实现漏洞扫描引擎,也可以利用漏洞扫描引擎进行漏洞扫描。所述电子设备100包括存储器110、处理器120及通信单元130。所述存储器110、处理器120以及通信单元130各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
其中,存储器110用于存储程序或者数据。所述存储器110可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(ErasableProgrammable Read-Only Memory,EPROM),电可擦除只读存储器(Electric ErasableProgrammable Read-Only Memory,EEPROM)等。
处理器120用于读/写存储器110中存储的数据或程序,并执行相应地功能。比如,存储器110中存储有漏洞扫描引擎实现装置或漏洞扫描装置,所述装置包括至少一个可以软件或固件(firmware)的形式存储于所述存储器110中的软件功能模块。所述处理器120通过运行存储在存储器110内的软件程序以及模块,如本申请实施例中的漏洞扫描引擎实现装置,从而执行各种功能应用以及数据处理,即实现本申请实施例中的漏洞扫描引擎实现方法;再比如,所述处理器120通过运行漏洞扫描装置,实现本申请实施例中的漏洞扫描方法。
通信单元130用于通过网络建立所述电子设备100与其它通信终端之间的通信连接,并用于通过所述网络收发数据。
应当理解的是,图1所示的结构仅为电子设备100的结构示意图,所述电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
请参照图2,图2为本申请实施例提供的漏洞扫描引擎实现方法的流程示意图。所述方法可应用于上述电子设备100。下面对漏洞扫描引擎实现方法的具体流程进行详细阐述。在本实施例中,所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元。所述方法包括步骤S110~步骤S140。
步骤S110,根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器。
在本实施例中,可根据yacc词法解析器的定制标准,利用Go语言实现目标语言的语法,从而使用Go语言生成所述词法解析器。该过程可以为:按照yacc词法解析器的语法,利用Go语言写好对应的语法文件,使用yacc工具生成对应的go语言版本的解析器。
其中,所述目标语言为所述漏洞扫描插件使用的语言。所述词法解析器用于将基于目标语言的插件解析为语法树。比如,若所述目标语言为Nasl,则上述步骤为使用yacc生成Go语言版本的Nasl词法解析器,Nasl词法解析器可以将Nasl插件解析为语法树。
其中,Go(Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Nasl(Nessus Attack Scripting Language)是一种为Nessus安全扫描器所设计的脚本语言,它的目的在于使每个人都可以在几分钟内对给定的安全漏洞写出测试代码,并允许人们分享他们的测试代码而不用担心自己使用的使什么操作系统。
步骤S120,利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元。
在本实施例中,还可以利用Go语言生成漏洞扫描引擎在用于漏洞扫描时需要使用到的函数。所述待使用函数可以是所述词法解析器进行词法解析时需要使用的函数,具体可以结合实际需求设置。
还可以通过Go语言生成插件加载器,所述插件加载器用于在需要利用该漏洞扫描引擎进行漏洞扫描时加载相应的漏洞扫描插件。
还可以通过Go语言生成调度器及结果解析单元,所述调度器用于在进行任务分配、管理等,所述结果解析单元用于对通过执行漏洞扫描插件获得的信息进行汇总,以得到扫描汇总结果。
步骤S130,获得多个漏洞扫描插件。
获得的所述漏洞扫描插件使用的语言为所述目标语言。
步骤S140,根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
通过步骤S110及步骤S120可以利用Go语言实现扫描器,进而基于生成的扫描器与得到的多个漏洞扫描插件,生成漏洞扫描引擎对应的安装包。
如此,基于开源编程语言Golang实现了漏洞扫描引擎,该漏洞扫描引擎继承了Go语言高性能的特点,方便分析定位问题。例如,Go提供pprof工具,可以分析内存、cpu使用情况;还提供了trace工具,可以方便地追踪堆栈调用情况;而基于内存、cpu使用情况以及堆栈调用情况等,便于对问题进行分析及定位。并且,本申请实施例实现的漏洞扫描引擎主要用于漏洞扫描,不包括用于实现其他服务的组件,因此占用资源少、部署方便。此外,该漏洞扫描引擎使用现有的漏洞扫描插件语言,可以很方便地扩展漏洞扫描插件。
作为一种可能的实现方式,所述漏洞扫描插件为Nasl插件,所述目标语言为Nasl,所述标语言的语法为Nasl。利用Go语言实现的扫描器中包括用于解析Nasl插件的Nasl词法解析器,利用该Nasl词法解析器将加载的插件解析后,可按照Nasl代码来执行响应的网络请求操作。
利用Go语言实现的具体Nasl语法,可以结合实际需求确定。比如,实现的Nasl语法包括类型定义、基本运算符定义、算数操作、字符串操作、比较运算符、逻辑运算符、位运算符、循环控制流、变量定义、函数定义、函数调用等中的至少一个语法。
作为一种可能的实现方式,所述待使用函数包括Nasl语言的内置函数及Nasl库函数。所述待使用函数可以包括知识库函数、报告生成函数、描述函数、胶水函数、网络函数、字符串操作函数、HTTP函数、IP操作函数、密码处理函数等中的至少一种。
知识库是用来存储每个插件运行过程中产生的中间值,提供给后续运行的插件使用,避免重复逻辑。知识库函数是对知识库进行插入值、取值等操作的函数,比如:set_kb_item、get_kb_item等函数。
在所述待使用函数包括知识库函数时,还可以基于Redis数据库构建知识库。其中,所述知识库函数用于对所述知识库进行操作,所述知识库用于记录扫描过程中发现的信息。即,基于Redis实现对Nasl中“set_kb_item”、“get_kb_item”等知识库函数的支持。可以将插件扫描过程中发现的主机信息(可以包括端口的分配、开放的服务、服务软件版本等)记录下来,方便后续插件使用,减少重复扫描、提高扫描效率。
还可以将其他资产扫描工具,比如,nmap、zmap、masscan,扫描到的数据集成到该知识库中,以对知识库信息进行扩充。比如,将利用其他工具扫描的端口信息存储在该知识库中。如此,可以减少扫描插件的重复运行。
插件之间会存在依赖关系。比如,后一个插件可以根据前一个插件扫描到的80端口上运行的服务,确定是否执行以判断服务版本。插件A用于判断服务1的版本,若80端口上运行的服务不包括服务1,则插件A可以不运行。插件和插件之间通过知识库进行信息交流。
在本实施例中,针对所述扫描器,可以通过命令行、文件、环境变量三种配置方式实现扫描参数的控制。所述扫描参数可以包括:扫描目标列表、插件列表、超时时间、redis、日志等配置。使用Go语言标准库中的falag库实现命令行的解析,使用yaml格式的配置文件。所述扫描目标列表中包括需要被扫描的扫描目标,每个扫描目标可以用一个IP地址表示。所述插件列表中可以包括要使用的漏洞扫描插件的插件标识。在针对redis进行配置时,可以配置redis的地址、用户名、密码等,便于基于该配置便于将相关信息保存知识库中。针对日志进行配置时,可以配置输出的文件名、日志等级等,所述日志等级用于表示日志中需要记录的信息类型。
所述插件加载器用于根据配置加载漏洞扫描插件,并通过基于步骤S110获得的词法解析器进行解析。该解析过程可以分为:预加载和执行,在预加载过程中,插件加载器读取插件,词法解析器对插件进行插件依赖关系的分析及插件的优先级分析,以形成插件依赖链表。其中,不同等级的插件的执行顺序基于各插件所对应的优先级确定。然后,插件按照依赖链表依次执行,后面执行的插件可以通过知识库来引用前面执行的插件的结果。
其中,加载的具体漏洞扫描插件可以结合实际情况确定。比如,可以加载插件列表中对应的所有插件,也可以仅加载部分插件,或者,可以在用户或其他设备指定了不同扫描目标对应的漏洞扫描插件的情况下,针对某扫描目标进行扫描时,仅加载该扫描目标对应的漏洞扫描插件。
所述调度器可以利用Go语言Groutine特性对多个目标并行扫描。在该过程中,所述调度器可以将多个目标和多个插件划分到多个“worker”中执行,提高CPU利用率,加快扫描速度。其中,一个目标及该目标对应的插件被分配一个“worker”上,不同目标可位于不同的“worker”。
所述结果解析单元用于将每个扫描目标的扫描结果聚合,得到聚合结果;以及,在有插件生成了CPE信息的情况下,针对各插件生成的CPE信息,可以将该CPE信息与预设的组件表进行匹配,得到匹配结果。其中,所述组件表中包括不同组件各自对应的漏洞情况,经过与所述组件表的匹配,可以确定该CPE信息对应的漏洞是否存在。可以将上述聚合结果及匹配结果最终的输出的扫描汇总结果。
请参照图3,图3为图2中步骤S140包括的子步骤的流程示意图。在本实施例中,步骤S140可以包括子步骤S141~子步骤S142。
子步骤S141,根据预设的多个不同平台类型,将Go语言的扫描器文件通过交叉编译,得到与不同平台类型对应的二进制文件。
子步骤S142,针对各平台类型对应的二进制文件,根据该平台类型的二进制文件及所述多个漏洞扫描插件,生成与该平台类型对应的安装包。
比如,平台类型有:Windows、Linux、MacOS平台,则可以将Go语言的扫描器文件通过交叉编译,得到上述三种平台类型各自对应的二进制文件,即编译为二进制可执行程序。其中,Windows下的是.exe后缀的可执行文件,Linux和MacOS都是类Unix系统,没有后缀,就是可执行文件。在获得3种二进制文件后,可以分别根据一种二进制文件与所述多个漏洞扫描插件生成一个压缩包,以得到3个安装包。一个安装包中包括一个平台类型对应的二进制文件及所述多个漏洞扫描插件。如此,部署简单,且可以实现多个平台移植。
在本实施例中,使用Go语言实现漏洞扫描引擎,在需要对Nasl函数做调整时,直接修改源代码中Nasl语言的实现部分即可,因而可以方便地对Nasl函数实现进行控制,利于程序分析和优化。并且,可以集成资产扫描工具数据来扩展知识库信息。还可以通过对CPE的分析实现组件匹配功能,扩展漏洞扫描数据。还能够利用Go语言并发性能高的特点提高扫描效率。该引擎中使用现有Nasl插件语言,可以方便地实现对漏洞扫描插件的扩展。
请参照图4,图4为本申请实施例提供的漏洞扫描方法的流程示意图。在本实施例中,所述方法可以包括步骤S210~步骤S220。
步骤S210,向漏洞扫描引擎输入扫描参数。
其中,所述漏洞扫描引擎基于上述的漏洞扫描引擎实现方法得到。对所述扫描参数进行控制的方式包括通过命令行、文件、环境变量配置方式,所述扫描参数包括扫描目标列表及插件列表,所述扫描目标列表中包括至少一个扫描目标,所述插件列表中包括所述漏洞扫描插件的插件标识。
步骤S220,利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果。
在本实施例中,所述扫描汇总结果可以包括聚合结果及匹配结果。可通过图5所示方式获得所述扫描汇总结果。请参照图5,图5为图4中步骤S220包括的子步骤的流程示意图。在本实施例中,步骤S220可以包括子步骤S221~子步骤S223。
子步骤S221,基于所述扫描参数,所述扫描器针对各扫描目标执行相应的漏洞扫描插件,获得各漏洞扫描插件得到的扫描结果及CPE信息。
可选地,在所述漏洞扫描插件为Nasl插件时,插件的执行方式可如图6所示。请参照图6,图6为图5中子步骤S221包括的子步骤的流程示意图。在本实施例中,子步骤S221可以包括子步骤S2211~子步骤S2212。
子步骤S2211,利用所述插件加载器读取Nasl插件,并通过所述词法解析器对读取的Nasl插件进行解析,以获得插件依赖链表。
子步骤S2212,按照所述插件依赖链表依次执行所述Nasl插件,并将执行结果保存至知识库中,以便其他Nasl插件使用。
其中,所述解析包括插件依赖关系的分析及插件的优先级分析。
Nasl插件解析的过程可以分为预加载和执行。预加载过程中,通过对Nasl插件中的“script_dependices”函数中插件依赖的分析,并按照“script_category”函数中设置的分类,形成插件依赖链表,插件按照依赖链表依次执行,后面执行的插件可以通过知识库来引用前面执行的插件的结果。其中,“script_dependices”在插件中调用,用于设置该插件依赖的其他插件。每一个插件都会调用script_category函数。
比如,可根据script_category函数将运行需要的插件分为10个等级,先运行等级为1的插件,而等级为1的插件,又有script_depencies设置好的依赖关系,所以等级为1的插件也需要按照script_depencies函数设置的依赖关系来决定运行的先后顺序。因此,可以基于script_dependices函数及script_category函数得到的插件依赖链表。
另外,在所述扫描器执行漏洞扫描插件时,所述调度器可以利用Go语言Groutine特性,对所述多个扫描目标进行并行扫描,以提高CPU利用率、加快扫描速度。
通过执行漏洞扫描插件,可得到各漏洞扫描插件输出的扫描结果。部分漏洞扫描还会生成CPE信息。
子步骤S222,所述结果解析单元针对各扫描目标,将该扫描目标对应的扫描结果进行聚合,得到所述聚合结果。
通过对扫描结果进行聚合,可以使结果看起来更加直观。
子步骤S223,所述结果解析单元将各漏洞扫描插件得到的CPE信息与预设的组件表进行匹配,得到所述匹配结果。
其中,所述组件表中包括不同组件各自对应的漏洞情况。
为了执行上述实施例及各个可能的方式中的相应步骤,下面给出一种漏洞扫描引擎实现装置200及漏洞扫描装置300的实现方式,可选地,该装置可以采用上述图1所示的电子设备100的器件结构。需要说明的是,本实施例所提供的装置,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。
请参照图7,图7为本申请实施例提供的漏洞扫描引擎实现装置200的方框示意图。所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元。所述漏洞扫描引擎实现装置200可以包括:第一获得模块210、第二获得模块220及安装包生成模块230。
所述第一获得模块210,用于根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器。其中,所述目标语言为所述漏洞扫描插件使用的语言。
所述第一获得模块210,还用于利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元。
所述第二获得模块220,用于获得多个漏洞扫描插件。
所述安装包生成模块230,用于根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
请参照图8,图8为本申请实施例提供的漏洞扫描装置300的方框示意图。所述漏洞扫描装置300可以包括:控制模块310及扫描模块320。
所述控制模块310,用于向漏洞扫描引擎输入扫描参数。其中,所述漏洞扫描引擎基于所述的漏洞扫描引擎实现方法得到,对所述扫描参数进行控制的方式包括通过命令行、文件、环境变量配置方式,所述扫描参数包括扫描目标列表及插件列表,所述扫描目标列表中包括至少一个扫描目标,所述插件列表中包括所述漏洞扫描插件的插件标识。
所述扫描模块320,用于利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果。
可选地,上述模块可以软件或固件(Firmware)的形式存储于图1所示的存储器110中或固化于电子设备100的操作系统(Operating System,OS)中,并可由图1中的处理器120执行。同时,执行上述模块所需的数据、程序的代码等可以存储在存储器110中。
本申请实施例还提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述的漏洞扫描引擎实现方法或者漏洞扫描方法。
综上所述,本申请实施例提供一种漏洞扫描引擎实现方法、漏洞扫描方法、装置、电子设备及可读存储介质,漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元;根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;并利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;以及获得多个漏洞扫描插件;最后,根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。如此,基于Go语言实现漏洞扫描引擎,该引擎继承了Go语言高性能的特点,方便分析定位问题,部署方便,并且可以很方便地扩展漏洞扫描插件。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的可选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种漏洞扫描引擎实现方法,其特征在于,所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元,所述方法包括:
根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;
利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;
获得多个漏洞扫描插件;
根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
2.根据权利要求1所述的方法,其特征在于,
所述漏洞扫描插件为Nasl插件,所述目标语言的语法为Nasl语法,所述Nasl语法包括类型定义、基本运算符定义、算数操作、字符串操作、比较运算符、逻辑运算符、位运算符、循环控制流、变量定义、函数定义、函数调用中的至少一个语法;和/或,
所述待使用函数包括Nasl语言的内置函数及Nasl库函数,所述待使用函数包括知识库函数、报告生成函数、描述函数、胶水函数、网络函数、字符串操作函数、HTTP函数、IP操作函数、密码处理函数中的至少一种。
3.根据权利要求1所述的方法,其特征在于,在所述待使用函数包括知识库函数时,所述方法还包括:
基于Redis数据库构建知识库,其中,所述知识库函数用于对所述知识库进行操作,所述知识库用于记录扫描过程中发现的信息。
4.根据权利要求1-3中任意一项所述的方法,其特征在于,所述根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包,包括:
根据预设的多个不同平台类型,将Go语言的扫描器文件通过交叉编译,得到与不同平台类型对应的二进制文件;
针对各平台类型对应的二进制文件,根据该平台类型的二进制文件及所述多个漏洞扫描插件,生成与该平台类型对应的安装包。
5.一种漏洞扫描方法,其特征在于,所述方法包括:
向漏洞扫描引擎输入扫描参数,其中,所述漏洞扫描引擎基于权利要求1-4中任意一项所述的漏洞扫描引擎实现方法得到,对所述扫描参数进行控制的方式包括通过命令行、文件、环境变量配置方式,所述扫描参数包括扫描目标列表及插件列表,所述扫描目标列表中包括至少一个扫描目标,所述插件列表中包括所述漏洞扫描插件的插件标识;
利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果。
6.根据权利要求5所述的方法,其特征在于,所述扫描汇总结果包括聚合结果及匹配结果,所述利用所述漏洞扫描引擎根据所述扫描参数进行扫描,得到扫描汇总结果,包括:
基于所述扫描参数,所述扫描器针对各扫描目标执行相应的漏洞扫描插件,获得各漏洞扫描插件得到的扫描结果及CPE信息;
所述结果解析单元针对各扫描目标,将该扫描目标对应的扫描结果进行聚合,得到所述聚合结果;
所述结果解析单元将各漏洞扫描插件得到的CPE信息与预设的组件表进行匹配,得到所述匹配结果,其中,所述组件表中包括不同组件各自对应的漏洞情况。
7.根据权利要求6所述的方法,其特征在于,所述漏洞扫描插件为Nasl插件,所述扫描器针对各扫描目标执行相应的漏洞扫描插件,包括:
利用所述插件加载器读取Nasl插件,并通过所述词法解析器对读取的Nasl插件进行解析,以获得插件依赖链表,其中,所述解析包括插件依赖关系的分析及插件的优先级分析;
按照所述插件依赖链表依次执行所述Nasl插件,并将执行结果保存至知识库中,以便其他Nasl插件使用。
8.根据权利要求6所述的方法,其特征在于,在所述扫描目标列表中包括多个扫描目标时,所述扫描器针对各扫描目标执行相应的漏洞扫描插件,包括:
所述调度器利用Go语言Groutine特性,对所述多个扫描目标进行并行扫描。
9.一种漏洞扫描引擎实现装置,其特征在于,所述漏洞扫描引擎包括扫描器及漏洞扫描插件,所述扫描器包括词法解析器、待使用函数、插件加载器、调度器及结果解析单元,所述装置包括:
第一获得模块,用于根据yacc词法解析器的标准,使用Go语言实现目标语言的语法,以得到所述词法解析器,其中,所述目标语言为所述漏洞扫描插件使用的语言;
所述第一获得模块,还用于利用Go语言生成所述待使用函数、插件加载器、调度器及结果解析单元;
第二获得模块,用于获得多个漏洞扫描插件;
安装包生成模块,用于根据生成的所述扫描器及所述多个漏洞扫描插件,生成安装包。
10.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器可执行所述机器可执行指令以实现权利要求1-4中任意一项所述的漏洞扫描引擎实现方法,或实现权利要求5-8中任意一项所述的漏洞扫描方法。
CN202211224486.8A 2022-10-08 2022-10-08 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备 Pending CN115544518A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211224486.8A CN115544518A (zh) 2022-10-08 2022-10-08 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211224486.8A CN115544518A (zh) 2022-10-08 2022-10-08 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备

Publications (1)

Publication Number Publication Date
CN115544518A true CN115544518A (zh) 2022-12-30

Family

ID=84731689

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211224486.8A Pending CN115544518A (zh) 2022-10-08 2022-10-08 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备

Country Status (1)

Country Link
CN (1) CN115544518A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116436644A (zh) * 2023-03-15 2023-07-14 中国人民解放军61660部队 一种基于多引擎的大规模网络漏洞快速扫描方法、系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116436644A (zh) * 2023-03-15 2023-07-14 中国人民解放军61660部队 一种基于多引擎的大规模网络漏洞快速扫描方法、系统

Similar Documents

Publication Publication Date Title
US11216256B2 (en) Determining based on static compiler analysis that execution of compiler code would result in unacceptable program behavior
US8108456B2 (en) Method and apparatus for migrating the system environment on which the applications depend
US20090007131A1 (en) Automating the Life Cycle of a Distributed Computing Application
US8949812B2 (en) System and method for updating hard-coded dependencies
WO2021022713A1 (zh) 分布式的模块升级方法、装置及存储介质
US10514898B2 (en) Method and system to develop, deploy, test, and manage platform-independent software
US9405906B1 (en) System and method for enhancing static analysis of software applications
Duarte et al. An empirical study of docker vulnerabilities and of static code analysis applicability
CN113885849A (zh) 基于工业互联网平台的应用开发方法、装置及终端设备
CN115357898A (zh) 一种java组件的依赖分析方法、装置及介质
CN115544518A (zh) 漏洞扫描引擎实现方法、装置、漏洞扫描方法及电子设备
CN111159301A (zh) 一种基于智能合约的数据创建方法、装置、设备及存储介质
EP1696316B1 (en) Code morphing for testing
CN113935041A (zh) 面向实时操作系统设备的漏洞检测系统及方法
US8392469B2 (en) Model based distributed application management
KR100920414B1 (ko) 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법
Kröll et al. Aristoteles–dissecting apple’s baseband interface
CN113031964B (zh) 一种大数据应用的管理方法、装置、设备及存储介质
CN116578282A (zh) 代码生成方法、装置、电子设备及介质
CN113434217B (zh) 漏洞扫描方法、装置、计算机设备及介质
CN115859280A (zh) 内存马的检测方法、装置、设备及存储介质
CN114282221B (zh) 注入类漏洞检测方法、系统、终端及存储介质
CN113438273B (zh) 一种物联网设备中应用程序的用户级仿真方法及装置
KR100501412B1 (ko) 엔터프라이즈 자바 빈 컴포넌트 테스팅 장치 및 그 방법
Egele et al. Using static program analysis to aid intrusion detection

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