容器云平台的基础安全和管理安全设计

【导读】作为平台级的容器环境,比以往任何的基础架构平台更加的接近业务,同时也包含了更多的层级和组件,因此也带来了更多的风险,容器平台基础组件部分和容器云管理平台部分是容器云平台安全设计的关键 。本文列举了容器平台安全的几个典型风险,并分享了容器云平台基础安全设计和管理安全设计的方法经验 。1 容器云平台风险及挑战
容器云平台是通过容器编排引擎及容器运行时等技术提供应用运行平台,从而实现运维自动化、快速部署应用、弹性伸缩和动态调整应用环境资源,进而提高研发运营的效率,目前市场上主流的容器云平台是基于Google Kubernetes(简称k8s)容器编排引擎和容器引擎建立 。本文中介绍内容也是针对此类的容器云平台 。
作为平台级的容器环境,比以往任何的基础架构平台更加的接近业务,同时也包含了更多的层级和组件,因此也带来了更多的风险;目前容器安全也是一个信息安全的新兴领域,该领域的技术和产品也在不断完善中,下面我们先从风险的角度列举几个常见的例子,让大家对容器平台安全有个感性认识:
1.1 软件漏洞风险
容器的设计虽然实现了良好的操作系统级隔离,但同时也存在很多安全隐患,比如容器是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核,其次在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间,即如果某个容器修改了时间,那整个宿主机的时间都会随之修改,非计划内的修改系统时间,对于时间敏感的应用可能引起数据错误甚至进程crash,老版本Oracle数据库就存在这样的问题 。
Kubernetes作为容器编排引擎,如果在规划和部署架构方面存在缺陷,同样会和传统环境一样容易受到外部攻击者和具有恶意的内部人员的攻击 。因此,需要保障大型容器云环境具有正确的安全部署体系结构,并为应用上云提供安全最佳实践 。
根据国家信息安全漏洞库的统计,截止2019年1月2日,Docker相关的漏洞共40个,其中包括Apache、RedHat、hyper、boot2docker、Jenkins等厂商产品或开源项目 。
2018年,Kubernetes生态系统因发现Kubernetes的第一个主要安全漏洞(Kubernetes特权升级漏洞 CVE-2018-1002105)而动摇 。该漏洞使攻击者能够通过k8s api server实现提升k8s普通用户到k8s api-server的最高权限,然后运行代码来安装恶意软件,进而破坏k8s集群 。除此之外还有CVE-2019-11245 Kubernetes kubelet v1.13.6 and v1.14.2提权漏洞,实现了在通常情况下以容器Dockerfile中指定的USER运行的容器,有时可以以root身份运行(在容器重启时,或者如果镜像先前被拉到节点) 。这种情况的出现违反了容器禁止以root(容器内进程运行用户是root)运行的最佳实践 。
1.2 API安全风险
此部分集中关注容器云平台基础组件提供的api服务的安全问题,比如k8s api server,如果在构建容器云平台时扩展或者封装了平台管理api,也需要关注并进行加固 。
Docker很多服务默认监听在Unix Socket上,比如unix:///var/run/docker.sock,为了实现集群管理,还提供了一个远程管理接口的REST API,允许通过TCP远程访问服务 。开启没有任何加密和访问控制的Docker Remote API服务是非常危险的 。尤其是将默认的2375端口暴露到互联网中,一旦被攻击者发现,攻击者无需认证即可访问到容器数据,从而导致敏感信息泄露,也可以恶意删除容器上的数据,或可进一步利用容器自身特性,直接访问主机上的敏感信息,获取服务器root权限,对敏感文件进行修改并最终完全控制服务器 。

推荐阅读