定期检查管道中的何检漏洞非常重要。要执行的查D存漏步骤之一是对 Docker 映像执行漏洞扫描 。在此博客中,像否您将了解如何执行漏洞扫描
、何检如何修复漏洞以及如何将其添加到您的查D存漏 Jenkins 管道中。

1、像否简介在 几年前的何检一篇博客中,描述了如何扫描 Docker 镜像中的查D存漏漏洞 。后续博客展示了如何将扫描添加到 Jenkins 管道
。像否 但是何检,免费模板 不再支持以前博客中使用的查D存漏Anchore Engine 。Anchore也提供了 grype的像否替代解决方案
。在此博客中,何检您将更深入地了解 grype、查D存漏它的像否工作原理、如何解决问题以及如何将其添加到您的 Jenkins 管道中 。
但首先,为什么要检查漏洞?您必须及时了解最新的安全修复程序。许多安全漏洞是 公开的因此很容易被利用。服务器租用因此 ,必须尽快修复安全漏洞 ,以最大限度地减少攻击面 。但是如何跟上这个呢?您主要专注于业务,不想全职从事修复安全漏洞的工作。这就是为什么自动扫描您的应用程序和 Docker 镜像很重要。Grype 可以帮助扫描您的 Docker 镜像。Grype 将检查操作系统漏洞以及特定语言包(如 Java jar 文件)的漏洞并报告它们。这样,您就有了一个很棒的云计算工具,可以为您自动执行安全检查。请注意,grype 不仅限于扫描 Docker 图像。它还可以扫描文件和目录
,因此可用于扫描您的源代码
。
在此博客中
,您将创建一个包含 Spring Boot 应用程序的易受攻击的 Docker 映像。您将安装并使用 grype 以扫描图像并修复漏洞。最后,您将学习如何将扫描添加到您的 Jenkins 管道中 。
本博客中使用的建站模板资源可以在 GitHub 上找到。
2.先决条件此博客所需的先决条件是:
基本的Linux知识;基本的 Docker 知识;基本的 Java 和 Spring Boot 知识
。3.易受攻击的应用程序导航到Spring Initializr并选择 Maven 构建、Java 17、Spring Boot 2.7.6 和 Spring Web 依赖项。这不会是一个非常脆弱的应用程序
,因为 Spring 已经确保您使用最新的 Spring Boot 版本。模板下载因此,将Spring Boot版本改为2.7.0 。可以使用以下命令构建 Spring Boot 应用程序,该命令将为您创建 jar 文件
:
复制$ mvn clean verify1. 您将扫描一个 Docker 镜像,因此需要创建一个 Dockerfile 。您将使用一个非常基本的 Dockerfile
,它只包含创建图像所需的最少指令。如果您想创建生产就绪的 Docker 映像
,请阅读文章Docker 最佳实践和Spring Boot Docker 最佳实践。
复制FROM eclipse-temurin:17.0.1_12-jre-alpineWORKDIR /opt/appARG JAR_FILECOPY target/${ JAR_FILE} app.jar1.2.3.4. ENTRYPOINT ["java", "-jar", "app.jar"]在撰写本文时,Java 17 的最新 eclipse-temurin基础映像是版本 17.0.5_8 。高防服务器同样 ,使用旧版本以使其易受攻击
。
dockerfile-maven-plugin为了构建 Docker 镜像,将使用 Spotify的一个分支。因此
,将以下片段添加到pom文件中 。
复制<plugin><groupId>com.xenoamess.docker</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.25</version><configuration><repository>mydeveloperplanet/mygrypeplanet</repository><tag>${ project.version}</tag><buildArgs><JAR_FILE>${ project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin>1.2.3.4.5.6.7.8.9.10.11.12. 使用此插件的好处是您可以轻松地重用配置。可以通过单个 Maven 命令创建 Docker 映像 。
可以通过调用以下命令来构建 Docker 映像:
复制$ mvn dockerfile:build1. 您现在已经准备好开始使用 grype 。
4 、安装可以通过执行以下脚本来安装 grype :
复制$ curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin1. 通过执行以下命令验证安装:
复制$ grype versionApplication: grypeVersion: 0.54.0Syft Version: v0.63.0BuildDate: 2022-12-13T15:02:51ZGitCommit: 93499eec7e3ce2704755e9f51457181b06b519c5GitDescription: v0.54.0Platform: linux/amd64GoVersion: go1.18.8Compiler: gcSupported DB Schema: 51.2.3.4.5.6.7.8.9.10.11. 5.扫描镜像扫描 Docker 镜像是通过调用grype后跟 来完成的docker:,表明你想扫描来自 Docker 守护进程的镜像
,镜像和标签 :
复制$ grype docker:mydeveloperplanet/mygrypeplanet:0.0.1-SNAPSHOTApplication: grypeVersion: 0.54.0Syft Version: v0.63.0Vulnerability DB [updated ]
Loaded imageParsed imageCataloged packages [50 packages ]
Scanned image [42 vulnerabilities ]
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITYbusybox 1.34.1-r3 1.34.1-r5 apk CVE-2022-28391 Highjackson-databind 2.13.3 java-archive CVE-2022-42003 Highjackson-databind 2.13.3 java-archive CVE-2022-42004 Highjackson-databind 2.13.3 2.13.4 java-archive GHSA-rgv9-q543-rqg4 Highjackson-databind 2.13.3 2.13.4.1 java-archive GHSA-jjjh-jjxp-wpff Highjava 17.0.1+12 binary CVE-2022-21248 Lowjava 17.0.1+12 binary CVE-2022-21277 Mediumjava 17.0.1+12 binary CVE-2022-21282 Mediumjava 17.0.1+12 binary CVE-2022-21283 Mediumjava 17.0.1+12 binary CVE-2022-21291 Mediumjava 17.0.1+12 binary CVE-2022-21293 Mediumjava 17.0.1+12 binary CVE-2022-21294 Mediumjava 17.0.1+12 binary CVE-2022-21296 Mediumjava 17.0.1+12 binary CVE-2022-21299 Mediumjava 17.0.1+12 binary CVE-2022-21305 Mediumjava 17.0.1+12 binary CVE-2022-21340 Mediumjava 17.0.1+12 binary CVE-2022-21341 Mediumjava 17.0.1+12 binary CVE-2022-21360 Mediumjava 17.0.1+12 binary CVE-2022-21365 Mediumjava 17.0.1+12 binary CVE-2022-21366 Mediumlibcrypto1.1 1.1.1l-r7 apk CVE-2021-4160 Mediumlibcrypto1.1 1.1.1l-r7 1.1.1n-r0 apk CVE-2022-0778 Highlibcrypto1.1 1.1.1l-r7 1.1.1q-r0 apk CVE-2022-2097 Mediumlibretls 3.3.4-r2 3.3.4-r3 apk CVE-2022-0778 Highlibssl1.1 1.1.1l-r7 apk CVE-2021-4160 Mediumlibssl1.1 1.1.1l-r7 1.1.1n-r0 apk CVE-2022-0778 Highlibssl1.1 1.1.1l-r7 1.1.1q-r0 apk CVE-2022-2097 Mediumsnakeyaml 1.30 java-archive GHSA-mjmj-j48q-9wg2 Highsnakeyaml 1.30 1.31 java-archive GHSA-3mc7-4q67-w48m Highsnakeyaml 1.30 1.31 java-archive GHSA-98wm-3w3q-mw94 Mediumsnakeyaml 1.30 1.31 java-archive GHSA-c4r9-r8fh-9vj2 Mediumsnakeyaml 1.30 1.31 java-archive GHSA-hhhw-99gj-p3c3 Mediumsnakeyaml 1.30 1.32 java-archive GHSA-9w3m-gqgf-c4p9 Mediumsnakeyaml 1.30 1.32 java-archive GHSA-w37g-rhq8-7m4j Mediumspring-core 5.3.20 java-archive CVE-2016-1000027 Criticalssl_client 1.34.1-r3 1.34.1-r5 apk CVE-2022-28391 Highzlib 1.2.11-r3 1.2.12-r0 apk CVE-2018-25032 Highzlib 1.2.11-r3 1.2.12-r2 apk CVE-2022-37434 Critical1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48. 这个输出告诉你什么?
NAME:易受攻击包的名称;INSTALLED