本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
本节介绍如何使用 Amazon Inspector SBOM 生成器进行扫描 Dockerfiles 以及 Docker 容器镜像,用于显示会引入安全漏洞的错误配置。
使用 Sbomgen Dockerfile 检查
当发现名为 Dockerfile
或 *.Dockerfile
的文件以及扫描 Docker 映像后,会自动执行 Dockerfile 检查。
您可以使用 --skip-scanners dockerfile
参数禁用 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 二进制程序包
注意
此检查的严重性评级为信息。
我们建议不要安装或使用 Sudo 二进制程序包,因为它具有不可预测的 TTY 和信号转发行为。有关更多信息,请参阅 Docker Docs 网站中的 User
Debian APT 实用工具
注意
此检查的严重性评级为高。
以下是使用的最佳实践 Debian APT 实用程序。
将 apt-get
命令合并到单个 Run
语句中以避免缓存问题
我们建议在 Docker 容器内将 apt-get
命令合并到单个 RUN 语句中。单独使用 apt-get update
会导致缓存问题且后续 apt-get install
指令会失败。有关更多信息,请参阅 Docker Docs 网站上的 apt-get
注意
所描述的缓存行为也可能发生在你的内部 Docker 容器(如果 Docker 容器软件已过期)。
以非交互方式使用 APT 命令行实用程序
我们建议以交互方式使用 APT 命令行实用程序。APT 命令行实用程序被设计为终端用户工具,其行为在不同版本之间会发生变化。有关更多信息,请参阅 Debian 网站中的 Script Usage and differences from other APT tools
硬编码机密
注意
此检查的严重性评级为严重。
您 Dockerfile 中的机密信息被视为硬编码机密。可以通过以下方式识别硬编码的机密 Sbomgen Docker 文件检查:
-
AWS 访问密钥 IDs —
AKIAIOSFODNN7EXAMPLE
-
DockerHub 个人访问令牌 —
dckr_pat_thisisa27charexample1234567
-
GitHub 个人访问令牌 —
ghp_examplev61wY7Pj1YnotrealUoY123456789
-
GitLab 个人访问令牌 —
glpat-12345example12345678
根容器
注意
此检查的严重性标记为信息。
我们建议在没有根权限的情况下运行 Docker 容器。对于没有根权限就无法运行的容器化工作负载,我们建议使用最少权限原则来构建应用程序。有关更多信息,请参阅 Docker Docs 网站中的 User
运行时弱化环境变量
注意
此检查的严重性评级为高。
一些命令行实用程序或编程语言运行时支持绕过安全默认值,从而通过不安全的方法执行。
NODE_TLS_REJECT_UNAUTHORIZED=0
时间 Node.js 进程在NODE_TLS_REJECT_UNAUTHORIZED
设置为的情况下运行0
,TLS 证书验证被禁用。有关更多信息,请参阅 Node.js 网站中的 NODE_TLS_REJECT_UNAUTHORIZED=0
GIT_SSL_NO_VERIFY=*
当 git 命令行进程在设置 GIT_SSL_NO_VERIFY
的情况下运行时,Git 会跳过验证 TLS 证书。有关更多信息,请参阅 Git 网站中的 Environment variables
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-ssl
运行时弱化命令标志
注意
此检查的严重性评级为高。
与运行时弱化环境变量类似,一些命令行实用程序或编程语言运行时支持绕过安全默认值,从而通过不安全的方法执行。
npm ––strict-ssl=false
当 Node.js npm 命令行进程结合 --strict-ssl=false
标志运行时,Node Package Manager(npm)实用程序将在不验证 TLS 证书的情况下连接到 NPM 注册表。有关更多信息,请参阅 npm Docs 网站中的 strict-ssl
apk ––allow-untrusted
当 Alpine Package Keeper 实用程序使用--allow-untrusted
标志运行,apk
将安装没有签名或签名不可信的软件包。有关更多信息,请参阅 Apline 网站中的以下存储库
apt-get ––allow-unauthenticated
当 Debian apt-get
软件包实用程序结合 --allow-unauthenticated
标志运行时,apt-get
不会检查软件包的有效性。有关更多信息,请参阅 Debian 网站中的 APT-Get(8)
pip ––trusted-host
当 Python pip 实用程序使用--trusted-host
标志运行,指定的主机名将绕过 TLS 证书验证。有关更多信息,请参阅 Pip 网站中的 --trusted-host
rpm ––nodigest, ––nosignature, ––noverify, ––nofiledigest
当基于 RPM 的软件包管理器 rpm
结合 --nodigest
、--nosignature
、--noverify
和 --nofiledigest
标志运行时,RPM 软件包管理器在安装软件包时不会验证软件包标头、签名或文件。有关更多信息,请参阅 RPM 网站上的以下 RPM 手册页
yum-config-manager ––setopt=sslverify false
当基于 RPM 的软件包管理器 yum-config-manager
在将 --setopt=sslverify
标志设置为 false 的情况下运行时,YUM 软件包管理器将不会验证 TLS 证书。有关更多信息,请参阅 Man7 网站上的以下 YUM 手册页
yum ––nogpgcheck
基于 RPM 的软件包管理器 yum
结合 --nogpgcheck
标志运行时,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 手册页