个性化阅读
专注于IT技术分析

如何安装和使用Anchore容器安全扫描器?

本文概述

Anchore Engine是一个开源工具, 用于扫描和分析容器映像是否存在安全漏洞和策略问题。它可以作为可在业务流程平台中运行的Docker容器映像或独立安装提供。

这是一个有用的安全工具, 使开发人员和QA团队可以测试, 识别和解决他们用于创建应用程序的映像中的漏洞。

在本文中, 我们将研究如何安装和使用Anchore镜像漏洞扫描程序。通常, 有几种实现方法。但是, 我将专注于以下两个方面,

  • 使用AnchoreCLI命令行选项
  • 基于GUI的Jenkins Anchore容器镜像扫描仪插件。

我们将向你展示如何安装, 配置和启动引擎, 配置和使用AnchoreCLI命令行工具以及Jenkins插件。对于这两种方法, 你将学习如何添加要扫描的镜像, 执行扫描以及查看报告。

在本文的结尾, 你将学习以下三件事。

  • 安装和配置Anchore引擎
  • 安装, 配置和使用AnchoreCLI
  • 在Jenkins中配置和使用Anchore容器镜像扫描仪插件

先决条件

以下是本教程的要求;

  • 装有Ubuntu 18.04及以下版本的本地或虚拟机;
  • 码头工人
  • Docker组成
  • Jenkins已安装并正在运行
  • 须藤用户

步骤1:设置工作目录并下载配置文件。

为你的Anchore文件创建一个工作目录。在该目录中, 你将创建两个子目录, 一个用于配置, 一个用于数据库。

为Anchore文件创建一个主目录

mkdir anchore

转到新目录并创建配置和数据库子目录。

cd anchore

mkdir config

mkdir db

下载配置文件

目录准备好后, 我们将从Github项目下载两个配置文件(docker-compose.yaml和config.yaml)。

下载docker-compose.yaml

转到定位主目录并使用以下命令

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文件是具有锚引擎服务运行所需的基本设置的配置文件。它具有多个参数, 包括默认值, 日志级别, 侦听端口, 用户名, 密码以及你可以调整以满足特定要求的其他参数。

更改密码是一种很好的安全做法, 你可以通过编辑config.yaml文件来完成。但是, 在本教程中, 我们将使用默认设置。

要继续使用默认凭据(用户名– admin和密码– foobar), 请继续执行步骤2。

更改Anchore Engine凭据(可选)

从锚点目录使用命令

nano ~/anchore/config/config.yaml

找到用户名(admin)和密码(foobar), 然后更改为你的首选值。

按CTRL + X, 然后按Y保存并退出。

有了工作目录和配置文件后, 系统就可以安装Anchore Engine了。

步骤2:—安装并启动Anchore Engine

你将使用Docker compose安装并启动Anchore Engine和数据库。

从定位主目录运行。

docker-compose up -d

这将自动提取Anchore映像, 然后分别在主目录和〜/ anchore / database /目录中创建Anchore引擎和数据库。完成后, 该命令将启动Anchore引擎。

成功安装并启动定位引擎之后, 你现在可以使用定位命令行AnchoreCLI扫描镜像。但是, 你首先需要安装AnchoreCLI命令行实用程序, 如下所示。

安装, 配置AnchoreCLI

在此步骤中, 你将学习如何安装和配置AnchoreCLI命令行工具。

步骤3:—安装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

要检查anchor-CLI系统状态, 请使用以下命令

anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status

请注意, 你必须传递Anchore引擎URL, 用户名和密码。

定义锚引擎参数

默认情况下, AnchoreCLI将尝试在不进行身份验证的情况下访问Anchore引擎。但是, 这将不起作用, 并且你需要在每个命令中提供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和其他从其启动的进程, 我们使用export命令

export ANCHORE_CLI_URL

export ANCHORE_CLI_USER

export ANCHORE_CLI_PASS

定义好参数后, AchoreCLI设置就完成了, 你可以扫描镜像了。

步骤4:—添加和分析镜像

现在, 我们已运行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

输出如下

[email protected]:~/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

输出如下

[email protected]:~/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

输出如下

[email protected]:~/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

输出–结果显示失败

[email protected]:~/anchore$ anchore-cli evaluate check openjdk:8-jre-alpine
Image Digest: sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
Full Tag: docker.io/openjdk:8-jre-alpine
Status: fail
Last Eval: 2019-09-20T12:03:32Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060

映像openjdk:8-jre-alpine违反了指定的策略ID(策略ID:2c53a13c-1765-11e8-82ef-23527761d060), 因此返回失败状态。

既然我们已经看到了Anchore Engine在检测到策略违规后如何响应, 现在该检查一下我们的稳定映像debian:latest的行为了。

Debian的政策检查:最新的稳定映像

anchore-cli evaluate check docker.io/library/debian:latest --detail

