本博客地址:https://security.blog.csdn.net/article/details/83216219
一、对比结论
本次对主流的Docker安全自动化扫描工具进行了测试比较,测试比较结果如下表所示:
工具 | Clair | Anchore | DockerScan |
---|---|---|---|
工具 | Clair | Anchore | DockerScan |
环境搭建 | 复杂 | 简单(慢) | 简单 |
安装兼容性 | 差 | 好 | 差 |
扫描 | 需要先上传镜像 | 直接扫描 | 直接扫描 |
扫描速度 | 快 | 快 | 快 |
漏洞数据库 | CVE | CVE | 无 |
扫描结果 | 漏洞 | 漏洞+其他 | 其他 |
Ubuntu | OK | OK | OK |
CentOS | OK | OK | 未成功 |
报告输出 | html报告 | 控制台报告(有格式排版) | 控制台报告(无格式排版) |
其他说明 | 通过对容器的layer进行扫描,对镜像进行特征提取,依据特征匹配CVE漏洞。 | 侧重对镜像的审计,通过对容器的layer进行扫描发现漏洞,基于CVE数据库。功能强大,其中就包含了DockerScan的功能。 | 提取镜像中的多种信息,依据这些信息人工判断该镜像是否存在安全隐患。 |
先上结论:建议使用Anchore
理由:功能最强大,使用最简单
部分对比项说明
1、环境搭建
Clair
:环境搭建依赖复杂众多,需要修改一些配置文件,同时需要go语言环境,环境搭建出错概率极高,同时会因为系统环境不同而出现错误。
Anchore
:环境搭建简单,需要同步漏洞数据库,该过程比较耗时(约30-60分钟,具体取决于网速)。环境兼容性好,基本不出错。
DockerScan
:环境搭建简单且很快,因为不需要漏洞数据库。在CentOS下没有测试成功。
2、扫描数据
Anchore可以扫描的功能最多,包含了Clair和DockerScan的主要功能。
既然推荐了Anchore,那自然是要详细说明的!
二、Anchore安装使用说明
1、安装依赖
注:如果有就不用再安装了
注:docker版本验证:docker version
依赖 | 安装说明 |
---|---|
Docker | >1.10 |
Epel-release | yum install epel-release |
Rpm-python | yum install rpm-python |
dpkg | yum install dpkg |
Python-pip | yum install python-pip |
2、安装Anchore
安装 | 安装说明 |
---|---|
安装: | pip install anchore |
环境变量: | export PATH=~/.local/bin:$PATH |
安装完确认: | anchore --version |
更新列表: | anchore feeds list |
更新数据库: | anchore feeds sync 实际中可能会执行失败,相信博主是网络的问题,多执行几次说不定哪次就执行成功了 |
更新过程是这样的效果:
这张图是网上扒来的,实际测试中取决于网络,网络好的话就是下图这样。博主在实际测试中,每次都是差不多有一半是掉线的!但服务器上安装时速度很快,失败率极低!
3、镜像使用
拉取镜像:docker pull nginx
(以nginx为例)
查看已安装镜像:docker images
效果是这样的:
4、Anchore使用
帮助文档:
anchore --help
常用功能:
对镜像进行分析:
anchore analyze --image nginx:latest --imagetype base
生成结果报告:
anchore gate --image nginx:latest
CVE漏洞扫描:
anchore query --image nginx:latest cve-scan all
与纯净镜像的区别:
anchore query --image nginx:latest show-file-diffs base
列表文件详细:
anchore query --image nginx:latest list-files-detail all
镜像特征提取:
anchore toolbox --image nginx:latest show
5、详细命令说明
示例命令标红色的参数为对应的说明。博主英语很差,翻译是一条一条复制到百度翻译里面输出的。另外,在这里翻译了绝大多数,还有个别参数博主觉得没什么卵用,就不翻译了
analyze:
anchore analyze --image
nginx:latest --imagetype
base
命令 | 说明 |
---|---|
–force | 即使数据库中已存在分析也要进行分析 |
–image | 处理指定的镜像 |
–imagefile | 在指定文件中列出镜像ID |
–include-allanchore | 包括所有镜像 |
–dockerfile <file> | 分析docker文件镜像 |
–imagetype <typetext> | 指定正在分析的镜像类型 |
–skipgates | 不要将门作为分析的一部分 |
–layerstrategy | 分析镜像历史中的策略的名称 |
query:
anchore query --image nginx:latest list-files-detail
all
命令 | 说明 |
---|---|
list-gem-detail | 列出增长细节 |
show-dockerfile | 显示docker文件 |
list-python-package-detail | 列出python包的细节 |
show-pkg-diffs | 显示包的差异 |
has-final-gateaction | 最后关门 |
get-retrieved-files | 获取检索到的文件 |
show-non-packaged-files | 显示非打包文件 |
show-familytree | 显示家庭树 |
list-java-package-detail | 列出Java包的详细信息 |
list-files | 列出文件 |
list-npms | 列出NPM |
list-package-detail | 列出包细节 |
list-packages | 列出包 |
list-npm-detail | 列出NPM细节 |
list-python-packages | 列出python软件包 |
list-image-attrs | 列出图像吸引力 |
has-gateaction | 关门 |
show-layer-info | 显示涂层信息 |
show-layers | 显示图层 |
list-gems | 列表的增长 |
list-package-licenses | 列出软件包许可证 |
has-package | 有包装 |
list-java-packages | 列出Java包 |
list-retrieved-files | 列出检索文件 |
show-distro | 展示发行版 |
list-content-search-matches | 列表内容搜索匹配 |
show-non-packaged-files-diff | 显示非打包文件差异 |
show-file-diffs | 显示文件差异 |
list-files-detail | 详细列出文件 |
cve-scan-simple | 简单的漏洞扫描 |
size-bins | 尺寸 |
cve-scan | 漏洞扫描 |
base-status | 基本状态 |
distro-bins | 分开储物 |
common-packages | 常用包装 |
anchore query --image
nginx:latest list-files-detail all
命令 | 说明 |
---|---|
–image | 处理指定镜像ID |
–imagefile | 在指定文件中列出镜像ID |
–include-allanchore | 包括所有已知的镜像 |
gate:
anchore gate --image
nginx:latest
命令 | 说明 |
---|---|
–force | 即使数据库中已存在分析也要进行分析 |
–image | 处理指定的镜像 |
–imagefile | 在指定文件中列出镜像ID |
–include-allanchore | 包括所有镜像 |
–editpolicy | 编辑指定镜像的门策略 |
–rmpolicy | 删除指定镜像的策略,恢复默认策略 |
–listpolicy | 列出指定镜像的当前门策略 |
–updatepolicy <file> | 将输入门策略文件存储为指定镜像的策略 |
–policy <file> | 使用指定的策略文件而不是默认文件 |
–run-bundle | 使用anchore策略包进行评估 |
–bundlefile <file> | 从指定文件中使用指定的捆绑JSON |
–usetag <imagetag> | 使用指定标签来使用Run评估输入对象 |
–resultsonly | 只显示评估结果 |
–show-gatehelp | 显示可用于构建anchore策略的所有门名、触发器和参数 |
–show-policytemplate | 基于所有安装的门/触发器生成策略模板 |
–whitelist | 编辑评估的门触发器和可选白名单 |
–global-whitelist <file> | 使用指定的全局白名单文件 |
–show-triggerids | 在输出中显示触发的门ID |
–show-whitelisted | 展示白名单 |