本文概述
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 Scanner插件后, 下一步是配置凭据。
转到Jenkins菜单, 然后选择管理Jenkins选项卡。
打开配置系统。
找到”锚定”配置。
选择引擎模式
输入Anchore Engine详细信息(引擎URL, 用户名和密码, 以及端口8228-引擎的默认端口)。
网址– http:// your_server_IP:8228 / v1
输入用户名= admin
输入密码= foobar或新密码(如果你在第3步(以上)中进行了更改)
点击保存
配置锚定插件
步骤8:—添加和扫描镜像
在左上方菜单的Jenkins仪表板上单击New Item
这将打开一个包含多个选项的屏幕。
在输入项目名称字段中输入测试项目所需的名称。
在这个项目中, 我们将使用Pipeline构建。
选择管道, 然后单击确定。
现在你可以扫描镜像了。在我们的情况下, 我们将使用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'`
}
点击保存
步骤10:—运行构建并查看扫描报告
从詹金斯菜单
单击立即构建
这将开始构建过程, 该过程将花费几分钟, 具体取决于镜像大小。完成后, 数字和彩色按钮将出现在”构建历史记录”下。失败将为红色, 通过则为蓝色。单击该按钮将显示更多结果。
步骤11:—查看结果
单击内部版本号以查看更多详细信息
这将打开一个控制台输出窗口, 指示失败–锚定报告(FAIL)
详细的报告指示分析是失败还是通过, 并根据配置提供一些报告, 显示漏洞, 警告和其他报告。默认情况下, 插件配置为在存在漏洞时使构建失败(停止)。以下是”策略和安全”报告的屏幕截图。
锚固政策评估摘要
以下是易受攻击镜像的安全性结果的屏幕截图。
常见漏洞和披露(CVE)列表
如果现在扫描没有漏洞的稳定映像debian:latest, 我们将获得以下结果。
锚定政策评估摘要(通过)
常见漏洞和披露(CVE)列表合格
总结
Anchore Container Image Scanner是一个功能强大的镜像分析工具, 可识别Docker镜像中的广泛漏洞和策略问题。它具有许多自定义选项, 并且可以配置为在分析期间如何响应检测到问题。其中之一是在引擎遇到严重漏洞时中断构建。
如果你希望在DevSecOps中发展自己的职业, 请查看此Udemy课程。
评论前必须登录!
注册