CN115688113A - 基于静态扫描的漏洞检测方法、装置、设备及存储介质 - Google Patents
基于静态扫描的漏洞检测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115688113A CN115688113A CN202211281495.0A CN202211281495A CN115688113A CN 115688113 A CN115688113 A CN 115688113A CN 202211281495 A CN202211281495 A CN 202211281495A CN 115688113 A CN115688113 A CN 115688113A
- Authority
- CN
- China
- Prior art keywords
- open source
- source component
- vulnerability
- version number
- file
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请涉及一种基于静态扫描的漏洞检测方法、装置、设备及存储介质。所述方法包括:通过对项目文件执行静态扫描,得到项目文件的开源组件的标识信息和开源组件的版本号信息,根据开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件,当存在与所述标识信息对应的漏洞开源组件时,读取漏洞开源组件的版本号区间,根据开源组件的版本号信息与漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。本申请通过对静态扫描可以避免动态编译时因编译错误导致扫描结果出错的问题,且由于静态扫描速度更快,可以快速检测出项目文件中存在漏洞的开源组件。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于静态扫描的漏洞检测方法、装置、设备及存储介质。
背景技术
目前,不同类型的应用程序均对应有项目源代码,应用程序中通常含有大量第三方开源组件供项目源代码调用,若第三方组件开源组件存在漏洞,会对应用程序的数据安全造成隐患,因此需要检测应用程序中的开源组件是否存在漏洞。现有技术中通常是对代码进行编译后对编译结果进行扫描以检测开源组件是否存在漏洞,但该方式扫描速度较慢,且由于可能出现编译错误导致扫描结果出错的问题。
发明内容
鉴于以上内容,本申请提供一种基于静态扫描的漏洞检测方法、装置、设备及存储介质,其目的在于解决上述技术问题。
第一方面,本申请提供一种基于静态扫描的漏洞检测方法,该方法包括:
获取待检测项目的项目文件;
对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
优选地,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为直接依赖文件时,解析得到所述直接依赖文件中的开源组件的属性值;
对所述属性值执行替换操作后,定位所述直接依赖文件中开源组件所属的代码行号;
根据所述代码行号确定所述所述直接依赖文件中的开源组件的版本号信息。
优选地,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为间接依赖文件时,利用预设编译工具获取所述间接依赖文件对应的开源组件的标识信息和开源组件的版本号信息。
优选地,在获取待检测项目的项目文件之后,所述方法还包括:
对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
优选地,所述对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息,包括:
对所述项目文件的代码包进行扫描,并判断扫描到的代码包的类型;
若所述代码包为zip类型的代码包,读取所述代码包的名称,基于所述名称得到所述代码包中开源组件的标识信息和开源组件的版本号信息;
若所述代码包为tar类型的代码包,解析lib目录下的文件得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
优选地,所述根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件,包括:
检测所述开源组件的版本号信息是否落入所述漏洞开源组件的版本号区间;
若是,判断所述开源组件为存在漏洞的开源组件;
若否,判断所述开源组件为不存在漏洞的开源组件。
优选地,所述获取待检测项目的项目文件,包括:
通过接口获取代码仓库的目录文件;
扫描所述目录文件,得到所述待检测项目中不同编译工具编译的项目文件。
第二方面,本申请提供一种基于静态扫描的漏洞检测装置,该基于静态扫描的漏洞检测装置包括:
获取模块:用于获取待检测项目的项目文件;
扫描模块:用于对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
判断模块:用于根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
读取模块:用于当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
检测模块:用于根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
第三方面,本申请提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现第一方面任一项实施例所述的基于静态扫描的漏洞检测方法的步骤。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项实施例所述的基于静态扫描的漏洞检测方法的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
通过对项目文件执行静态扫描,得到项目文件的开源组件的标识信息和开源组件的版本号信息,根据开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件,当存在与所述标识信息对应的漏洞开源组件时,读取漏洞开源组件的版本号区间,根据开源组件的版本号信息与漏洞开源组件的版本号区间,可以检测扫描到的开源组件是否为存在漏洞的开源组件,通过对静态扫描可以避免动态编译时因编译错误导致扫描结果出错的问题,且由于静态扫描速度更快,可以快速检测出项目文件中存在漏洞的开源组件。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请基于静态扫描的漏洞检测方法较佳实施例的流程示意图;
图2为本申请基于静态扫描的漏洞检测装置较佳实施例的模块示意图;
图3为本申请电子设备较佳实施例的示意图;
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本申请提供一种基于静态扫描的漏洞检测方法。参照图1所示,为本申请基于静态扫描的漏洞检测方法的实施例的方法流程示意图。该方法可以由一个电子设备(例如,服务器)执行,该电子设备可以由软件和/或硬件实现。基于静态扫描的漏洞检测方法包括:
步骤S10:获取待检测项目的项目文件;
步骤S20:对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
步骤S30:根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
步骤S40:当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
步骤S50:根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
本实施例中,通过API接口获取待检测项目的项目文件,项目文件可以是pom.xml或build.gradle等文件,需要说明的是,项目文件是距离当前时间最近的项目文件,通过commit信息可以获取到项目的最后一个提交人,从而得到距离当前时间最近的项目文件,例如,通过API接口获取项目文件中所有的分支代码,对比每个分支代码的最后一次提交时间,取最后一次的提交时间的项目文件。
由于项目文件中具有开源组件的标识信息和版本号信息,在获取到待检测项目的项目文件之后,对项目文件执行静态扫描,可以得到项目文件中的开源组件的标识信息和开源组件版本号信息。由于对项目文件静态扫描时可以定位出开源组件在项目文件中所处的代码行数,开源组件版本号信息可以是通过开源组件的版本号信息所处的代码行数信息得到的,例如,在项目文件中的第29行有开源组件的版本号信息,该开源组件的版本号为1.2.16。通过对项目文件静态扫描定位出开源组件在项目文件中所处的代码行数,在后续需要对开源组件进行修改时,可以根据行数快速定位开源组件。
由于开源组件与开源组件之间可能存在依赖关系,对项目文件的代码进行扫描,判断项目文件中是否存在依赖文件,若是,根据依赖文件的类型可以读取依赖文件对应的开源组件的标识信息和开源组件的版本号信息,通过查找项目文件中的依赖文件可以查找出项目文件中所有具有依赖关系的开源组件。依赖文件包括直接依赖文件和间接依赖文件。例如,B依赖于C,C依赖于D,则B与C是直接依赖,B与D是间接依赖。
之后根据开源组件的标识信息,判断预设漏洞库中是否存在与标识信息对应的漏洞开源组件,当存在与标识信息对应的漏洞开源组件时,说明项目文件扫描出的开源组件可能是存在漏洞的开源组件(即该开源组件的某些版本可能存在漏洞),此时需要通过版本号进一步判断项目文件扫描到的开源组件是否为存在漏洞的开源组件,读取与标识信息对应的漏洞开源组件的版本号区间,根据开源组件的版本号信息与漏洞开源组件的版本号区间,可以检测项目文件扫描到的开源组件是否为存在漏洞的开源组件。具体地,所述根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件,包括:
检测所述开源组件的版本号信息是否落入所述漏洞开源组件的版本号区间;
若是,判断所述开源组件为存在漏洞的开源组件;
若否,判断所述开源组件为不存在漏洞的开源组件。
例如,若在项目文件中扫描出开源组件A的标识信息,则根据开源组件A的标识信息,查找预设漏洞库中是否存在开源组件A,当预设漏洞库存在开源组件A时,说明开源组件A的某些版本可能存在漏洞,再读取预设漏洞库中与开源组件A对应的漏洞开源组件的版本号区间,例如:[1.1,2.2],若开源组件A的版本号为2.3,即开源组件A的版本号没有落入区间,说明该版本的开源组件A为不存在漏洞的开源组件,若开源组件A的版本号为2.0,即开源组件A的版本号落入了区间,说明该版本的开源组件A为存在漏洞的开源组件。进一步得,当判断开源组件为存在漏洞的开源组件时,还可以对该开源组件执行修复操作。
本申请通过对项目文件执行静态扫描,得到项目文件的开源组件的标识信息和开源组件的版本号信息,根据开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件,当存在与所述标识信息对应的漏洞开源组件时,读取漏洞开源组件的版本号区间,根据开源组件的版本号信息与漏洞开源组件的版本号区间,可以检测扫描到的开源组件是否为存在漏洞的开源组件,通过对静态扫描可以避免动态编译时因编译错误导致扫描结果出错的问题,且由于静态扫描速度更快,可以快速检测出项目文件中存在漏洞的开源组件。
在一个实施例中,所述获取待检测项目的项目文件,包括:
通过接口获取代码仓库的目录文件;
扫描所述目录文件,得到所述待检测项目中不同编译工具编译的项目文件。
通过对接Gitlab等代码仓库的API接口获取代码仓库的目录文件,扫描目录文件,得到待检测项目中不同编译工具编译的项目文件。例如,maven工具编译的pom.xml文件,golang工具编译的go.mod文件,npm工具编译的package.json文件等。
在一个实施例中,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为直接依赖文件时,解析得到所述直接依赖文件中的开源组件的属性值;
对所述属性值执行替换操作后,定位所述直接依赖文件中开源组件所属的代码行号;
根据所述代码行号确定所述所述直接依赖文件中的开源组件的版本号信息。
当依赖文件为直接依赖文件时,解析直接依赖文件得到开源组件的属性值,由于根据该属性值无法识别出开源组件的版本号,因此还需要替换为可识别的版本号,对属性值进行替换后定位出直接依赖文件中开源组件所属的代码行号,由于代码中具有开源组件的版本号信息,根据代码行号可以确定直接依赖文件中开源组件的版本号信息。
在一个实施例中,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为间接依赖文件时,利用预设编译工具获取所述间接依赖文件对应的开源组件的标识信息和开源组件的版本号信息。
当依赖文件为间接依赖文件时,通过编译工具可以直接获取到间接依赖文件,再得到依间接赖文件的开源组件的标识信息和开源组件的版本号信息。
在一个实施例中,在获取待检测项目的项目文件之后,所述方法还包括:
对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
由于项目文件的代码包中也含有开源组件,因此还可以对项目文件的代码包进行扫描,对代码包进行扫描后,可以得到代码包中开源组件的标识信息和开源组件的版本号信息。
具体地,所述对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息,包括:
对所述项目文件的代码包进行扫描,并判断扫描到的代码包的类型;
若所述代码包为zip类型的代码包,读取所述代码包的名称,基于所述名称得到所述代码包中开源组件的标识信息和开源组件的版本号信息;
若所述代码包为tar类型的代码包,解析lib目录下的文件得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
项目文件中还包括代码包(例如,jar包),代码包可能中含有开源组件,因此可以对项目文件的代码包进行扫描,并判断扫描到的代码包的类型,若代码包为zip类型的代码包,则读取代码包的名称,根据代码包的名称得到代码包中开源组件的标识信息和开源组件的版本号信息,例如,读取BOOT-INF/lib WEB-INF/lib文件名,得到jar包的名称。若代码包为tar类型的代码包,由于文件名中有版本号信息,通过解析lib目录下的文件可以得到代码包中开源组件的标识信息和开源组件的版本号信息。
参照图2所示,为本申请基于静态扫描的漏洞检测装置100的功能模块示意图。
本申请所述基于静态扫描的漏洞检测装置100可以安装于电子设备中。根据实现的功能,所述基于静态扫描的漏洞检测装置100可以包括获取模块110、扫描模块120、判断模块130、读取模块140及检测模块150。本申请所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。
在本实施例中,关于各模块/单元的功能如下:
获取模块110:用于获取待检测项目的项目文件;
扫描模块120:用于对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
判断模块130:用于根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
读取模块140:用于当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
检测模块150:用于根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
在一个实施例中,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为直接依赖文件时,解析得到所述直接依赖文件中的开源组件的属性值;
对所述属性值执行替换操作后,定位所述直接依赖文件中开源组件所属的代码行号;
根据所述代码行号确定所述所述直接依赖文件中的开源组件的版本号信息。
在一个实施例中,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为间接依赖文件时,利用预设编译工具获取所述间接依赖文件对应的开源组件的标识信息和开源组件的版本号信息。
在一个实施例中,扫描模块还用于:
对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
在一个实施例中,所述对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息,包括:
对所述项目文件的代码包进行扫描,并判断扫描到的代码包的类型;
若所述代码包为zip类型的代码包,读取所述代码包的名称,基于所述名称得到所述代码包中开源组件的标识信息和开源组件的版本号信息;
若所述代码包为tar类型的代码包,解析lib目录下的文件得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
在一个实施例中,所述根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件,包括:
检测所述开源组件的版本号信息是否落入所述漏洞开源组件的版本号区间;
若是,判断所述开源组件为存在漏洞的开源组件;
若否,判断所述开源组件为不存在漏洞的开源组件。
在一个实施例中,所述获取待检测项目的项目文件,包括:
通过接口获取代码仓库的目录文件;
扫描所述目录文件,得到所述待检测项目中不同编译工具编译的项目文件。
参照图3所示,为本申请电子设备1较佳实施例的示意图。
该电子设备1包括但不限于:存储器11、处理器12、显示器13及通信接口14。所述电子设备1通过通信接口14连接网络。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子设备1的内部存储单元,例如该电子设备1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子设备1的外部存储设备,例如该电子设备1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子设备1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子设备1的操作系统和各类应用软件,例如基于静态扫描的漏洞检测程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子设备1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行基于静态扫描的漏洞检测程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子设备1中处理的信息以及用于显示可视化的工作界面。
通信接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该通信接口14通常用于在所述电子设备1与其它设备之间建立通信连接。
图3仅示出了具有组件11-14以及基于静态扫描的漏洞检测程序10的电子设备1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子设备1还可以包括用户接口,用户接口可以包括显示器(Display),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的界面。
该电子设备1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的基于静态扫描的漏洞检测程序10时可以实现如下步骤:
获取待检测项目的项目文件;
对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
所述存储设备可以为电子设备1的存储器11,也可以为与电子设备1通讯连接的其它存储设备。
关于上述步骤的详细介绍,请参照上述图2关于基于静态扫描的漏洞检测装置100实施例的功能模块图以及图1关于基于静态扫描的漏洞检测方法实施例的流程图的说明。
此外,本申请实施例还提出一种计算机可读存储介质,所述计算机可读存储介质可以是非易失性的,也可以是易失性的。该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括存储数据区和存储程序区,存储程序区存储有基于静态扫描的漏洞检测程序10,所述基于静态扫描的漏洞检测程序10被处理器执行时实现如下操作:
获取待检测项目的项目文件;
对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
本申请之计算机可读存储介质的具体实施方式与上述基于静态扫描的漏洞检测方法的具体实施方式大致相同,在此不再赘述。
需要说明的是,上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,电子装置,或者网络设备等)执行本申请各个实施例所述的方法。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种基于静态扫描的漏洞检测方法,其特征在于,所述方法包括:
获取待检测项目的项目文件;
对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
2.如权利要求1所述的基于静态扫描的漏洞检测方法,其特征在于,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为直接依赖文件时,解析得到所述直接依赖文件中的开源组件的属性值;
对所述属性值执行替换操作后,定位所述直接依赖文件中开源组件所属的代码行号;
根据所述代码行号确定所述所述直接依赖文件中的开源组件的版本号信息。
3.如权利要求1所述的基于静态扫描的漏洞检测方法,其特征在于,所述根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息,包括:
当所述依赖文件为间接依赖文件时,利用预设编译工具获取所述间接依赖文件对应的开源组件的标识信息和开源组件的版本号信息。
4.如权利要求1所述的基于静态扫描的漏洞检测方法,其特征在于,在获取待检测项目的项目文件之后,所述方法还包括:
对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
5.如权利要求4所述的基于静态扫描的漏洞检测方法,其特征在于,所述对所述项目文件的代码包进行扫描,得到所述代码包中开源组件的标识信息和开源组件的版本号信息,包括:
对所述项目文件的代码包进行扫描,并判断扫描到的代码包的类型;
若所述代码包为zip类型的代码包,读取所述代码包的名称,基于所述名称得到所述代码包中开源组件的标识信息和开源组件的版本号信息;
若所述代码包为tar类型的代码包,解析lib目录下的文件得到所述代码包中开源组件的标识信息和开源组件的版本号信息。
6.如权利要求1所述的基于静态扫描的漏洞检测方法,其特征在于,所述根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件,包括:
检测所述开源组件的版本号信息是否落入所述漏洞开源组件的版本号区间;
若是,判断所述开源组件为存在漏洞的开源组件;
若否,判断所述开源组件为不存在漏洞的开源组件。
7.如权利要求1所述的基于静态扫描的漏洞检测方法,其特征在于,所述获取待检测项目的项目文件,包括:
通过接口获取代码仓库的目录文件;
扫描所述目录文件,得到所述待检测项目中不同编译工具编译的项目文件。
8.一种基于静态扫描的漏洞检测装置,其特征在于,所述装置包括:
获取模块:用于获取待检测项目的项目文件;
扫描模块:用于对所述项目文件的代码进行扫描,判断所述项目文件中是否存在依赖文件,当存在依赖文件时,根据所述依赖文件的类型,读取所述依赖文件对应的开源组件的标识信息和开源组件的版本号信息;
判断模块:用于根据所述开源组件的标识信息,判断预设漏洞库中是否存在与所述标识信息对应的漏洞开源组件;
读取模块:用于当存在与所述标识信息对应的漏洞开源组件时,读取所述漏洞开源组件的版本号区间;
检测模块:用于根据所述开源组件的版本号信息与所述漏洞开源组件的版本号区间,检测所述开源组件是否为存在漏洞的开源组件。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至7中任一项所述的基于静态扫描的漏洞检测方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述基于静态扫描的漏洞检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211281495.0A CN115688113A (zh) | 2022-10-19 | 2022-10-19 | 基于静态扫描的漏洞检测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211281495.0A CN115688113A (zh) | 2022-10-19 | 2022-10-19 | 基于静态扫描的漏洞检测方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115688113A true CN115688113A (zh) | 2023-02-03 |
Family
ID=85065697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211281495.0A Pending CN115688113A (zh) | 2022-10-19 | 2022-10-19 | 基于静态扫描的漏洞检测方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115688113A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879862A (zh) * | 2023-03-08 | 2023-03-31 | 广州嘉为科技有限公司 | 一种制品安全管控方法、装置及存储介质 |
-
2022
- 2022-10-19 CN CN202211281495.0A patent/CN115688113A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115879862A (zh) * | 2023-03-08 | 2023-03-31 | 广州嘉为科技有限公司 | 一种制品安全管控方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110990020A (zh) | 一种软件编译方法、装置及电子设备和存储介质 | |
US10489591B2 (en) | Detection system and method thereof | |
CN111538942B (zh) | 表达式处理方法、电子装置及存储介质 | |
CN111459495B (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
KR101999656B1 (ko) | 라이선스 검증 방법, 그 장치 및 이를 실행하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체 | |
CN110825619A (zh) | 接口测试用例自动生成方法、装置及存储介质 | |
CN108874464B (zh) | 中间件自动扫描装配方法、装置及存储介质 | |
CN115688113A (zh) | 基于静态扫描的漏洞检测方法、装置、设备及存储介质 | |
CN110866258A (zh) | 快速定位漏洞方法、电子装置及存储介质 | |
CN112434305A (zh) | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 | |
CN113761012A (zh) | 遥感数据的分析可视化方法、服务器及存储介质 | |
CN112182584A (zh) | 安全校验方法及装置、电子设备、存储介质 | |
CN108255509B (zh) | 应用部署方法、装置、设备及可读存储介质 | |
CN111459812A (zh) | 接口测试用例生成方法、电子装置及存储介质 | |
CN110688315A (zh) | 接口代码检测报告生成方法、电子装置及存储介质 | |
CN111767262A (zh) | 日志展示方法、装置、设备及存储介质 | |
CN108829575B (zh) | 测试案例推荐方法、电子装置及可读存储介质 | |
CN111782239A (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
CN110837500A (zh) | 基于socal内嵌窗口的数据筛选方法、装置以及计算机设备 | |
CN112632551B (zh) | 一种第三方库信息泄露检测方法及装置 | |
CN105760264A (zh) | 一种检测服务器故障硬件设备的方法及装置 | |
CN106648788B (zh) | 应用程序的安装方法及装置 | |
CN114625381A (zh) | 一种隐私政策文本获取方法、系统及终端 | |
CN110471837A (zh) | 程序检测方法、装置及计算机可读存储介质 | |
CN110764784B (zh) | 一种识别三方so文件的方法、智能终端及存储介质 |
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 |