显然不可能使用 Anchore Grype 对 Docker 镜像中的漏洞执行安全扫描,除非该镜像之前已推送到注册表。
这使得它目前不适合从易受攻击的映像中控制您的注册表,因为可以将映像推送到那里,然后 - 在扫描完成之前 - 这个带有一些严重 CVE 的受感染映像可以立即被毫无戒心的用户拉取(在映像被获取之前)撤回)。
如何解决这个问题?
重现问题
docker build
一张图像;不要将其推送到注册表。grype
扫描本地可用的图像,您将收到如下错误:$ ./scan-with-grype-dockerized.sh mirekphd/ml-cache:20230726
[0000] INFO grype version: 0.64.2
1 error occurred:
* failed to catalog: unable to load image: unable to use OciRegistry source: failed to get image descriptor from registry: GET https://index.docker.io/v2/mirekphd/ml-cache/manifests/20230726: MANIFEST_UNKNOWN: manifest unknown; unknown tag=20230726
作为解决方法,您可以考虑以
grype
用户身份运行 root
(请在之前未推送到 Docker Hub 的映像上进行测试):
$ docker run --rm --name grype -u 0 -v /var/run/docker.sock:/var/run/docker.sock anchore/grype:latest --only-fixed mirekphd/ml-cache:20230731
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
libcrypto1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2022-4304 Medium
libcrypto1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2022-4450 High
libcrypto1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2023-0215 High
libcrypto1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2023-0286 High
libcrypto1.1 1.1.1s-r0 1.1.1t-r1 apk CVE-2023-0464 High
libcrypto1.1 1.1.1s-r0 1.1.1t-r2 apk CVE-2023-0465 Medium
libcrypto1.1 1.1.1s-r0 1.1.1u-r0 apk CVE-2023-2650 High
libcrypto1.1 1.1.1s-r0 1.1.1u-r2 apk CVE-2023-3446 Medium
libssl1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2022-4304 Medium
libssl1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2022-4450 High
libssl1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2023-0215 High
libssl1.1 1.1.1s-r0 1.1.1t-r0 apk CVE-2023-0286 High
libssl1.1 1.1.1s-r0 1.1.1t-r1 apk CVE-2023-0464 High
libssl1.1 1.1.1s-r0 1.1.1t-r2 apk CVE-2023-0465 Medium
libssl1.1 1.1.1s-r0 1.1.1u-r0 apk CVE-2023-2650 High
libssl1.1 1.1.1s-r0 1.1.1u-r2 apk CVE-2023-3446 Medium
注意:如果您在此处未使用
--only-fixed
标志而遇到了上述严重漏洞,那么请放心,它们仅与该映像中实际使用的 Alpine 以外的系统相关 - 一个用于 Debian,一个用于... Windows,在我已经向开发人员报告了一个单独的错误。
skopeo
及其从本地 Docker 守护进程复制未推送的本地镜像的能力(无需 docker run
它们以及 docker save
所带来的更改它们的风险) (使用 docker-daemon:
前缀,注意:那里没有斜线)将 OCI 目录格式的图像复制到临时位置,然后使用 grype
前缀使用 oci-dir:
进行扫描。