容器镜像安全扫描之Trivy

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。

一 概述

1.1 Trivy简介

Trivy是一种适用于CI的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。Trivy很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如Clair,Anchore Engine,Quay相比,Trivy在准确性、方便性和对CI的支持等方面都有着明显的优势。

1.2 特性

  1. 检测面很全,能检测全面的漏洞,操作系统软件包(Alpine、Red Hat Universal Base Image、Red Hat Enterprise Linux、CentOS、Oracle Linux、Debian、Ubuntu、Amazon Linux、openSUSE Leap、SUSE Enterprise Linux、Photon OS 和Distrioless)、应用程序依赖项(Bundler、Composer、Pipenv、Poetry、npm、yarn和Cargo);
  2. 使用简单,仅仅只需要指定镜像名称;
  3. 扫描快且无状态,第一次扫描将在10秒内完成(取决于您的网络)。随后的扫描将在一秒钟内完成。与其他扫描器在第一次运行时需要很长时间(大约10分钟)来获取漏洞信息,并鼓励您维护持久的漏洞数据库不同,Trivy是无状态的,不需要维护或准备;
  4. 易于安装,安装方式:
   1. apt-get install
   2. yum install
   3. brew install

无需安装数据库、库等先决条件(例外情况是需要安装rpm以扫描基于RHEL/CentOS的图像)。

二 安装部署

2.1 Linux安装

$ sudo vim /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://knqyf263.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y update
$ sudo yum -y install trivy

2.2 Mac OS安装

$ brew install knqyf263/trivy/trivy

2.3 使用方式

当然,trivy也支持docker快速启动

docker run --rm -v [YOUR_CACHE_DIR]:/root/.cache/ knqyf263/trivy [YOUR_IMAGE_NAME]

需要将YOUR_CACHE_DIR替换成你的缓存目录,将之前缓存的漏洞库映射到容器中,不然启动会很慢



如果想通过这种方式扫描本机的容器镜像,需要将docker.sock文件映射到容器内,比如

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \

    -v $HOME/.cache/:/root/.cache/ knqyf263/trivy python:3.4-alpine



trivy使用简单示例如下:

扫描镜像:

trivy [image_name]



扫描通过save方式打包的镜像:

trivy --input [image_name.tar]



将扫描结果存为json文件:

trivy -f json -o results.json [image_name]



通过设置漏洞级别过滤漏洞:

trivy --severity HIGH,CRITICAL [image_name]



通过设置漏洞类型过滤漏洞:

trivy --vuln-type os [image_name]

漏洞类型分为os和library



只更新某个系统类型的漏洞库:

trivy --only-update alpine,debia [image_name]



指定退出代码:

trivy --exit-code 1 [image_name]

指定退出代码,主要是为后续判断提供可操作性,主要是在CI中



由于trivy有缓存,所以在扫描镜像的latest版本的时候,会出现异常,需要清楚缓存操作:

trivy --clear-cache [image_name]



如果需要重建本地漏洞数据库,或清除所有缓存,可以通过trivy --reset

三 集成到CI

Trivy有对CI友好的特点,并且官方也以这种方式使用它,想要集成CI只需要一段简单的Yml配置文件即可,如果发现漏洞,测试将失败。如果不希望测试失败,请指定--exit code 0。由于在自动化场景(如CI/CD)中,您只对最终结果感兴趣,而不是对完整的报告感兴趣,因此请使用--light标志对此场景进行优化,以获得快速的结果。

集成GitLab CI的Yml配置可以参考:

https://github.com/aquasecurity/trivy#gitlab-ci

四 注意事项

  • 国内拉取漏洞数据库慢。
  • 同一台服务器,多个镜像扫描的时候不可并行执行。
  • 可以使用--light使用轻量级数据库来优化执行扫描的效率。

五 反思

trivy不仅可以集成在CI过程中,及时发现镜像漏洞,而且可以于自建harbor进行集成,定时对已经上传的镜像进行扫描。

参考链接

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
4天前
|
监控 安全 数据安全/隐私保护
【Docker专栏】Docker容器安全:防御与加固策略
【5月更文挑战第7天】本文探讨了Docker容器安全,指出容器化技术虽带来便利,但也存在安全隐患,如不安全的镜像、容器逃逸、网络配置不当等。建议采取使用官方镜像、镜像扫描、最小权限原则等防御措施,并通过安全的Dockerfile编写、运行时安全策略、定期更新和访问控制等加固容器安全。保持警惕并持续学习安全实践至关重要。
【Docker专栏】Docker容器安全:防御与加固策略
|
8天前
|
存储 缓存 安全
Golang深入浅出之-Go语言中的并发安全容器:sync.Map与sync.Pool
Go语言中的`sync.Map`和`sync.Pool`是并发安全的容器。`sync.Map`提供并发安全的键值对存储,适合快速读取和少写入的情况。注意不要直接遍历Map,应使用`Range`方法。`sync.Pool`是对象池,用于缓存可重用对象,减少内存分配。使用时需注意对象生命周期管理和容量控制。在多goroutine环境下,这两个容器能提高性能和稳定性,但需根据场景谨慎使用,避免不当操作导致的问题。
32 4
|
12天前
|
Linux 网络安全 Docker
【Linux】-docker配置容器并打包成镜像
【Linux】-docker配置容器并打包成镜像
|
14天前
|
存储 安全 Cloud Native
容器安全-镜像扫描
容器镜像安全至关重要,镜像扫描能检查镜像中的安全漏洞,防范云原生环境风险。72%客户拥有超过100个容器,安全问题日益凸显。两种扫描方案:定期扫描镜像注册表或集成到Pipeline中。此外,蜂巢提供全生命周期镜像扫描,包括漏洞、病毒检测,实时更新补丁数据库,并给出修复建议,助力企业保障容器安全。目前已服务100+头部客户。
|
16天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
30 0
|
17天前
|
安全 JavaScript Docker
修改docker镜像版本,容器大小缩小10%!
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享其通过修改Docker镜像版本实现容器瘦身的技巧。将服务从`1.0.0`更新至`1.0.1`,基于Alpine版Docker镜像,容器体积减小至原来的10%。文章展示了问题背景、选择轻量级镜像的原因及步骤,包括Docker镜像版本对比、构建和启动新容器的过程,并证实功能未受影响。`file-server`更新将发布在GitHub上,期待用户试用。一起学习,每天进步!
27 2
修改docker镜像版本,容器大小缩小10%!
|
19天前
|
缓存 运维 安全
云效产品使用报错问题之流水线中支持镜像镜像的安全检测,只能去ACR中去执行如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
存储 数据挖掘 Docker
《Docker 简易速速上手小册》第2章 容器和镜像(2024 最新版)
《Docker 简易速速上手小册》第2章 容器和镜像(2024 最新版)
37 0
|
24天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
17 1

相关产品

  • 容器镜像服务