前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器静态安全漏洞扫描工具Clair介绍

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

作者头像
0xtuhao
发布2022-06-21 10:25:08
2.7K0
发布2022-06-21 10:25:08
举报
文章被收录于专栏:从运维安全到DevSecOps

根据绿盟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 cluster
代码语言:javascript
复制
git 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.yaml
  • local
代码语言:javascript
复制
$ 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的服务端,投入应用还需额外的客户端。目前从官方列出的衍生开发工具里,已经有非常多的选择。

代码语言:javascript
复制
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: 0

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

例如下图:

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

  • 主分支版本

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

  • Docker-compose
代码语言:javascript
复制
$ git clone git@github.com:jgsqware/clairctl.git $GOPATH/src/github.com/jgsqware/clairctl
$ cd $GOPATH/src/github.com/jgsqware/clairctl
$ docker-compose up -d postgres

使用建议

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

参考资料

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

coreos/clair

jgsqware/clairctl

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档