公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

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. 易于安装,安装方式:

$ apt-get install trivy
$ yum install trivy
$ brew install trivy

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

Trivy 的安装

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

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

Trivy 的简单使用

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

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

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

  • 扫描的结果是否容易解析;

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

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

执行命令:

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

扫描结果:

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

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

执行命令:

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

执行结果:

时间:10秒左右。

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

执行结果:

时间:20s左右

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

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

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

扫描镜像大小:316M 左右

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

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

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

扫描的结果是否容易解析

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

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

大小:316M 左右

时间:10s 左右

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

其他更多可使用命令

  1. 扫描镜像文件

$ docker save ruby:2.3.0-alpine3.9 -o ruby-2.3.0.tar
$ trivy --input ruby-2.3.0.tar
  1. 按严重性筛选漏洞:

$ trivy -–severity HIGH,CRITICAL ruby:2.3.0
  1. 按类型筛选漏洞:

$ trivy -–vuln-type os ruby:2.3.0
  1. 跳过漏洞数据库的更新

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

$ trivy -–skip-update python:3.4-alpine3.9
  1. 仅下载漏洞数据库

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

$ trivy -–download-db-only
$ trivy -–download-db-only -–only-update alpine
  1. 忽略未修复的漏洞

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

$ trivy –-ignore-unfixed ruby:2.3.0
  1. 指定退出代码

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

$ trivy -–exit-code 1 python:3.4-alpine3.9
$ trivy -–exit-code 0 –severity MEDIUM,HIGH ruby:2.3.0
$ trivy -–exit-code 1 –severity CRITICAL ruby:2.3.0
  1. 忽略指定的漏洞

$ cat .trivyignore
CVE-2018-14618
CVE-2019-1543
$ trivy python:3.4-alpine3.9
  1. 指定缓存目录:

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

10.清除镜像缓存

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

$ trivy -–clear-cache

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

$ trivy -–reset

11.使用轻量级数据库:

$ 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 使用轻量级数据库来优化执行扫描的效率。

本文转载自:「 Choerodon 猪齿鱼社区 」,原文:http://t.cn/A6tkxaVx ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

你可能还喜欢

点击下方图片即可阅读

如何优雅的给 Docker 配置网络代理

点击上方图片,打开小程序,加入「玩转 Linux」圈子

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

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

  1. 镜像漏洞扫描工具:Trivy

    镜像漏洞扫描工具:Trivy Trivy常用方法 容器镜像扫描 打印指定(高危.严重)漏洞信息 JSON格式输出并保存到文件 Trivy常用方法 容器镜像扫描 # 扫描容器镜像 trivy image ...

  2. 【质量】镜像漏洞扫描工具Trivy原理和操作

    目录 Trivy工作原理 cve ID和CVE数据库 Trivy扫描镜像流程 快速入门 Trivy工作原理 cve ID和CVE数据库 个人理解: 当有人发现漏洞时,在社区提交漏洞,然后被cve 官方 ...

  3. oyente—合约漏洞检测工具安装

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 oyente-合约漏洞检测工具安装 前言 一.oyente是什么? 二.安装 1.在docker安装 2.linux安装 1.首先就是 ...

  4. 路由器被黑linux检测工具,路由器漏洞检测工具有哪些

    如果路由器存在漏洞势必会危害自己的个人信息,那么我们该如何检测路由器漏洞呢?路由器漏洞检测工具有哪些?下面请大家跟随小编的脚步来佰佰安全网寻找答案吧. 路由器漏洞检测工具有哪些?小编总结如下: 1.J ...

  5. 文件包含漏洞检测工具fimap

    文件包含漏洞检测工具fimap 在Web应用中,文件包含漏洞(FI)是常见的漏洞.根据包含的文件不同,它分为本地文件包含漏洞(LFI)和远程文件包含漏洞(RFL).利用该漏洞,安全人员可以获取服务器的 ...

  6. Wapiti一款小巧的开源安全测试漏洞检测工具

    Wapiti 是一套 OpenSource 的站点漏洞检测工具,比较特殊的是,它并不依赖特征数据库,也因此扫描的速度相当快,而探测的则是一些共通性问题,或是作者所宣称的未知漏洞.Wapiti 其实是一 ...

  7. python代码检查工具_基于Python3的漏洞检测工具 ( Python3 插件式框架 )

    [TOC] Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based ...

  8. python测验3_基于Python3的漏洞检测工具

    原标题:基于Python3的漏洞检测工具 Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection ...

  9. Metasploit是一款开源的安全漏洞检测工具,

    Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,适合于需要核实漏洞的安全专家,同时也适合于强大进攻能力的 ...

  10. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布

    根据全球知名IT研究与顾问咨询公司Gartner统计,从2010年到2018年软件代码中采用开源框架或组件.第三方库的比例每年以30%的速度增长,大量的软件系统引入开源代码和第三方库,有的系统引用开源 ...

最新文章

  1. 微软MVP张善友告诉你,微服务选型要注意这些地方
  2. 【转载】关于 Google Chrome 中的全屏模式和 APP 模式
  3. android string数字字符串如何使用科学计数法,JSONObject 偶遇 数字字符串变为科学计数法 如何变为普通数字字符串...
  4. 利用关系图表深度挖掘潜在决策影响关系——微软CRM炫酷介绍之四
  5. 国际C语言混乱代码大赛
  6. 使用MybatisPlus在实体中添加数据库表中不存在的字段
  7. Linux 0.11内核分析03:系统调用
  8. qtextedit非编辑时去边框_10分钟看懂Photoshop图像的基本编辑方法-数字化图像、图像基础理论知识(置入文件)...
  9. Xshell是做什么用的?Xshell使用教程分享
  10. 【学习笔记】Python办公自动化 - Task 01 文件自动化处理 邮件自动发送
  11. 启动计算机显示屏没反应,电脑开机后显示器无反应怎么办
  12. java 北京时区_世界时区和Java时区详解
  13. httpmember.php,PHPMyWind 5.1 /member.php 远程密码修改漏洞
  14. 汽车半导体FMEDA的挑战和解决方案
  15. openwrt使用port-mirroring
  16. php调用原生java程序
  17. linux怎么查看当前系统版本号,如何查看当前系统版本的版本号
  18. 机器学习-迁移学习的介绍
  19. 人大金仓助力广东省首届信创职业技能竞赛圆满完成
  20. 移动端选择时间时禁止软键盘弹出

热门文章

  1. C语言程序设计勾股数,打印出100内的所有的勾股数(用C语言实现)
  2. 2016小米-风口的猪-中国牛市-Java
  3. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)
  4. vs2019 vs2022番茄助手重新安装失败问题处理
  5. 李开复给中国大学生的第五封信—你有选择的权利
  6. 大型机、小型机、x86架构以及ARM架构服务器的区别
  7. C# socket 局域网聊天程序的一点心得
  8. 在地化和本土化的区别_翻译和本地化有什么区别?
  9. linux c 获取usb vid,Linux如何使用libudev获取USB设备VID及PID
  10. javase2021最强学习线路没有之一