当前位置:   article > 正文

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

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。目前支持三个指标:

  1. rules:
  2. # If the efficiency is measured below X%, mark as failed.
  3. # Expressed as a ratio between 0-1.
  4. lowestEfficiency: 0.95
  5. # If the amount of wasted space is at least X or larger than X, mark as failed.
  6. # Expressed in B, KB, MB, and GB.
  7. highestWastedBytes: 20MB
  8. # If the amount of wasted space makes up for X% or more of the image, mark as failed.
  9. # Note: the base image layer is NOT included in the total image size.
  10. # Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
  11. 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:

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

使用 snap:

  1. sudo snap install docker
  2. sudo snap install dive
  3. sudo snap connect dive:docker-executables docker:docker-executables
  4. sudo snap connect dive:docker-daemon docker:docker-daemon

RHEL/Centos​​​​​​​

  1. DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
  2. curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.rpm
  3. 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 系统为例

  1. wget https://github.com/anchore/grype/releases/download/v0.74.7/grype_0.74.7_linux_amd64.rpm
  2. rpm -ivh grype_0.74.7_linux_amd64.rpm
  3. #出现以下信息,表名安装成功
  4. [root@localhost ~]# rpm -ivh grype_0.74.7_linux_amd64.rpm
  5. Verifying... ################################# [100%]
  6. Preparing... ################################# [100%]
  7. 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)

扫描其他源的镜像

  1. # scan a container image archive (from the result of `docker image save ...`, `podman save ...`, or `skopeo copy` commands)
  2. grype path/to/image.tar
  3. # scan a Singularity Image Format (SIF) container
  4. grype path/to/image.sif
  5. # scan a directory
  6. 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支持等等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/817983
推荐阅读
相关标签
  

闽ICP备14008679号