如何安装和使用Anchore容器镜像安全扫描器?
链接_0是一个用于扫描和分析容器镜像的开源工具,用于检测安全漏洞和策略问题。它可以作为一个Docker容器镜像在编排平台内运行,也可以作为一个独立安装。
这是一个有用的安全工具,使开发人员和QA团队能够测试、识别和解决他们正在使用来创建应用程序的镜像中的漏洞。
在本文中,我们将介绍如何安装和使用Anchore镜像漏洞扫描工具。一般来说,有几种实现方法。然而,我将重点介绍以下两种方法:
- 使用AnchoreCLI命令行选项
- 基于GUI的Jenkins Anchore容器镜像扫描插件。
我们将向您展示如何安装、配置和启动引擎,配置和使用AnchoreCLI命令行工具以及Jenkins插件。对于这两种方法,您将学习如何添加要扫描的镜像、执行扫描并查看报告。
在本文结束时,您将学到以下三个内容:
- 安装和配置Anchore引擎
- 安装、配置和使用AnchoreCLI
- 在Jenkins中配置和使用Anchore容器镜像扫描插件
先决条件
本教程的要求如下:
- 一台带有Ubuntu 18.04的本地或虚拟机,并安装了以下组件:
- Docker
- Docker-compose
- Jenkins已安装并运行
- sudo用户
步骤1:设置工作目录并下载配置文件。
创建一个用于Anchore文件的工作目录。在该目录下,您将创建两个子目录,一个用于配置,一个用于数据库。
创建一个用于Anchore文件的主目录
mkdir anchore
进入新目录并创建配置和数据库子目录。
cd anchore
mkdir config
mkdir db
下载配置文件
一旦目录准备好,我们将从Github项目下载两个配置文件(docker-compose.yaml和config.yaml)。
要下载docker-compose.yaml
进入Anchore主目录,使用以下命令
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/docker-compose.yaml > docker-compose.yaml
然后将config.yaml下载到~/anchore/config目录中
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/config.yaml -o ~/anchore/config/config.yaml
config.yaml是一个配置文件,包含anchore引擎服务运行所需的基本设置。它有几个参数,包括默认设置、日志级别、监听端口、用户名、密码等,您可以根据具体要求进行调整。
更改密码是一种良好的安全实践,您可以通过编辑config.yaml文件来完成。但是,在本教程中,我们将使用默认设置。
如果要继续使用默认凭据(用户名-admin,密码-foobar),请继续执行第2步。
更改Anchore引擎凭据(可选)
从anchore目录中使用以下命令
nano ~/anchore/config/config.yaml
找到用户名(admin)和密码(foobar),并更改为您喜欢的值。
按下CTRL + X,然后按Y保存并退出。
安装好工作目录和配置文件后,系统已准备好安装Anchore Engine。
第二步:安装并启动Anchore Engine
您将使用Docker compose安装并启动Anchore Engine和数据库。
从anchore主目录运行以下命令:
docker-compose up -d
这将自动拉取Anchore镜像,并在主目录和~/anchore/database/目录下分别创建Anchore引擎和数据库。命令完成后,将启动Anchore引擎。
成功安装并启动Anchore引擎后,您现在可以使用Anchore命令行工具AnchoreCLI扫描镜像。不过,您首先需要安装AnchoreCLI命令行实用程序,如下所示。
安装和配置AnchoreCLI
在此步骤中,您将学习如何安装和配置AnchoreCLI命令行工具。
第三步:安装AnchoreCLI
在本教程中,我们将首先安装python-pip实用程序,然后使用它从源代码安装AnchoreCLI。
安装Python pip。进入Anchore主目录并运行以下命令:
sudo apt-get update
sudo apt-get install python-pip
sudo pip install --upgrade setuptools
使用python-pip安装AnchoreCLI
pip install anchorecli
此命令将下载并安装AnchoreCLI的文件。安装完成后,我们现在需要使用以下命令源化我们的.profile文件:
source ~/.profile
要验证安装是否成功以及Anchorecli的版本,请使用以下命令:
anchore-cli --version
要检查anchore-CLI系统状态,请使用以下命令:
anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status
请注意,您必须传递Anchore引擎的URL、用户名和密码。
定义Anchore Engine参数
默认情况下,AnchoreCLI将尝试在没有身份验证的情况下访问Anchore Engine。然而,这将无法工作,您需要在每个命令中提供Anchore Engine的凭据。
这涉及到在每个Anchore CLI命令中传递用户名、密码和URL参数。而不是每次都提供这些参数,另一种方法是以以下格式将它们定义为环境变量。
要传递URL,请运行
ANCHORE_CLI_URL=http://localhost:8228/v1
这定义了Anchore Engine的URL,以及它使用的端口8228。
使用默认值设置用户名和密码;否则,将其替换为您在第1步中设置的新值。
ANCHORE_CLI_USER=admin
ANCHORE_CLI_PASS=foobar
以上仅为当前shell设置参数。要设置当前shell以及从其启动的其他进程,我们使用export命令。
export ANCHORE_CLI_URL
export ANCHORE_CLI_USER
export ANCHORE_CLI_PASS
参数定义完成后,AchoreCLI设置完成,您已准备好扫描镜像。
第四步:添加和分析镜像
现在我们已经运行Anchore Engine并配置好CLI,您将学习如何添加和分析镜像以查找安全问题。在本教程中,我们将分析两个镜像:openjdk:8-jre-alpine
,其中包含漏洞,以及debian:latest
。
分析镜像
为了继续,我们首先需要将镜像添加到引擎。添加镜像的命令如下:
anchore-cli image add openjdk:8-jre-alpine
添加稳定版镜像debian:latest
anchore-cli image add docker.io/library/debian:latest
添加更多镜像
anchore-cli image add openjdk:10-jdk
anchore-cli image add openjdk:11-jdk
将镜像添加到Anchore Engine后,分析将立即开始。如果有多个加载的图像,则将它们放入队列中并逐个进行分析。您可以检查进度,并查看加载的图像列表以及其分析状态。
要查看列表,请运行以下命令
anchore-cli image list
输出
user1@Imagescan:~/anchore$ anchore-cli image list
Full Tag Image Digest Analysis Status
docker.io/openjdk:10-jdk sha256:923d074ef1f4f0dceef68d9bad8be19c918d9ca8180a26b037e00576f24c2cb4analyzed
docker.io/openjdk:11-jdk sha256:9923c0853475007397ed5c91438c12262476d99372d4cd4d7d44d05e9af5c077analyzed
docker.io/openjdk:8-jre-alpine sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52analyzed
根据图像数量、大小以及添加后经过的时间,您将获得对已完成分析的图像、正在进行分析的图像以及已排队图像的未分析结果。
步骤5: – 检索和查看分析结果
分析完成后,您可以检查结果,并查看引擎识别的漏洞扫描、策略检查和其他问题的结果。
要检查openjdk:8-jre-alpine
易受漏洞影响的图像的漏洞扫描结果
运行
anchore-cli image vuln openjdk:8-jre-alpine all
输出
user1@Imagescan:~/anchore$ anchore-cli image vuln openjdk:8-jre-alpine all
Vulnerability IDPackage Severity Fix CVE Refs Vulnerability URL
CVE-2018-1000654 libtasn1-4.13-r0 High 4.14-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000654
CVE-2019-12900 libbz2-1.0.6-r6 High 1.0.6-r7 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12900
CVE-2019-14697 musl-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-14697 musl-utils-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-8457 sqlite-libs-3.26.0-r3 High 3.28.0-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8457
CVE-2018-14498 libjpeg-turbo-1.5.3-r4 Medium 1.5.3-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14498
报告显示了CVE标识符、易受漏洞影响的软件包、严重程度以及是否有修复。对于我们的图像openjdk:8-jre-alpine,分析显示它有五个高风险漏洞和相当多的中等和可忽略的漏洞(上面未显示的一些)。
要查看稳定图像debian:latest
的漏洞结果
运行命令
anchore-cli image vuln docker.io/library/debian:latest all
输出
user1@Imagescan:~/anchore$ anchore-cli image vuln debian:latest all
Vulnerability IDPackage Severity Fix CVE RefsVulnerability URL
CVE-2005-2541 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2019-1010022libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010022libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010023libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010023libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010024libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024
从报告中可以看出,图像debian:latest有可忽略的漏洞,并且没有修复措施。
查看不稳定图像 openjdk:8-jre-alpine
的政策评估结果
运行
anchore-cli evaluate check openjdk:8-jre-alpine
输出 – 结果显示失败
user1@Imagescan:~/anchore$ anchore-cli evaluate check openjdk:8-jre-alpine
图像摘要: sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
完整标签: docker.io/openjdk:8-jre-alpine
状态: 失败
上次评估: 2019-09-20T12:03:32Z
政策ID: 2c53a13c-1765-11e8-82ef-23527761d060
图像 openjdk:8-jre-alpine 违反了指定的政策ID (政策ID: 2c53a13c-1765-11e8-82ef-23527761d060
),因此返回失败状态。
现在我们已经看到了 Anchore Engine 在检测到政策违规后的响应,现在是时候检查它在我们的稳定图像 debian:latest 上的行为了。
检查 debian:latest
稳定图像的政策
anchore-cli evaluate check docker.io/library/debian:latest --detail
user1@Imagescan:~/anchore$ anchore-cli evaluate check docker.io/library/debian:latest --detail
图像摘要: sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
完整标签: docker.io/library/debian:latest
图像ID: c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
状态: 通过
上次评估: 2019-09-20T12:00:06Z
政策ID: 2c53a13c-1765-11e8-82ef-23527761d060
最终动作: 警告
最终动作原因: policy_evaluation
门 触发详细状态
dockerfileinstructionDockerfile 指令 'HEALTHCHECK' 未找到,匹配条件 '不存在' 检查警告
结果显示状态为 通过
,最终动作为 警告
,原因是与 Dockerfile 指令的信息不匹配。这不是失败,但可能需要检查和解决这个问题。
在 Jenkins 中配置和使用 Anchore 容器镜像扫描插件
第6步:在 Jenkins 中添加和配置 Anchore 容器镜像扫描插件
在这一步中,我们将 Anchore Engine 集成到 Jenkins 服务器中。Jenkins 是一个基于 Java 的开源服务器,用于自动化软件开发周期中的各种重复任务。
Anchore 插件在 Jenkins 中可用,但默认情况下未安装。
使用 Web 浏览器登录 Jenkins
http://your_server_ip_or_domain:8080
输入 用户名
和 密码
。
进入 Jenkins 菜单
找到并选择 管理 Jenkins
进入 管理插件
在 可用 选项卡上,向下滚动至 构建工具,选择 Anchore 容器镜像扫描
点击 无需重启安装 选项。
成功安装 Anchore 容器镜像扫描插件 后,下一步是配置凭据。
进入 Jenkins 菜单并选择 管理 Jenkins 选项卡。
打开 配置系统。
找到 Anchore 配置。
选择 引擎模式
输入 Anchore Engine 详细信息(引擎的 URL
、用户名
和 密码
,以及 端口8228
– 引擎的默认端口)。
URL – http://your_server_IP:8228/v1
输入 用户名
= admin
输入 密码
= foobar 或者如果在 第3步 中更改了密码,则输入新密码
点击 保存
配置 Anchore 插件
第8步:添加和扫描镜像
在左上菜单的 Jenkins 仪表板 上点击 新建项目
这将打开一个屏幕,上面有几个选项。
在“输入项目名称”字段中输入所需的测试项目名称。
在这个项目中,我们将使用Pipeline构建。
选择Pipeline并点击确定。
现在你可以准备扫描图像了。在我们的例子中,我们将使用已经在Docker镜像库中的图像,这些图像可以被Anchore Engine访问。
为了做到这一点,你将添加一个指定要扫描的图像的pipeline脚本。
步骤9:— 添加pipeline脚本
向下滚动到Pipeline部分,并添加指定要扫描的图像的脚本。我们将从openjdk:8-jre-alpine
开始,其中包含一些漏洞。
node {
def imageLine = 'openjdk:8-jre-alpine'`
writeFile file: 'anchore_images', text: imageLine`
anchore name: 'anchore_images'`
}
点击保存
步骤10:— 运行构建并查看扫描报告
从Jenkins菜单中
点击立即构建
这将启动构建过程,根据镜像大小需要几分钟的时间。完成后,构建历史下将出现一个数字和一个彩色按钮。这个按钮将有一个红色的颜色表示失败或蓝色的颜色表示通过。点击按钮将显示更多的结果。
步骤11:— 查看结果
点击构建编号以查看更多详细信息
这将打开一个控制台输出窗口,指示一个失败 – Anchore报告 (失败)
详细报告表明分析是失败还是通过,并提供了几个报告,显示基于配置的漏洞、警告和其他内容。默认情况下,插件被配置为在有漏洞时使构建失败(停止)。下面是策略和安全报告的截图。
Anchore策略评估摘要
以下是对有漏洞图像的安全结果的截图。
常见漏洞和曝光(CVE)列表
现在我们使用没有漏洞的稳定镜像debian:latest
进行扫描,我们会得到以下结果。
Anchore策略评估摘要 (通过)
常见漏洞和曝光(CVE)列表 (通过)
结论
Anchore容器图像扫描器是一个强大的图像分析工具,可以识别Docker图像中的各种漏洞和策略问题。它有许多定制选项,并且可以根据在分析过程中检测到问题时如何响应进行配置。其中一个选项是当引擎遇到严重漏洞时中断构建。
如果你正在寻求在DevSecOps领域发展你的职业,那么请查看这个Udemy course。