亚马逊 Inspector Dockerfile 检查 - Amazon Inspector

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 Inspector Dockerfile 检查

本节介绍如何使用 Amazon Inspector SBOM 生成器扫描Dockerfiles和Docker容器映像,以查找会引入安全漏洞的错误配置。

使用 Sbomgen Dockerfile 检查

当发现名为Dockerfile*.Dockerfile的文件以及扫描 Docker 镜像时,会自动执行 Dockerfile 检查。

你可以使用参数禁用 Dockerfile 检查。--skip-scanners dockerfile您还可以将 Dockerfile 检查与任何可用的扫描器(例如操作系统或第三方软件包)结合使用。

Docker 检查命令示例

以下示例命令演示如何为 Dockerfiles 和 Docker 容器镜像以及操作系统和第三方软件包生成SBOMs。

# generate SBOM only containing Docker checks for Dockerfiles in a local directory ./inspector-sbomgen directory --path ./project/ --scanners dockerfile # generate SBOM for container image will by default include Dockerfile checks ./inspector-sbomgen container --image image:tag # generate SBOM only containing Docker checks for specific Dockerfiles and Alpine, Debian, and Rhel OS packages in a local directory /inspector-sbomgen directory --path ./project/ --scanners dockerfile,dpkg,alpine-apk,rhel-rpm # generate SBOM only containing Docker checks for specific Dockerfiles in a local directory ./inspector-sbomgen directory --path ./project/ --skip-scanners dockerfile
示例文件组件

以下是 Dockerfile 查找文件组件的示例。

{ "bom-ref": "comp-2", "name": "dockerfile:data/docker/Dockerfile", "properties": [ { "name": "amazon:inspector:sbom_scanner:dockerfile_finding:IN-DOCKER-001", "value": "affected_lines:27-27" } ], "type": "file" },
漏洞响应组件示例

以下是 Dockerfile 发现漏洞响应组件的示例。

{ "advisories": [ { "url": "https://docs.docker.com/develop/develop-images/instructions/" } ], "affects": [ { "ref": "comp-2" } ], "analysis": { "state": "in_triage" }, "bom-ref": "vuln-13", "created": "2024-03-27T14:36:39Z", "description": "apt-get layer caching: Using apt-get update alone in a RUN statement causes caching issues and subsequent apt-get install instructions to fail.", "id": "IN-DOCKER-001", "ratings": [ { "method": "other", "severity": "info", "source": { "name": "AMAZON_INSPECTOR", "url": "https://aws.amazon.com/inspector/" } } ], "source": { "name": "AMAZON_INSPECTOR", "url": "https://aws.amazon.com/inspector/" }, "updated": "2024-03-27T14:36:39Z" },
注意

如果调用时Sbomgen不带--scan-sbom标志,则只能查看原始的 Dockerfile 发现结果。

支持的 Dockerfile 检查

Sbomgen支持对以下内容进行 Dockerfile 检查:

  • Sudo 二进制包

  • Debian 实用程序 APT

  • 硬编码的机密

  • 根容器

  • 运行时弱化命令标志

  • 运行时弱化环境变量

这些 Dockerfile 检查中的每一项都有相应的严重性评级,该等级在以下主题的顶部注明。

注意

以下主题中描述的建议基于行业最佳实践。

Sudo 二进制包

注意

此检查的严重性等级为 Info

我们建议不要安装或使用 Sudo 二进制包,因为它具有不可预测的信号TTY转发行为。有关更多信息,请参阅 Docker Docs 网站中的用户如果您的用例需要类似于 Sudo 二进制包的功能,我们建议使用 Gosu。

DebianAPT公用设施

注意

此检查的严重性等级为 “”。

以下是使用DebianAPT实用程序的最佳实践。

在单个Run语句中组合apt-get命令以避免缓存问题

我们建议在 Docker 容器内将apt-get命令组合成一条RUN语句。单独apt-get update使用会导致缓存问题和后续apt-get install指令失败。有关更多信息,请参阅 Docker Docs 网站中的 apt-g et。

注意

如果 Docker Docker 容器软件已过期,则所述的缓存行为也可能发生在容器内。

以非交APT互方式使用命令行实用程序

我们建议以交互方式使用APT命令行实用程序。APT命令行实用程序被设计为最终用户工具,其行为因版本而异。如需了解更多信息,请参阅 Debian 网站中的脚本使用情况以及与其他APT工具的区别

硬编码的机密

注意

此检查的严重性等级为 “严重”。

