安全性对任何产品来说都非常重要,比如著名的HeartBleed就就曾经给很多忽视安全问题的企业带来了很大的影响。而随着容器化的推进,早在2015年的一次调查中,研究者就曾发现取样的Dockerhub上有30%-40%的镜像存在安全性的问题。Clair正是由coreos所推出的这样一款针对容器的安全扫描的工具,类似于Docker在其收费版中提供的功能那样,能对应用容器的脆弱性进行静态扫描,同时支持APPC和DOCKER。
项目地址
项目 | 详细 |
---|---|
项目地址 | https://github.com/coreos/clair |
为什么使用Clair
随着容器化的逐渐推进,使用的安全性也受到越来越多地重视。在很多场景下,都需要对容器的脆弱性进行扫描,比如
项目 | 详细 |
---|---|
镜像来源不明 | 在互联网上下载的镜像,可以直接使用,非常的方便,但是是否真正安全还非常难说 |
生产环境的实践 | 容器上到生产环境之后,生产环境对容器的安全性要求一般较高,此时需要容器的安全性得到保证 |
名称的由来
clair的目标是能够从一个更加透明的维度去看待基于容器化的基础框架的安全性。Clair=clear + bright + transparent
工作原理
通过对容器的layer进行扫描,发现漏洞并进行预警,其使用数据是基于Common Vulnerabilities and Exposures数据库(简称CVE), 各Linux发行版一般都有自己的CVE源,而Clair则是与其进行匹配以判断漏洞的存在与否,比如HeartBleed的CVE为:CVE-2014-0160。
数据源支持
目前Clair支持如下数据源:
数据源 | 具体数据 | 格式 | License |
---|---|---|---|
Debian Security Bug Tracker | Debian 6, 7, 8, unstable namespaces | dpkg | Debian |
Ubuntu CVE Tracker | Ubuntu 12.04, 12.10, 13.04, 14.04, 14.10, 15.04, 15.10, 16.04 namespaces | dpkg | GPLv2 |
Red Hat Security Data | CentOS 5, 6, 7 namespaces | rpm | CVRF |
Oracle Linux Security Data | Oracle Linux 5, 6, 7 namespaces | rpm | CVRF |
Alpine SecDB | Alpine 3.3, Alpine 3.4, Alpine 3.5 namespaces | apk | MIT |
NIST NVD | Generic Vulnerability Metadata | N/A | Public Domain |
数据库
Clair的运行需要一个数据库实例,目前经过测试的数据库的版本为
数据库 | 版本 |
---|---|
postgresql | 9.6 |
postgresql | 9.5 |
postgresql | 9.4 |
运行方式
因为clair以镜像的方式进行打包和发布,所以其运行支持如下几种方式:
- Kubernetes
- docker-compose
- docker
本文使用docker-compose来演示起使用方法,其他方式大同小异。
事前准备
docker版本
[root@liumiaocn ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 08:47:51 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 08:47:51 2017
OS/Arch: linux/amd64
Experimental: false
[root@liumiaocn ~]#
docker-compose版本
[root@liumiaocn ~]# docker-compose version
docker-compose version 1.14.0, build c7bdf9e
docker-py