掌桥专利:专业的专利平台
掌桥专利
首页

容器镜像检测方法和装置、电子设备、存储介质

文献发布时间:2023-06-19 10:29:05


容器镜像检测方法和装置、电子设备、存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及容器镜像检测方法和装置、电子设备、存储介质。

背景技术

随着计算机的发展,相关镜像产品越来越多,其中,常见的镜像产品包括容器镜像。容器镜像是一种存储于镜像服务器的静态资源,并且,容器镜像是对应用程序的代码及其运行环境进行标准化封装,从而得到的一种特殊的文件系统。而容器是基于容器镜像运行的,容器镜像通过启动命令会以容器的形式运行。即,若容器镜像出现异常(例如容器镜像中存在漏洞数据),则对应的容器也存在不安全影响,从而可能导致黑客篡改镜像元数据并植入恶意代码来实现攻击。

发明内容

本公开的主要目的在于提出一种容器镜像检测方法和装置、电子设备、存储介质,可以实现自动扫描容器镜像的漏洞数据,并提高漏洞扫描的准确性,以提高容器安全性。

实现上述目的,本公开的第一方面提出了一种容器镜像检测方法,包括:

获取待检测的原始容器镜像;

对所述原始容器镜像进行打包,得到初步容器镜像;

对所述初步容器镜像进行解压,得到所述目标容器镜像;

通过Clair工具对所述目标容器镜像进行特征提取,得到特征数据;

通过所述Clair工具将所述特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据。

在一些实施例中,所述方法还包括:

对所述目标容器镜像进行标记;

将标记后的所述目标容器镜像进行推送;

对推送的所述目标容器镜像进行扫描。

在一些实施例中,所述方法还包括:

若查询到所述漏洞数据,则生成漏洞报告;其中,所述漏洞报告包括漏洞当前版本信息和修复版本信息。

在一些实施例中,所述方法还包括:

根据所述漏洞报告和预设的当前基础镜像生成更新基础镜像;所述更新基础镜像用于修复所述漏洞数据。

在一些实施例中,所述目标容器镜像包括分层文件和描述文件,所述分层文件为目标容器镜像分层数据,所述方法还包括:

调用每一所述描述文件;

根据每一所述描述文件的层序提交所述目标容器镜像分层数据。

在一些实施例中,所述方法还包括:

获取所述目标容器镜像所在仓库的运行状态;

若所述目标容器镜像所在仓库的运行状态为正常状态,则拉取所述目标容器镜像。

在一些实施例中,所述方法还包括:

清理扫描成功后的打包文件,其中,所述打包文件为tar包。

为实现上述目的,本公开的第二方面提出了一种容器镜像检测装置,包括:

镜像获取模块,用于获取待检测的原始容器镜像;

镜像打包模块,用于对所述原始容器镜像进行打包,得到初步容器镜像;

镜像解压模块,用于对所述初步容器镜像进行解压,得到所述目标容器镜像;

特征提取模块,用于通过Clair工具对所述目标容器镜像进行特征提取,得到特征数据;

镜像扫描模块,用于通过所述Clair工具将所述特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据。

为实现上述目的,本公开的第三方面提出了一种电子设备,包括:

至少一个存储器;

至少一个处理器;

至少一个程序;

所述程序被存储在存储器中,处理器执行所述至少一个程序以实现本公开如上述第一方面所述的方法。

为实现上述目的,本公开的第四方面提出了一种存储介质,该存储介质是计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行:

如上述第一方面所述的方法。

本公开提出的容器镜像检测方法和装置、电子设备、存储介质,通过获取待检测的原始容器镜像,并对原始容器镜像进行打包,并对打包后得到的初步容器镜像进行解压,再通过Clair工具对解压后得到的目标容器镜像进行特征提取,及将进行特征提取的特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据,从而可以实现自动扫描容器镜像的漏洞数据,并提高漏洞扫描的准确性,以提高容器安全性。

附图说明

图1是本公开实施例提供的容器镜像检测方法的流程图。

图2是本公开另一实施例提供的容器镜像检测方法的部分流程图。

图3是本公开实施例提供的容器镜像检测装置的功能模块图。

图4是本公开实施例提供的电子设备的硬件结构示意图。

具体实施方式

为了使本公开的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本公开进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本公开,并不用于限定本公开。

需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本公开实施例的目的,不是旨在限制本公开。

