写点什么

Clair 助力 Docker 镜像安全

  • 2016-01-03
  • 本文字数:1661 字

    阅读完需:约 5 分钟

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

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

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

市场上还有其他容器漏洞检测工具,比如 IBM 的 Vulnerability Advisor FlawCheck 。它们的主要不同之处在于它们是专有的,在 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 最近还宣布了 Tectonic CoreOS 的容器即服务产品)中的分布式信任计算(DTC)能力。DTC 在整个栈上建立了一个受信任的加密链,从应用程序层到容器、操作系统,再到硬件。

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

2016-01-03 18:004337
用户头像

发布了 1008 篇内容, 共 384.4 次阅读, 收获喜欢 342 次。

关注

评论

发布
暂无评论
发现更多内容

Linux内核系统结构

Linux 操作系统 内核 系统调用 操作系统结构

6小时搞定云原生:从基础概念到上手实践

京东科技开发者

云原生

week04 作业

xxx

甲方日常 36

句子

工作 随笔杂谈 日常

编码之路,与君共勉

yes

程序人生

一份超级完整实用的PyCharm图解教程,8K字赶紧收藏起来

计算机与AI

Python IDLE 开发环境

一文带你读懂 Swift 社区最新开源的算法库

镜画者

ios swift 算法 apple

一文读懂线程池的工作原理(故事白话文)

捡田螺的小男孩

Java 面试 线程池 线程池工作原理

Java中的5大队列,你知道几个?

王磊

Java

【得物技术】谈谈缓存的一二三四五

得物技术

缓存 架构 技术 缓存穿透 缓存击穿

分布式文件存储数据库 MongoDB

哈喽沃德先生

数据库 nosql mongodb mongo 非关系型数据库

架构作业:一致性hash

Nick~毓

java安全编码指南之:线程安全规则

程序那些事

java安全编码 java安全 java安全编码指南 java代码规范 java代码安全

c++bind函数使用

良知犹存

c++

架构师训练营第2期 第1周 作业一:食堂就餐卡系统设计

老腊肉

「架构师训练营」第 1 周作业 - 食堂就餐卡系统设计

小黄鱼

极客大学架构师训练营

iOS性能优化 — 二、卡顿监控及处理

iOSer

性能优化 编程语言 监控 ios开发 卡顿

发布3个月获得5K Star的Luckysheet - 基于MIT协议的开源电子表格

奇异石榴果

Java 开源 大前端 Excel html/css

分布式缓存架构,消息队列,负载均衡

garlic

极客大学架构师训练营

一文搞懂ReactNative生命周期的进化

凌宇之蓝

react.js 面试 大前端 React Native

勾魂!在Github白嫖左程云1470页数据结构与算法+视频

996小迁

Java 架构 面试

在线EXCEL编辑器-Luckysheet

奇异石榴果

Java 开源 Excel bigtable js

C/C++最佳实践

jiangling500

c c++ 最佳实践

1024!奈学教育致敬程序员3+2战略发布会重磅来袭

奈学教育

1024 奈学教育

项目吐槽之需求分析一

Geek_XOXO

项目管理 pmp

spring-boot-route(二十三)开发微信公众号

Java旅途

Java Spring Boot

Docker架构

混沌畅想

Docker 容器 Docker架构

week04总结

xxx

服了,这款开源类库可以帮你简化每一行代码

沉默王二

Java GitHub 后端 hutool

架构师训练营第2期 第1周 作业二:学习总结.md

老腊肉

Scikit-Learn中的特征排名与递归特征消除

计算机与AI

学习 数据科学 特征选择 降维 scikit-learn

Clair助力Docker镜像安全_DevOps & 平台工程_Manuel Pais_InfoQ精选文章