Docker安全第一话--镜像安全

版权声明: https://blog.csdn.net/m0_37552052/article/details/78907296

Docker镜像安全


概述

Docker提供了docker hub可以让用户上传创建的镜像,以便其他用户下载,快速搭建环境。但同时也带来了一些安全问题:
1. 下载的镜像是否被恶意植入后门?
2. 镜像所搭建的环境是否本身就包含漏洞?
3. ……

这里写图片描述

Docker容器基于镜像搭建,那么镜像安全则直接决定了容器安全。
所以,对镜像进行安全扫描就变得尤其重要了,接下来,我们docker的镜像安全


1. Clair

Clair是目前最流行的镜像扫描工具,主要模块分为Detector、Fetcher、Notifier和Webhook,Clair首先对镜像进行特征的提取,然后再将这些特征匹配CVE漏洞库,若发现漏洞则进行提示及修补,其功能侧重于扫描容器中的OS及APP的CVE漏洞。

这里写图片描述

• Fetcher(获取器)- 从公共源收集漏洞数据
• Detector(检测器)- 指出容器镜像中包含的Feature
• Notifier+WebHook(通知钩子)- 当新的漏洞被发现时或者已经存在的漏洞发生改变时通知用户/机器
• Databases(数据库)- 存储容器中各个层以及漏洞
• Worker(主进程) - 每个Post Layer都会启动一个worker进行Layer Detect

安装Clair(docker-compose):

$ curl -L https://raw.githubusercontent.com/coreos/clair/master/contrib/compose/docker-compose.yml -o $HOME/docker-compose.yml

$ mkdir /usr/src/clair-2.0.1/clair_config

$ curl -L https://raw.githubusercontent.com/coreos/clair/master/config.yaml.sample -o /usr/src/clair-2.0.1/clair_config/config.yaml

$ $EDITOR /usr/src/clair-2.0.1/clair_config/config.yaml # Edit database source to be postgresql://postgres:password@postgres:5432?sslmode=disable

$ diff /usr/src/clair-2.0.1/clair_config/config.yaml /usr/src/clair-2.0.1/clair_config/config.yaml.org 
23,24c23
<       #source: host=localhost port=5432 user=postgres sslmode=disable statement_timeout=60000
<       source: postgresql://postgres:password@postgres:5432?sslmode=disable
---
>       source: host=localhost port=5432 user=postgres sslmode=disable statement_timeout=60000

$ $EDITOR $HOME/usr/src/clair-2.0.1/docker-compose.yml # Edit image source to be quay.io/coreos/clair:v2.0.1

$ diff /usr/src/clair-2.0.1/docker-compose.yml /usr/src/clair-2.0.1/docker-compose.old.yml
<     image: quay.io/coreos/clair-git:latest
---
>     image: quay.io/coreos/clair:v2.0.1

$ docker-compose -f /usr/src/clair-2.0.1/docker-compose.yml up –d

输入 docker-compose ps 命令发现clair以及用于存储clair数据的postgres已经处于运行状态

这里写图片描述

Clairctl

Clair的功能通过Restful API实现,但是每个API参数很多,而且上传镜像时还有很多复杂的处理。所以CoreOS为我们提供了Clairctl这款工具。Clairctl是一个Clair客户端,
让用户可以通过简单的命令就能实现镜像的上传、扫描、输出报告等等。

安装clairctl:

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

输入clairctl version查看clairctl版本
这里写图片描述

输入clairctl health查看是否连接上clair
这里写图片描述

使用clairctl检测本地的centos镜像
这里写图片描述

发现有3个高危漏洞,想看详细信息的话就把检测结果输出成报告形式
这里写图片描述

可以看到详细的漏洞介绍,以及漏洞的CVE链接
这里写图片描述


2. Anchore

Anchore也是一个强大的镜像扫描工具,与Clair不同,Anchore侧重于对镜像的审计,其有强大的对镜像的解析能力。

安装anchore:

$ apt-get install python-pip python-rpm yum

$ git clone https://github.com/anchore/anchore.git

$ cd anchore

$ pip install --upgrade --user .

$ export PATH=~/.local/bin:$PATH

初始的时候先输入anchore feeds sync更新漏洞库
这里写图片描述

扫描本地恶意镜像evil
这里写图片描述

这里写图片描述

输入 anchore query –image evil show-file-diffs base 查看恶意镜像跟纯净镜像相比有什么不同的地方
这里写图片描述

这里写图片描述

如图,跟原始镜像对比,evil镜像上新增了wget和openssl等软件和一个后门文件 backdoor.apk.sh,那么我们就可通过这些信息推测出此镜像下载了wget然后从网上下载一个sh后门,执行恶意命令了。


3. dockerscan

http://github.com/cr0hn/dockerscan

Dockerscan也是一款恶意镜像扫描的利器,其通过扫描镜像中的环境变量、操作命令以及端口开放信息来识别其是否为恶意镜像

这里写图片描述

我们通过几个环境变量(LD_PRELOAD、REMOTE_PORT、REMOTE_ADDR)和运行run.sh的操作识别出evil镜像有一个连接C&C服务器的行为,从而断定这是一个恶意镜像。


镜像安全决定了容器安全,而目前Docker Hub上的镜像75%都存在漏洞,所以我们使用镜像运行容器前,一定要对镜像镜像进行扫描,从而提高安全性。

猜你喜欢

转载自blog.csdn.net/m0_37552052/article/details/78907296