容器静态安全漏洞扫描工具Clair介绍 您所在的位置:网站首页 容器安全扫描工具怎么用 容器静态安全漏洞扫描工具Clair介绍

容器静态安全漏洞扫描工具Clair介绍

2023-10-05 02:57| 来源: 网络整理| 查看: 265

根据绿盟2018年3月的研究显示,目前Docker Hub上的镜像76%都存在漏洞,其研究人员拉取了Docker Hub上公开热门镜像中的前十页镜像,对其使用Docker镜像安全扫描工具Clair进行了CVE扫描统计。结果显示在一百多个镜像中,没有漏洞的只占到24%,包含高危漏洞的占到67%。很多我们经常使用的镜像都包含在其中,如:Httpd,Nginx,Mysql等等。

本文将介绍这块由CoreOS官方推出的容器静态安全漏洞扫描工具Clair,该工具也被多款docker registry集成,比如VMware中国开源的Harbor(CNCF成员项目)、Quary以及Dockyard等。

下面将从系统架构、处理流程、落地方式以及使用建议向大家介绍clair,希望能够为容器安全落地提供一种选择。

系统架构

Clair主要包括以下模块:

获取器(Fetcher)- 从公共源收集漏洞数据检测器(Detector)- 指出容器镜像中包含的Feature容器格式器(Image Format)- Clair已知的容器镜像格式,包括Docker,ACI通知钩子(Notification Hook)- 当新的漏洞被发现时或者已经存在的漏洞发生改变时通知用户/机器数据库(Databases)- 存储容器中各个层以及漏洞Worker - 每个Post Layer都会启动一个worker进行Layer Detect

工作流程

整体处理流程如下:

Clair定期从配置的源获取漏洞元数据然后存进数据库。客户端使用Clair API处理镜像,获取镜像的特征并存进数据库。客户端使用Clair API从数据库查询特定镜像的漏洞情况,为每个请求关联漏洞和特征,避免需要重新扫描镜像。当更新漏洞元数据时,将会有系统通知产生。另外,还有webhook用于配置将受影响的镜像记录起来或者拦截其部署。

落地方式

Clair可以直接集成到容器仓库中,以便仓库负责代表用户与Clair进行交互。这种类型的设置避免了手动扫描,并创建了一个合理的接收端以便Clair的漏洞通知到位。仓库还可用于授权,以避免泄露用户不应当访问的镜像漏洞信息。Clair可以集成到CI/CD管道中,如此一来当生成镜像时,将镜像推送到仓库之后触发Clair扫描该镜像的请求。 集成思路如下:

用户推送镜像到容器仓库,仓库根据设置的黑白名单选择是否调用Clair进行扫描一旦触发Clair扫描,则等待扫描结果返回,然后通知用户如果发现漏洞,则CI也同时阻止CD流程启动,否则CD流程开启

部署方式

主要有kubernetes和本地部署这两种方式。

服务端

k8s clustergit clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml ~/my_custom_values.yaml vi ~/my_custom_values.yaml helm dependency update clair helm install clair -f ~/my_custom_values.yamllocal$ mkdir $PWD/clair_config $ curl -L https://raw.githubusercontent.com/coreos/clair/master/config.yaml.sample -o $PWD/clair_config/config.yaml $ docker run -d -e POSTGRES_PASSWORD="" -p 5432:5432 postgres:9.6 $ docker run --net=host -d -p 6060-6061:6060-6061 -v $PWD/clair_config:/config quay.io/coreos/clair-git:latest -config=/config/config.yaml

客户端

上面介绍的只是Clair的服务端,投入应用还需额外的客户端。目前从官方列出的衍生开发工具里,已经有非常多的选择。

官方客户端clairctl测试效果如下:clairctl analyze -l cve-2017-11610_web Image: /cve-2017-11610_web:latest Unknown: 80 Negligible: 235 Low: 195 Medium: 418 High: 161 Critical: 0 Defcon1: 0clair api 3.0写的不怎么清楚,目前还能在coreos官网上查到api v1版本的文档,但是对于使用新版已经没意义了,因为改变太大了。klar,只支持跟registry集成。yair,只支持跟registry集成,yair是用python写的,可以自己修改。analyze-local-images:命令行,但是被放弃了,只支持clair v1/v2。

综合来看,clairctl的功能比较丰富,而且社区比较活跃,能保持与clair的及时更新,因此建议选择clairctl,由于其本身使用golang开发,因此也可以根据自己的CI/CD场景做二次开发。

例如下图:

下面简单介绍clairctl的安装方式,具体使用方法可参考官方wiki。

主分支版本

curl -L https://raw.githubusercontent.com/jgsqware/clairctl/master/install.sh | sh

Docker-compose$ git clone [email protected]:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl $ cd $GOPATH/src/github.com/jgsqware/clairctl $ docker-compose up -d postgres

使用建议

master不太稳定,不适合生产环境,建议使用release版本,目前最新版本是https://github.com/coreos/clair/tree/release-2.0由于Clair会根据CVE库扫是Docker镜像使用的内核,但是实际上容器使用的是宿主的内核,这样可能产生大量无用漏洞或者误报,但是根据Clair开发组的意思,他们把决定权交给用户,默认不提供白名单机制,也不对此做区分。第一次启动要下载数据到数据库,下载时间根据网络好坏确定。可以用https://github.com/arminc/clair-local-scan替换clair官方db镜像。检测到很多内核漏洞,但实际上可以不处理。但是clair决定不过滤任何东西,而是交给用户决定,这样一来,用户二次开发,增加黑白名单机制在所难免。

参考资料

Docker安全第一话--镜像安全 - CSDN博客

coreos/clair

jgsqware/clairctl



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有