首先,对本公开中涉及的若干名词和技术进行解析:

公共漏洞和暴露(Common Vulnerabilities&Exposures,CVE):CVE是国际著名的安全漏洞库,也是对已知漏洞和安全缺陷的标准化名称的列表;CVE类似一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称;使用一个共同的名字,可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中共享数据;如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。

容器(container):容器是指是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件;容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性;容器是对应用程序构建、分发、运行的统一平台,用于实现应用程序的自动化安装、部署及升级。

Clair:Clair架构主要包括以下六个模块:一、获取器(Fetcher),用于从公共源收集漏洞数据;二、检测器(Detector),用于指出容器镜像中包含的Feature;三、容器格式器(Image Format)是Clair已知的容器镜像格式,包括Docker和ACI;四、通知钩子(Notification Hook),当新的漏洞被发现时或者已经存在的漏洞发生改变时通知用户/机器;五、数据库,存储容器中各个层以及漏洞;六、Worker,每个Post Layer都会启动一个worker进行Layer Detect。Clair容器是一种扫描工具。

Tomcat容器:用于给镜像的分层提供下载地址。

Postgres容器:用于存放漏洞-特征匹配数据。

Docker:是指容器化技术,用于支持创建和实验Linux Container(容器);Docker是一个开源的应用容器引擎,用于运行容器;借助Docker,可以将容器当做重量轻、模块化的虚拟机来使用,同时,还将获得高度的灵活性,从而实现对容器的高效创建、部署和复制,并能将其从一个环境顺利迁移至另外一个环境;Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化;容器可以完全使用沙箱机制,相互之间不会有任何接口。一般地,一个完整的Docker有以下几个部分组成:Docker Client(客户端)、Docker Daemon(守护进程)、Docker Image(镜像)和Docker Container(容器)。

Registry:镜像存储。

Docker Registry:是Docker镜像仓库,即存储Docker镜像的仓库。

镜像仓库harbor:是一种容器镜像仓库,harbor是在Docker Registry(镜像存储)上进行了相应的扩展。

网络钩子(Webhook):是一种通过自定义回调函数来增加或更改网页表现的方法;这些回调可被可能与原始网站或应用相关的第三方用户及开发者保存、修改与管理;当此事件发生时,原网站将向为网络钩子配置的URL发送HTTP请求;用户可配置它们引发网页上的事件以调用另一个网站的行为。

本公开实施例提供容器镜像检测方法和装置、电子设备、读存储介质,具体通过如下实施例进行说明,首先描述本公开实施例中的容器镜像检测方法。

本公开实施例提供的容器镜像检测方法,可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机或者智能手表等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现容器镜像检测方法的应用等,但并不局限于以上形式。

图1是本公开实施例提供的容器镜像检测方法的一个可选的流程图,图1中的方法包括步骤101至步骤105。

步骤101、获取待检测的原始容器镜像;

步骤102、对原始容器镜像进行打包,得到初步容器镜像;

步骤103、对初步容器镜像进行解压,得到目标容器镜像;

步骤104、通过Clair工具对目标容器镜像进行特征提取,得到特征数据;

步骤105、通过Clair工具将特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据。

在一些实施例,CVE漏洞数据库包括Postgres容器。

在一具体应用场景中,在执行本公开实施例提供的容器镜像检测方法之前,需先启动容器,需要启动的容器包括Tomcat容器、Postgres容器,Clair容器;其中,Tomcat容器用于给容器镜像的分层提供下载地址;Postgres容器,用于存放漏洞-特征匹配数据;Clair容器为扫描工具。具体地,启动Clair容器可以为:新建目录/opt/deploy/clair/config,在该目录下新建文件config.yml;并配置相应的端口,例如,可以配置扫描端口为6060,配置检查端口为6061。

更进一步地,Postgres容器必须在Clair容器之前启动,否则,Clair无法连接至数据库,从而会导致直接停止容器。

步骤105中,通过将特征数据与Postgres容器存放的漏洞-特征匹配数据进行比对,以查询漏洞数据。

另外,本公开实施例,在执行扫描之前,需先配置环境参数,具体包括:

搭建相应的虚拟机;

构建harbor私有仓库;

集成Clair工具。

具体地,构建harbor私有仓库包括:安装docker和docke-compose、安装Harbor、修改配置文件(例如修改虚拟机IP地址)。

