Clair助力Docker镜像安全

jopen 8年前

ClairCoreOS 最近发布的一款 开源容器漏洞扫描工具 。该工具可以交叉检查Docker镜像的操作系统以及上面安装的任何包是否与任何已知不安全的包版本相匹配。漏洞是从特定操作系统的通用漏洞披露( CVE )数据库获取。该工具当前支持的操作系统包括 Red HatUbuntuDebian

通过从镜像文件系统中抽取静态信息以及维护一个 组成镜像的不同层 之间的差异列表,可以大大减少分析时间,而且不需要实际运行可能存在漏洞的容器。如果镜像所依赖的一个靠下的层存在漏洞,那么该镜像就会被识别为有漏洞,而且,通过 使用图存储 ,可以避免重新分析镜像。

CoreOS 使用Clair分析 用户上传到 Quay.io (一个类似DockerHub的容器注册中心)的Docker镜像。现已发现, Quay上的大多数镜像都存在漏洞 ,甚至是像Heartbleed(80%)或Ghost(67%)这样的著名漏洞。2015年初,一份有关 DockerHub 的报告推断, 至少有30%的官方镜像和多达40%的用户上传镜像包含高级漏洞 。期间,在 DockerCon 2015欧洲大会 上,除了其他安全相关的特性外,Docker还宣布了他们自己的镜像扫描和漏洞检测项目 Nautilus 。Nautilus并不开源,而且只能运行在Docker Hub上。

市场上还有其他容器漏洞检测工具,比如IBM的 Vulnerability AdvisorFlawCheck 。它们的主要不同之处在于它们是专有的,在IBM的场景中,仅应用于托管在 Bluemix云产品 上的镜像。IBM的解决方案还支持 基本的安全策略 (比如,“密码使用期限应该为90天”),会以同静态代码分析工具类似的方式生成警告。

当然,这些工具可以确定是否存在可能有漏洞的包,但不能验证它们实际上是否已被利用。另外,它们也无法检测运行实例中的动态行为,比如在运行时安装有漏洞的包版本。

Clair提供了一个 JSON API ,并且可以在本地运行以检查容器镜像,例如,作为持续集成或持续交付管道的一部分。

下面的代码片段初始化(默认配置)并启动了一个Clair本地服务:

$ git clone https://github.com/coreos/clair.git         # 从Github克隆Clair库    $ cp clair/config.example.yaml clair/config/config.yaml    # 使用默认设置创建一个初始配置文件    $ docker pull quay.io/coreos/clair:latest           # 下载一个安装了Clair的CoreOS容器镜像    $ docker run -p 6060:6060 -p 6061:6061 -v clair:$PWD/clair/config:ro quay.io/coreos/clair:latest --config=/config/config.yaml   # 启动服务——务必等待获取初始漏洞列表(消息 “升级器:升级完成”)

如果管道生成了可以部署的不可变Docker镜像,那么漏洞扫描就可以在某个阶段成为安全测试的一部分,这可能会中断管道。例如,下面的代码 分析一个名为“tmpimage”的Docker镜像

$ go get -u github.com/coreos/clair/contrib/analyze-local-images   # 需要安装go    $ $GOPATH/bin/analyze-local-images tmpimage                        # analyze-local-images是一个包装器脚本,分析镜像中的所有层

上述代码片段查找镜像中任意层上的高级或严重漏洞。通过 抽取每个层然后单个提交给Clair的API ,可以指定其他的严重性等级。

单个层的完整漏洞列表(任意严重性等级,从可忽略到严重)可以通过稍后的分析生成,例如通过运行下面的代码:

$ curl -s -H "Content-Type: application/json" -X POST -d \  '{      "ID": "39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8",      "Path": "/tmp/docker/layers/39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8.tar"  }' \  127.0.0.1:6060/v1/layers  # 向Clair提交层,分析并存储在DB中    $ curl -s "127.0.0.1:6060/v1/layers/39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8/vulnerabilities?minimumPriority=Negligible" | python -m json.tool > all_vulnerabilities.json  # 获取在层里找到的所有漏洞

此外,CoreOS最近还宣布了 TectonicCoreOS的容器即服务产品 )中的 分布式信任计算(DTC) 能力。DTC在整个栈上建立了一个受信任的加密链,从应用程序层到容器、操作系统,再到硬件。

查看英文原文: Clair Helps Secure Docker Images

来自: http://www.infoq.com/cn/news/2016/01/clair-docker-vulnerabilities