容器镜像安全:安全漏洞扫描神器Trivy
一.系统环境
本文主要基于Docker version 20.10.14和Linux操作系统Ubuntu 18.04。
| 服务器版本 | docker软件版本 | CPU架构 |
|---|---|---|
| Ubuntu 18.04.5 LTS | Docker version 20.10.14 | x86_64 |
二.前言
随着容器技术的普及,容器镜像的安全性问题日益凸显。容器镜像中可能存在的漏洞会被攻击者利用,从而导致整个应用的安全风险。因此,对容器镜像进行安全漏洞扫描成为了必要的需求。Trivy是一款由aquasecurity团队开发的容器镜像安全漏洞扫描工具,支持Docker、Kubernetes等多种容器技术,具有易于使用、支持多种漏洞数据库等特点。
三.Trivy简介
Trivy是一款全面且多功能的安全扫描程序。Trivy 具有查找安全问题的扫描器。Trivy官网为:https://github.com/aquasecurity/trivy ,Trivy软件包下载地址为:https://github.com/aquasecurity/trivy/releases/ 。
Trivy 可以扫描的对象为:
- 容器镜像;
- 文件系统;
- Git Repository (远程);
- 虚拟机映像;
- Kubernetes;
- AWS系统。
Trivy能够发现的问题有:
- 正在使用的操作系统包和软件依赖项 (SBOM);
- 已知漏洞 (CVE);
- IaC 问题和错误配置;
- 敏感信息和机密;
- 软件许可证。
四.Trivy漏洞扫描原理
Trivy通过分析容器镜像的文件系统,识别出其中的软件包及其版本号,然后与漏洞数据库进行匹配,找出存在安全漏洞的软件包。Trivy采用了以下技术实现漏洞扫描:
Dockerfile解析:Trivy可以根据Dockerfile自动解析出容器镜像的构建过程,获取镜像中包含的软件包及其版本号。
漏洞数据库匹配:Trivy将容器镜像中的软件包及其版本号与漏洞数据库进行匹配,找出存在安全漏洞的软件包。
漏洞详情展示:Trivy提供了详细的漏洞信息,包括漏洞描述、影响版本、修复建议等,帮助用户了解漏洞风险。
CVE全称是Common Vulnerabilities and Exposures,即通用漏洞披露,它是MITRE公司维护和更新的安全漏洞列表,列表中的每个条目都会有一个唯一的CVE编号,即CVE ID,供安全研究员和受攻击的软件供应商使用,以便确定和回应安全漏洞。CVE条目包含了与CVE ID相关的漏洞的描述性数据(即简要描述和至少一个参考)。当前CVE累计收录了19万+个安全漏洞。
Trivy漏洞扫描原理简单来说就是:Trivy下载漏洞数据库CVE到本地,Trivy本地数据库记录了常见的漏洞信息,Trivy读取镜像里的程序和本地数据库进行比对,确定镜像是否存在漏洞。
五.利用trivy检测容器镜像的安全性
首先需要安装docker。
[root@etcd2 ~]# yum -y install docker-ce
查看docker版本。
[root@etcd2 ~]# docker -v
Docker version 20.10.12, build e91ed57
配置docker镜像加速器。
[root@etcd2 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://frz7i079.mirror.aliyuncs.com"
]
}
提前下载好镜像做准备,我们下载了redis,busybox,nginx镜像。
[root@etcd2 ~]# docker pull redis
[root@etcd2 ~]# docker pull busybox
[root@etcd2 ~]# docker pull nginx
[root@etcd2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest ec3f0931a6e6 4 months ago 1.24MB
nginx latest 605c77e624dd 5 months ago 141MB
redis latest 7614ae9453d1 5 months ago 113MB
下载好trivy安装包。
[root@etcd2 ~]# ls trivy_0.28.1_Linux-64bit.rpm
trivy_0.28.1_Linux-64bit.rpm
安装trivy。
[root@etcd2 ~]# yum -y install trivy_0.28.1_Linux-64bit.rpm
现在trivy就安装好了。
[root@etcd2 ~]# which trivy
/usr/local/bin/trivy
查看帮助:trivy --help。
[root@etcd2 ~]# trivy --help
查看trivy扫描镜像的语法:
[root@etcd2 ~]# trivy image --help
trivy image nginx 表示检测nginx镜像的漏洞,第一次检测漏洞会下载漏洞数据库,漏洞数据库目录默认是~/.cache/trivy 。
[root@etcd2 ~]# trivy image nginx
2022-06-16T17:06:01.035+0800 INFO Need to update DB
2022-06-16T17:06:01.036+0800 INFO DB Repository: ghcr.io/aquasecurity/trivy-db
2022-06-16T17:06:01.036+0800 INFO Downloading DB...
32.56 MiB / 32.56 MiB [------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 42.01 KiB p/s 13m14ss
2022-06-16T17:19:28.400+0800 WARN Increase --timeout value
2022-06-16T17:19:28.400+0800 FATAL image scan error: scan error: image scan failed: failed analysis: analyze error: timeout: context deadline exceeded
漏洞数据库下载好之后,就可以检测镜像漏洞了,显示了5个级别的漏洞:UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24。
[root@etcd2 ~]# trivy image nginx
2022-06-16T17:23:11.533+0800 INFO Detected OS: debian
2022-06-16T17:23:11.533+0800 INFO Detecting Debian vulnerabilities...
2022-06-16T17:23:11.585+0800 INFO Number of language-specific files: 0
nginx (debian 11.2)
Total: 202 (UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24)
┌─────────────────────┬──────────────────┬──────────┬────────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤
│ apt │ CVE-2011-3374 │ LOW │ 2.2.4 │ │ It was found that apt-key in apt, all versions, do not │
│ │ │ │ │ │ correctly... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2011-3374 │
├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤
│ bsdutils │ CVE-2021-3995 │ MEDIUM │ 2.36.1-8 │ 2.36.1-8+deb11u1 │ util-linux: Unauthorized unmount of FUSE filesystems │
│ │ │ │ │ │ belonging to users with similar uid... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-3995 │
├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤
......
├─────────────────────┼──────────────────┼──────────┼────────────────────┼─────────────────────────┼──────────────────────────────────────────────────────────────┤
│ zlib1g │ CVE-2018-25032 │ HIGH │ 1:1.2.11.dfsg-2 │ 1:1.2.11.dfsg-2+deb11u1 │ zlib: A flaw found in zlib when compressing (not │
│ │ │ │ │ │ decompressing) certain inputs... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2018-25032 │
└─────────────────────┴──────────────────┴──────────┴────────────────────┴─────────────────────────┴──────────────────────────────────────────────────────────────┘
trivy缓存漏洞数据库目录如下:
[root@etcd2 ~]# ls .cache/trivy/ -lh
总用量 0
drwxr-xr-x 2 root root 43 6月 16 17:19 db
drwx------ 2 root root 22 6月 16 17:06 fanal
trivy会下载漏洞数据库到本地,有时候下载会很慢,可以直接把已经安装好的~/.cache/trivy文件夹直接打包,放到新安装的机器上,就可以直接使用trivy了。
Trivy开始运行时每 12 小时下载一次漏洞数据库。这通常很快,因为数据库的大小只有 10~30MB。但是,如果您甚至想跳过它,请使用该--skip-db-update选项: trivy image --skip-db-update nginx:1.16。
trivy只下载漏洞数据库语法为:
[root@etcd2 ~]# trivy image --download-db-only
检测redis镜像漏洞。
[root@etcd2 ~]# trivy image redis | head
2022-06-16T17:38:18.504+0800 INFO Detected OS: debian
2022-06-16T17:38:18.505+0800 INFO Detecting Debian vulnerabilities...
2022-06-16T17:38:18.520+0800 INFO Number of language-specific files: 0
redis (debian 11.2)
===================
Total: 108 (UNKNOWN: 0, LOW: 63, MEDIUM: 18, HIGH: 16, CRITICAL: 11)
┌──────────────────┬──────────────────┬──────────┬───────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
检测nginx镜像漏洞。
[root@etcd2 ~]# trivy image nginx | head
2022-06-16T17:38:35.172+0800 INFO Detected OS: debian
2022-06-16T17:38:35.172+0800 INFO Detecting Debian vulnerabilities...
2022-06-16T17:38:35.189+0800 INFO Number of language-specific files: 0
nginx (debian 11.2)
===================
Total: 202 (UNKNOWN: 1, LOW: 93, MEDIUM: 43, HIGH: 41, CRITICAL: 24)
┌─────────────────────┬──────────────────┬──────────┬────────────────────┬─────────────────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
注意Trivy 漏洞报告格式默认是表格。
[root@etcd2 ~]# trivy image -f table nginx:1.16
Trivy 漏洞报告格式也可以设置为JSON格式(-f), -o指定输出打印到文件里。
[root@etcd2 ~]# trivy image -f json -o results.json nginx:1.16
六.总结
Trivy是一款功能强大、易于使用的容器镜像安全漏洞扫描工具。通过在docker环境下的实践,我们了解到Trivy可以有效地检测容器镜像中的安全漏洞,帮助我们保障应用的安全性。
容器镜像安全:安全漏洞扫描神器Trivy的更多相关文章
- SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
- 私有容器镜像仓库harbor
私有镜像仓库Harbor 1.Harbor概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用 ...
- Trivy 容器镜像扫描工具学习
简介 官方地址:https://github.com/aquasecurity/trivy Trivy是aqua(专注云原生场景下的安全)公司的一款开源工具,之前历史文章也有对aqua的一些介绍. T ...
- Harbor镜像漏洞扫描
Harbor镜像漏洞扫描 闲聊:我们知道 镜像安全也是容器化建设中一个很重要的环节,像一些商业软件如:Aqua就很专业但是收费也是很昂贵的,今天我们介绍下Harbor自带的镜像扫描器. 一.安装最新版 ...
- 2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描
2017-2018-2 20155314<网络对抗技术>Exp6 信息搜集与漏洞扫描 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 信息搜集 1.1 外围信息搜 ...
- 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付
容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...
- 容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付
容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...
- Exp6 信息收集与漏洞扫描
一.实践过程 1.信息收集 1.1 通过DNS和IP查询目标网站的信息 (1)whois命令用来进行域名注册信息查询,可查询到3R注册信息,包括注册人的姓名.组织和城市等信息. whois baidu ...
- 20165319 Exp6 信息收集与漏洞扫描
实验过程 whois 在虚拟机Kali的终端输入命令:whois gitee.com,查询码云的域名注册信息. dig或nslookup域名查询 在kali终端输入dig 网址或nslookup 网址 ...
- 网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描
网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描 实验任务 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服 ...
随机推荐
- [FAQ] 清理 Docker 环境长期构建占用磁盘空间过大问题
$ docker system df 长时间积累多次运行 docker 构建过程,Build Cache 缓存几乎占据了硬盘 1/3 的容量. $ docker system prune 此命令 ...
- dotnet 理解 IConfigurationProvider 的 GetChildKeys 方法用途
我最近遇到了一个有趣的 Bug 让我调试了半天,这个 Bug 的现象是我的好多个模块都因为读取不到配置信息而炸掉,开始我没有定位到具体的问题,以为是我的配置服务器挂掉了.经过了半天的调试,才找到了是我 ...
- dotnet 调试应用启动闪退的方法
应用程序如果启动即闪退,那大部分时候日志模块还没初始化完成,很难通过应用自身的启动流程了解到应用启动失败的原因.本文来告诉几个不同的方法用来调查应用启动失败的原因 应用启动失败的原因可能有很多,例如系 ...
- 4.prometheus监控--监控linux服务器
一.监控linux服务器 1.1 二进制安装 # 客户端操作wget https://github.com/prometheus/node_exporter/releases/download/v1. ...
- C语言程序设计-笔记8-结构
C语言程序设计-笔记8-结构 例9-1 输出平均分最高的学生信息.根据学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩.输入n个学生的成绩信息,计算并输出平均分最高的学生信息. #incl ...
- DNS(6) -- DNS子域实现
目录 1. DNS子域 1.1 子域授权环境说明 1.2 子域授权实现 1.2.1 主域DNS服务器配置 1.2.2 子域DNS服务器配置 1.3 DNS转发域 1.3.1 DNS转发域概述 1.3. ...
- 策略梯度玩 cartpole 游戏,强化学习代替PID算法控制平衡杆
cartpole游戏,车上顶着一个自由摆动的杆子,实现杆子的平衡,杆子每次倒向一端车就开始移动让杆子保持动态直立的状态,策略函数使用一个两层的简单神经网络,输入状态有4个,车位置,车速度,杆角度,杆速 ...
- no implicit conversion of nil into String
一.Cocoapod 执行pod install命令时报错 [!] An error occurred while processing the post-install hook of the Po ...
- uniapp 添加操作
1 分析: 2 需要动态的向数据库中插入数据,既然要进行添加操作,就会触发一个点击的事件,所以我们的第一步就是要先绑定事件 3 向服务器进行请求接口操作,请求的方法为 'POST' 4 最后就是在me ...
- vue3 Suspense
在Vue.js 3中,Suspense 是一个用于处理异步组件的特殊组件,它允许你在等待异步组件加载时展示备用内容.这对于优化用户体验.处理懒加载组件或异步数据获取时非常有用.Suspense 的主要 ...