本文主要描述Clair架构、编译、部署、源码分析等内容。 Clair架构 Clair主要包括以下模块: 获取器(Fetcher)- 从公共源收集漏洞数据 检测器(Detector)- 指出容器镜像中包含的Feature 容器格式器(Image 容器作为Clair的Backend DB docker run -p 5432:5432 -e POSTGRES_PASSWORD=passw0rd postgres:latest 从源码编译clair go get github.com/coreos/clair go install github.com/coreos/clair/cmd/clair 配置Clair的Backend DB (vim /etc/clair/config.yaml) 启动clair clair -config config.yaml 安装并启动本地镜像分析工具: analyze-local-images
四个月前,CoreOS启动了Clair,它是一个开源的容器镜像安全分析器。今天Clair已经升级到1.0,并为在生产环境使用做好了准备。 去年十一月,CoreOS宣布开发一个名为Clair的容器扫描仪器,旨在检测容器中的安全漏洞以及帮助开发者自动修补它们。 上周五,CoreOS宣布Clair已准备好生产使用。 自去年十一月以来,Clair已经发展为通过递归数据库查询来提供更好的性能,CoreOS说Clair的响应时间提高了三个数量级。Clair1.0还有一个更具可拓展性的RESTful JSON API. 根据所有迹象来看,Clair1.0是一个复杂、健壮的安全工具,很容易扩展并集成到不同的环境中。 另外,CoreOS让Clair成为最大的卖点,它不仅是一个可以检测安全问题的扫描仪,还是一个补丁。 另外,你可以使用Clair来扫描Docker容器,就像你使用它扫描CoreOS镜像一样,所以Clair不会仅仅为了得到一个更好的安全性和升级体验,迫使企业使用整个CoreOS平台。
客户端使用Clair API处理镜像,获取镜像的特征并存进数据库。 客户端使用Clair API从数据库查询特定镜像的漏洞情况,为每个请求关联漏洞和特征,避免需要重新扫描镜像。 落地方式 Clair可以直接集成到容器仓库中,以便仓库负责代表用户与Clair进行交互。这种类型的设置避免了手动扫描,并创建了一个合理的接收端以便Clair的漏洞通知到位。 Clair可以集成到CI/CD管道中,如此一来当生成镜像时,将镜像推送到仓库之后触发Clair扫描该镜像的请求。 服务端 k8s cluster git clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml 可以用https://github.com/arminc/clair-local-scan替换clair官方db镜像。 检测到很多内核漏洞,但实际上可以不处理。
选项,启动clair镜像扫描功能 [root@k8s-harbor01 harbor]# . /install.sh --with-clair ........ ........ ✔ ----Harbor has been installed and started successfully.- --------------------------------------------------------------------------------------------------- clair /docker-entrypoint.sh Up (healthy) 6060/tcp, 6061/tcp clair-adapter /home/clair-adapter 查看clair镜像扫描器 ? Habor 服务启停 注意:如果harbor.yml配置修改了,要先执行"./prepare"命令进行配置载入,然后再重启harbor服务。
使用 API 进行自动化处理: 利用 Clair 的 API 实现自动化报告生成和警告通知。 使用案例 假设您想在 CI/CD 流程中集成 Clair 来扫描 Docker 镜像。 scan_image: stage: scan script: - docker run --name clair-db -d arminc/clair-db:latest - docker run --name clair --link clair-db:postgres -d -p 6060:6060 -p 6061:6061 arminc/clair-local-scan :v2.0.6 - docker run --rm --link clair:clair -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd ):/root/ --name clair-scanner arminc/clair-scanner:12 --threshold="High" my-app:latest 在这个示例中,首先构建了
首先,我们看以下威名远扬的Clair。Clair目前支持appc和docker容器的静态分析。 Clair整体架构如下: Clair包含以下核心模块。 使用go build github.com/coreos/clair/cmd/clair编译clair 使用gobuild github.com/coreos/analyze-local-images编译 analyzeLayer向clair发送JSON格式的数据。而getLayer用来获取clair的请求。并将json格式数据解码后格式化输出。 就是将layer.tar发送给clair。并将clair分析后的结果通过API接口获取到并在本地打印。 以便于我们了解clair的工作原理。
架构 clair整体架构图如下所示: 整体处理流程如下: Clair定期从配置的源获取漏洞元数据然后存进数据库。 客户端使用Clair API处理镜像,获取镜像的特征并存进数据库。 /coreos/clair/tree/release-2.0 由于Clair会根据CVE库扫是Docker镜像使用的内核,但是实际上容器使用的是宿主的内核,这样可能产生大量无用漏洞或者误报,但是根据Clair Clair可以直接集成到容器仓库中,以便仓库负责代表用户与Clair进行交互。 Clair可以集成到CI/CD管道中,如此一来当生成镜像时,将镜像推送到仓库之后触发Clair扫描该镜像的请求。 服务端 k8s cluster git clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml
另外,Clair 还提供了可用于查询特定容器镜像漏洞的 API。 name: clair-combo env: - name: CLAIR_CONF value: /clair/config.yaml name: clair-intro protocol: TCP volumeMounts: - mountPath: /clair quay-component: clair-combo type: ClusterIP $ oc apply -f clair-combo.yaml $ oc expose svc/clairv4 None 安装 Clair 客户端 从 https://github.com/quay/clair/releases 下载 Clair 客户端。
Clair API驱动的静态容器安全性分析,具有庞大的CVE数据库 Clair由CoreOS构建,对容器漏洞进行静态分析。它也用在Quay.io中,这是一个替代Docker Hub的公共容器注册表。 由于Clair消耗了如此多的CVE数据库,因此其审计非常全面。 Clair首先索引容器图像中的功能列表。然后,使用Clair API,开发人员可以在数据库中查询与特定映像相关的漏洞。 要开始使用Clair,请参阅Running Clair指南。 将它部署到Kubernetes集群很容易: 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 -
/common/config/clair/postgres_env Generated configuration file: . /common/config/clair/config.yaml Generated configuration file: . /common/config/clair/clair_env The configuration files are ready, please use docker-compose to start /common/config/clair/clair_env loaded secret from file: /usr/local/harbor/secretkey Generated configuration /common/config/clair/clair_env The configuration files are ready, please use docker-compose to start
Quay 团队还自 2015 年以来创建并整合了 Clair 开源容器安全扫描项目,如今包括 Red Hat 以及社区维护者和用户。 Quay 和 Clair 一直以来都是紧密配合的项目。Clair 启用了 Red Hat Quay 中的容器安全扫描功能,该功能可帮助用户识别其容器注册表中的已知漏洞。 Clair 是在开源社区中创建的,旨在通过供应商和用户之间的开放工作来提高安全性。考虑到不断增长的安全需求,Clair 也直接内置在 Project Quay 中。 Quay 包括自动化的地理复制、与 Clair 相集成的安全性扫描,以及用于查看历史记录的图像时间机器,而且能够执行回滚和自动修剪(pruning)等。 05 功能展现:容器镜像扫描 quay 的镜像安全扫描基于 clair: ?
Four 花式小蛋糕 2009-02 Android 1.5 3 Cupcake 纸杯蛋糕 2009-04 Android 1.6 4 Donut 甜甜圈 2009-09 Android 2.0 5 Éclair 松饼 2009-10 Android 2.0.1 6 Éclair 松饼 2009-10 Android 2.1 7 Éclair 松饼 2009-10 Android 2.2-2.2.3 8 Froyo
configuration clair: # The interval of clair updaters, the unit is hour, set to 0 to disable the updaters _version: 1.10.0 # Configure proxies to be used by Clair, the replication jobservice, and Harbor. localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair ,chartmuseum,notary-server no_proxy: components: - core - jobservice - clair 使用install.sh :v1.10.6 Loaded image: goharbor/clair-adapter-photon:v1.10.6 Loaded image: goharbor/harbor-portal:v1.10.6
harbor.duqiu.com"] } [root@192-168-0-110 ~]#systemctl reload docker 配置docker-compose.yml文件和安装相关插件,本文只安装的clair /prepare --with-clair --with-trivy #--with-clair 镜像安全扫描插件 #--with_notary 内容信任插件 #--with-trivy 镜像漏洞检测插件 Starting harbor-db ... done Recreating registryctl ... done Creating trivy-adapter ... done Recreating clair ... done Recreating harbor-core ... done Recreating clair-adapter ... done Recreating harbor-jobservice harbor.duqiu.com/nbtest/plm:nbtest202006011515 此时在阿里oss里即可看见刚刚上传的项目和images 返回Harbor仓库界面可以选择你刚刚上传的镜像开始镜像安全扫描,这是clair
Clair: 参考:https://github.com/coreos/clair Clair是一个用于静态分析应用程序容器(目前包括appc和docker)中的漏洞的开源项目。 架构 clair整体架构图如下所示: 整体处理流程如下: Clair定期从配置的源获取漏洞元数据然后存进数据库。 客户端使用Clair API处理镜像,获取镜像的特征并存进数据库。 /CD Clair可以直接集成到容器仓库中,以便仓库负责代表用户与Clair进行交互。 Clair可以集成到CI/CD管道中,如此一来当生成镜像时,将镜像推送到仓库之后触发Clair扫描该镜像的请求。 服务端 k8s cluster git clone https://github.com/coreos/clair cd clair/contrib/helm cp clair/values.yaml
configuration clair: # The interval of clair updaters, the unit is hour, set to 0 to disable the updaters _version: 1.10.0 # Configure proxies to be used by Clair, the replication jobservice, and Harbor. localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair ,chartmuseum,notary-server no_proxy: components: - core - jobservice - clair 使用install.sh :v1.10.6 Loaded image: goharbor/clair-adapter-photon:v1.10.6 Loaded image: goharbor/harbor-portal:v1.10.6
set disable to true when you want to disable registry redirect # redirect: # disabled: false # Clair configuration clair: # The interval of clair updaters, the unit is hour, set to 0 to disable the updaters password: harbor_db_password # ssl_mode: disable # max_idle_conns: 2 # max_open_conns: 0 # clair : # host: clair_db_host # port: clair_db_port # db_name: clair_db_name # username: clair_db_username # password: clair_db_password # ssl_mode: disable # notary_signer: # host: notary_signer_db_host
笔者从Docker Hub中选择评价和下载量较高的10个镜像,对其最新版本(latest)采用Clair工具进行了扫描分析。 下面,我们使用Clair(latest)针对Ubuntu 14.04进行扫描测试,并尝试进行漏洞修复。 将这个容器打包为一个新的镜像(docker commit 9bcf21a481d0 ubuntu-fixed-clair),并上传是镜像仓库(docker tag ubuntu-fixed-clair: /test/ubuntu-fixed-clair:latest)。 通过Clair扫描这个漏洞修复后的镜像(clairctl analyze -l registry.securityapp.store/test/ubuntu-fixed-clair:latest –log-level
执行安装 执行如下命令配置安装同时启用chart仓库和clair扫描功能。 ./prepare --with-clair --with-chartmuseum.
集成了漏洞扫描之后的Harbor架构图 在 Harbor 中,我们集成了开源项目 Clair 的扫描功能,可从公开的 CVE 字典库下载漏洞资料。 容器镜像基本上涉及的是 Linux 操作系统上的软件,因此镜像扫描需要参考 Linux 相关的 CVE 库,目前 Harbor(Clair)使用的CVE 源有: 1 Debian Security Bug Harbor的镜像扫描功能需要在安装时增加 --with-clair 选项,详细步骤可以参考github上的文档: https://github.com/vmware/harbor/blob/master