《2017年Docker安全实践探索.pdf》由会员分享,可在线阅读,更多相关《2017年Docker安全实践探索.pdf(31页珍藏版)》请在三个皮匠报告上搜索。
1、Docker安全实践探索Docker面临的安全挑战容器是应用层的一个抽象,它将代码和依赖项集成在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器都以用户空间中的隔离进程运行。容器占用的空间少于虚拟机(容器映像的大小通常为几十MB),几乎立即启动。虚拟机(VM)是将一个服务器转换为许多服务器的物理硬件的抽象。虚拟机管理程序允许多个虚拟机在单个计算机上运行。每个虚拟机包括操作系统的完整副本,一个或多个应用程序,必要的二进制文件和库-占用数十GB。VM也可能启动缓慢。Docker VS VmDocker面临主要攻击方式图片来源:趋势科技Gartner研究结果Gartner
2、在2017年确定了最高安全技术Gartner公司今天突出介绍了信息安全的顶级技术及其对安全组织的影响。分析师在Gartner安全与风险管理峰会期间介绍了的研究结果。容器安全容器使用共享操作系统(OS)模型。对主机操作系统中的漏洞的攻击可能导致所有容器的妥协。容器本身并不安全,但由开发人员以不安全的方式部署,安全团队很少或根本没有参与,安全架构师也没有指导。传统的网络和基于主机的安全解决方案对容器是无视的。集装箱安全解决方案保护集装箱的整个生命周期不被创造到生产,而大多数集装箱安全解决方案提供了预生产扫描和运行时监控和保护。http:/ Dockerfile:用于创建image镜像的模板文件 I
3、mage:镜像文件,对比PC端的概念,我们可以把它理解为服务器端的可执行软件包。一旦打包生成,如存在安全问题,那这些问题也被一并打包,最后导致安全事件 Container:运行起来的image文件就是容器了,从外来看就是一个应用,可对外提供服务了Docker在实际环境中的应用DockerfileImageContainerbuildrun代码库代码库镜像仓库镜像仓库OS开发/测试环境生产环境非生产环境中保证镜像安全可信 生产环境中保证镜像正确的运行保证Docker镜像的安全镜像文件简介Docker镜像是由文件系统叠加而成。最底层是bootfs,之上的部分为rootfs。Bootfs是docke
4、r镜像最底层的引导文件系统,包含bootloader和操作系统内核。Rootfs通常包含一个操作系统运行所需的文件系统。这一层作为基础镜像。在基础镜像之上,会加入各种镜像,如apache等。对镜像进行静态安全扫描https:/ Content TrustDocker 1.8版本 后支持内容信任的安全效果防止镜像伪造防止镜像伪造防止重放攻击防止重放攻击防止秘钥丢失防止秘钥丢失如何使用内容信任#export DOCKER_CONTENT_TRUST=1启用内容信任#export DOCKER_CONTENT_TRUST_SERVER=https:/notaryserver:4443指定验证服务器地
5、址NotaryNotary是是dockerdocker一个一个官方内容公证服务器项目官方内容公证服务器项目,利用,利用TUFTUF实现对内容的可信实现对内容的可信验证验证GIT:https:/ push/trusttest:testingThe push refers to a repository docker.io/trusttest(len:1)9a61b6b1315e:Image already exists 902b87aaaec9:Image already exists latest:digest:sha256:d02adacee0ac7a5be140adb94fa1dae64f
6、4e71a68696e7f8e7cbf9db8dd49418 size:3220 Signing and pushing trust metadata You are about to create a new root signing key passphrase.This passphrase will be used to protect the most sensitive key in your signing system.Please choose a long,complex passphrase and be careful to keep the password and
7、the key file itself secure and backed up.It is highly recommended that you use a password manager to generate the passphrase and keep it safe.There will be no way to recover this key.You can find the key in your configdirectory.Enter passphrase for new root key with id a1d96fb:Repeat passphrase for
8、new root key with id a1d96fb:Enter passphrase for new repository key with id docker.io/trusttest(3a932f1):Repeat passphrase for new repository key with id docker.io/trusttest(3a932f1):Finished initializing docker.io/trusttest首次推送生成的根密钥保证Docker的接口安全接口暴露带来的安全问题启用TLS双向认证$curl https:/dosec.io:2376/image
9、s/json-cert/.docker/cert.pem-key/.docker/key.pem-cacert/.docker/ca.pem$dockerd-tlsverify-tlscacert=ca.pem-tlscert=server-cert.pem-tlskey=server-key.pem -H=0.0.0.0:2376$docker-tlsverify-tlscacert=ca.pem-tlscert=cert.pem-tlskey=key.pem -H=dosec.io:2376 version服务端上启动可信连接端口客户端上带证书访问ca.pemCA证书Server-cert
10、.pem服务端证书Server-key.pem服务端私钥Clinet-cert.pem客户端证书Clinet-key.pem客户端私钥接口带证书访问更细粒度的用户访问控制权限验证Docker守护进程容器运行docker命令是否允许执行是返回执行结果利用利用 Docker 插件实现细粒度控制插件实现细粒度控制Docker 引擎允许用户使用第三方插件的形式扩展 Docker 功能。Docker 的插件类型分为以下三种大类:Network plugins 网络插件可以提供容器间互联网络模型。Volume plugins 数据卷插件可以使 Docker 数据卷跨多个主机。Authorization p
11、lugins 验证插件可以提供基于权限的访问控制,也是本文主要讲的插件,比较出名的就是Twistlock AuthZ BrokerTwistlock AuthZ Broker。Twistlock AuthZ安装及配置Twistlock AuthZ Broker 可以在容器中直接安装也可以在Docker外的主机中安装。安装插件安装插件$docker run-d-restart=always-v/var/lib/authz-broker/policy.json:/var/lib/authz-broker/policy.json-v/run/docker/plugins/:/run/docker/p
12、lugins twistlock/authz-broker修改修改 Docker 启动配置启动配置sudo systemctl edit-full docker.service#add plugin flag ExecStart=/usr/bin/dockerd-authorization-plugin=authz-broker授权策略授权策略在路径/var/lib/authz-broker/policy.json 下配置授权内容name:policy_1,users:alice,actions:此处配置指明方案 policy_1 的用户 alice 可以执行的命令 actions 为所有命令
13、。name:policy_3,users:alice,bob,actions:docker_creat方案 policy_3 用户 alice 和 bob 可以执行的命令只有创建容器。https:/ versionClient:Version:1.12.1API version:1.24Go version:go1.6.3Git commit:23cf638 Built:OS/Arch:linux/amd64 Server:Version:1.12.1API version:1.24Go version:go1.6.3Git commit:23cf638 Built:OS/Arch:linux
14、/amd64#日志输出:Sep 04 15:08:29 mj authz-broker28646:allow:true,err:,fields.msg:action docker_version Client:Version:17.03.1-ce API version:1.27Go version:go1.7.5Git commit:c6d412e Built:Mon Mar 27 17:14:09 2017OS/Arch:linux/amd64 Error response from daemon:authorization denied by plugin authz-broker:no
15、 policy applied(user:action:docker_version)执行 docker version 命令权限允许结果权限拒绝结果执行结果被拒绝,提示没有相应的方案,权限验证被拒绝。Docker运行及环境安全配置举例一些安全配置方法容器使用非root用户运行使用安全的基础镜像删除镜像中的setuid和setgid权限最小安装原则对docker宿主机进行安全加固限制容器之间的网络流量启用用户命名空间支持限制容器的内存使用量适当设置容器CPU优先级.Docker安全最佳实践-CISDocker公司与美国互联网安全中心(CIS)合作,制定了docker的最佳安全实践,其中包括了主机安全配置、docker守护进程配置、docker守护程序配置文件、容器镜像和构建、容器运行安全、docker安全操作六大项,99个控制点。几乎覆盖了docker安全要求各个方面,我们团队也对其进行了翻译和整理,稍后会免费贡献出来。CIS安全检查工具https:/ 安全相关资源Docker官方文档