安全与隔离:权限模型、沙箱谱系与侧信道
操作系统的安全机制是一条从粗到细的谱系:自主访问控制(rwx/ACL)→ 强制访问控制(SELinux)→ 系统调用级沙箱(seccomp/BPF、namespace)→ 硬件级隔离(IOMMU、安全世界),而侧信道攻击(Spectre/Meltdown)证明:任何依赖"时序不可观测"假设的边界都可能被微架构穿透。
一句话定义
操作系统的安全机制是一条从粗到细的谱系:自主访问控制(rwx/ACL)→ 强制访问控制(SELinux)→ 系统调用级沙箱(seccomp/BPF、namespace)→ 硬件级隔离(IOMMU、安全世界),而侧信道攻击(Spectre/Meltdown)证明:任何依赖"时序不可观测"假设的边界都可能被微架构穿透。
为什么重要
最小权限原则是系统设计的元规则,沙箱是现代软件分发的底线(浏览器多进程、手机 App 沙箱、CI 的容器隔离)。Meltdown/Spectre 则是分水岭事件:它们宣告性能优化的微架构状态本身成了泄露源,此后"性能与安全的权衡"成为每个内核提交都要回答的问题。
前置知识
kp-020(权限位与 ASLR);kp-003(系统调用边界)。
核心概念
- DAC(自主访问控制):属主自定 rwx 权限,传统 UNIX 模型;粒度粗、易配置错。
- ACL 与能力(capabilities):更细的授权列表;Linux capabilities 把 root 的全能拆成 CAP_NET_ADMIN 等细粒度位。
- MAC(强制访问控制):SELinux/AppArmor 由系统策略强制,应用无权放宽。
- 沙箱谱系:chroot(文件视图)→ namespace(系统视图)→ seccomp-BPF(syscall 过滤)→ Landlock/eBPF LSM(细粒度 hooks)→ 硬件隔离(IOMMU、ARM TrustZone、TEE)。
- 侧信道(side channel):通过时间、缓存、功耗等物理可观测量推断秘密,而非攻破逻辑边界。
- 推测执行攻击:Spectre 诱骗分支预测器越界加载、Meltdown 利用权限检查的延迟窗口,再经缓存时序把"被禁止读取的数据"侧漏出来。
原理与机制
Meltdown 的时序窗口示意:
1. 用户态指令发起对内核地址的越界读 (本应被权限检查拦截)
2. 乱序CPU: 权限检查未完成前, 后续指令已"推测"执行
3. 推测指令用读到的秘密字节索引一个大数组 -> 对应缓存行被载入
4. 权限检查完成, 越界读回滚, 但 缓存状态不回滚
5. 攻击者逐字节测量 256 个候选行的访问时间, 命中者即秘密
缓解: KPTI(内核页表隔离, 用户态页表中抹去内核映射), 重tpoline(限制推测目标), 常数时间代码
防御矩阵的分层逻辑:缩小攻击面(seccomp 只留 30 个 syscall)→ 限制爆炸半径(namespace/容器、最小 capabilities)→ 纵深(MAC 策略、审计)→ 承认物理层(侧信道缓解、固件更新)。每层都呼应 kp-020 的"加固而非免疫"。
图示
沙箱强度谱系(由弱到强):
chroot < namespace容器 < seccomp+容器 < gVisor(用户态内核) < 微VM(KVM) < 物理隔离
代价谱系与之同向: 启动越慢、性能损耗越大
直观类比
DAC 像宿舍门上自己贴的"请勿进入";MAC 像全楼统一门禁系统,住户自己拆不掉;seccomp 像给访客一张只允许走指定三个房间的通行卡;侧信道攻击则像不上门撬锁、而是站在楼外看每层楼的灯光闪烁节奏来推断保险箱密码——门锁再好,灯光(微架构状态)泄露了一切。
实例或案例
id && sudo -l # 当前权限与可提升命令
getfacl report.txt # ACL 详情(传统 rwx 之外的细粒度授权)
cat /proc/self/status | grep Cap # 进程 capabilities 位图
grep -r seccomp /proc/self/status # 沙箱状态
cat /sys/devices/system/cpu/vulnerabilities/* # 本机侧信道漏洞与缓解状态
伦理边界:本节知识用于防御与加固设计(配置 seccomp 白名单、解读漏洞公告、评估隔离方案)。复现攻击代码、对他人系统实施未授权测试在多数司法辖区违法,学习实验应在自己的虚拟机内进行。
常见误区
- 认为 root 不可拆分:capabilities 让"能绑 80 端口"与"能改任意文件"解耦,容器内以非 root + 最小 caps 运行已是行业默认。
- 认为沙箱可以事后加装:沙箱边界必须在设计期确定(哪些 syscall、哪些挂载、哪个用户),补丁式沙箱千疮百孔。
- 认为侧信道是理论威胁:Meltdown 影响了近十年的每一颗 x86,云厂商为此付出全行业性的性能税;"旁路"即正门。
与其他知识点的关系
权限位与 ASLR 是 kp-020 的第一道防线;容器的逃逸面分析直接基于 kp-029 的共享内核结构;缓存时序可观测性与 kp-015 的缓存一致性行为同源。
延伸阅读
Meltdown 与 Spectre 两篇 2018 论文;内核文档 Documentation/userspace-api/seccomp_filter.rst;《现代操作系统》安全章。
自测题
- seccomp-BPF 在沙箱体系中的位置与作用?
答:系统调用层过滤器——用 BPF 程序声明进程可用的 syscall 白名单,越界调用直接终止进程,是最小权限在 syscall 边界的落点。
- Meltdown 与 Spectre 的关键差别?
答:Meltdown 利用权限检查与数据加载的时序窗口直接读内核内存(已被 KPTI 基本缓解);Spectre 诱骗受害程序自身泄露其数据,依赖分支预测训练,更普遍也更难根除。
- 为什么侧信道攻击绕过了传统访问控制?
答:它不突破"禁止读取"的逻辑边界,而是通过共享微架构资源(缓存)的可测量时序间接推断数据,访问控制模型默认时序不可观测的假设被打破。