您的 Dockerfile 中的机密信息被视为硬编码的机密。通过 Sbomgen Docker 文件检查可以识别以下硬编码的机密:

  • AWS 访问密钥 IDs — AKIAIOSFODNN7EXAMPLE

  • DockerHub 个人访问令牌 — dckr_pat_thisisa27charexample1234567

  • GitHub 个人访问令牌 — ghp_examplev61wY7Pj1YnotrealUoY123456789

  • GitLab 个人访问令牌 — glpat-12345example12345678

根容器

注意

此检查的严重性标记为 Info

我们建议在没有根权限的情况下运行 Docker 容器。对于没有 root 权限就无法运行的容器化工作负载,我们建议使用权限最少的原则来构建应用程序。有关更多信息,请参阅 Docker Docs 网站中的用户

运行时弱化环境变量

注意

此检查的严重性等级为 “”。

一些命令行实用程序或编程语言运行时支持绕过安全默认值,这允许通过不安全的方法执行。

NODE_ TLS _ REJECT _ UNAUTHORIZED =0

当Node.js进程在NODE_TLS_REJECT_UNAUTHORIZED设置为的情况下运行时0,TLS证书验证将被禁用。有关更多信息,请参阅 Node.js 网站中的 NODETLSREJECT_ _ _ UNAUTHORIZED =0

GIT_ SSL _NO VERIFY _ =*

当 git 命令行进程以 s GIT_SSL_NO_VERIFY et 运行时,Git 会跳过验证TLS证书。有关更多信息,请参阅 Git 网站中的环境变量

PIP_TRUSTED_HOST=*

当 Python pip 命令行进程以 s PIP_TRUSTED_HOST et 运行时,Pip 会跳过在指定域上验证TLS证书。有关更多信息,请参阅 Pip 网站中的 --trusted-host

NPM_ _ CONFIG STRICT _ SSL =false

当 Node.js npm 命令行进程在NPM_CONFIG_STRICT_SSL设置为 false 的情况下运行时,Node Package Manager (npm) 实用程序将在不验证TLS证书的情况下连接到NPM注册表。有关更多信息,请参阅 npm Docs 网站网站中的 strict-sl

运行时弱化命令标志

注意

此检查的严重性等级为 “”。

与运行时削弱环境变量类似,一些命令行实用程序或编程语言运行时支持绕过安全默认值,这允许通过不安全的方法执行。

npm ––strict-ssl=false

当使用该--strict-ssl=false标志运行 Node.js npm 命令行进程时,Node Package Manager (npm) 实用程序无需验证TLS证书即可连接到NPM注册表。有关更多信息,请参阅 npm Docs 网站中的 strict-sl

apk ––allow-untrusted

当使用--allow-untrusted标志运行该Alpine Package Keeper实用程序时,apk将安装没有签名或签名不可信的软件包。有关更多信息,请参阅 Apline 网站中的以下存储库

apt-get ––allow-unauthenticated

当使用--allow-unauthenticated标志运行 Debian apt-get 软件包实用程序时,apt-get不会检查软件包的有效性。欲了解更多信息,请参阅 Debian 网站中的 APT-Get (8)

pip ––trusted-host

当使用该--trusted-host标志运行 Python pip 实用程序时,指定的主机名将绕过TLS证书验证。有关更多信息,请参阅 Pip 网站中的 --trusted-host

rpm ––nodigest, ––nosignature, ––noverify, ––nofiledigest

当使用--nodigest、、--nosignature--nofiledigest标志运行RPM基于软件包的管理rpm器时,RPM软件包管理器在安装软件包时不会验证软件包标头、签名或文件。--noverify有关更多信息,请参阅RPM网站中的以下RPM手册页

yum-config-manager ––setopt=sslverify false

当RPM基于软件包管理器yum-config-manager--setopt=sslverify标志设置为 false 的情况下运行时,YUM包管理器不验证TLS证书。有关更多信息,请参阅 Man7 网站中的以下YUM手册页

yum ––nogpgcheck

当RPM基于该--nogpgcheck标志的包管理yum器运行时,YUM包管理器会跳过检查软件包上的GPG签名。欲了解更多信息,请参阅 Man7 网站中的 yum (8)

curl ––insecure, curl –k

curl当使用--insecure-k标志运行时,TLS证书验证被禁用。默认情况下,在curl进行传输之前,所有建立的安全连接都要经过安全验证。此选项允许curl跳过验证步骤,无需勾选即可继续操作。有关更多信息,请参阅 Curl 网站中的以下 Curl 手册页

wget ––no-check-certificate

wget当使用--no-check-certificate标志运行时,TLS证书验证被禁用。有关更多信息,请参阅GNU网站中以下 Wget 手册页