云原生安全概述
本系列博客的内容均来源于对“云原生安全:攻防实现与体系构建”这本书籍的学习归纳。
1.1 云原生的含义
云计算的上半场基本已经结束,很多企业已经利用开源的或者商业的IaaS系统构建云计算平台,他们只是简单的将传统的物理主机、平台、或者应用转为虚拟化。只实现了“形”上的改变,还远远没有达到“神”上的变化。云计算的下半场,应该充分利用云计算的特性,解决业务在开发、运行整个生命周期中遇到的问题。
CNCF对云原生的解释为:“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。
1.2 云原生的特性
1.2.1 轻、快、不变的基础设施
云原生环境中,支撑基础设施通常是容器技术。
轻、快:容器占用资源小,生命周期短,以秒或者分钟为基本单位。
不变:在实践中不会在容器中安装或者更新应用,而是更新为更为持久化的镜像。这种只更新镜像而不改变容器运行时的模式称为不变的基础设施。
1.2.2 弹性服务编排
云原生的焦点是业务,业务的最核心之处是业务管理和控制。服务编排提供了强大的业务支撑能力,可以弹性的控制服务的位置、容量、版本,监控保证业务的可访问性。
1.2.3 开发运营一体化
DevOps通过将软件开发和运营相结合,缩短软件开发的生命周期。DevOps的开发理念主要包括自动化构建、测试、持续集成和持续交付等等。
1.2.4 微服务架构
将传统的单体应用的功能拆解成大量单独、细粒度的服务。通过应用编排组装,实现等价于传统单体应用的复杂功能。
1.2.5 无服务模型
无服务是一种基于代码和计算任务执行的云计算抽象模型,与之相对的是基于服务器(虚拟机、容器)的计算模式。无服务聚焦在函数计算,隐藏了底层复杂的实现方式,使开发者能够聚焦业务本身。
1.2.6 小结
云原生就是以云的模式管理和部署资源,用户看到的不是一个虚拟主机,而是一个个业务单元,开发者只需要聚焦于业务本身。微服务的设计、无服务的功能是云原生理念的核心体现,容器、编排、服务网格是实现云原生的支撑技术。
1.3 云原生安全的含义
云原生安全分为面向云原生环境的安全和具有云原生特征的安全。
1.3.1 面向云原生环境的安全
面向云原生环境的安全是为了保障云原生环境中的基础设施、编排系统和微服务系统的安全。这类安全机制,不一定具备云原生的特征,可以以传统的模式部署、硬件设备等资源来保护云原生环境。
针对云原生的内部安全机制主要以云原生形态的居多,如服务网格的安全通常使用旁挂串接的安全容器,微服务API安全通常使用API网关容器,容器都是云原生的部署方式,具有云原生的特征。
1.3.2 具有云原生特征的安全
借助于业界流行的云原生技术和平台,所提供的具有云原生特征的安全机制,能够提供比安全资源池性能更好、处置更灵活的安全能力。
1.4 云原生安全体系
未来的云安全其实就是纯安全,未来的云计算无处不在,谈云安全问题,就是谈一个通用场景下的安全问题。
云原生安全演进如图所示:
云原生发展会有三个阶段:
(1)安全赋能云原生体系,构建云原生的安全能力。当前云原生技术发展迅速,但相应的安全防护匮乏,基础的镜像安全、安全基线都没有成熟的方案。因此,需要研究如何将现有的安全策略,比如隔离、访问控制、入侵检测、应用安全等等应用到云原生环境,构建安全的云原生系统,是当前需要考虑的问题。
(2)安全产品具有云原生的新特性,该阶段需要研究的是将轻/快/不变的基础设施、弹性服务编排、开发运营一体化的云原生特性赋予到传统的安全产品上,通过软件定义的安全架构,构建原生安全架构,提供弹性、按需、云原生的安全能力。
(3)提高通用性,安全设备或者平台云原生化后,所提高的安全额能力,不仅适用于云原生、5G、边缘计算场景,还可以独立部署在大型电商等传统常见,最终成为无处不在的安全。
根据云原生环境的构成,面向云原生环境的安全体系包含三个层面的安全机制。
1.4.1 容器安全
容器环境是云计算的实现的一种方式,因此,容器层面的安全分为以下几部分。
(1)容器环境基础设施的安全性,比如主机上的安全配置是否会影响到其上运行的容器,主机上的安全漏洞和恶意进程是否会影响到容器,容器内的进程是否可以利用主机上的安全漏洞,等等。
(2)容器的镜像安全,包括镜像中的软件是否存在安全漏洞,镜像在构建过程中是否存在安全风险,镜像在传输过程中是否被恶意篡改。
(3)容器运行时安全,比如运行的容器间的隔离是否充分,容器间的通信是否是安全的,容器内的恶意程序是否会影响到主机或者其他容器,容器的资源使用情况是否安全等等。
(4)整个容器生态的安全性,比如Docker自身的安全性如何,Service Mesh/Serverless对容器安全的影响,容器中的安全密钥的管理与传统环境有什么不同,容器化后的数据隐私保护与传统的数据隐私保护是否一致。
容器安全可以粗略的分为两个主要方面:一方面是容器云内部的安全,包括宿主机安全、虚拟化安全,容器(东西向)网络的安全,管理平台的安全以及数据安全等等;另一方面是容器云内外之间的网络安全,也就是通常讲的南北向网络安全。其中东西向指的是容器之间的安全,南北向指的是容器和外部之间的安全。
云计算安全架构如图所示:
容器云安全建设思路
1.4.2 编排系统安全
编排系统的安全指的主要是针对Kubernetes的安全。
1.4.3 云原生应用安全
新型的微服务提醒中存在的安全风险
1.5 云原生安全问题
1.5.1 如何防护段生命周期的容器
容器的生命周期啊分布呈现三种类型。
(1)虚拟机型:有一小部分容器被当成虚拟机使用,将本来放置于一个虚拟机中的程序集合部署到单个容器中,这些容器的生命周期和虚拟机相当。生命周期平均在83-333天左右。
(2)原生型:有一部分容器是以Docker的命令启动和管理的,这部分容器完成独立的功能,生命周期在10天左右
(3)编排型:还有大量的容器是由编排系统管理的,很多容器更具业务动态生成和销毁,这类容器的生命周期在1天以内。
攻击者关注的更多的是持久化的东西,比如代码、第三方库、镜像资产等等。
对于防守者来说,安装杀毒软件,对容器来说是一个相对不可行的技术,杀毒软件相对容器而言太重了。
因此如何保护短生命周期的容器是我们需要解决的问题之一。
1.5.2 如何降低安全运营成本
安全左移:将安全防护从传统运行时运营转向为开发侧
1.5.3 DevSecOps
DevSecOps开发运营一体化安全,安全能力应该覆盖开发和运营闭环的每个环节。
1.5.4 如何实现安全的云原生化
(1)安全架构具备编排能力
编排是指将各类资源根据业务需要进行动态控制和管理,安全架构可以借助编排系统实现动态化的管理和升级。
(2)容器和宿主机安全:安全特权容器
以安全容器的形式防护容器的安全,由于容器技术是操作系统的虚拟化,所以可以通过宿主机中的安全代理观察到容器中的进程、文化系统等消息。
(3)Sidecar安全容器
特权容器通常关心的是系统调用、网络流量,但是在云原生环境下,业务团队更加关心的是容器承载的业务的安全。这些安全主要是针对应用层的防护,针对应用层的防护,主要使用的是Sidecar模式的安全容器。
Sidecar容器本质上就是一种提供反向代理的容器,如图所示,该容器会劫持业务容器的流量,经过解析获得应用层的请求和响应,然后根据安全策略进行检测或防护。
1.6 云原生现状
1.6.1 云原生新范式:Docker+Kubernetes
如图所示,Docker、Containerd和CRI-O是容器运行时的主流实现机制:
如图所示,在编排工具上,Kubernetes占据了榜首。
1.6.2 镜像问题仍然突出
Docker Hub上的官方镜像存在高危漏洞。主要问题来源于两方面:方面一:缺少安全团队对镜像的安全性进行检测。方面二:主要是镜像未及时更新安全补丁。
1.6.3 安全配置规范执行和密钥凭证管理不理想
云原生应用会大量存在应用与中间件、后端服务的交互,为了简便,很多开发者将访问凭证、密钥文件直接存放在代码中,或者将一些线上资源的访问品证设置为空或弱口令,导致攻击者很容易访问敏感数据的权限。
1.7本章小结
通过本章的学习,了解云原生的含义,根据云原生和安全体系的关系和发展阶段,首次提出了原生安全的概念,然后介绍了云安全中的一些亟待解决的关键问题。
欢迎各位关注个人公众号,一起讨论学习。个人博客地址: https://thenorth-sec.github.io/