容器安全概述
根据我自己的理解,将容器安全划分成了6个方向,各个方面还存在二级分支方向,本文就这6个方向及其二级分支展开我对容器安全的理解。话不多说,开篇一幅图,后面全靠编。
![容器安全概述](https://zero-img.oss-cn-beijing.aliyuncs.com/20201126150307.png)
承载容器或容器集群的宿主机的安全性
首先就是容器宿主机的安全,在一个企业内部,如果划分了基础运维团队与容器团队(CaaS, Container as a Service 容器即服务),那么容器宿主机的安全性由基础运维团队负责,通常与传统基础设施安全保持一致。这块就是一些老生常谈的话题,如:
- 主机身份鉴别与访问控制:主要是操作系统的特权账号与普通账号管理、账号权限管理、密码策略、登录策略等;
- 补丁更新:补丁定期更新策略、高危漏洞补丁及时更新策略等。这一块,基础运维团队除了应该关注会对宿主机自身造成中高风险的漏洞,还应关注与Docker相关的漏洞,如:
利用DirtyCow漏洞实现Docker逃逸
; - 安全防护能力:主要是部署入侵检测与防护产品、防病毒产品,定期更新安全产品的软件版本与防护策略等;
- 运行容器的用户权限:这里需要理解一下Docker容器中的
uid
与gid
相关概念,就能发现如果使用特权用户启动容器会出现哪些风险,但是根据目前我片面的了解来看,大部分都没有配置特定用户权限来启动容器; - 审计和配置容器守护程序目录或文件:
/var/lib/docker
,/etc/docker
,docker.service
,docker.socket
,/etc/default/docker/
,/etc/docker/daemon.json
,/usr/bin/docker-containerd
,/usr/bin/docker-runc
需要对这些文件执行审计,并配置合理的权限,关于审计内容与权限设置的要求,请参见附录Docker容器最佳安全实践白皮书V1.0。
容器软件自身的安全性
其次就是容器软件Docker自身的安全性,这里我引用了以下链接的部分内容:
技术干货 | Docker 容器逃逸案例汇集 https://www.cnblogs.com/xiaozi/p/13423853.html
-
docker remote api未授权访问漏洞;
-
docker.sock挂载到容器内部:此场景容易出现在Jenkins CI/CD流程中;
-
docker高危启动参数:
--privileged
:特权模式,此场景也容易出现在Jenkins CI/CD流程中;-v
:挂载敏感目录;--cap-add=SYS_ADMIN
:允许执行mount操作;--net=host
:绕过Network Namespace;--pid=host
:绕过PID Namespace;--ipc=host
:绕过IPC Namespace。
-
Shocker攻击
-
CVE-2014-5277:
Docker和docker