[email protected]:~/anchore$ anchore-cli evaluate check docker.io/library/debian:latest --detail
Image Digest: sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
Full Tag: docker.io/library/debian:latest
Image ID: c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
Status: pass
Last Eval: 2019-09-20T12:00:06Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Final Action: warn
Final Action Reason: policy_evaluation
Gate  TriggerDetail Status
dockerfileinstructionDockerfile directive 'HEALTHCHECK' not found, matching condition 'not_exists' checkwarn

由于信息与Dockerfile指令不匹配, 结果显示通过状态和警告的最终操作。这不会失败, 但是可能需要检查并解决该问题。

在Jenkins中配置和使用Anchore容器镜像扫描仪插件

步骤6:—在Jenkins中添加并配置Anchore Container Image Scanner插件

在这一步中, 我们将把Anchor Engine与Jenkins服务器集成在一起。 Jenkins是一个基于Java的开源服务器, 用于在软件开发周期中自动执行各种重复性任务。

Jenkins中提供了Anchore插件, 但默认情况下未安装。

使用Web浏览器登录Jenkins

http://your_server_ip_or_domain:8080

输入用户名和密码。

转到詹金斯菜单

找到并选择管理詹金斯

转到管理插件

在”可用”选项卡上, 向下滚动到”构建工具”, 然后选择”锚定容器镜像扫描仪”

单击不重新安装安装选项。

如何安装和使用Anchore Container Image Security Scanner?2

成功安装Anchore Container Image Scanner插件后, 下一步是配置凭据。

如何安装和使用Anchore Container Image Security Scanner?4

转到Jenkins菜单, 然后选择管理Jenkins选项卡。

打开配置系统。

找到”锚定”配置。

选择引擎模式

输入Anchore Engine详细信息(引擎URL, 用户名和密码, 以及端口8228-引擎的默认端口)。

网址– http:// your_server_IP:8228 / v1

输入用户名= admin

输入密码= foobar或新密码(如果你在第3步(以上)中进行了更改)

点击保存

如何安装和使用Anchore Container Image Security Scanner?6

配置锚定插件

步骤8:—添加和扫描镜像

在左上方菜单的Jenkins仪表板上单击New Item

这将打开一个包含多个选项的屏幕。

在输入项目名称字段中输入测试项目所需的名称。

在这个项目中, 我们将使用Pipeline构建。

选择管道, 然后单击确定。

如何安装和使用Anchore Container Image Security Scanner?8

现在你可以扫描镜像了。在我们的情况下, 我们将使用Anchore Engine可访问的docker注册表中已存在的映像。

为此, 你将添加管道脚本, 该脚本将指定要扫描的镜像。

步骤9:—添加管道脚本

向下滚动到”管道”部分, 然后添加脚本以指定要扫描的镜像。我们将从openjdk:8-jre-alpine开始, 其中包含一些漏洞。

node {
def imageLine = 'openjdk:8-jre-alpine'`
writeFile file: 'anchore_images', text: imageLine`
anchore name: 'anchore_images'`
}

点击保存

如何安装和使用Anchore Container Image Security Scanner?10

步骤10:—运行构建并查看扫描报告

从詹金斯菜单

单击立即构建

这将开始构建过程, 该过程将花费几分钟, 具体取决于镜像大小。完成后, 数字和彩色按钮将出现在”构建历史记录”下。失败将为红色, 通过则为蓝色。单击该按钮将显示更多结果。

步骤11:—查看结果

单击内部版本号以查看更多详细信息

这将打开一个控制台输出窗口, 指示失败–锚定报告(FAIL)

如何安装和使用Anchore Container Image Security Scanner?12

详细的报告指示分析是失败还是通过, 并根据配置提供一些报告, 显示漏洞, 警告和其他报告。默认情况下, 插件配置为在存在漏洞时使构建失败(停止)。以下是”策略和安全”报告的屏幕截图。

如何安装和使用Anchore Container Image Security Scanner?14

锚固政策评估摘要

以下是易受攻击镜像的安全性结果的屏幕截图。

如何安装和使用Anchore Container Image Security Scanner?16

常见漏洞和披露(CVE)列表

如果现在扫描没有漏洞的稳定映像debian:latest, 我们将获得以下结果。

如何安装和使用Anchore Container Image Security Scanner?18

锚定政策评估摘要(通过)

如何安装和使用Anchore Container Image Security Scanner?20

常见漏洞和披露(CVE)列表合格

总结

Anchore Container Image Scanner是一个功能强大的镜像分析工具, 可识别Docker镜像中的广泛漏洞和策略问题。它具有许多自定义选项, 并且可以配置为在分析期间如何响应检测到问题。其中之一是在引擎遇到严重漏洞时中断构建。

如果你希望在DevSecOps中发展自己的职业, 请查看此Udemy课程。

赞(0)
未经允许不得转载:srcmini » 如何安装和使用Anchore容器安全扫描器?

评论 抢沙发

评论前必须登录!