服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 超实用的容器镜像漏洞检测工具Trivy入门指南

超实用的容器镜像漏洞检测工具Trivy入门指南

2021-03-31 23:45奇妙的Linux世界 Linux

Trivy 是一种适用于 CI 的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。

 

 Trivy 的特征

超实用的容器镜像漏洞检测工具Trivy入门指南

Trivy 是一种适用于 CI 的简单而全面的容器漏洞扫描程序。软件漏洞是指软件或操作系统中存在的故障、缺陷或弱点。Trivy 检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。

Trivy 很容易使用,只要安装二进制文件,就可以扫描了。扫描只需指定容器的镜像名称。与其他镜像扫描工具相比,例如 Clair,Anchore Engine,Quay 相比,Trivy 在准确性、方便性和对 CI 的支持等方面都有着明显的优势。

推荐在 CI 中使用它,在推送到 Container Registry 之前,您可以轻松地扫描本地容器镜像,Trivy具备如下的特征:

  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 trivy 
  2. $ yum install trivy  
  3. $ brew install trivy  

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

Trivy 的安装

这里安装 Trivy 的环境是 Centos7,安装的版本是 0.16.0,安装的命令如下:

  1. $ wget https://github.com/aquasecurity/trivy/releases/download/v0.16.0/trivy_0.16.0_Linux-64bit.rpm  
  2. $ rpm -ivh trivy_0.16.0_Linux-64bit.rpm  
  3. 准备中...                          ################################# [100%]  
  4. 正在升级/安装...  
  5.    1:trivy-0:0.16.0-1                 ################################# [100%]  
  6. $ trivy -v  
  7. Version: 0.16.0 

Trivy 的简单使用

下面介绍一些 Trivy 的简单使用的命令和一些测试的结果。主要从几个方面来测试 Trivy 的性能指标:

  •  镜像大小对 Trivy 扫描速度的影响;
  •  扫描的镜像大小和网络流量使用情况的关系;
  •  扫描的结果是否容易解析;

镜像大小对 Trivy 扫描速度的影响

  •  当镜像位于本地,大小 90MB 左右时候的扫描:

执行命令:

  1. $ trivy registry.cn-hangzhou.aliyuncs.com/choerodon-tools/javabase:0.5.0 

扫描结果:

超实用的容器镜像漏洞检测工具Trivy入门指南

时间:第一次扫描会 DownLoad DB,大概花十分钟以内(14M,看网速),国外的主机 10s 以内,第二次扫描十秒钟以内完成。

  •  当镜像位于本地,大小 408MB 左右时候的扫描:

执行命令:

  1. $ trivy registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql:5.7.17 

执行结果:

超实用的容器镜像漏洞检测工具Trivy入门指南

时间:10秒左右。

  •  当扫描的镜像位于线上,大小为 316M 左右时候的扫描:

执行结果:

超实用的容器镜像漏洞检测工具Trivy入门指南

时间:20s左右

结论:本地扫描镜像的大小对扫描速度影响不大,线上扫描与本地扫描的方式对扫描的速度影响不大。

扫描的镜像大小和网络流量使用情况的关系

  •  线上扫描之前网络流量使用情况:

超实用的容器镜像漏洞检测工具Trivy入门指南

扫描镜像大小:316M 左右

  •  扫描之后服务器的磁盘,网络流量使用情况:

超实用的容器镜像漏洞检测工具Trivy入门指南

结论:接收到的网络流量等于线上镜像的大小,镜像被下载放在服务器磁盘的某处(目前本服务器未装 Docker)。

注:再次全量扫描相同的镜像,接收流量和磁盘使用占比均不再增加。

扫描的结果是否容易解析

  •  使用 JSON 输出扫描的结果:

扫描镜像,openjdk:15-ea-jdk-buster

大小:316M 左右

时间:10s 左右

超实用的容器镜像漏洞检测工具Trivy入门指南

返回结果:标准的 josn 格式的文件

超实用的容器镜像漏洞检测工具Trivy入门指南

其他更多可使用命令

 1.  扫描镜像文件

  1. $ docker save ruby:2.3.0-alpine3.9 -o ruby-2.3.0.tar  
  2. $ trivy --input ruby-2.3.0.tar 

  2.  按严重性筛选漏洞:

  1. $ trivy -–severity HIGH,CRITICAL ruby:2.3.0 

  3.  按类型筛选漏洞:

  1. $ trivy -–vuln-type os ruby:2.3.0 

  4.  跳过漏洞数据库的更新

Trivy 在开始运行时总是更新其漏洞数据库。这通常很快,因为这是一个差异更新。但是,如果您甚至想跳过这一步,请使用 -–skip update 选项。

  1. $ trivy -–skip-update python:3.4-alpine3.9 

  5.  仅下载漏洞数据库

您还可以要求 Trivy 简单地检索漏洞数据库。这对于初始化连续集成系统中的工作人员非常有用。在第一次运行中,-–only update 选项将被忽略。

  1. $ trivy -–download-db-only  
  2. $ trivy -–download-db-only -–only-update alpine 

  6.  忽略未修复的漏洞

默认情况下,Trivy 还会检测未修补/未修复的漏洞。这意味着即使更新了所有包,也无法修复这些漏洞。如果要忽略它们,请使用 -–ignore unfixed 选项。

  1. $ trivy –-ignore-unfixed ruby:2.3.0 

  7.  指定退出代码

默认情况下,即使检测到漏洞,Trivy 也会以代码 0 退出。如果要使用非零退出代码退出,请使用 -–exit code 选项。此选项对 CI/CD 很有用。在下面的示例中,仅当发现关键漏洞时,测试才会失败。

  1. $ trivy -–exit-code 1 python:3.4-alpine3.9  
  2. $ trivy -–exit-code 0 –severity MEDIUM,HIGH ruby:2.3.0  
  3. $ trivy -–exit-code 1 –severity CRITICAL ruby:2.3.0 

  8.  忽略指定的漏洞

  1. $ cat .trivyignore  
  2. CVE-2018-14618  
  3. CVE-2019-1543  
  4. $ trivy python:3.4-alpine3.9 

  9.  指定缓存目录:

  1. $ trivy -–cache-dir /tmp/trivy/ python:3.4-alpine3.9 

 10.清除镜像缓存

-–clear cache 选项删除镜像缓存。如果更新具有相同 tag 的镜像(例如使用最新 tag 时),此选项非常有用。

  1. $ trivy -–clear-cache 

--reset 选项删除所有缓存和数据库。在此之后,需要很长时间才能在本地重建漏洞数据库。

  1. $ trivy -–reset 

 11.使用轻量级数据库:

  1. $ trivy -–light alpine:3.10 

轻量级数据库不包含诸如描述和引用之类的漏洞详细信息。因此,数据库的大小更小,下载速度更快。当您不需要漏洞详细信息时,此选项非常有用,并且适用于CI/CD。

要查找其他信息,可以在 NVD 网站上搜索漏洞详细信息。

网站地址:https://nvd.nist.gov/vuln/search

将 Trivy 集成进 CI

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

集成 GitLab CI 的 Yml 配置可以参考:https://github.com/aquasecurity/trivy#gitlab-ci

使用注意点

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

原文地址:https://mp.weixin.qq.com/s/B_18zvoVobSUNaOIGUpqBg

延伸 · 阅读

精彩推荐
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01