在一些实施例的步骤102中,对原始容器镜像进行打包后得到的得到初步容器镜像为tar包;其中,tar是一种打包工具,生成的包通常也用tar作为扩展名,为tar包。

在一些实施例中,目标容器镜像包括分层文件和描述文件;分层文件为目标容器镜像分层数据。

在一些实施例的步骤103中,对tar包进行解压、并解压至tar包至tomcat的ROOT目录(根目录),得到每一个镜像的分层文件及描述文件。

请参阅图2,在一些实施例,容器镜像检测方法,还包括步骤201-步骤203:

步骤201、对目标容器镜像进行标记;

步骤202、将标记后的目标容器镜像进行推送;

步骤203、对推送的目标容器镜像进行扫描。具体地,步骤203之后,执行步骤104。

在一些实施例中,步骤201之前,容器镜像检测方法,还包括:

拉取需要扫描的目标容器镜像。具体地,在一具体应用场景中,在新建项目中,将需要扫描的目标容器镜像拉取至新建项目中,然后对拉取的目标容器镜像进行标记。

在一些实施例中,容器镜像检测方法还包括:

若查询到漏洞数据,则生成漏洞报告;其中,漏洞报告包括漏洞当前版本信息和修复版本信息。

具体地,通过版本信息关联CVE漏洞数据库,并汇总目标容器镜像中存在的漏洞数据。

在一些实施例中,方法还包括:

根据漏洞报告和预设的当前基础镜像生成更新基础镜像;更新基础镜像用于修复漏洞数据。

步骤103之后,容器镜像检测方法,还包括:

调用每一描述文件;

根据描述文件的层序提交目标容器镜像分层数据。

具体地,通过Clair API根据描述文件的层序提交目标容器镜像分层数据。具体地,通过Clair API提交目标容器镜像分层数据时,若postLayers为false时,由于此时已经提交过目标容器镜像分层数据,可以利用最后一层的ID号直接查询漏洞。并且,postgres容器会将已经查询过的镜像漏洞进行存储,提交完目标容器镜像分层数据,可以使用最后一层的ID号获取漏洞数据。

更进一步地,由于需要留下目标容器镜像的分层描述文件(manifest.json),其中,分层描述文件存放着该目标容器镜像的分层信息,包括分层ID号,分层tar包的地址等;因此,后续可以依据该分层描述文件获取到最后一层的ID号,并调用Clair API直接获取到该目标容器镜像的扫描结果。若将将扫描结果单独存放至CVE漏洞数据库的话,那可以在扫描成功后删除整个解压目录。

在一些实施例中,目标容器镜像位于镜像仓库harbor中,容器镜像检测方法,还包括:

获取目标容器镜像所在仓库的运行状态;

若目标容器镜像所在仓库的运行状态为正常状态,则拉取目标容器镜像。

若目标容器镜像所在仓库的运行状态为异常状态,则无法拉取目标容器镜像。

在一些实施例中,容器镜像检测方法,还包括:

检测断tomcat容器、clair容器、postgres容器的运行状态;

若tomcat容器、clair容器、postgres容器的至少一容器的运行状态为异常状态,则进行预警提示。

具体地,若目标容器镜像所在仓库的运行状态为正常状态,且clair容器、postgres容器的运行状态为正常状态,。若出现任何异常状态,则Clair工具会自动去拉取漏洞数据插入CVE漏洞数据库中,则Clair工具无法拉取漏洞数据,并进行相应的预警提示。本公开实施例,对预警提示的方式不做限定。

在一些实施例中,容器镜像检测方法,还包括:

将查询出漏洞数据的目标容器镜像进行记录和拦截。具体地,若查询出漏洞数据,则将查询出的漏洞数据的目标容器镜像进行记录和拦截,避免存在漏洞数据的目标容器镜像进行部署。本公开实施例中,通过Webhook将查询出漏洞数据的目标容器镜像进行记录和拦截,提高了容器的安全性。

在一些实施例中,容器镜像检测方法,还包括:

清理扫描成功后的打包文件,打包文件为tar包;具体地,清理解压出来的所有的tar包文件,从而释放存储空间;由于解压目录下存储了大量的tar包文件,若不及时清理,容易造成解压目录的异常庞大,例如,在执行完一次镜像扫描后,可能会生成30G的tar包文件,若不及时清理,则会占用较大存储空间。

