Docker 安全扫描

时间:2022-10-07 18:58:50

一、 Anchore engine

Anchore engine是一款Docker漏洞扫描工具,该工具可从仓库下载镜像,然后对镜像进行安全扫描、分析。其分为社区版本和商业版本,社区版本只提供CLI接口,商业版本还提供WEB页面及更多的支持。相关介绍说明:​​https://github.com/anchore/anchore-engine​​。

1、工具安装。该工具有几种不同的安装方式

sudo curl -O ​​https://engine.anchore.io/docs/quickstart/docker-compose.yaml​

Docker 安全扫描

2、通过docker-compose启动相关的镜像

sudo docker-compose up –d

Docker 安全扫描

3、查看相关帮助命令:

Docker 安全扫描

4、查看anchore相关的服务以及状态

sudo docker-compose ps

sudo docker-compose exec api anchore-cli system status

Docker 安全扫描

5、查看漏洞库列表

sudo docker-compose exec api anchore-cli system feeds list

Docker 安全扫描

6、查看漏洞库更新情况:

sudo docker-compose exec api anchore-cli system wait

Docker 安全扫描

7、使用image add命令添加一个镜像进行扫描

[root@localhost good]# docker-compose exec api anchore-cli image add docker.io/centos:latest –force

Docker 安全扫描

8、通过image wait命令等待分析完成,这个过程可能需要花一些时间等待:

docker-compose exec api anchore-cli image wait docker.io/centos:latest

Docker 安全扫描

经过等待后显示分析完成:

Docker 安全扫描

9、查看镜像中的操作系统中的软件包:

docker-compose exec api anchore-cli image content  centos:latest os

Docker 安全扫描

10、查看漏洞信息:

docker-compose exec api anchore-cli image vuln  centos:latest os

Docker 安全扫描

11、查看扫描评估结果:

docker-compose exec api anchore-cli evaluate  check centos:latest

Docker 安全扫描

12、遗留的问题,我想对已经拉取到本地的镜像进行扫描,但是在Image add的时候总是报错,于是搭建了本地仓库,将制作的镜像push到仓库,再对此镜像进行扫描,仍然报错,截图如下:

Docker 安全扫描

[root@localhost good]# docker-compose exec api anchore-cli image add 127.0.0.1:5000/centosnginx:latest

Error: cannot fetch image digest/manifest from registry

HTTP Code: 400

Detail: {'error_codes': ['REGISTRY_NOT_ACCESSIBLE'], 'raw_exception_message': 'Error encountered in skopeo operation. cmd=/bin/sh -c skopeo   inspect --raw --tls-verify=false  docker://127.0.0.1:5000/centosnginx:latest, rc=1, stdout=None, stderr=b\'time="2022-10-03T16:01:43Z" level=fatal msg="Error parsing image name \\\\"docker://127.0.0.1:5000/centosnginx:latest\\\\": error pinging docker registry 127.0.0.1:5000: Get \\\\"http://127.0.0.1:5000/v2/\\\\": dial tcp 127.0.0.1:5000: connect: connection refused"\\n\', error_code=REGISTRY_NOT_ACCESSIBLE'}

 

[root@localhost good]#

[root@localhost good]# docker-compose exec api anchore-cli image add 127.0.0.1:5000/centosnginx:latest --dockerfile=/home/good/centosnginx/Dockerfile

Usage: anchore-cli image add [OPTIONS] INPUT_IMAGE

Try "anchore-cli image add -h" for help.

 

Error: Invalid value for "--dockerfile": Path "/home/good/centosnginx/Dockerfile" does not exist.

在官方网站(https://engine.anchore.io/docs/usage/cli_usage/images/)上看到有相关的操作介绍,但是参考这个操作仍然报错,一直没有找到原因。

二、 grype与syft

在anchore停止维护后,还延伸出另外两个组件分别是grype以及syft,其中grype主要用于进行漏洞扫描,而syft则主要扫描软件清单,即常说的软件物料清单SBOM。

(一)   grype

1、安装。我下载的二进制安装包,然后使用rpm命令直接安装,下载链接:​​https://github.com/anchore/grype​

Docker 安全扫描

 2、使用grype 进行扫描,第一次扫描会进行漏洞库的更新:

Grype <image>

Grype <path/to/image.tar>

Docker 安全扫描

Docker 安全扫描

源还支持其他几种不同的方式:

Docker 安全扫描

如对我在本地仓库中的指定镜像进行扫描:

grype registry:127.0.0.1:5000/centosnginx:latest

3、扫描结果保存

Grype <image> -o <format>

格式支持以下几种:

Table:缺省的方式,即表格方式,这种方式会记录软件包名称、安装的版本、问题修复的版本、软件包的格式(RPM等)、漏洞CVE编号以及严重性。

Cyclonedx:遵循CycloneDX1.2标准的XML格式报告,此格式包含了更多的内容,比如软件授权标准、CVE的说明URL、CVSS得分等内容。

Json:以json格式保存,保存的内容与xml差不多,稍微有一些差异。

Template:用户自定义输出格式,需要提前定义输出模板,内容与json一致

举例如下:

Docker 安全扫描

Docker 安全扫描

这几种方式个人认为以table或者xml保存即可,然后使用excel打开,可以方便的进行筛选过滤。

4、漏洞库检查

[root@localhost good]# grype db status

[root@localhost good]# grype db check

[root@localhost good]# grype db update

[root@localhost good]# grype db list

5、其他

在GITHUB上还可以看到官方提供了检查忽略的设置、扫描私有仓库认证相关的设置,由于我在测试的时候使用的是二进制安装,没有找到相关的文件,这里就不再测试了,实际使用中遇到再具体处理。

(二)   syft

syft的使用方法与grype类似。

三、 Docker Bench for Security

Docker Bench Security 是一个Docker容器的基线检查脚本工具,其基于CIS Docker Benchmark v1.4.0(参考https://www.cisecurity.org/benchmark/docker),包括Host 主机配置、Docker守护进程配置、Docker守护进程配置文件、容器镜像以及构建文件配置、容器运行时配置、Docker安全操作以及Docker Swarm配置共7个方面。工具链接:​​https://github.com/docker/docker-bench-security​​。

1、 脚本使用

这个工具使用起来比较简单,脚本下载后赋予执行权限,然后运行脚本即可:

Docker 安全扫描

当然也可以通过帮助查看,可以携带的参数:

Docker 安全扫描

2、 输出结果说明。通过输出可以看到该脚本实际上是基于CIS Docker Benchmark v1.4.0逐条进行检查,并且输出结果,包括PASS、NOTE、INFO以及WARN几种状态,通过与CIS基线进行对比还可以看到相关的处置建议。

3、 CIS基线检查条目依据check_<section>_<number>进行命名,可以根据自己的需求有选择性的进行检查,如下:

./docker-bench-security.sh -c check_2_2

Docker 安全扫描

4、 Log目录说明

对于基线检查过程会存放到log/ docker-bench-security.log中,而相关的结果以json的格式存放在 log/docker-bench-security.log.json中。

Docker 安全扫描