如何安装和使用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

类似文章