赞
踩
----Clair-scanner
----Trivy
----Gripe
----Dockerscan
镜像是容器的最基础的载体,docker是流行的runtime,其最大的贡献就是把镜像作为容器应用的标准交付方式,镜像包含了容器运行的所有基础文件,可以说镜像的安全决定了容器的安全。
但镜像本质上来说是一个静态文件,由很多层构成,只要其中一层发现漏洞,就会对应用服务造成威胁。目前Docker Hub上的镜像76%都存在漏洞,针对这些安全漏洞,安全前移是目前最主流的治理思路,希望镜像在进入生产环境前尽量解决安全问题,所以在镜像进入仓库之前扫描镜像,定位漏洞格外重要。
Clair是CoreOS官方推出的容器静态安全漏洞扫描工具,该工具被多款docker registry成,比如Harbor、dockyard、quary等。
架构图如下:
图一:Clair整体架构图
镜像扫描流程:
#需安装golang,及配置go加速,测试环境使用git和go版本如下: #解压clair-scanner,进行编译 $ cd clair-scanner $ make build $ make installLocal #运行clair-scanner $ clair-scanner -h #导入漏洞数据库和clair-local-scan镜像 $ docker load -i clair-scanner.tar #下载测试镜像 $ docker load -i httpd:2.4.43 #运行容器 $ docker run -d --name clair-db arminc/clair-db:v1 $ docker run -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:v1 #查看运行容器 $ docker ps |
#获取docker0的ip信息 $ ifconfig docker0 | grep inet inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 #对下载的httpd镜像进行扫描 $ clair-scanner --ip="172.17.0.1" -c "http://localhost:6060" httpd:2.4.43 #本质:找到每个镜像文件系统中已经安装的软件包与版本,然后跟官方系统公布的信息比对,官方已经给出了在哪个系统版本上哪个软件版本有哪些漏洞,比如Debian 7系统上,nginx 1.12.1有哪些CVE漏洞,通过对逐个安装的软件包比对,获知当前镜像一共有多少CVE。 |
trivy是由Aqua Security公司开发一款全面且多功能的安全扫描开源程序,目前在github上有21.8k个关注,支持扫描容器镜像、文件系统、Git Repository (远程)、虚拟机映像、Kubernetes、AWS系统。
图二:trivy在github上概况
Trivy本身只是一个扫描工具,实际支撑这个工具的还有一个工具链,多种工具/库的协同,完成了从CVE到扫描识别的各个环节。
组件构成:
①vuln-list-update:负责更新各个来源的威胁数据,转换为json数据;
②trivy-db:既是工具,也是库,用于操作trivy的数据库;
③fanal:从vuln-list获取数据,并构建bbolt格式的数据库文件,可以用upload命令上传到Github Release;
④trivy:获取trivy-db的release数据,进行漏洞扫描工。
工作流程:
①从操作系统厂商等CVE源获取数据,使用vuln-list-update脚本进行汇总,转换为一致的json数据;
②trivy-db从vuln-list下载数据,转换为bbolt格式,发布到trivy-db的release;
③trivy下载trivy-db数据,作为本地检测的数据源。
图三:trivy工作流程图
#部署可以采用多种方式部署,官网上提及:yum、rpm、二进制、docker部署,针对docker部署,需将/var/lib/docker.sock映射到容器内部,经过实验,选择二进制部署trivy #解压github上拉取的二进制包 $ tar -xf trivy_0.48.3_Linux-64bit.tar.gz $ mv ./trivy /usr/local/bin/ $ chmod +x /usr/local/bin/trivy $ which trivy /usr/local/bin/trivy |
#可联网,直接使用trivy image IMAGE:TAG $ trivy image httpd:2.4.43 以 table的形式展示了该镜像包含的漏洞,提示漏洞所在库(Library)、漏洞编号(Vulnerability)、严重程度(Severity)、当前使用版本(Installed Version)、漏洞修复版本(Fixed Version)以及其他信息(Title),在Title 信息中有一个网站,说明漏洞的详情,可以更好去处理漏洞。 #不能联网 #命令参数 --cache-dir ,指定漏洞数据库的本地缓存目录,默认在是 ~/.cache/trivy 下 --skip-db-update, 扫描启动的时候,会检查本地漏洞库。如果超过 12 小时为更新,会自动下载更新漏洞库。由于官方漏洞库放在 github,下载比较慢,可以使用 --skip-db-update 跳过这一过程。 --skip-java-db-update 同样java 的漏洞库,每周四凌晨自动更新,也是存在github上,以使用–skip-java-db-update 跳过这一过程。 --severity CRITICAL , 指定扫描的严重程度,分为,CRITICAL[紧急],HIGH[高的],MEDIUM[中等],LOW[低的] --vuln-type , 指定想要扫描的漏洞种类 , os仅扫描目标(比如容器镜像或文件系统)中操作系统包含的已知漏洞; library 应用程序库的漏洞扫描; --vuln-type os,library 同时包含操作系统包和应用程序库的漏洞扫描 -f ,指定输出的格式,默认的输出格式是 table, 以表格的形式显示扫描结果。-f json 以json 格式输出结果, 配合 -o 输出文件 ,如 trivy -f json -o nginx.1.22.1.json --ignore-unfixed , 会忽略那些当前没有可用修复的已知漏洞,这个选项对于聚焦于立即可行的修复措施特别有用。 $ trivy --cache-dir TRIVY_DB_DIR(下载下的漏洞包缓存位置) image httpd:2.4.43 --skip-db-update 例:trivy --cache-dir /tmp/trivy/ image httpd:2.4.43 --skip-db-update |
Grype是一款针对容器镜像和文件系统的漏洞扫描器。该完成针对容器镜像和文件系统的漏洞扫描和安全审计任务。
#从官网获取安装文件,目前安装的是v0.77.2 |
#安装完成后,执行扫描镜像命令 $ grype httpd:2.4.43 #对于联网环境,可使用
|
#python3.5+环境直接使用pip拉取dockerscan $ python3.6 -m pip install dockerscan |
#dockerscan是docker官方的一款镜像扫描工具,可离线使用,更具扫描结果进行人工判定,从而判别漏洞 #扫描结果比较单一; |
工具 | clair-scanner | trivy | grype | dockerscan |
扫描镜像 | 需上传镜像 | 直接扫描 | 直接扫描 | 需下载镜像至本地 |
扫描速度 | 快 | 快 | 快 | 快 |
漏洞数据库 | CVE | CVE | CVE | 无 |
扫描结果 | only漏洞(见2.1.3章节) | 漏洞+细节(见2.2.3章节) | only漏洞(见2.3.2章节) | 无漏洞信息,需更具扫描结果自己判定(见2.4.2章节) |
备注 | 通过对容器的layer进行扫描,对镜像进行特征提取,依据特征匹配CVE漏洞 | 原理和clair-scanner类似,都是对比已有的CVE库,获取数据,但是trivy获取的信息更多,在Title 信息中有一个网站,说明漏洞的详情,可以更好去处理漏洞 | 和clair-scanner类似 | 不推荐 |
github:arminc/clair-local-scan at 2.1.0 (github.com)
Trivy官网:Trivy Open Source Vulnerability Scanner | Aqua (aquasec.com)
阿里云社区:容器镜像安全扫描之Trivy-阿里云开发者社区 (aliyun.com)
github:anchore/grype: A vulnerability scanner for container images and filesystems (github.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。