(1)一线安全大厂的资深研究员们多年云原生安全的攻防经验总结与安全体系设计,得到了业界诸多云安全领域专家的大力推荐。
(2)攻防驱动安全,大量云原生攻防实例与相应的安全实践,帮助读者快速进入云安全的下半场。
本书介绍了云原生的容器基础设施、K8S编排系统和常见云原生应用体系;在介绍安全体系前先深入分析了前述架构各个层面的安全风险,并给出攻击实践,后续计划开放靶场环境,有很好的可操作性和说服力;在介绍安全体系时,首先从高层分析新型基础设施防护的思路切换,然后分为两个维度介绍相关的安全机制,清晰地拆解了复杂的安全技术栈,让读者很容易理解DevOps安全和云原生安全两者如何融合。
序 前言 第一部分 云原生安全概述 第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.3 DevSecOps 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.5 Serverless 25 2.6 DevOps 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.2 CVE-2018-15664:符号链接替换漏洞 35 3.2.3 CVE-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.2 Kubernetes组件接口存在的风险 82 4.1.3 集群网络存在的风险 84 4.1.4 访问控制机制存在的风险 84 4.1.5 无法根治的软件漏洞 85 4.2 针对Kubernetes组件不安全配置的攻击案例 85 4.2.1 Kubernetes API Server未授权访问 85 4.2.2 Kubernetes Dashboard未授权访问 86 4.2.3 Kubelet未授权访问 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.1 CVE-2019-11253:YAML炸弹 102 4.4.2 CVE-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.2 API滥用的风险 131 5.5 Serverless的风险分析 131 5.5.1 Serverless特征带来的风险 131 5.5.2 Serverless应用风险 132 5.5.3 Serverless平台风险 132 5.5.4 Serverless被滥用的风险 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.3 Graboid蠕虫挖矿传播事件 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.2 Docker日志审计 189 11.3 Kubernetes日志审计 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.1 cAdvisor和Heapster 199 12.3.2 Prometheus 199 12.4 本章小结 200 第13章 追踪 201 13.1 动态追踪 201 13.2 eBPF 203 13.2.1 eBPF原理与架构 204 13.2.2 eBPF验证器 206 13.2.3 eBPF程序类型 207 13.2.4 eBPF工具 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.1 Capabilities 225 14.2.2 Seccomp 225 14.2.3 AppArmor 226 14.2.4 SELinux 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.1 API Server认证 242 17.1.1 静态令牌文件 242 17.1.2 X.509 客户端证书 243 17.1.3 服务账号令牌 243 17.1.4 OpenID Connect令牌 245 17.1.5 身份认证代理 246 17.1.6 Webhook令牌身份认证 247 17.1.7 小结 248 17.2 API Server授权 249 17.3 准入控制器 252 17.4 Secret对象 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.1 Cilium架构 266 18.3.2 Cilium组网模式 268 18.3.3 Cilium在Overlay组网下的通信示例 268 18.3.4 API感知的安全性 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.2 API脆弱性检测 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.1 Istio和API网关协同的全面防护 311 22.4.2 I
近十年云计算技术处于高速发展的过程中,借助开源项目和社区的力量,很多项目更新和迭代非常快。如知名的开源IaaS组织方OpenStack基金会改名为OpenInfra,目标是将云计算系统从IaaS扩展到容器、编排等层面,除了通用云计算外,还覆盖如边缘计算、5G和物联网等场景;而Google发起的Kubernetes已经在众多云原生项目中脱颖而出,成为事实上的编排标准,最终可能统一云原生体系。虚拟化技术、容器技术和编排技术最后很可能会融合成一套标准云计算框架,在各个行业出现最佳实践。 与此同时,安全技术也在快速演进。2013年左右出现了高级持续威胁,攻击者利用各种复杂的手段不断突破防守方的边界,此起彼伏的失陷事件让疲于奔命的安全团队沮丧。而近几年,安全厂商研制了利用虚拟化技术的蜜罐、沙箱和网络空间靶场等机制,让防守方转被动挨打为主动反制和常态化对抗,让我们看到了最终获胜的曙光。 笔者团队为绿盟科技星云实验室,一直从事云计算安全和网络安全前沿的研究和产品孵化,希望通过本书能将工作中的得失与广大读者分享。 在2015年之前,随着虚拟化技术的成熟,以SDN和NFV为支撑技术的设施虚拟化IaaS成为主流。笔者在2016年出版了《软件定义安全:SDN/NFV新型网络的安全揭秘》,这本书详细介绍了新型网络中的安全风险和威胁,并进一步提出了软件定义的安全体系。事实上,这个体系在绿盟科技的云计算安全解决方案,以及其他安全解决方案中得到了应用。 而从2016年开始,整个行业因为开发运营一体化(DevOps)和新型基础设施的快速推进,以容器、编排和微服务为代表的云原生技术变得流行。从技术上看,虽然容器技术也是一种虚拟化形态,但对应的防护思路和安全体系截然不同。笔者认为有必要详细阐述和解析云原生技术栈,并分析其中存在的脆弱性和威胁,让初探云原生安全的读者少走错路、弯路,在最短时间内聚焦关键技术问题,构建适合自己的云原生安全体系。笔者团队分别于2018年和2020年发布了《容器安全技术报告》[1]和《云原生安全技术报告》[2],但限于篇幅,很多细节无法展开,本书首次较为详细地展示了一些技术上的思考和细节,读者可按照书中的介绍进行验证,从而得到更深刻的理解。 需要说明的是,云原生社区非常活跃,各类技术层出不穷,也许当你阅读本书时,书中具体的软件版本、命令参数已经不适用,但云原生安全的本质和防护思路是不会变的。当然,如果遇到任何问题,也欢迎你联系笔者团队。 本书实践部分涉及的源代码位于随书附带的GitHub仓库,我们也在仓库中提供了丰富的补充阅读资料,以供大家进一步了解。仓库地址为https://github.com/brant-ruan/cloud-native-security-book。 关于书中涉及的云原生环境、云原生攻防工具,我们也有开源的计划,请关注微信公众号“绿盟科技研究通讯”。各位有志于从事云原生安全的读者,或许可以从中获益。如有兴趣,欢迎贡献你的代码,为云原生安全添砖加瓦。 最后,本书难免有疏漏,敬请读者批评指正。 刘文懋