3. 租户隔离需求分析:多租户场景定义、隔离边界与安全威胁模型
在构建基于 eBPF 的控制平面之前,必须首先明确“多租户”在系统内核层面的具体含义。不同于传统虚拟化中由 Hypervisor 提供的硬件级隔离,eBPF 场景下的租户隔离发生在内核共享资源之上,其需求分析直接决定了控制平面的分层粒度与通信协议设计。
3.1 多租户场景定义
本课程定义三类典型的多租户部署场景,每一类对 eBPF 程序的加载、执行与观测权限有截然不同的要求:
| 场景编号 | 场景名称 | 租户边界 | eBPF 程序归属 | 典型用例 |
|---|---|---|---|---|
| S1 | 容器级租户 | Kubernetes Pod / 容器 cgroup | 每个 Pod 独立加载 eBPF 程序 | 服务网格 Sidecar、容器网络策略 |
| S2 | 命名空间级租户 | Linux 网络命名空间 (netns) | 共享内核但隔离 eBPF Map | 多租户 CNI 插件、租户级可观测性 |
| S3 | 主机级租户 | 物理主机 / 管理域 | 全局 eBPF 程序,通过身份标签区分 | 安全监控 SaaS、主机入侵检测 |
关键认知: 在 S1 和 S2 场景中,eBPF 程序本身可能由不同租户加载,内核必须防止租户 A 的 eBPF 程序读取或篡改租户 B 的 eBPF Map 数据。这是 eBPF 隔离架构的核心挑战。
3.2 隔离边界三维模型
租户隔离需求可分解为三个正交的资源维度:网络、内存与文件系统。每个维度在 eBPF 上下文中都有独特的攻击面与防护手段。
3.2.1 网络隔离边界
- 数据平面隔离: 确保租户 A 的网络流量不会被 eBPF 程序误导入租户 B 的命名空间。依赖 XDP 与 TC 程序在 hook 点执行源/目的 IP 与 cgroup 校验。
- 控制平面隔离: eBPF Map 中存储的连接跟踪表、负载均衡规则必须按租户 ID 分片。禁止跨租户遍历 Map 条目。
- 观测隔离: 通过 eBPF 的
cgroup_id或namespace_id过滤,确保租户只能看到本租户的套接字事件与网络延迟数据。
3.2.2 内存隔离边界
- eBPF Map 隔离: 每个租户的 eBPF Map 必须绑定唯一的
btf_id与uid。内核通过bpf_map_lookup_elem的权限检查阻止越权访问。 - Per-CPU 数据隔离: 使用
BPF_F_NO_PREALLOC标志时,需防止租户通过内存耗尽攻击影响其他租户的 eBPF 程序执行。 - 栈与辅助函数隔离: eBPF 验证器确保辅助函数(如
bpf_get_current_pid_tgid)返回的数据不会泄露其他租户的进程上下文。
3.2.3 文件系统隔离边界
- BPF 文件系统 (bpffs) 隔离: 挂载点
/sys/fs/bpf下的目录结构必须按租户划分,例如/sys/fs/bpf/tenant-{id}/。使用 mount namespace 实现目录级可见性控制。 - eBPF 程序固定与生命周期: 租户只能 pin/unpin 自己目录下的 eBPF 程序与 Map。内核在
bpf_obj_pin系统调用中检查目录所有权。 - Tracefs 与 Debugfs 访问: 禁止租户直接读取
/sys/kernel/debug/tracing中的原始 trace 事件,必须通过 eBPF 程序经 Map 输出过滤后的数据。
隔离边界总结: 网络隔离防止数据泄露,内存隔离防止数据篡改与 DoS,文件系统隔离防止权限逃逸。三者共同构成 eBPF 租户隔离的“铁三角”。
3.3 安全威胁模型
基于上述隔离边界,我们定义以下安全威胁模型。该模型将作为后续控制平面分层设计的威胁输入。
| 威胁编号 | 威胁名称 | 攻击向量 | 影响维度 | 严重等级 |
|---|---|---|---|---|
| T1 | Map 遍历攻击 | 恶意租户通过 bpf_map_get_next_key 遍历共享 Map |
内存 | 严重 |
| T2 | 套接字劫持 | eBPF 程序修改其他租户的套接字选项或重定向流量 | 网络 | 严重 |
| T3 | bpffs 目录遍历 | 通过符号链接或硬链接访问其他租户的固定 eBPF 对象 | 文件系统 | 高危 |
| T4 | 辅助函数滥用 | 调用 bpf_get_current_comm 等函数获取其他租户进程信息 |
内存 / 观测 | 中危 |
| T5 | 资源耗尽 | 大量加载 eBPF 程序或分配 Map 耗尽内核内存 | 内存 / 全局 | 高危 |
注意: T1 与 T2 是 eBPF 多租户场景中最容易被忽视的威胁。传统容器运行时仅依赖 cgroup 与 namespace,但 eBPF 程序运行在内核上下文,其 Map 访问权限检查必须由 eBPF 验证器与 LSM 程序共同完成。
3.4 威胁模型与隔离边界的映射关系
下图展示了三维隔离边界与主要安全威胁之间的对应关系,以及 eBPF 控制平面需要介入的防御点:
3.5 隔离需求对控制平面的约束
基于上述威胁模型,eBPF 控制平面必须满足以下非功能性需求:
- 强制身份认证: 每个 eBPF 程序加载请求必须携带租户身份令牌,控制平面在
bpf()系统调用路径上通过 LSM 程序校验令牌有效性。 - Map 访问控制列表 (ACL): 每个 eBPF Map 关联一个 ACL,明确允许哪些租户的 eBPF 程序执行
lookup、update、delete操作。 - 资源配额管理: 控制平面维护每个租户的 eBPF 程序数量、Map 大小、指令数上限,超过配额时拒绝加载请求。
- 审计与可追溯: 所有跨租户的 eBPF 程序交互(如 Map 共享)必须记录审计日志,日志包含租户 ID、操作类型、时间戳。
- 最小权限原则: eBPF 程序默认只能访问本租户的 Map 与网络命名空间,跨租户访问必须显式授权。
需求收敛: 上述约束将直接映射到第 4 章“控制平面分层模型”中的 租户管理层 与 策略执行层 的接口设计。没有清晰的隔离需求分析,分层模型将缺乏防御纵深。