基础镜像加固

什么是基础镜像加固?

基础镜像加固是通过最小化容器镜像的基础层包含的内容,并以安全优先的默认配置进行设置,从而保护其安全的过程。加固的基础镜像会移除不必要的组件,例如 shell、编译器和包管理器,这限制了可用的攻击面,使攻击者更难在容器内获得控制权或提升权限。

加固还涉及应用最佳实践,例如以非 root 用户身份运行、减少可写表面,并通过不可变性确保一致性。虽然 Docker Official ImagesDocker Verified Publisher Images 遵循安全最佳实践,但它们可能不像 Docker Hardened Images 那样经过深度加固,因为它们的设计目标是支持更广泛的用例。

为什么重要?

大多数容器的安全态势都继承自它们使用的基础镜像。如果基础镜像包含不必要的工具或以提升的权限运行,那么构建在其上的每个容器都会暴露在这些风险之下。

加固基础镜像可以:

  • 通过移除可能被利用的工具和库来减少攻击面
  • 通过丢弃 root 访问权限并限制容器可执行的操作来强制执行最小权限原则
  • 通过避免运行时更改和漂移来提高可靠性和一致性
  • 符合安全软件供应链实践,并有助于满足合规标准

使用加固的基础镜像是保护在容器中构建和运行的软件的关键第一步。

移除了什么以及原因

加固的镜像通常会排除在安全生产环境中存在风险或不必要的常见组件:

移除的组件 原因
Shell(例如 sh, bash 防止用户或攻击者在容器内执行任意命令
包管理器(例如 apt, apk 禁用在构建后安装软件的能力,减少漂移和暴露
编译器和解释器 避免引入可用于运行或注入恶意代码的工具
调试工具(例如 strace, curl, wget 降低被利用或信息泄露的风险
未使用的库或语言环境 缩小镜像大小并最小化攻击向量

Docker Hardened Images 如何应用基础镜像加固

Docker Hardened Images (DHIs) 通过设计应用基础镜像加固原则。每个镜像的构建都只包含其特定用途所必需的内容,无论是构建应用程序(使用 -dev-sdk 标签)还是在生产环境中运行它们。

Docker Hardened Image 特性

Docker Hardened Images 的构建目标是:

  • 精简:仅包含必要的库和二进制文件
  • 不可变:镜像在构建时固定——不进行运行时安装
  • 默认非 root:除非另有配置,否则容器以非特权用户身份运行
  • 用途限定:提供不同的标签用于开发 (-dev)、基于 SDK 的构建 (-sdk) 和生产运行时

这些特性有助于在开发、测试和生产环境中强制执行一致、安全的行为。

Docker Hardened Image 兼容性注意事项

由于 Docker Hardened Images 剥离了许多常用工具,它们可能无法立即适用于所有用例。您可能需要:

  • 使用多阶段构建在 -dev 镜像中编译代码或安装依赖项,并将输出复制到加固的运行时镜像中
  • 用等效的入口点二进制文件替换 shell 脚本,或者在需要时显式包含一个 shell
  • 使用 Docker Debug 临时检查或排查容器,而无需更改基础镜像

这些权衡是刻意为之,有助于支持构建安全、可重现且可用于生产的容器的最佳实践。