目录
前言 1
目录
第1 章 概述 9
1.1 场景介绍10
1.2 威胁模型12
1.2.1 威胁主体 .13
1.2.2 第一个威胁模型 16
1.3 关于攻击树 19
1.4 攻击树案例 20
1.5 现有的技术 23
1.6 小结 .24
第2 章 pod 资源详情 25
2.1 默认配置25
2.2 威胁模型27
2.3 对攻击的剖析 .28
2.3.1 远程代码执行 28
2.3.2 网络攻击面 29
2.4 Kubernetes 工作负载:pod 中的应用程序 31
2.5 什么是pod ? .33
2.6 了解容器37
2.6.1 共享网络和存储 39
2.6.2 最坏的情况可能会是什么? .40
2.6.3 容器逃逸 .44
2.7 pod 配置和威胁 .47
2.7.1 pod 头部 48
2.7.2 反向正常运行时间 .49
2.7.3 标签 50
2.7.4 托管字段 .50
2.7.5 pod 命名空间和所有者 .51
2.7.6 环境变量 .51
2.7.7 容器镜像 .52
2.7.8 pod 探针 55
2.7.9 CPU 和内存限制和请求 55
2.7.10 DNS .56
2.7.11 pod securityContext .59
2.7.12 pod Sevice Accounts 61
2.7.13 调度器和容忍度 61
2.7.14 pod 卷定义 62
2.7.15 pod 网络状态 63
2.8 正确使用securityContext .63
2.8.1 使用Kubesec 增强securityContext 65
2.8.2 强化的securityContext .66
2.9 进入风暴中心 .72
2.10 小结 72
第3 章 容器运行时隔离 .75
3.1 默认配置76
3.2 威胁模型76
3.3 容器,虚拟机和沙盒 79
3.3.1 虚拟机是如何工作的.81
3.3.2 虚拟化的好处 84
3.3.3 容器有哪些问题? .85
3.3.4 用户命名空间缺陷 .86
3.4 沙盒化(sandboxing) 91
3.4.1 gVisor 94
3.4.2 Firecracker 102
3.4.3 Kata Container 103
3.4.4 rust-vmm 105
3.5 沙盒化的风险 107
3.6 Kubernetes 运行时类 107
3.7 本章小结. 108
第4 章 应用程序和供应链 111
4.1 默认配置. 112
4.2 威胁模型. 112
4.3 供应链 . 113
4.3.1 软件 . 117
4.3.2 扫描CVE . 118
4.3.3 采用开源软件 . 119
4.3.4 我们应该相信哪些生产商? 120
4.4 CNCF 安全技术咨询组 122
4.4.1 架构容器化应用以提高弹性 122
4.4.2 检测木马 123
4.5 攻击供应链 124
4.5.1 攻击的持续性 . 126
4.5.2 系统面临的风险 127
4.6 容器镜像构建供应链 128
4.6.1 软件工厂 128
4.6.2 神圣的镜像工厂 129
4.6.3 基础镜像 130
4.7 容器供应链的状态 . 132
4.7.1 来自第三方代码的风险 . 133
4.7.2 软件材料清单 . 134
4.7.3 人类身份和GPG 136
4.8 对构建和元数据签名 137
4.8.1 Notary v1 137
4.8.2 sigstore 137
4.8.3 in-toto 和TUF 139
4.8.4 GCP 二进制授权 140
4.8.5 Grafeas 140
4.9 基础设施供应链 . 140
4.9.1 Operator 权限 .140
4.9.2 攻击上游供应链 141
4.10 供应链攻击的类型 142
4.10.1 摄取开源代码 144
4.10.2 贯穿SDLC 的应用程序漏洞 146
4.11 防御SUNBURST .147
4.12 小结 150
第5 章 网络 . 151
5.1 默认配置. 152
5.1.1 pod 内网络 154
5.1.2 pod 间通信 155
5.1.3 pod 与工作节点间的流量 . 155
5.1.4 集群外部流量 . 156
5.1.5 ARP 的状态 .157
5.1.6 无securityContext 158
5.1.7 无工作负载身份 159
5.1.8 无网络传输加密 159
5.2 威胁模型. 160
5.3 流量流向控制 161
5.3.1 安装 . 161
5.3.2 网络策略前来救援! 165
5.4 服务网格. 168
5.4.1 概念 . 168
5.4.2 选项和采用 . 168
5.4.3 案例研究:使用Linkerd 的mTLS 170
5.5 eBPF . 173
5.5.1 概念 . 173
5.5.2 选项和采用 . 174
5.5.3 案例研究:将探针附加到Go 程序 . 175
5.6 小结 177
第6 章 存储 . 179
6.1 默认配置. 180
6.2 威胁模型. 180
6.3 卷和数据存储 183
6.3.1 一切皆是字节流 183
6.3.2 何为文件系统? 184
6.3.3 容器中的卷和挂载 186
6.3.4 OverlayFS 186
6.3.5 tmpfs 188
6.3.6 挂载卷打破了容器隔离 . 190
6.3.7 基于/proc/self/exe 的漏洞 193
6.4 静态的敏感信息 . 195
6.4.1 Secret 挂载 195
6.4.2 攻击挂载的Secret 196
6.5 Kubernetes 存储 197
6.5.1 容器存储接口 . 197
6.5.2 投射卷 198
6.5.3 攻击卷 200
6.5.4 主机目录挂载的风险 202
6.5.5 从数据存储中泄露的其他Secret 203
6.6 小结 203
第7 章 硬性多租户 205
7.1 默认配置. 206
7.2 威胁模型. 206
7.3 命名空间资源 207
7.3.1 节点池 208
7.3.2 节点污点 210
7.4 软性多租户 212
7.5 硬性多租户 213
7.5.1 敌对租户 213
7.5.2 沙盒和策略 . 214
7.5.3 公有云多租户 . 215
7.6 控制平面. 216
7.6.1 API server 和etcd .218
7.6.2 调度器和控制器管理器 . 220
7.7 数据平面. 223
7.8 集群隔离架构 225
7.9 集群支持服务和工具环境 . 227
7.10 安全监控和可见性 227
7.11 小结 228
第8 章 策略 . 229
8.1 策略的类型 230
8.2 云服务提供商 230
8.2.1 网络流量 232
8.2.2 限制资源分配 . 232
8.2.3 资源配额 232
8.2.4 运行时策略 . 233
8.2.5 访问控制策略 . 234
8.3 威胁模型. 234
8.4 普遍预期. 235
8.4.1 碎玻璃场景 . 235
8.4.2 审计 . 236
8.5 认证和授权 236
8.5.1 人类用户 238
8.5.2 工作负载身份 . 238
8.6 基于角色的访问控制(RBAC) 242
8.6.1 RBAC 回顾 . 242
8.6.2 一个简单的RBAC 例子 243
8.6.3 创建RBAC . 245
8.6.4 分析和可视化RBAC 248
8.6.5 RBAC 相关的攻击 250
8.7 通用策略引擎 251
8.7.1 开放策略代理(OPA) .251
8.7.2 Kyverno . 258
8.7.3 其他策略方案 . 260
8.8 小结 261
第9 章 入侵检测 . 263
9.1 默认配置. 264
9.2 威胁模型. 264
9.3 传统的IDS 265
9.4 基于eBPF 的IDS 267
9.4.1 Kubernetes 和容器入侵检测 268
9.4.2 Falco 268
9.5 基于机器学习方法的IDS 271
9.6 容器取证. 271
9.7 蜜罐技术. 274
9.8 审计 276
9.9 检测规避. 277
9.10 安全运营中心 279
9.11 小结 279
第10 章 组织 281
10.1 最薄弱的连接点 282
10.2 云服务提供商 284
10.2.1 责任共担 285
10.2.2 账户卫生 286
10.2.3 对人员和资源进行分组 287
10.2.4 其他注意事项 289
10.3 本地环境 290
10.4 常见注意事项 292
10.4.1 威胁模型爆炸 292
10.4.2 SLO 如何给你带来额外的压力 295
10.4.3 社会工程 295
10.4.4 隐私和监管问题 . 298
10.5 小结 298
附录A pod 级攻击 . 299
附录B 资源 315