Harbor仓库镜像扫描原理

  • 时间:
  • 浏览:0

遍历解压后的文件目录,探测操作系统文件路径。 首很难了解各Linux发行版的因此 基础文件,比如系统版本、安装的软件包版本记录等文件。

携带必要的headers发起对path的Get请求,得到的则是有一三个白多多归档文件,因此进行解压。

3.保存信息

harbor仓库中的镜像扫描这俩功能,看似很高大上,确实等你了解了它的底层原理与流程,你就会发现因此做了很难 一件事而已,用通俗的励志的话 概括,因此找到每个镜像文件系统中不可能 安装的软件包与版本,因此跟官方系统敲定的信息比对,官方不可能 给出了在哪个系统版本上哪个软件版本有那先 漏洞,比如Debian 7系统上,nginx 1.12.1有那先 CVE漏洞,通过对逐个安装的软件包比对,就能知道当前这俩镜像一共有几次CVE。当然,不可能 你是解压版的,那就没啥说的,这俩跟windows同类,系统无法在控制面板识别。下面就harbor的具体流程进行简单介绍,因此你对这俩功能了如指掌。

Harbor的Job系统发送完最后一层的请求就让,则会发起有一三个白多多CVE分析结果的请求查询,生成有一三个白多多扫描结果的概览保位于数据库中,主因此记录当前镜像发现了高风险漏洞几次个,中度风险几次个等。一块儿把job表中的情况设置为finished,不可能 请求Clair位于任何错误,则会把job记录设置为error。harbor页面具体的漏洞详细数据展示,还是通过UI系统调用Clair系统实时查询。

查看文件/etc/os-release

上图中虚线框中的模块是harbor自身功能,Clair是coreos开源的有一三个白多多系统,镜像扫描分析工作主要由Clair完成,它具体的特性在下面再分析,这里先侧重分析harbor这块流程。箭头方向大致描述的是请求方向,系统之间交互不可能 产生多次请求。

5.Clair系统收到请求就让,根据ParentName首先校验父Layer有无位于,不位于则报错。

2.探测镜像操作系统

比如debian系统,从文件/var/lib/dpkg/status文件则能都可以 了探测到当前系统安装了那先 版本的软件。

下面详细讲解Clair漏洞分析流程。

1.下载镜像层文件

原文链接

在了解镜像扫描就让,这里先简单说下镜像的概念,镜像因此由因此 Layer层组成的文件系统,重要的是每个镜像有有一三个白多多manifest,这俩东西跟springboot中的有一三个白多多概念,因此文件清单的意思。有一三个白多多镜像是由因此 Layer组成,总都可以 这俩manifest文件来记录下到底由那先 层联合组成的。要扫描分析有一三个白多多镜像,首先你就都可以 获取到这俩镜像的manifest文件,通过manifest文件获取到镜像所有的Layer的地址digest,digest在docker镜像存储系统中代表的是有一三个白多多地址,同类操作系统中的有一三个白多多内存地址概念,通过这俩地址,能都可以 了找到文件的内容,这俩可寻址的设计是v2版本的重大改变。在docker hub储存系统中,所有文件回会有地址的,这俩digest因此由一种高效的sha算法通过对文件内容计算出来的。

本文作者:kingfsen

2.探测镜像已安装的软件包

把后面 探测到的系统版本、以及系统上安装的各种软件包版本都存入数据库。Clair系统不可能 获取了各linux版本操作系统软件版本,以及对应软件版本位于的CVE。官方敲定了某个软件在某个版本修复了哪个CVE,Clair只都可以 将当前镜像中的软件的版本与官方敲定的版本进行比较。比如官方维护的CVE信息中敲定了nginx 1.13.1修复了漏洞CVE-2015-10203,很难 当前镜像含有有的版本为1.12.1的nginx必然位于漏洞CVE-2015-10203,那先 版本比较回会基于同有一三个白多多版本的操作系统之上比较的。

这俩就让Job系统则会新建有一三个白多多扫描任务的job进行调度,这里则涉及到有一三个白多多情况机除理流程。

2.Job收到请求就让,向registry发起有一三个白多多Head请求(/v2/nginx/manifest/v1.12.1),判断当前镜像的manifest有无位于,取出当前manifest的digest,这俩digest是存放上响应头中的Docker-Content-Digest。

上一步不可能 探测到了操作系统,自然能都可以 了知道系统的软件管理包是rpm还是dpkg。

centos系统的软件管理包是rpm,而debain系统的软件管理是dpkg。

本文来自云栖社区企业媒体合作伙伴“开源中国”

clair逐行解析该文件,提取ID以及VERSION_ID字段,最终把centos:7作为clair中的有一三个白多多namespace概念。

4.Job系统通过manifest文件获取镜像的所有Layer digest,针对每一层,封装有一三个白多多ClairLayer参数对象,因此根据层的数量,循环请求Clair系统,ClairLayer参数特性如下:

1.UI向Job发起镜像扫描请求,参数含有有了仓库名称以及tag

3.Job把第2步获取到的digest以及仓库名、tag作为第四根记录插入job表中,job的情况为pending。

逐行解析文件,提取Package以及Version字段,最终获取 libsmartcols1 2.29-1+deb9u1以及sed等