却写杂布计 发表于 2022-3-26 10:27:51

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

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%都存在漏洞,所以我们使用镜像运行容器前,一定要对镜像镜像进行扫描,从而提高安全性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Docker安全第一话--镜像安全