云计算一经走向市场,就迅速呈现出强大的生命力。随着大数据时代的到来,云计算成为大数据的承载平台,“云计算 大数据 人工智能”成为新基建的核心。云计算也因大数据、人工智能的不断发展而成为信息技术应用的一个重要支柱,在较长时间内占据信息技术的应用舞台。
众所周知,云计算架构通常分为三层,即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),反映了云计算平台是在基础设施、平台及软件服务三个层面进行云化。因此,在早期人们常常利用开源或商业的IaaS系统构建云计算平台,简单地将传统物理主机、平台或应用转为虚拟化形态,以便达到整体资源利用更合理、集约式运营降低成本、提升整体水平的目的。随着云计算应用的普及,更多的用户使用云计算资源并非图其算力,往往仅仅是图个方便而已,就好比让硬件设备随用随弃一样,这也充分体现了云计算平台的弹性与分布式架构的特色。既然应用上云成为必然的趋势,如何将本地部署的传统应用更好地搬上可以云化的云计算平台,让业务更好地与云计算平台相融合,就成为需要着重关注的问题。
在实践中,本地部署的传统应用面临着停机更新、无法动态扩展、绑定网络资源(如IP、端口)及系统环境、需要人工部署及运维等方面的限制。如果仅仅是简单地将本地部署的应用迁移到云计算平台上,则很难发挥出云计算平台的优势。因此,充分利用云计算弹性、敏捷、资源池和服务化等特性,以解决业务在开发、运行整个生命周期中遇到的问题成为当务之急。为此,企业界率先提出了在云上设计应用程序的理念,使应用程序得以在云中以最佳的模式运行,以便充分发挥出云计算平台的弹性及分布式架构优势,这就是云原生(Cloud Native)架构。云原生计算基金会(CNCF)对云原生给出的解释是:“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。”云原生技术正在深刻改变企业上云的模式和新基建所独有的各类特性,也对云安全的后续发展产生深远影响。
安全是一个伴生技术,新技术必然会伴生新的安全问题。云原生出现后,云原生安全问题自然随之而来,并表现为“面向云原生环境的安全问题”和“具有云原生特征的安全问题”。本书作者强调了这样的观点:“容器不是轻量级的虚拟化,容器安全不是轻量级的虚拟化安全;虚拟化安全关注的是资源,云原生安全关注的是应用;安全左移是云原生安全的必经之路。”所谓安全左移,本质上是美国国防体系在21世纪初所提出的“软件确保”(Software Assurance)理念在云计算平台上的落地。我在21世纪初也在提倡“举起软件确保大旗,固本清源,将信息安全向源头推进”的理念,这在当下有一个时髦的词——内生安全,其核心是在软件开发阶段就需要注入安全的理念,不仅要确保软件的所有功能都是可预期的,还要努力做到不存在“可被利用的”漏洞。
这里我们介绍一本新书:《云原生安全:攻防实践与体系构建》,它从云原生技术的风险分析入手,介绍了云原生安全防护思路和体系以及云原生的可观测性,并重点介绍了容器基础设施安全、容器编排平台安全与云原生应用安全。本书的作者长期从事网络安全方面的工程实践工作,尤其是云计算安全和网络安全的前沿研究和产品孵化,因此本书也给出了很好的云原生安全实践的内容。本书内容翔实,注重实践,对从事云原生工作的科技工作者与相关研究人员都具有很高的参考价值。
7大核心内容
NO.1 云原生技术的风险解析
容器基础设施、编排平台、云原生应用的各类风险与真实案例分析
NO.2 云原生的防护思路转换
安全左移、聚焦变化中的不变、关注贴近价值的业务
NO.3 云原生的可观测性
可见才可防:日志、审计、监控与追踪
NO.4 容器基础设施安全
资源安全:Linux内核安全、容器安全加固、行为异常检测
NO.5 容器编排平台安全
平台与网络安全:Kubernetes安全加固、云原生网络安全
NO.6 云原生应用安全
零信任架构、API安全、微服务架构的应用安全、业务与无服务安全
NO.7 各类云化设施安全
5G安全、边缘计算安全、工业物联网安全
内容简介
本书面向实战攻防,分析了云原生体系每层的安全风险与威胁,并根据各类攻击场景,有针对性地设计了面向云原生架构的安全防护体系。
针对每种攻击场景,设计了相应的应对手段,在容器、编排和服务三个层面介绍了相应的安全防护机制,并将云原生的安全能力扩展到了5G、边缘计算等新型基础设施场景。
全书一共七部分24章,具体内容如下:
- 第一部分简要介绍了云原生安全的背景,以及云原生的相关技术;
- 第二部分系统性地分析了云原生各层所面临的安全风险,以及若干典型的安全事件;
- 第三部分介绍了云原生时代的安全防护思路和云原生安全体系;
- 第四部分详细介绍了云原生的可观测性概念和各个组件;
- 第五部分介绍了容器基础设施层面的安全,包括容器系统内在安全、安全加固和异常检测;
- 第六部分介绍了容器编排平台安全,包括编排系统安全加固和编排网络安全;
- 第七部分介绍了云原生应用安全,包括零信任、API安全、微服务、无服务和应用业务安全。
目录
序
前言
第一部分 云原生安全概述
第1章 云原生安全 2
1.1 云原生:云计算下半场 2
1.2 什么是云原生安全 4
1.2.1 面向云原生环境的安全 4
1.2.2 具有云原生特征的安全 5
1.2.3 原生安全:融合的云原生安全 5
1.3 面向云原生环境的安全体系 7
1.3.1 容器安全 7
1.3.2 编排系统安全 8
1.3.3 云原生应用安全 9
1.4 云原生安全的关键问题 9
1.4.1 如何防护短生命周期的容器 9
1.4.2 如何降低安全运营成本 10
1.4.3DevSecOps 11
1.4.4 如何实现安全的云原生化 12
1.5 云原生安全现状 13
1.5.1 云原生新范式:Docker Kubernetes 13
1.5.2 镜像安全问题仍然很突出 14
1.5.3 安全配置规范执行和密钥凭证管理不理想 15
1.5.4 运行时安全关注度上升,但依然很难 17
1.5.5 合规性要求依然迫切,但业界苦于无规可循 18
1.6 本章小结 19
第2章 云原生技术 20
2.1 容器技术 20
2.1.1 容器与虚拟化 20
2.1.2 容器镜像 20
2.1.3 容器存储 21
2.1.4 容器网络 22
2.1.5 容器运行时 22
2.2 容器编排 23
2.3 微服务 23
2.4 服务网格 24
2.5Serverless 25
2.6DevOps 26
2.7 本章小结 27
第二部分 云原生技术的风险分析
第3章 容器基础设施的风险分析 30
3.1 容器基础设施面临的风险 30
3.1.1 容器镜像存在的风险 31
3.1.2 活动容器存在的风险 32
3.1.3 容器网络存在的风险 33
3.1.4 容器管理程序接口存在的风险 33
3.1.5 宿主机操作系统存在的风险 34
3.1.6 无法根治的软件漏洞 34
3.2 针对容器化开发测试过程的攻击案例 34
3.2.1 背景知识 35
3.2.2CVE-2018-15664:符号链接替换漏洞 35
3.2.3CVE-2019-14271:加载不受信任的动态链接库 39
3.3 针对容器软件供应链的攻击案例 43
3.3.1 镜像漏洞利用 44
3.3.2 镜像投毒 45
3.4 针对运行时容器的攻击案例 48
3.4.1 容器逃逸 48
3.4.2 安全容器逃逸 58
3.4.3 资源耗尽型攻击 73
3.5 本章小结 79
第4章 容器编排平台的风险分析 80
4.1 容器编排平台面临的风险 80
4.1.1 容器基础设施存在的风险 81
4.1.2Kubernetes组件接口存在的风险 82
4.1.3 集群网络存在的风险 84
4.1.4 访问控制机制存在的风险 84
4.1.5 无法根治的软件漏洞 85
4.2 针对Kubernetes组件不安全配置的攻击案例 85
4.2.1Kubernetes API Server未授权访问 85
4.2.2Kubernetes Dashboard未授权访问 86
4.2.3Kubelet未授权访问 87
4.3 针对Kubernetes权限提升的攻击案例 88
4.3.1 背景知识 88
4.3.2 漏洞分析 90
4.3.3 漏洞复现 94
4.3.4 漏洞修复 101
4.4 针对Kubernetes的拒绝服务攻击案例 102
4.4.1CVE-2019-11253:YAML炸弹 102
4.4.2CVE-2019-9512/9514:HTTP/2协议实现存在问题 105
4.5 针对Kubernetes网络的中间人攻击案例 110
4.5.1 背景知识 112
4.5.2 原理描述 115
4.5.3 场景复现 117
4.5.4 防御策略 123
4.6 本章小结 124
第5章 云原生应用的风险分析 125
5.1 云原生应用风险概述 125
5.2 传统应用的风险分析 125
5.3 云原生应用的新风险分析 126
5.3.1 数据泄露的风险 126
5.3.2 未授权访问的风险 128
5.3.3 拒绝服务的风险 129
5.4 云原生应用业务的新风险分析 130
5.4.1 未授权访问的风险 130
5.4.2API滥用的风险 131
5.5Serverless的风险分析 131
5.5.1Serverless特征带来的风险 131
5.5.2Serverless应用风险 132
5.5.3Serverless平台风险 132
5.5.4Serverless被滥用的风险 154
5.6 本章小结 155
第6章 典型云原生安全事件 156
6.1 特斯拉Kubernetes挖矿事件 156
6.1.1 事件分析 156
6.1.2 总结与思考 158
6.2 微软监测到大规模Kubernetes挖矿事件 160
6.2.1 事件分析 160
6.2.2 总结与思考 162
6.3Graboid蠕虫挖矿传播事件 164
6.3.1 事件分析 164
6.3.2 总结与思考 166
6.4 本章小结 167
第三部分 云原生安全防护思路和体系
第7章 云原生防护思路转变 170
7.1 变化:容器生命周期 170
7.2 安全左移 171
7.3 聚焦不变 171
7.4 关注业务 173
7.5 本章小结 174
第8章 云原生安全体系 175
8.1 体系框架 175
8.2 安全组件简介 176
第9章 左移的安全机制 178
9.1 开发安全 178
9.2 软件供应链安全 178
9.3 容器镜像安全 179
9.3.1 容器镜像安全现状 179
9.3.2 容器镜像安全防护 180
9.4 本章小结 182
第四部分 云原生可观测性
第10章 可观测性概述 184
10.1 为什么需要实现云原生可观测性 184
10.2 需要观测什么 185
10.3 实现手段 186
10.4 本章小结 187
第11章 日志审计 188
11.1 日志审计的需求与挑战 188
11.1.1 需求分析 188
11.1.2 面临的挑战 189
11.2Docker日志审计 189
11.3Kubernetes日志审计 192
11.3.1 应用程序日志 192
11.3.2 系统组件日志 193
11.3.3 日志工具 194
11.4 本章小结 195
第12章 监控 196
12.1 云原生架构的监控挑战 196
12.2 监控指标 197
12.3 监控工具 198
12.3.1cAdvisor和Heapster 199
12.3.2Prometheus 199
12.4 本章小结 200
第13章 追踪 201
13.1 动态追踪 201
13.2eBPF 203
13.2.1eBPF原理与架构 204
13.2.2eBPF验证器 206
13.2.3eBPF程序类型 207
13.2.4eBPF工具 208
13.2.5 小结 210
13.3 基于BPFTrace实现动态追踪 211
13.3.1 探针类型 212
13.3.2 如何使用BPFTrace进行追踪 214
13.4 微服务追踪 219
13.4.1 微服务追踪概述 219
13.4.2 分布式追踪 220
13.4.3 微服务追踪实现示例 220
13.5 本章小结 222
第五部分 容器基础设施安全
第14章 Linux内核安全机制 224
14.1 隔离与资源管理技术 224
14.1.1 内核命名空间 224
14.1.2 控制组 224
14.2 内核安全机制 225
14.2.1Capabilities 225
14.2.2Seccomp 225
14.2.3AppArmor 226
14.2.4SELinux 226
14.3 本章小结 227
第15章 容器安全加固 228
15.1 概述 228
15.2 容器安全配置 228
15.3 本章小结 229
第16章 容器环境的行为异常检测 230
16.1 基于规则的已知威胁检测 230
16.1.1 检测系统设计 231
16.1.2 基于规则的检测实战:CVE-2019-5736 232
16.1.3 小结 234
16.2 基于行为模型的未知威胁检测 234
16.2.1 检测系统架构 235
16.2.2 学习与检测流程 237
16.2.3 基线设计 238
16.2.4 小结 240
16.3 本章小结 240
第六部分 容器编排平台安全
第17章 Kubernetes安全加固 242
17.1API Server认证 242
17.1.1 静态令牌文件 242
17.1.2X.509 客户端证书 243
17.1.3 服务账号令牌 243
17.1.4OpenID Connect令牌 245
17.1.5 身份认证代理 246
17.1.6Webhook令牌身份认证 247
17.1.7 小结 248
17.2API Server授权 249
17.3 准入控制器 252
17.4Secret对象 256
17.5 网络策略 257
17.6 本章小结 259
第18章 云原生网络安全 260
18.1 云原生网络架构 260
18.1.1 基于端口映射的容器主机网络 260
18.1.2 基于CNI的Kubernetes集群网络 260
18.1.3 服务网格 261
18.2 基于零信任的云原生网络微隔离 261
18.2.1 什么是微隔离 262
18.2.2 云原生为什么需要微隔离 262
18.2.3 云原生网络的微隔离实现技术 263
18.2.4 云原生网络入侵检测 265
18.3 基于Cilium的网络安全方案示例 266
18.3.1Cilium架构 266
18.3.2Cilium组网模式 268
18.3.3Cilium在Overlay组网下的通信示例 268
18.3.4API感知的安全性 272
18.4 本章小结 277
第七部分 云原生应用安全
第19章 面向云原生应用的零信任安全 280
19.1 什么是信任 280
19.2 真的有零信任吗 282
19.3 零信任的技术路线 282
19.4 云化基础设施与零信任 284
19.5 云原生环境零信任架构 286
19.6 本章小结 287
第20章 传统应用安全 289
20.1 应用程序代码漏洞缓解 289
20.1.1 安全编码 290
20.1.2 使用代码检测工具 290
20.2 应用程序依赖库漏洞防护 290
20.2.1 使用受信任的源 290
20.2.2 使用软件组成分析工具 290
20.3 应用程序访问控制 291
20.4 应用程序数据安全防护 291
20.4.1 安全编码 291
20.4.2 使用密钥管理系统 292
20.4.3 使用安全协议 292
20.5 本章小结 292
第21章 API安全 293
21.1 传统API防护 293
21.2API脆弱性检测 293
21.3 云原生API网关 294
21.4 本章小结 295
第22章 微服务架构下的应用安全 296
22.1 认证服务 297
22.1.1 基于JWT的认证 297
22.1.2 基于Istio的认证 298
22.2 访问控制 306
22.2.1 基于角色的访问控制 306
22.2.2 基于Istio的访问控制 306
22.3 数据安全 310
22.4 其他防护机制 310
22.4.1Istio和API网关协同的全面防护 311
22.4.2Istio与WAF结合的深度防护 312
22.5 本章小结 314
第23章 云原生应用业务和Serverless安全 315
23.1 云原生应用业务安全 315
23.2Serverless应用安全防护 316
23.3Serverless平台安全防护 317
23.3.1 使用云厂商提供的存储最佳实践 318
23.3.2 使用云厂商的监控资源 318
23.3.3 使用云厂商的账单告警机制 318
23.4Serverless被滥用的防护措施 318
23.5 其他防护机制 319
23.5.1Serverless资产业务梳理 319
23.5.2 定期清理非必要的Serverless实例 319
23.5.3 限制函数策略 319
23.6 本章小结 319
第24章 云原生应用场景安全 320
24.15G安全 320
24.2 边缘计算安全 323
24.3 工业互联网安全 327
24.4 本章小结 327
后记 云原生安全实践与未来展望 328
参考文献 331