前言
Docker在国内应用的越来越普遍,特别是在互联网企业中得到广泛的应用,就目前看来Docker是最有希望成为下一点云计算基础的应用虚拟化解决方案,当然随着大规模应用,其安全问题也越来越被重视,国外在docker安全研究起步较早,也出现一些体系化的安全方法和工具,但相比国内这方面的资料相对比较零散,作为专注于容器安全的DoSec安全团队有责任为国内的docker安全出点力,所以我们根据CIS的docker安全标准整理了国内第一份关于docker最佳安全实践的白皮书,让docker安全不仅限于安全圈的研究,更能让普通运维人员有一个docker安全加固指南,促进docker安全的发展。
在文档制作过程中,我们针对CIS标准进行了优化,去掉了晦涩和不符合国内阅读习惯的术语,同时加入了我们的实践和理解,希望能在实际工作中能帮助到大家。另外由于时间关系,白皮书中可能还存在不少遗漏和错误,如针对最流行的容器编排工具K8S的安全实践就暂时没有收录,我们将在下一个版本提供,若白皮书有错误的地方,也希望大家能指正,同时后续将发布针对白皮书内容的安全检查工具,敬请期待。
白皮书结构
本白皮书一共包含了:主机安全配置、docker守护进程配置、docker守护文件配置、容器镜像和构建文件、容器运行时保护、docker安全操作、docker集群配置共7个方面,104个安全控制点,几乎涵盖了docker安全各个方面,对于每个控制点,从8个方面来进行描述:
描述:阐述该控制点相关知识
安全出发点:阐述从安全的角度为什么要进行控制
审计方法:给出详细的审计方法
结果判定:对审计的结果判定
修复措施:详细的修复方案
影响:修复方案可能带来的影响
默认值:系统默认的参数
参考文献:相关的参考依据
目录预览
1.主机安全配置
1.1 为容器创建一个单独的分区
1.2 加固容器宿主机
1.3更新docker到最新版本
1.4只有受信任的用户才能控制docker守护进程
1.5审计docker守护进程
1.6审计docker文件和目录-/var/lib/docker
1.7审计docker文件和目录-/etc/docker
1.8审计docker文件和目录-docker.service
1.9审计docker文件和目录-docker.socket
1.10审计docker文件和目录-/etc/default/docker
1.11审计docker文件和目录-/etc/docker/daemon.json
1.12审计docker文件和目录-/usr/bin/docker-containerd
1.13审计docker文件和目录-/usr/bin/docker-runc
2.docker守护进程配置
2.1限制默认网桥上容器之间的网络流量
2.2设置日志级别为info
2.3允许docker更改IPtables
2.4不使用不安全的镜像仓库
2.5不使用aufs存储驱动程序
2.6 docker守护进程配置TLS身份认证
2.7配置合适的ulimit
2.8启用用户命名空间
2.9使用默认cgroup
2.10设置容器的默认空间大小
2.11启用docker客户端命令的授权
2.12配置集中和远程日志记录
2.13禁用旧仓库版本(v1)上的操作
2.14启用实时恢复
2.15禁用userland代理
2.16应用守护进程范围的自定义seccomp配置文件
2.17生产环境中避免实验性功能
2.18限制容器获取新的权限
3.docker守护程序文件配置
3.1设置docker.service文件的所有权为root:root
3.2设置docker.service文件权限为644或更多限制性
3.3设置docker.socket文件所有权为root:root
3.4设置docker.socket文件权限为644或更多限制性
3.5设置/etc/docker目录所有权为root:root
3.6设置/etc/docker目录权限为755或更多限制性
3.7设置仓库证书文件所有权为root:root
3.8设置仓库证书文件权限为444或更多限制性
3.9设置TLS CA证书文件所有权为root:root
3.10设置TLS CA证书文件权限为444或更多限制性
3.11设置docker服务器证书文件所有权为root:root
3.12设置docker服务器证书文件权限为444或更多限制
3.13设置docker服务器证书密钥文件所有权为root:root
3.14设置docker服务器证书密钥文件权限为400
3.15设置docker.sock文件所有权为root:docker
3.16设置docker.sock文件权限为660或更多限制性
3.17设置daemon.json文件所有权为root:root
3.18设置daemon.json文件权限为644或更多限制性
3.19设置/etc/default/docker文件所有权为root:root
3.20设置/etc/default/docker文件权限为644或更多限制性
4容器镜像和构建文件
4.1创建容器的用户
4.2容器使用可信的基础镜像
4.3容器中不安装没有必要的软件包
4.4扫描镜像漏洞并且构建包含安全补丁的镜像
4.5启用docker内容信任
4.6将HEALTHCHECK说明添加到容器镜像
4.7不在dockerfile中单独使用更新命令
4.8镜像中删除setuid和setgid权限
4.9在dockerfile中使用copy而不是add
4.10涉密信息不存储在dockerfile
4.11仅安装已经验证的软件包
5容器运行时保护
5.1启用AppArmor配置文件
5.2设置SElinux安全选项
5.3 linux内核功能在容器内受限
5.4不使用特权容器
5.5 敏感的主机系统目录未挂载在容器上
5.6 SSH不在容器中运行
5.7特权端口禁止映射到容器内
5.8只映射必要的端口
5.9不共享主机的网络命名空间
5.10确保容器的内存使用合理
5.11正确设置容器上的CPU优先级
5.12设置容器的根文件系统为只读
5.13确保进入容器的流量绑定到特定的主机接口
5.14容器重启策略on-failure设置为5
5.15确保主机的进程命名空间不共享
5.16主机的IPC命令空间不共享
5.17主机设备不直接共享给容器
5.18设置默认的ulimit配置(在需要时)
5.19设置装载传播模式不共享
5.20设置主机的UTS命令空间不共享
5.21默认的seccomp配置文件未禁用
5.22docker exec命令不能使用特权选项
5.23docker exec命令不能与user选项一起使用
5.24确保cgroug安全使用
5.25限制容器获得额外的权限
5.26检查容器运行时状态
5.27确保docker命令始终获取最新版本的镜像
5.28限制使用PID cgroup
5.29不要使用docker的默认网桥docker0
5.30不共享主机的用户命名空间
5.31任何容器内不能安装docker套接字
6 docker安全操作
6.1避免镜像泛滥
6.2避免容器泛滥
7 docker集群配置 1
7.1不启用群集模式
7.2在群集中最小数量创建管理器节点
7.3群集服务绑定到特定的主机接口
7.4数据在的不同节点上进行加密
7.5管理Swarm集群中的涉密信息
7.6 swarm manager在自动锁定模式下运行
7.7 swarm manager自动锁定秘钥周期性轮换
7.8节点证书适当轮换
7.9CA根证书根据需要进行轮换
下载地址
下载地址:
http://www.dosec.cn/dosecwp.pdf