Grype 是什么

  • Grype 是一个开源缝隙扫描器,能够发现容器镜像和文件体系目录中的缺点。Grype由 Anchore 开发,但作为一个独立的二进制文件作业,比 Anchore 引擎更简略掌握。
  • 已知缝隙经过过时的操作体系包、受损的编程语言依靠项和不安全的基础镜像进入您的软件。自动扫描您的工件能够让您在恶意行为者发现问题之前了解问题。以下是如何运用 Grype 查找代码和容器中的问题。

开源工具系列6:Grype

装置 Grype

Grype 作为预编译的二进制文件以deb、rpm、Linux 源代码和 Mac 格局分发。

您能够从 GitHub获取最新版别并运用体系的包管理器装置它,或者将二进制文件复制到您途径中的某个位置。

或者,运用装置脚本来自动化该过程:

一键装置

curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

Grype 指令

经过运转 grype 指令查看二进制文件的作业。将显现有关可用指令的文档。

基本扫描

在最简略的方法中,Grype 运用一个参数来指定要扫描的容器镜像或文件体系途径。要扫描镜像,请供给有效的注册表符号。

Grype 将运用可用的 Docker 凭证从 Docker Hub 和私有注册表中提取镜像。

grype alpine:latest

您还能够扫描从 Docker 导出的镜像存档

grype saved-image.tar

开源工具系列6:Grype

缝隙数据库

Grype 将在第一次运转时下载其缝隙数据库。现在它的重量约为 110MB。一旦数据库可用,Grype 将拉取 Docker 镜像,对其中的软件进行编目,并解析数据库中存在的已知缝隙。

成果

  • 成果显现在终端内的表格中。每个缝隙都包含其CVE ID、受影响包的称号及其严峻性等级。当问题在今后的版别中得到修补时,您将在FIXED-IN列中看到该更新的版别号。这有助于您确认是否能够经过简略的包管理器更新轻松处理缝隙。
  • Grype 能够处理一切最盛行的Linux 发行版的包。它还支撑 Ruby Gems、NPM 和 Yarn 包、Python Eggs、Wheels 和 Poetry 依靠项,以及 JAR、WAR、EAR、JPI 和 HPI 格局的 Java 模块。
  • Grype 还能够获取Anchore Feed服务所供给的缝隙数据库,这个数据库会在每一次扫描任务开端之前进行更新,不过我们也能够运用下列指令来进行手动更新:

手动更新

grype db update

扫描文件体系

Grype 能够扫描您机器上的文件体系途径。这使您能够在构建镜像之前发现源代码存储库中的缝隙。要运用此功能,请运用dir:方案指定目录途径:

grype dir:/example-dir

Grype 将查找嵌套在给定目录根下的兼容文件。每个找到的文件都将被索引并扫描缝隙。

开源工具系列6:Grype

相同类型的缝隙

文件体系扫描与容器镜像扫描具有相同类型的缝隙。如果您运用的是大型目录树,则扫描可能需要几分钟才能完结。

过滤缝隙

支撑两个过滤标志以将陈述范围限定为您感兴趣的缝隙或处理方案选项:– only-fixed – 仅显现已在受影响软件包的后续版别中修补的缝隙。– fail-on high–high发现 – 级缝隙时当即退出并显现错误代码。您能够用任何支撑的错误等级(严峻、高、中或低)代替high.

疏忽缝隙

能够疏忽缝隙以躲藏误报或您决定不处理的问题,这可能是因为它们与您对包的运用无关。

要疏忽缝隙,您需要创立一个 YAML 格局的自界说 Grype 装备文件。在顶级ignore字段下添加缝隙的CVE :

ignore字段

ignore: - vulnerability: CVE-2021-12345

也支撑其他字段,例如此变体疏忽源自 NPM 包的一切问题

ignore: - package: type: npm

装备

将您的装备文件保存到.grype.yaml或.grype/config.yaml在您的作业目录中。下次运转 Grype 扫描时会自动运用它。~/.grype.yaml还支撑大局装备文件。作业目录中的文件将在运转时与大局文件合并。

如果疏忽这些缝隙,它们将不会影响 Grype 的退出代码。JSON 陈述会将它们移动到单独的ignoredMatches字段,而终端表陈述将它们彻底排除。如果您疏忽某个缝隙,请记住记载它被承受的原因,以便每个贡献者都了解风险。

运用 SBOM

Grype 能够运用 Syft 生成的 SBOM,这是 Anchore 的另一个项目。Syft 为您的容器镜像编制索引以生成它们包含的依靠项列表。

运用 Syft 以 JSON 格局为您的镜像创立 SBOM:

syft alpine:latest -o json > alpine-sbom.json

然后运用 SBOM 运转 Grype 扫描

grype sbom:/alpine-sbom.json

结合运用

Grype 将查看参阅镜像是否存在由其材料清单引起的新缝隙。继续将 Grype 与您的 SBOM 结合运用,以监控您已经审核和索引的镜像依靠项中的新问题。

自界说 Grype 输出

Grype 供给四种不同的输出格局化程序,您能够运用-oCLI 标志在它们之间切换:

  • table – 终端内消费的默许人类可读表。
  • json– 一份 JSON 格局的陈述,其中包含有关每个缝隙的更全面的信息,以及用于扫描的 Grype 数据库的详细信息。JSON文件适合长期存档和比较,或用作 CI 构建工件。
  • cyclonedx– XML 格局的与CycloneDX 兼容的陈述,可用于支撑 SBOM 和缝隙列表的其他东西。
  • template – 此高档格局化程序可让您以任意格局生成自己的陈述。

该template格局承受将被用来呈现报表输出转到模板。要运用此格局化程序,请不要按称号指定它——而是将途径传递到包含 Go 模板的文件

grype alpine:latest -o output-template.tmpl

Grype 输出结构

该模板应运用 Go 模板语法来引用 Grype 供给的变量。您能够构建所需的任何类型的文件格局,例如 HTML 页面、Markdown 文件或自界说 JSON 结构。

Grype 文档包含从可用变量生成 CSV 文件的示例。

总结

  1. Grype 会提醒您容器内和文件体系上的缝隙。作为一个独立的 CLI 二进制文件,它比完好的 Anchore 装置更简略上手。
  2. 如果您想知道应该选择哪个,Anchore 的价值在于其可扩展性和高档装备选项。运用锚定引擎,您能够依据门、触发器和操作界说自己的战略集。这些使您能够依据特定环境精确认制扫描。当您只需要镜像中的已知缝隙列表时,Grype 可供给更简化的体会。
  3. 无论您选择哪种方法,采用某种方法的自动缝隙扫描都会让您了解软件供应链中的缺点。对于彻底集成的方法,将 Grype 用作 CI 管道的一部分,以便在提交代码时收到新缝隙的警报。

Grype 项目信息

Github 项目地址:

github.com/anchore/gry…

关于HummerRisk

HummerRisk 是开源的云原生安全渠道,以非侵入的方法处理云原生的安全和管理问题,核心才能包含混合云的安全管理和K8S容器云安全检测。

Github 地址:github.com/HummerRisk/…

Gitee 地址:gitee.com/hummercloud…

开源工具系列6:Grype