本博客介绍了使用 Trivy 扫描程序保护 Docker 镜像免受潜在漏洞影响的基本步骤。
Trivy scanner 是一个开源工具,可用于扫描 Docker 镜像以查找漏洞。
Docker 镜像是打包和部署应用程序的简单方法。但是,如果它们包含漏洞,它们也可能存在安全风险。它可能是库中的问题、应用程序依赖项中的漏洞、容器配置错误等。
Trivy 是一种有效的 Docker 漏洞扫描程序,支持多个漏洞数据库,包括常见漏洞和暴露 (CVE) 数据库。Trivy 还可以扫描错误的配置和机密。
下图显示了高级组件和容器扫描工作流。
首先,您需要在系统或要实现 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
扫描结果显示,镜像中没有高漏洞或严重漏洞。
此外,它还显示了 Docker 镜像中 jar 的 2 个高漏洞。
Trivy 可以以多种方式使用。以下是一些高级用法示例:
Trivy 可以扫描特定严重性的漏洞。为此,请使用该标志指定需要扫描的漏洞严重性。--severity
trivy image --severity CRITICAL techiescamp/pet-clinic-app:1.0.0
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
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
在某些情况下,您可能拥有 tar 格式的 Docker 镜像。在这种情况下,您可以使用琐碎以 tar 格式扫描镜像。
例如
trivy image --input petclinic-app.tar
以下是 Trivy 扫描的 Docker 镜像中的关键元素。
下图显示了 CVE 数据库中的漏洞总数。正如你所看到的,它每年都在增加。
考虑到漏洞的增加,使用 Trivy 扫描 Docker 镜像有很多好处。
一些好处包括:
Docker 镜像漏洞扫描在开发期间以及 CI/CD 过程中是必须的。这可确保遵循良好的 DevSecOps 原则并实施最佳实践,以在基于 Docker 的环境中保持强大的安全性。