《Dosec:2018年Docker容器最佳安全实践白皮书(117页).pdf》由会员分享,可在线阅读,更多相关《Dosec:2018年Docker容器最佳安全实践白皮书(117页).pdf(117页珍藏版)》请在三个皮匠报告上搜索。
1、 Docker 容器最佳安全实践 白皮书 (V1.O) 2018 年 5 月 本文档是 Dosec 安全团队参考 CIS 的 docker 安全标准并结合实践经验整理,更多 docker 安全关注我们的公众号: DoSec 容器安全Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 2 目录 1.主机安全配置 . 6 6 1.1 为容器创建一个单独的分区 . 6 1.2 加固容器宿主机 . 7 1.3 更新 docker 到最新版本 . 8 1.4 只有受信任的用户才能控制 docker 守护进程 . 9 1.5 审计 docker 守护进程 . 10 1.6 审计 doc
2、ker 文件和目录-/var/lib/docker . 11 1.7 审计 docker 文件和目录-/etc/docker . 12 1.8 审计 docker 文件和目录-docker.service . 13 1.9 审计 docker 文件和目录-docker.socket . 14 1.10 审计 docker 文件和目录-/etc/default/docker . 15 1.11 审计 docker 文件和目录-/etc/docker/daemon.json . 16 1.12 审计 docker 文件和目录-/usr/bin/docker-containerd . 17 1.13
3、 审计 docker 文件和目录-/usr/bin/docker-runc . 18 2.docker 守护进程配置 . 1919 2.1 限制默认网桥上容器之间的网络流量 . 19 2.2 设置日志级别为 info . 20 2.3 允许 docker 更改 IPtables . 21 2.4 不使用不安全的镜像仓库 . 22 2.5 不使用 aufs 存储驱动程序 . 23 2.6 docker 守护进程配置 TLS 身份认证 . 24 2.7 配置合适的 ulimit . 25 2.8 启用用户命名空间 . 26 2.9 使用默认 cgroup . 28 2.10 设置容器的默认空间大小
4、 . 29 2.11 启用 docker 客户端命令的授权 . 30 2.12 配置集中和远程日志记录 . 31 2.13 禁用旧仓库版本(v1)上的操作 . 32 2.14 启用实时恢复 . 33 2.15 禁用 userland 代理 . 34 Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 3 2.16 应用守护进程范围的自定义 seccomp 配置文件 . 35 2.17 生产环境中避免实验性功能 . 36 2.18 限制容器获取新的权限 . 37 3.docker 守护程序文件配置 . 3838 3.1 设置 docker.service 文件的所有权为 ro
5、ot:root . 38 3.2 设置 docker.service 文件权限为 644 或更多限制性 . 39 3.3 设置 docker.socket 文件所有权为 root:root . 40 3.4 设置 docker.socket 文件权限为 644 或更多限制性 . 41 3.5 设置/etc/docker 目录所有权为 root:root . 42 3.6 设置/etc/docker 目录权限为 755 或更多限制性 . 43 3.7 设置仓库证书文件所有权为 root:root . 44 3.8 设置仓库证书文件权限为 444 或更多限制性 . 45 3.9 设置 TLS CA
6、 证书文件所有权为 root:root . 46 3.10 设置 TLS CA 证书文件权限为 444 或更多限制性 . 47 3.11 设置 docker 服务器证书文件所有权为 root:root . 48 3.12 设置 docker 服务器证书文件权限为 444 或更多限制 . 49 3.13 设置 docker 服务器证书密钥文件所有权为 root:root . 50 3.14 设置 docker 服务器证书密钥文件权限为 400 . 51 3.15 设置 docker.sock 文件所有权为 root:docker . 52 3.16 设置 docker.sock 文件权限为 66
7、0 或更多限制性 . 53 3.17 设置 daemon.json 文件所有权为 root:root . 54 3.18 设置 daemon.json 文件权限为 644 或更多限制性 . 55 3.19 设置/etc/default/docker 文件所有权为 root:root . 56 3.20 设置/etc/default/docker 文件权限为 644 或更多限制性 . 57 4 容器镜像和构建文件 . 5858 4.1 创建容器的用户 . 58 4.2 容器使用可信的基础镜像 . 59 4.3 容器中不安装没有必要的软件包 . 59 4.4 扫描镜像漏洞并且构建包含安全补丁的镜像
8、 . 61 4.5 启用 docker 内容信任 . 62 4.6 将 HEALTHCHECK 说明添加到容器镜像 . 63 4.7 不在 dockerfile 中单独使用更新命令 . 64 Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 4 4.8 镜像中删除 setuid 和 setgid 权限 . 65 4.9 在 dockerfile 中使用 copy 而不是 add . 66 4.10 涉密信息不存储在 dockerfile . 67 4.11 仅安装已经验证的软件包 . 68 5 容器运行时保护 . 6969 5.1 启用 AppArmor 配置文件 . 6
9、9 5.2 设置 SElinux 安全选项 . 71 5.3 linux 内核功能在容器内受限 . 73 5.4 不使用特权容器 . 75 5.5 敏感的主机系统目录未挂载在容器上 . 76 5.6 SSH 不在容器中运行 . 77 5.7 特权端口禁止映射到容器内 . 78 5.8 只映射必要的端口 . 79 5.9 不共享主机的网络命名空间 . 80 5.10 确保容器的内存使用合理 . 81 5.11 正确设置容器上的 CPU 优先级 . 82 5.12 设置容器的根文件系统为只读 . 84 5.13 确保进入容器的流量绑定到特定的主机接口 . 86 5.14 容器重启策略 on-fai
10、lure 设置为 5 . 87 5.15 确保主机的进程命名空间不共享 . 88 5.16 主机的 IPC 命令空间不共享 . 89 5.17 主机设备不直接共享给容器 . 90 5.18 设置默认的 ulimit 配置(在需要时) . 92 5.19 设置装载传播模式不共享 . 93 5.20 设置主机的 UTS 命令空间不共享 . 94 5.21 默认的 seccomp 配置文件未禁用 . 95 5.22docker exec 命令不能使用特权选项 . 95 5.23docker exec 命令不能与 user 选项一起使用 . 97 5.24 确保 cgroug 安全使用 . 98 5.
11、25 限制容器获得额外的权限 . 99 5.26 检查容器运行时状态 . 100 5.27 确保 docker 命令始终获取最新版本的镜像 . 101 Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 5 5.28 限制使用 PID cgroup . 102 5.29 不要使用 docker 的默认网桥 docker0 . 103 5.30 不共享主机的用户命名空间 . 104 5.31 任何容器内不能安装 docker 套接字 . 105 6 docker 安全操作 . 106106 6.1 避免镜像泛滥 . 106 6.2 避免容器泛滥 . 108 7 docker
12、集群配置 . 109109 7.1 不启用群集模式 . 109 7.2 在群集中最小数量创建管理器节点 . 110 7.3 群集服务绑定到特定的主机接口 . 111 7.4 数据在的不同节点上进行加密 . 112 7.5 管理 Swarm 集群中的涉密信息 . 113 7.6 swarm manager 在自动锁定模式下运行 . 114 7.7 swarm manager 自动锁定秘钥周期性轮换 . 115 7.8 节点证书适当轮换 . 116 7.9CA 根证书根据需要进行轮换 . 117 Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 6 1.主机安全配置 1.1
13、1.1 为容器创建一个单独的分区为容器创建一个单独的分区 描述 所有 Docker 容器及数据和元数据都存储在/var/lib/docker 目录下。 默认情况下,/var/lib/docker 将根据可用性挂载在/ 或 /var 分区下。 安全出发点 Docker 依赖于/var/lib/docker 作为默认目录,其存储所有 Docker 相关文件,包括镜像文件。该目录可能会被恶意的写满,导致 Docker、甚至主机可能无法使用。因此,建议为存储 Docker 文件创建一个单独的分区(逻辑卷)。 审计方法 grep /var/lib/docker /etc/fstab 结果判定 应该返回/
14、var/lib/docker 挂载点的分区详细信息。 修复措施 新安装 docker 时,为/var/lib/docker 挂载点创建一个单独的分区。对于先前安装的系统,请使用逻辑卷管理器(LVM)创建分区。 影响 None 默认值 默认情况下,/var/lib/docker 将根据可用性挂载在/ 或 /var 分区下。 参考文献 http:/www.projectatomic.io/docs/docker-storage-recommendation Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 7 1.2 1.2 加固容器加固容器宿宿主机主机 描述 容器在 Lin
15、ux 主机上运行。 容器主机可以运行一个或多个容器。 加强主机以缓解主机安全配置错误是非常重要的 安全出发点 应该遵循基础架构安全最佳实践并加强宿主机操作系统。 保证主机系统的安全可以确保主机漏洞得控制。 若不加固主机系统可能导致安全问题。 审计方法 确保遵守主机的安全规范。 询问系统管理员当前主机系统符合哪个安全标准。 确保主机系统实际符合主机制定的安全规范。 结果判定 查看主机加固记录 修复措施 使用主机安全标准加固主机 影响 None 默认值 默认情况下,主机只有默认设置,没有加固。 参考文献 1.https:/ 2. https:/learn.cisecurity.org/benchm
16、arks 3.https:/ 4. https:/ 5. https:/en.wikibooks.org/wiki/Grsecurity 6. https:/ 7. http:/en.wikipedia.org/wiki/PaX Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 8 1.31.3 更新更新 dockerdocker 到最新版本到最新版本 描述 Docker 软件频繁发布更新,旧版本可能存在安全漏洞。 安全出发点 通过及时了解 Docker 更新,Docker 软件中的漏洞可以得到修复。 攻击者可能会尝试获得访问权限或提升权限时利用已知的漏洞。 不安装常规的
17、 Docker 更新可能会让现有的 Docker 软件受到攻击。 可能会导致提升权限,未经授权的访问或其他安全漏洞。 所以需要跟踪新版本并根据需要进行更新。 审计方法 执行以下命令并验证 Docker 版本是否为必要的最新版本。 Docker version 结果判定 和最新版本进行比对,查看是否为最新 修复措施 跟踪 Docker 发布并根据需要进行更新。 影响 对 Docker 版本更新进行风险评估,了解它们可能会如何影响 Docker 操作。 请注意,有些使用 Docker 的第三方产品可能需要支持较老版本的Docker。 默认值 不适用 参考文献 1. https:/ 2. https
18、:/ 3. https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 9 1 1.4 .4 只有受信任的用户才能控制只有受信任的用户才能控制 dockerdocker 守护进程守护进程 描述 Docker 守护进程需要root权限。 对于添加到“docker”组的用户为提供了完整的“root”访问权限。 安全出发点 Docker 允许在 Docker 主机和访客容器之间共享目录,而不会限制容器的访问权限。 这意味着可以启动容器并将主机上的 / 目录映射到容器。 容器将能够不受任何限制地更改您的主机文件系统。 简而言之,这意味着您只需作为“docker”组的成员即可
19、获得较高的权限,然后在主机上启动具有映射 / 目录的容器。 审计方法 在 docker 主机上执行以下命令,并确保只有可信用户是 docker 组的成员。 getent group docker 结果判定 判断是否必须要加入 docker 组的用户 修复措施 从docker组中删除任何不受信任的用户。 另外,请勿在主机上创建敏感目录到容器卷的映射。 影响 作为普通用户构建和执行容器的权限将受到限制 默认值 不适用 参考文献 1.https:/ 2.https:/www.andreas- 3.http:/www.projectatomic.io/blog/2015/08/why-we-dont-
20、let-non-root-users-run-docker-in-centos-fedora-or-rhel/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 10 1.51.5 审计审计 dockerdocker 守护进程守护进程 描述 审计所有活动的 Docker 守护进程 安全出发点 除了审核常规的 Linux 文件系统和系统调用外,还要审计 Docker 守护进程。 Docker 守护进程以root特权运行。 因此有必要审核其活动和使用情况。 审计方法 验证是否存在 Docker 守护程序的审核规则。 例如,执行以下命令:auditctl -l | grep /
21、 usr/bin/docker 结果判定 应该列出 Docker 守护程序的规则 修复措施 为 Docker 守护进程添加一条规则,例如, 在/etc/audit/audit.rules 文件中将该行添加到以下行中或者运行命令直接添加:auditctl -w / usr / bin / docker -k docker 然后,重新启动审计守护进程。 例如 server auditd restart 影响 审计生成相当大的日志文件。 确保定期归档它们。 另外,创建一个单独的审计分区以避免写满根文件系统。 默认值 默认,Docker 守护进程没有审计 参考文献 1.https:/ Docker 容
22、器最佳安全实践白皮书(V1.0) dosec 版权所有 11 1.61.6 审计审计 dockerdocker 文件和目录文件和目录- -/var/lib/docker/var/lib/docker 描述 审计以下目录: /var/lib/docker. 安全出发点 除了审核常规的 Linux 文件系统和系统调用外,还要审核所有 Docker 相关的文件和目录。 Docker 守护进程以root特权运行。 它的运行取决于一些关键文件和目录。 /var/lib/docker 就是这样一个目录。 它包含有关 docker 的所有信息。 审计方法 验证是否存在与/var/lib/docker 目录相
23、对应的审计规则。 例如,执行以下命令:auditctl -l | grep /var/lib/docker 结果判定 这应该列出/var/lib/docker 目录的规则。 修复措施 为/var/lib/docker 目录添加一条规则。 例如,将以下行添加到/etc/audit/audit.rules 文件中: -w/var/lib/docker -k docker 然后,重新启动审计守护进程。 例如 service auditd restart 影响 审计生成相当大的日志文件。 确保定期归档它们。 另外,创建一个单独的审计分区以避写满根文件系统。 默认值 默认情况下,Docker 相关的文件
24、和目录不被审计 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 12 1.71.7 审计审计 dockdockerer 文件和目录文件和目录- -/etc/docker/etc/docker 描述 审计以下目录 /etc/docker 安全出发点 除了审核常规的 Linux 文件系统和系统调用外,还要审核所有 Docker 相关的文件和目录。 Docker 守护进程以root特权运行。 它的行为取决于一些关键文件和目录。 /etc/docker 就是这样一个目录。 它包含用于Docker 守护进程和 Docker 客户端之间的 TLS 通信
25、的各种证书和密钥。 审计方法 验证是否存在与/ etc / docker 目录相对应的审计规则。 例如,执行以下命令:auditctl -l | grep /etc/docker 结果判定 这应该列出/ etc / docker 目录的规则。 修复措施 为/etc/docker 目录添加一条规则。 例如, 在/etc/audit/audit.rules 文件中添加如下所示的行 -w / etc / docker -k docker 然后,重新启动审计守护进程。 例如 servise auditd restart 影响 审计生成相当大的日志文件。 确保定期归档它们。 另外,创建一个单独的审计分区
26、以避免写满根文件系统 默认值 默认情况下,Docker 相关的文件和目录不被审计 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 13 1.81.8 审计审计 dockerdocker 文件和目录文件和目录- -docker.servicedocker.service 描述 审核 docker.service(如果适用)。 安全出发点 除了正常的 Linux 文件系统和系统调用审核外,还可以审核所有与Docker 相关的文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 docker.servi
27、ce 是一个这样的文件。 如果管理员更改了守护程序参数,则 docker.service 文件可能会出现问题。 它支持 Docker 守护进程的各种参数。 审计方法 步骤 1:找出文件位置:systemctl show -p FragmentPath docker.service 步骤 2:如果文件不存在,则此建议不适用。 如果该文件存在,请验证是否存在与该文件相对应的审核规则: 例如,执行以下命令:auditctl -l | grep docker.service 结果判定 应该根据其位置列出 docker.service 的规则。 修复措施 如果该文件存在,请为其添加规则。例如, 在/et
28、c/audit/audit.rules 文件中添加以下行: -w /usr/lib/systemd/system/docker.service -k docker 然后,重新启动审计守护进程。 例如, servise auditd restart 影响 审核会生成相当大的日志文件。 确保定期归档。 另外,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不会被审计。 文件docker.service 可能在系统上不可用 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 14 1.91.9 审计审
29、计 dockerdocker 文件和目录文件和目录- -dockerdocker.socket.socket 描述 审核 docker.socket(如果适用)。 安全出发点 除了正常的 Linux 文件系统和系统调用审核外,还可以审核所有与Docker 相关的文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 docker.socket 就是一个这样的文件。 如果管理员更改了守护程序参数,则 docker.socket 文件可能会出现问题。 它支持 Docker 守护进程的各种参数。 审计方法 步骤 1:找出文件位置:systemctl show
30、 -p FragmentPath docker.socket 步骤 2:如果文件不存在,则此建议不适用。 如果该文件存在,请验证是否存在与该文件相对应的审核规则: 例如,执行以下命令:auditctl -l | grep docker.socket 结果判定 这应该根据其位置列出 docker.socket 的规则 修复措施 如果文件存在,为其添加审计策略:. 在/etc/audit/audit.rules 文件添加一行: -w /usr/lib/systemd/system/docker.socket -k docker 然后重启审计进程: service auditd restart 影响
31、 审核会生成相当大的日志文件。 确保定期归档。 另外,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不被审计。 文件 docker.socket可能在系统上不可用,在这种情况下,此建议不适用。 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 15 1.101.10 审计审计 dockerdocker 文件和目录文件和目录- -/etc/default/docker/etc/default/docker 描述 审核 /etc/default/docker,(如果适用) 安全出发点 除了正常的
32、 Linux 文件系统和系统调用审核外,还可以审核所有与Docker 相关的文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 / etc / default / docker 是一个这样的文件。 它支持 Docker 守护进程的各种参数。 审计方法 验证是否存在与/ etc / default / docker 文件相对应的审计规则。 例如,执行以下命令:auditctl -l | grep / etc / default / docker 结果判定 这应该列出/ etc / default / docker 文件的规则。 修复措施 如果文件存在
33、,为其添加审计策略:. 在/etc/audit/audit.rules 文件添加一行: -w /etc/default/docker -k docker 然后重启审计进程: service auditd restart 影响 审核会生成相当大的日志文件。 确保定期归档。 另外,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不被审计。 文件/ etc / default / docker 可能不可用。 在这种情况下,此建议不适用。 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 16 1.1
34、11.11 审计审计 dockerdocker 文件和目录文件和目录- -/etc/docker/daemon.json/etc/docker/daemon.json 描述 审计 /etc/docker/daemon.json, 如适用的话 安全出发点 除了正常的 Linux 文件系统和系统调用审核外,还可以审核所有与 Docker 相关的文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 /etc/docker/daemon.json 是一个这样的文件。 它支持Docker 守护进程的各种参数。 审计方法 验证是否存在与/etc/docker/d
35、aemon.json 文件相对应的审计规则。 例如,执行以下命令:auditctl -l | grep /etc/docker/daemon.json 结果判定 这应该列出/etc/docker/daemon.json 文件的规则。 修复措施 添加 /etc/docker/daemon.json 文件的规则 例如, 在 /etc/audit/audit.rules 文件中添加如下行: -w /etc/docker/daemon.json -k docker 然后,重新启动审计守护程序。 例如 service auditd restart 影响 审核会生成相当大的日志文件。 确保定期归档。 另外
36、,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不被审计。. 文件/etc/docker/daemon.json 可能在系统上可用。 在这种情况下,此建议不适用。 参考文献 1.https:/ 2.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 17 1.121.12 审计审计 dockerdocker 文件和目录文件和目录- -/usr/bin/docker/usr/bin/docker- -containerdcontainerd 描述 审计 /usr/bin/docker-containerd,
37、如果适用的话 安全出发点 除了正常的 Linux 文件系统和系统调用审核外,还可以审核所有与Docker 相关的文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 /usr/bin/docker-containerd 就是这样的文件. Docker 现在依赖于 containerd 和 runC 来生成容器。 审计方法 验证是否存在与/ usr / bin / docker-containerd 文件相对应的审计规则。 例如,执行以下命令:auditctl -l | grep / usr / bin / docker-containerd 结果判定
38、 这应该列出/ usr / bin / docker-containerd 文件的规则。 修复措施 添加 /usr/bin/docker-containerd 文件的规则 例如, 在 /etc/audit/audit.rules 文件中添加如下行:: -w /usr/bin/docker-containerd -k docker 然后,重新启动审计守护程序。 例如 service auditd restart 影响 审核会生成相当大的日志文件。 确保定期归档。 另外,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不被审计。. 文件 /usr/
39、bin/dockercontainerd 可能在系统上可用。 在这种情况下,此建议不适用。 参考文献 1.https:/ https:/ https:/containerd.tools/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 18 1.131.13 审计审计 dockerdocker 文件和目录文件和目录- -/usr/bin/docker/usr/bin/docker- -runcrunc 描述 审计 /usr/bin/docker-runc, 如果适用的话. 安全出发点 除了正常的 Linux 文件系统和系统调用审核外,还可以审核所有与Docker 相关的
40、文件和目录。 Docker 守护程序以“root”权限运行。 它的行为取决于一些关键文件和目录。 /usr/bin/docker-runc 是一个这样的文件。 Docker 现在依赖于 containerd 和 runC 来生成容器。 审计方法 验证是否存在与/usr/bin/docker-runc 文件相对应的审核规则。 例如,执行以下命令: auditctl -l | grep /usr/bin/docker-runc 结果判定 这应该列出/usr/bin/docker-runc 文件的规则。 修复措施 添加/usr/bin/docker-runc 文件的规则。例如, 在/etc/audi
41、t/audit.rules 文件中添加如下行: -w /usr/bin/docker-runc -k docker 然后,重新启动审计守护程序。 例如 service auditd restart 影响 审核会生成相当大的日志文件。 确保定期归档。 另外,创建一个单独的审计分区,以避免填写根文件系统。 默认值 默认情况下,Docker 相关的文件和目录不被审计。 文件/ usr / bin / dockerrunc 可能在系统上可用。 在这种情况下,此建议不适用。 参考文献 1.https:/ 2.https:/ 3.https:/containerd.tools/ 4.https:/ 容器最
42、佳安全实践白皮书(V1.0) dosec 版权所有 19 2.docker 守护进程配置 2.12.1 限制默认网桥上容器之间的网络流量限制默认网桥上容器之间的网络流量 描述 默认情况下,默认网桥上同一主机上的容器之间允许所有网络通信。 如果不需要,限制所有的容器间通信。 将需要通信的特定容器链接在一起。 或者创建自定义网络,并只加入需要与该自定义网络通信的容器。 安全出发点 默认情况下,默认网桥上同一主机上的所有容器之间启用不受限制的网络通信。 因此,每个容器都有可能读取同一主机上容器网络上的所有数据包。 这可能会导致意外和不必要的信息泄露给其他容器。 因此,限制默认网桥上的容器间通信。 审
43、计方法 运行以下命令并确认默认网桥已被配置为限制集装箱间通信。 docker network ls -quiet | xargs docker network inspect - format.Name:.Options 结果判定 它应该返回默认网桥的 work.bridge.enable_icc:false。 修复措施 在守护进程模式下运行 docker 并传递-icc = false 作为参数。 例如,dockerd -icc = false 或者可以遵循 Docker 文档并创建自定义网络,并只加入需要与该自定义网络通信的容器。 -icc 参数仅适用于默认泊坞桥,如果使用自定义网络,则应
44、采用分段网络的方法。 影响 默认网桥上的容器间通信将被禁用。 如果需要在同一主机上的容器之间进行通信,则需要使用容器链接来明确定义它,或者必须定义自定义网络。 默认值 默认情况下,默认网桥上允许所有容器间通信。 参考文献 1.https:/ 2.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 20 2 2.2 .2 设置日志级别为设置日志级别为 infoinfo 描述 将 Docker 守护程序日志级别设置为“info”。 安全出发点 设置适当的日志级别,配置 Docker 守护程序以记录需要查看的事件。 “info”及以上的基准日志级别将捕获除调试日志
45、之外的所有日志。 若无必须,不应该在debug日志级别运行 Docker 守护进程 审计方法 ps -ef | grep dockerd 结果判定 确保-log-level 参数不存在或存在,然后将其设置为 info。 修复措施 运行 Docker 守护进程如下: dockerd -log-level =“info” 影响 None. 默认值 默认情况下,Docker 守护程序设置为“info”的日志级别。 参考文献 1.https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 21 2.32.3 允许允许 dockerdocker 更改更改 IPtablesIP
46、tables 描述 Iptables 用于建立,维护和检查 Linux 内核中的 IP 包过滤规则表。 允许Docker 守护程序更改 iptables 安全出发点 Docker 会根据用户为容器选择网络选项的方式自动对 iptables 进行必要的更改(如果允许的话)。 建议让 Docker 服务器自动更改 iptables,以避免可能妨碍容器与外界通信的网络配置错误。 另外,当每次选择运行容器或修改网络选项时,可以自动更新 iptables 的配置。 审计方法 ps -ef | grep dockerd 结果判定 确保-iptables参数不存在或不设置为false 修复措施 不要使用-i
47、ptables = false参数运行 Docker 守护程序。 例如,不要像下面那样启动 Docker 守护进程: dockerd -iptables = false 影响 Docker 守护进程服务需要在启动之前启用 iptables 规则。 在 Docker 守护进程操作期间任何重新启动 iptables 都可能导致丢失 docker 创建的规则。 使用iptables-persistent 持久 iptables 规则可以帮助减轻这种影响。 默认值 默认情况下,iptables设置为true。 参考文献 1.https:/ 2.https:/fralef.me/docker-and-i
48、ptables.html Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 22 2.42.4 不使用不安全的镜像仓库不使用不安全的镜像仓库 描述 Docker 在默认情况下,私有仓库被认为是安全的 安全出发点 一个安全的镜像仓库建议使用 TLS。 在/etc/docker/certs.d/目录下,将镜像仓库的 CA 证书副本放置在 Docker 主机上。 不安全的镜像仓库是没有有效的镜像仓库证书或不使用 TLS 的镜像仓库。 不应该在生产环境中使用任何不安全的镜像仓库。 不安全的镜像仓库中的镜像可能会被篡改,从而导致生产系统可能受到损害。 此外,如果镜像仓库被标记为不安
49、全,则“docker pull”,“docker push”和“docker search”命令并不能发现,那样用户可能无限期地使用不安全的镜像仓库而不会发现。 审计方法 执行以下命令,了解是否使用不安全的仓库: ps -ef | grep dockerd 结果判定 确保“-insecure-registry”参数不存在 修复措施 不要使用任何不安全的镜像仓库。 例如,不要像下面那样启动 Docker 守护进程: dockerd - insecure-registry 10.1.0.0/16 影响 None. 默认值 默认情况下,Docker 假定所有的本地镜像仓库都是安全的。 参考文献 1.
50、https:/ Docker 容器最佳安全实践白皮书(V1.0) dosec 版权所有 23 2.52.5 不使用不使用 aufsaufs 存储驱动程序存储驱动程序 描述 不要使用aufs作为 Docker 实例的存储驱动 安全出发点 aufs存储驱动程序是较旧的存储驱动程序。 它基于 Linux 内核补丁集,不太可能合并到主要的 Linux 内核中。 aufs驱动会导致一些严重的内核崩溃。 aufs 在 Docker 中只是保留了历史遗留支持,现在主要使用 overlay2 和devicemapper。 而且最重要的是,在许多使用最新 Linux 内核的发行版中,aufs不再被支持。 审计方