一、 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
2、通过docker-compose启动相关的镜像
sudo docker-compose up –d
3、查看相关帮助命令:
4、查看anchore相关的服务以及状态
sudo docker-compose ps
sudo docker-compose exec api anchore-cli system status
5、查看漏洞库列表
sudo docker-compose exec api anchore-cli system feeds list
6、查看漏洞库更新情况:
sudo docker-compose exec api anchore-cli system wait
7、使用image add命令添加一个镜像进行扫描
[root@localhost good]# docker-compose exec api anchore-cli image add docker.io/centos:latest –force
8、通过image wait命令等待分析完成,这个过程可能需要花一些时间等待:
docker-compose exec api anchore-cli image wait docker.io/centos:latest
经过等待后显示分析完成:
9、查看镜像中的操作系统中的软件包:
docker-compose exec api anchore-cli image content centos:latest os
10、查看漏洞信息:
docker-compose exec api anchore-cli image vuln centos:latest os
11、查看扫描评估结果:
docker-compose exec api anchore-cli evaluate check centos:latest
12、遗留的问题,我想对已经拉取到本地的镜像进行扫描,但是在Image add的时候总是报错,于是搭建了本地仓库,将制作的镜像push到仓库,再对此镜像进行扫描,仍然报错,截图如下:
[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
2、使用grype 进行扫描,第一次扫描会进行漏洞库的更新:
Grype <image>
Grype <path/to/image.tar>
源还支持其他几种不同的方式:
如对我在本地仓库中的指定镜像进行扫描:
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一致
举例如下:
这几种方式个人认为以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、 脚本使用
这个工具使用起来比较简单,脚本下载后赋予执行权限,然后运行脚本即可:
当然也可以通过帮助查看,可以携带的参数:
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
4、 Log目录说明
对于基线检查过程会存放到log/ docker-bench-security.log中,而相关的结果以json的格式存放在 log/docker-bench-security.log.json中。