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

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin