使用 Trivy 扫描 Docker 镜像漏洞

本博客介绍了使用 Trivy 扫描程序保护 Docker 镜像免受潜在漏洞影响的基本步骤。

Trivy scanner 是一个开源工具,可用于扫描 Docker 镜像以查找漏洞。

Docker 镜像是打包和部署应用程序的简单方法。但是,如果它们包含漏洞,它们也可能存在安全风险。它可能是库中的问题、应用程序依赖项中的漏洞、容器配置错误等。

Trivy 是一种有效的 Docker 漏洞扫描程序,支持多个漏洞数据库,包括常见漏洞和暴露 (CVE) 数据库。Trivy 还可以扫描错误的配置和机密。

使用 Trivy 扫描 Docker 镜像

下图显示了高级组件和容器扫描工作流。

使用 Trivy 扫描 Docker 镜像漏洞_第1张图片

首先,您需要在系统或要实现 Docker 镜像扫描的 CI 代理节点上安装 trivy。

您可以在 Trivy 官方安装页面找到安装步骤。

使用 Trivy 扫描 Docker 镜像非常简单。您只需要使用要扫描的镜像名称运行以下琐碎命令即可。

trivy image 

例如,我的工作站中有一个名为 techiescamp/pet-clinic-app 的镜像。它是一个带有java spring boot应用程序的docker镜像。

trivy image techiescamp/pet-clinic-app:1.0.0

扫描结果显示,镜像中没有高漏洞或严重漏洞。

使用 Trivy 扫描 Docker 镜像漏洞_第2张图片

此外,它还显示了 Docker 镜像中 jar 的 2 个高漏洞

使用 Trivy 扫描 Docker 镜像漏洞_第3张图片

Trivy 可以以多种方式使用。以下是一些高级用法示例:

扫描严重性

Trivy 可以扫描特定严重性的漏洞。为此,请使用该标志指定需要扫描的漏洞严重性。--severity

trivy image --severity CRITICAL techiescamp/pet-clinic-app:1.0.0

Docker 镜像生成管道中的 Trivy 扫描

Trivy 在 docker 镜像构建方面在 CI/CD pipline中起着关键作用。组织使用 trivy 来扫描 CI/CD pipline 中的漏洞,以确保在生产环境中部署 seecure 镜像。

在 CI/CD 拼接线中使用时,如果镜像中存在任何漏洞,pipline job应失败。严重性取决于组织的安全合规性。例如,某些组织可能有严格的准则,以使 HIGH 和 CRITICAL 严重性生成失败。

现在,使构建失败的最佳方法是使用退出代码。

为此,请使用带有 trivy 命令的 and 标志,如下所示。如果发现给定严重性的任何漏洞,它将使用 Trivy 退出代码进行非零退出--severity--exit-code 1

trivy image --severity HIGH,CRITICAL  --exit-code 1 techiescamp/pet-clinic-app:1.0.0

此外,还可以将漏洞报告作为生成失败通知发送给开发人员和 DevOps 工程师。

推荐的方法是使用 Trivy 配置文件来设置扫描的默认值。您可以使用此文件来满足特定于项目需求的扫描要求。

下面是一个文件示例trivy.yaml

timeout: 10m
format: json
dependency-tree: true
list-all-pkgs: true
exit-code: 1
output: result.json
severity:
  - HIGH
  - CRITICAL
scan:
  skip-dirs:
    - /lib64
    - /lib
    - /usr/lib
    - /usr/include

  security-checks:
    - vuln
    - secret
vulnerability:
  type:
    - os
    - library
  ignore-unfixed: true
db:
  skip-update: false

以下是使用配置文件的语法

trivy image --config path/to/trivy.yaml your-image-name:tag

以 JSON 格式输出

Trivy 还可以以 JSON 格式提供输出。为此,请使用标志,它将以 JSON 格式显示扫描结果。--format json

trivy image --format json techiescamp/pet-clinic-app:1.0.0

忽略已修复的漏洞

有些漏洞即使更新了软件包(未修补/未修复)也无法修复。Trivy 可以扫描镜像,忽略这些漏洞。为此,请使用标志。--ignore-unfixed

trivy image --ignore-unfixed java:0.1

扫描 Docker tar 镜像

在某些情况下,您可能拥有 tar 格式的 Docker 镜像。在这种情况下,您可以使用琐碎以 tar 格式扫描镜像。

例如

trivy image --input petclinic-app.tar

Trivy 在 Docker 镜像中扫描什么

以下是 Trivy 扫描的 Docker 镜像中的关键元素。

  1. Trivy 可以扫描各种包管理器中的漏洞,包括 apt、yum、apk 和 npm。这意味着 Trivy 可以扫描使用各种不同软件依赖项的镜像中的漏洞。
  2. Trivy 可以扫描 Linux 和 Windows 镜像中的漏洞。这意味着您可以使用 Trivy 扫描将在 Linux 或 Windows 主机上运行的镜像。
  3. Trivy 可以扫描以各种不同格式存储的镜像中的漏洞,包括 Docker 镜像、tar 存档和文件系统。这意味着您可以使用 Trivy 扫描存储在各种不同位置的镜像。
  4. Trivy 可以扫描在各种环境中运行的 Docker 镜像中的漏洞,包括普通 Docker 容器和 Kubernetes Pod。这意味着您可以使用 Trivy 扫描在您使用的任何环境中运行的镜像。

使用 Trivy 进行 Docker 镜像漏洞扫描的好处

下图显示了 CVE 数据库中的漏洞总数。正如你所看到的,它每年都在增加。

使用 Trivy 扫描 Docker 镜像漏洞_第4张图片

考虑到漏洞的增加,使用 Trivy 扫描 Docker 镜像有很多好处。

一些好处包括:

  1. 识别漏洞:Trivy 可以识别 Docker 镜像中使用的包中的漏洞。这在基础镜像修补和应用程序镜像生成中特别有用。
  2. 改善安全态势:通过扫描镜像中的漏洞,可以改善组织的安全状况。
  3. 安全合规:作为安全合规性的一部分,许多组织需要检查其 Docker 镜像是否存在漏洞。您可以在 Trivy 的帮助下达到这些标准。

结论

Docker 镜像漏洞扫描在开发期间以及 CI/CD 过程中是必须的。这可确保遵循良好的 DevSecOps 原则并实施最佳实践,以在基于 Docker 的环境中保持强大的安全性。

你可能感兴趣的:(云原生,docker,容器,运维)