【摘 要】 本文对企业云原生架构特点和云原生环境下容器、容器编排平台、网络以及微服务应用等方面面临的安全风险进行了分析说明,给出了云原生环境下安全机制左移、容器运行时行为的聚焦、最小权限原则和零信任架构的防护思路,并针对云原生风险,结合云原生防护思路提出了云原生全生命周期的安全防护解决方案。
【关键词】 云原生 云安全 容器
1 引言
云计算的快速发展和业务系统快速迭代部署、可移植性、可扩展性等需求的不断增长,促使容器化、服务网格、微服务、无服务等云原生(Cloud Native)技术得到企业的广泛关注和应用。云原生应用的敏捷、高效、弹性扩展等特性在企业数字化转型和降本增效、专注业务价值效率方面发挥着重大助力作用,但随之而来的安全问题也日益突出,构建全方位的云原生环境安全体系是企业“上云”的必经之路。
2 云原生环境及面临的安全挑战和风险
大型企业从传统的IT系统转型升级为云原生应用系统往往按照不同的业务域,分类、分段、分层建设,应用架构体系则从基础设施架构和业务能力架构两方面不断抽象发展融合。一方面,下沉应用系统的全部基础设施,将业务逻辑与基础设施完全解耦,应用端聚焦业务创新和逻辑功能实现,基础设施提供物理服务器到应用系统函数代码之间的全部技术架构和工具软件,如容器、编排引擎、服务网格、无服务计算等。另一方面,开展业务逻辑能力的抽象设计,提取共性下沉至可复用的赋能平台,形成小而精的业务灵活创新前台和厚而广的共性能力赋能中台。
在基于“大中台、小前台”的平台赋能支撑下,云原生的数字化环境可以很好地满足各业务领域的功能复用与快速迭代、数据共享与互通、需求敏捷开发与高效交付、应用流水线部署与滚动升级、资源弹性扩展与实时在线以及运维自动化和智能化的要求。
云原生技术作为企业数字业务应用创新的原动力,在进入生产环境实现云原生应用全生命周期管理,发挥数字业务快速交付与迭代的优势过程中,也带来了新的安全风险和挑战。
云原生安全并不独特,传统IT环境下的安全问题在云环境下仍然存在,如DoS攻击、内部越权、漏洞攻击、数据篡改、数据泄露等。同时,由云原生架构的多租户、虚拟化、快速弹性伸缩等特点和业务应用微服务化带来的软件架构复杂度的大幅提升,内部网络流量、服务通信端口、容器等出现、消失的动态变化,业务微服务化后大量服务认证、访问授权控制机制的自动配置管理,开发测试和生产环境中持续集成和持续交付自动化流水线的各环节的安全保护,以及未能及时跟上云原生技术快速发展而缺位的云原生安全策略和防护工具等问题,都使运行在云原生环境下的业务应用和数据面临潜在安全风险。
与传统安全技术相比,云原生安全技术表现出了明显的不同,技术架构由下至上可分为容器、虚拟化、宿主机运行时安全、编排平台、服务网格安全、微服务、无服务安全,以及与开发运维过程相关的持续集成与持续部署(CI/CD)、开发运维一体化(DevOps)和运行过程的监控、追踪和测量等安全技术。简而言之,传统安全更重视边界防护,而云原生安全更重视持续、动态和整体的安全防护。
2.1 容器环境的风险
容器技术是云原生技术体系的基石,容器是宿主机上的进程,其技术本质是对宿主机操作系统的一层虚拟化,通过操作系统命名空间(Namespace)实现不同容器间主机名与域名、信号量/消息队列和共享内存、进程编号、网络设备、网络栈、端口、文件挂载点、用户和用户组环境的隔离;通过控制组(Cgroup)将容器进程或线程分隔到按资源划分等级的不同组内,实现对不同容器资源的使用限制。容器采用镜像的方法创建,以虚拟化隔离和资源受限的方式运行在宿主机上,通过容器运行时接口(CRI)接受外部管理和调度。镜像具有分层构建、写时复制、内容寻址、联合挂载等特征。
容器直接运行于宿主机操作系统之上,与以硬件层支持实现的虚拟化技术比较,更容易出现逃逸风险。攻击者往往首先通过劫持容器内部业务逻辑或直接控制等方式(如远程攻击、恶意容器、恶意租用),获得容器内某种权限下的命令执行能力,之后借助技术手段进一步获得该容器所在宿主机上某些权限的命令执行能力并获取相应资源。
例如,通过配置特权模式可使容器获得与宿主机相同根权限(root);通过挂载宿主机上运行的通信文件/var/run/docker.sock,在容器中安装Docker客户端可操作宿主机建立新容器;通过Docker程序漏洞(CVE-2019-5736)可在宿主机内执行攻击载荷(payload)代码;通过操作系统内核漏洞(CVE-2016-5195)可进入宿主机root环境等。
因此,容器运行时的风险主要源于与宿主机操作系统共享了内核和硬件资源,共享内核相对于虚拟机(VM)而言具有更大的攻击面。如果系统内核存在漏洞或者使用者对容器有意无意地不当配置,其上运行的容器就存在被攻击和隔离性被破坏的风险。一旦隔离性被打破,随之而来的就是容器逃逸。