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

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o