Docker镜像的(Dive)分析和(Grype)漏洞扫描

2024-04-01 16:36

本文主要是介绍Docker镜像的(Dive)分析和(Grype)漏洞扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dive

dive能够分析docker镜像分层内容以及发现缩小docker/OCI镜像大小的方法。

  • 提高部署效率:能够秒级快速启动一个应用,而传统的方式分钟级别以上;

  • 提高运行效率:相对物理机和虚拟化,容器具有更高的资源利用率;

  • 提高可移植性:容器部署能够极大的屏蔽资源环境的差异化,可快速迁移;

  • 降低管理成本:通过容器编排工具,进一步的管理容器,可以降低管理成本。(Kubernetes能带来更高管理便捷,但是也相应带来了很高的学习和维护成本)

项目地址

https://github.com/wagoodman/dive

功能特性 

  • 按层细分展示 docker 镜像内容

当选择左侧的图层时,右侧将显示该图层的内容以及所有先前图层的内容。此外,还可以使用箭头键全面浏览文件树。

  • 详细展示 docker 镜像每一层的变化

已更改、修改、添加或删除的文件会在文件树中展示。可以对其进行调整以显示特定层的更改,或直至该层的最后更改。

  • 估算镜像冗余度

左下窗格显示基本镜像图层信息和指标,该指标预估镜像包含浪费了多少空间。这可能是由于跨层复制文件、跨层移动文件或未完全删除文件造成的冗余。提供每一层浪费空间的百分比和总浪费文件空间。

  • 在构建时快速分析

可以构建docker镜像时使用命令立即进行分析,只需要将docker build命令替换为相同的dive build 命令即可。

 dive build -t some-tag .

  • 持续集成集成

当使用设置环境变量CI=true时,dive UI 将被绕过,直接分析docker镜像,通过返回代码提示是通过/失败。目前,.dive-ci 可以将文件放在存储库的根目录中,或者可以使用选项覆盖 CI 配置路径--ci-config。目前支持三个指标:

rules:# If the efficiency is measured below X%, mark as failed.# Expressed as a ratio between 0-1.lowestEfficiency: 0.95# If the amount of wasted space is at least X or larger than X, mark as failed.# Expressed in B, KB, MB, and GB.highestWastedBytes: 20MB# If the amount of wasted space makes up for X% or more of the image, mark as failed.# Note: the base image layer is NOT included in the total image size.# Expressed as a ratio between 0-1; fails if the threshold is met or crossed.highestUserWastedPercent: 0.20

  • 支持多种镜像源和容器引擎

使用--source选项,可以选择获取容器镜像:

dive <your-image> --source <source>

或者

dive <source>://<your-image>

其中source选项支持以下几种:

  • docker:docker引擎(默认选项)

  • docker-archive:磁盘上的 docker tar 包

  • podman:Podman 引擎(目前仅支持 Linux)

 部署安装 

dive提供了多种操作系统部署包,可以直接运行命令进行快速安装。

Ubuntu/Debian

使用 deb:

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

使用 snap:

sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon

RHEL/Centos​​​​​​​

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm

Mac

如果使用的是 Homebrew:

brew install dive

如果使用的是MacPorts:

sudo port install dive

Grype

grype支持通过一条命令针对容器镜像和文件系统进行漏洞扫描。

 功能特性 

支持以下主要操作系统软件包的漏洞:

  • Alpine

  • Amazon Linux

  • BusyBox

  • CentOS

  • CBL-Mariner

  • Debian

  • Distroless

  • Oracle Linux

  • Red Hat (RHEL)

  • Ubuntu

  • 支持以下语言包漏洞:

    • Ruby (Gems)

    • Java (JAR, WAR, EAR, JPI, HPI)

    • JavaScript (NPM, Yarn)

    • Python (Egg, Wheel, Poetry, requirements.txt/setup.py files)

    • Dotnet (deps.json)

    • Golang (go.mod)

    • PHP (Composer)

    • Rust (Cargo)

  • 支持 Docker、OCI 和Singularity镜像格式。

  • 支持通过OpenVEX过滤和增强扫描结果。

 快速安装 

在下载界面,按照操作系统类型下载对应安装包:

https://github.com/anchore/grype/releases

以 Linux X86 系统为例

wget https://github.com/anchore/grype/releases/download/v0.74.7/grype_0.74.7_linux_amd64.rpm
rpm -ivh grype_0.74.7_linux_amd64.rpm #出现以下信息,表名安装成功
[root@localhost ~]# rpm -ivh grype_0.74.7_linux_amd64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package grype-0:0.74.7-1.x86_64 is already installed

快速扫描镜像

grype <image>

 全面扫描镜像

grype <image> --scope all-layers

扫描运行中的容器

docker run --rm \--volume /var/run/docker.sock:/var/run/docker.sock \--name Grype anchore/grype:latest \$(ImageName):$(ImageTag)

扫描其他源的镜像

# scan a container image archive (from the result of `docker image save ...`, `podman save ...`, or `skopeo copy` commands)
grype path/to/image.tar# scan a Singularity Image Format (SIF) container
grype path/to/image.sif# scan a directory
grype dir:path/to/dir

 结果格式 

grype 扫描结果的输出格式也是可配置的:

grype <image> -o <format>

支持以下几种数据格式:

  • table:表格(默认);

  • cyclonedx:符合CycloneDX 1.4 规范的 XML 报告;

  • cyclonedx-json:符合CycloneDX 1.4规范的JSON报告;

  • json:默认JSON格式报告,具有更多的信息;

  • template:按照用户指定的模板输出格式。

图片

 最后 

grype还支持其他功能,比如遇到严重漏洞自动退出通知、忽略已知漏洞、VEX支持等等。

这篇关于Docker镜像的(Dive)分析和(Grype)漏洞扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867631

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,