本公开实施例中,镜像仓库harbor整合Clair工具,在Clair API应用服务端封装harborAPI接口,从而实现了对容器镜像进行安全扫描,Clair工具根据CVE资源库进行漏洞匹配扫描,遍历所有镜像中的文件系统,逐个检查软件包是否包含漏洞数据;本公开实施例中,还可以通过设置定时扫描(例如以天为单位、以周为单位或者以月为单位)对所有镜像进行扫描。

为实现上述目的,请参阅图3,本公开的第二方面提出了一种容器镜像检测装置,用于实现上述容器镜像检测方法,该容器镜像检测装置,包括:

镜像获取模块301,用于获取待检测的原始容器镜像;

镜像打包模块302,用于对原始容器镜像进行打包,得到初步容器镜像;

镜像解压模块303,用于对初步容器镜像进行解压,得到目标容器镜像;

特征提取模块304,用于通过Clair工具对目标容器镜像进行特征提取,得到特征数据;

镜像扫描模块305,用于通过Clair工具将特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据。

本公开实施例提出的容器镜像检测方法,通过获取待检测的原始容器镜像,并对原始容器镜像进行打包,并对打包后得到的初步容器镜像进行解压,再通过Clair工具对解压后得到的目标容器镜像进行特征提取,及将进行特征提取的特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据,从而可以实现自动扫描容器镜像的漏洞数据,并提高漏洞扫描的准确性,从而提高容器安全性。本公开实施例还通过清理扫描成功后的打包文件,从而可以释放存储空间。此外,通过Webhook将查询出漏洞数据的目标容器镜像进行记录和拦截,提高了容器的安全性。

本公开实施例还提供了一种电子设备,包括:

至少一个存储器;

至少一个处理器;

至少一个程序;

所述程序被存储在存储器中,处理器执行所述至少一个程序以实现本公开实施例上述容器镜像检测方法。该电子设备可以为包括手机、平板电脑、个人数字助理(PersonalDigital Assistant,简称PDA)、车载电脑等任意智能终端。

请参阅图4,图4示意了另一实施例的电子设备的硬件结构,电子设备包括:

处理器401,可以采用通用的CPU(CentralProcessingUnit,中央处理器)、微处理器、应用专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本公开实施例所提供的技术方案;

存储器402,可以采用ROM(ReadOnlyMemory,只读存储器)、静态存储设备、动态存储设备或者RAM(RandomAccessMemory,随机存取存储器)等形式实现。存储器402可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器402中,并由处理器401来调用执行本公开实施例的容器镜像检测方法;

输入/输出接口403,用于实现信息输入及输出;

通信接口404,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;和

总线405,在设备的各个组件(例如处理器401、存储器402、输入/输出接口403和通信接口404)之间传输信息;

其中处理器401、存储器402、输入/输出接口403和通信接口404通过总线405实现彼此之间在设备内部的通信连接。

本公开实施例还提供了一种计算机可读存储介质,所述计算机可执行指令用于执行上述容器镜像检测方法。

本公开实施例提出的容器镜像检测方法和装置、电子设备、计算机可读存储介质,通过获取待检测的原始容器镜像,并对原始容器镜像进行打包,并对打包后得到的初步容器镜像进行解压,再通过Clair工具对解压后得到的目标容器镜像进行特征提取,及将进行特征提取的特征数据与预设的CVE漏洞数据库进行比对,查询漏洞数据,从而可以实现自动扫描容器镜像的漏洞数据,并提高漏洞扫描的准确性。本公开实施例还通过清理扫描成功后的打包文件,从而可以释放存储空间。此外,通过Webhook将查询出漏洞数据的目标容器镜像进行记录和拦截,提高了容器的安全性。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

本公开实施例描述的实施例是为了更加清楚的说明本公开实施例的技术方案,并不构成对于本公开实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本公开实施例提供的技术方案对于类似的技术问题,同样适用。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。

本公开的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

应当理解,在本公开中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。

以上参照附图说明了本公开实施例的优选实施例,并非因此局限本公开实施例的权利范围。本领域技术人员不脱离本公开实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本公开实施例的权利范围之内。

相关技术
  • 容器镜像检测方法和装置、电子设备、存储介质
  • 一种容器镜像处理方法、装置、电子设备及存储介质
技术分类

06120112568264