云原生安全:攻防实践与体系构建阅读笔记
这是一篇纯纯的阅读笔记
云原生安全——攻防实践与体系构建
1云原生安全
在本章节中我们首先介绍云原生的含义和特性,然后介绍云原生安全的含义、体系、关键问题和现状。
1.1云原生:云计算下半场
CNCF对云原生的见解是:“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网络、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。
云原生系统的一般特征:
- 轻、快、不变的基础设施
只更新镜像而不改变容器运行时的模式称为不变的基础设施(inmmutable infrastructure)
- 弹性服务编排
服务编排(orchestration)提供了分布式的计算、存储和网络资源管理功能,可以按需、弹性地控制服务的位置、容量、版本,监控并保证服务的可访问性。
- 开发运营一体化(Devops)
Goals:缩短软件开发周期,提供高质量软件的持续交付。Devops不等于敏捷开发(更多的是在消除开发和运营侧的隔阂,聚焦于加速软件部署),但它是敏捷开发的有益补充。
Devops的开发理念:自动化构建和测试、持续集成和持续交付等
- 微服务架构
传统单体应用的功能被拆解成大量独立、细粒度的服务。
微服务架构使得每个服务聚焦在自己的功能上,做到小而精,然后通过应用编排组装,进而实现等价于传统单体应用的复杂功能。
其优点使后续业务修改时可复用现有的微服务,而不需要关心其内部实现,可最大限度地减少重构开销。
- 无服务模型
无服务聚焦在函数计算本身,隐藏了底层复杂的实现方式,使开发者能够聚焦于业务本身。
1.2 什么是云原生安全
两层含义:面向云原生环境的安全和具有云原生特征的安全
1.2.1 面向云原生环境的安全
Security Goals:防护云原生环境中基础设施、编排系统和微服务等系统的安全。
这类安全机制不一定具备云原生的特性:例如分布式拒绝服务缓解机制(DDoS Mitigation)一般都是以硬件形态交付和部署的。
云原生内部的安全机制以云原生形态居多:1)服务网格的安全通常使用旁挂串接(Sidecar)的安全容器,微服务API安全通常使用微API网关容器,这些安全容器都是云原生的部署模式,具有云原生的特性。
1.2.2 具有云原生特征的安全
具有云原生特征的各类安全机制,此类安全机制具有弹性、敏捷、轻量级、可编排等特性,它防护的对象可以是传统的业务系统。
在本书中讨论的更多是面向云原生环境的安全,即在云原生环境中识别各个系统和组件的脆弱性和安全风险,进而提出和设计面向云原生环境的安全,而相应的安全机制必须应用于云原生环境。
1.2.3原生安全:融合的云原生安全
作者认为原生安全有两个特点:基于云原生且无处不在,即使用了云原生技术,适用于各类场景。
-
云原生安全能力:容器/虚拟化/宿主机运行时安全=>编排平台/服务网格安全=>微服务/无服务安全
-
原生安全架构:安全应用=>安全编排=>虚拟安全资源
-
原生安全能力:终端安全=>网络安全=>应用安全
-
当前云原生技术发展迅速,但相应的安全防护匮乏。如何将现有成熟的安全能力,如隔离、访问控制、入侵检测、应用安全,应用于云原生环境,构建安全的云原生系统。
-
赋予传统安全产品云原生的特性(轻/快/不变的基础设施、弹性服务编排、开发运营一体化)从而提供弹性、按需、云原生的安全能力,提高”防护——检测——响应“闭环的效率。
-
通过安全设备或平台云原生化后,就能提供(云)原生的安全能力,在各种场景下都能够提供弹性、按需的安全服务,最终成为无处不在的安全。
1.3面向云原生环境的安全体系
根据云原生环境的构成,面向云原生环境的安全体系可包含三个层面的安全机制:容器安全,编排系统安全,云原生应用安全。
1.3.1容器安全
容器技术是云原生体系的底层,因而容器安全也是云原生安全的基石。容器层面的安全可以分为以下几部分。
1)容器环境基础设施的安全性;侧重于运行容器的宿主机上的安全性,主机上的安全漏洞和恶意进程是否影响到容器,容器内的进程是否可以利用主机上的安全漏洞,主机上的安全配置是否回影响到其上运行的容器。
2)容器的镜像安全;镜像中的软件是否存在安全漏洞,镜像在构建过程中是否存在安全风险,镜像在传输过程中是否被恶意篡改。
3)容器运行时安全;运行时容器间的隔离是否充分,容器间的通信是否安全的,容器内的恶意程序是否回影响到主机或者其他容器,容器的资源使用情况是否安全。
4)整个容器生态的安全性;Docker自身的安全性如何?Service Mesh/Serverless 对容器安全有什么影响,容器中安全密钥的管理与传统环境有什么不同?容器化后的数据隐私保护与传统的数据隐私保护是否一致?
容器云环境的安全可以粗略分为两个主要方面:容器云内部的安全,宿主机安全、虚拟化安全、容器(东西向)网络的安全、管理平台的安全以及数据安全等;另一方面就是容器云内外之间的网络安全,也就是通常讲的南北向网络安全。
容器云安全解决方案可以分别从两个方面进行设计:对于南北向的网络安全,可以通过安全资源池引流的方式,实现相应的安全检测与防护;对于容器云内部的安全,可以通过相应的容器安全机制实现。最后将这两部分统一接入云安全集中管理系统,进行统一的安全管理与运营。
1.3.2 编排系统安全
Kubernetes已经成为事实上的云原生编排系统,那么Kubernetes的安全就成为非常重要的编排安全部分,本书将在第四章曝光针对Kubernetes的攻击手段。
1.3.3云原生应用安全
无服务、服务网格等新型微服务体系同样存在各种安全风险,例如,攻击者通过编写一段无服务的代码获得运行无服务容器的Shell权限,进而对容器网络进行渗透。
与云原生应用相关的安全:面向云原生应用的零信任体系、云原生应用的传统安全机制、业务安全和API安全。
1.4云原生安全的关键问题
云原生安全与传统以虚拟化安全为主的云计算安全又巨大差别:
-
容器不是轻量级的虚拟化,容器安全不是轻量级的虚拟化安全。
-
虚拟化安全关注的是资源,云原生安全关注的是应用。
-
安全左移是云原生安全的必经之路。
为了加深对这三点的认识,我们需要来回顾云原生安全的关键问题。
1.4.1如何防护短生命周期的容器
容器的生命周期分布呈三种类型:1)虚拟机型;2)原生型;3)编排型;容器安全和虚拟化安全的最大差别看似是隔离技术的强度,但其实应是生命周期,甚至没有之一,因为这会影响到攻防双方的战术偏好。攻击者投入大部分精力去攻击更为持久化的东西,如代码、第三方库、镜像等资产,开发安全和供应链安全将是云原生环境中的重点安全措施。
终端检测与响应(Endpoint Detection and Response, EDR)
用户和实体行为分析(User and Entity Behavior Analytics, UEBA)
1.4.2如何降低安全运营成本
安全的本质在于对抗以及攻防投入产出比的平衡。
攻击容器的代价较高,而收益较小;但对第三方软件库、项目依赖的镜像“投毒”的持久化代价较小,而其收益远高于攻击容器。
Shift Left(安全左移):将软件的生命周期从左到右展开,即开发、测试、集成、部署、运行阶段,安全左移的含义就是将安全防护从传统运行时运营转向开发侧(从重视运行时安全转向先从开发侧解决最基本和最容易的问题)
1.4.3 DevSecOps
容器技术天然具有的隔离性、运行时环境一致性、镜像仓库等特性直接推动了DevOps的落地。
1.4.4如何实现安全的云原生化
(1)安全架构具备编排能力;(2)容器和宿主机安全:安全特权容器;(3)业务安全:Sidercar安全容器;
1.5云原生安全现状
1.5.1云原生新范式:Docker+Kubernetes
pf-2021-container-security-and-usage-report
镜像安全、配置规范和运行时安全越来越多的受到容器使用者的关注。
1.5.2镜像安全问题仍然很突出
Docker Hub上的镜像安全并不理想,有大量的官方镜像存在高危漏洞。
1.5.3安全配置规范执行和密钥凭证管理不理想
2 云原生技术
2.1容器技术
2.1.1容器与虚拟化
容器技术在操作系统层面实现了对计算机系统资源的虚拟化,在操作系统中,通过对CPU、内存和文件系统等资源的隔离、划分和控制,实现进程之间透明的资源使用。
2.1.2容器镜像
容器镜像不是一个文件,是分层存储的文件系统。
2.1.3容器存储
-
镜像元数据
-
存储驱动
-
数据卷
2.1.4容器网络
目前容器网络可以简单分为主机网络和集群网络,其中主机网络以Docker为例主要分为None网络模式、Bridge网络模式、Host网络模式和Container网络模式。集群网络以Kubernetes为例,Pod作为Kubernetes应用运行的基本单元,每个Pod中包含一个或多个相关的容器,这些容器都会运行在同一个主机中,并且共享相同的网络命名空间和相同的Linux协议栈。集群网络基于Pod主要涉及以下三种通信:同一个Pod内,容器和容器之间的通信;同一个主机内不同Pod之间的通信;跨主机Pod之间的通信。
2.1.5容器运行时
容器运行时负责管理容器运行的整个生命周期,包括但不限于指定容器镜像格式、构建镜像、上传和拉取镜像、管理镜像、管理容器实例、运行容器等。
https://github.com/opencontainers
https://github.com/opencontainers/runtime-spec
https://github.com/opencontainers/image-spec
https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/
2.2容器编排
当前关注度和使用率比较高的几种容器编排平台主要包括Kubernetes、Apache Mesos、Docker Swarm
OpenShift、Rancher等,Kubernetes在容器编排领域占据较大优势。
2.3微服务
Martin Fowler对微服务概念的定义如下:微服务就是将一个完整应用中所有的模块拆分成多个不同的服务,其中每个服务都可以独立部署、维护和扩展,服务之间通常通过 RESTful API 通信,这些服务围绕业务能力构建,且每个服务均可使用不同的编程语言和不同的数据存储技术。
2.4服务网格(Service Mesh)
服务网格通常通过一组轻量级网络代理实现,这些代理与应用程序一起部署,而无须感知应用程序本身。
2.5 Serverless
Goals:业务逻辑实现与基础设施分离
Serverless 可在不考虑服务器的情况下构建并允许应用程序和服务,它使开发者避免了基础设施管理,如集群配置、漏洞修补、系统维护等。
Serverless通常可分为两种实现方式,即BaaS(Backend as a Service, 后端即服务)和FaaS(Function as a Service, 函数即服务),其中FaaS是Serverless的主要实现方式。
2.6 DevOps
作者认为 DevOps 成为云原生基础不可或缺的一环,究其根本原因,有以下几点,
-
云原生提供DevOps基础设施
-
微服务架构加速DevOps的应用
-
DevOps赋能服务网格
-
DevOps加速Serverless应用迁移
References
https://blog.container-solutions.com/linux-capabilities-in-practice
https://www.cnblogs.com/sparkdev/p/8359028.html
https://kubernetes.io/zh/docs/tutorials/clusters/seccomp/
https://en.wikipedia.org/wiki/Seccomp
https://man7.org/linux/man-pages/
https://github.com/cloud-hypervisor/cloud-hypervisor#1-what-is-cloud-hypervisor