内核安全:LSM、seccomp 与 dm-verity
2026/8/9大约 3 分钟内核Android 14内核安全LSMseccompdm-verity
内核安全:LSM、seccomp 与 dm-verity
上一章看了内核调试。这一章回答:内核如何承担安全(LSM/SELinux、seccomp、 dm-verity),各解决什么问题,与 Android 安全体系怎么衔接?
LSM/SELinux 约束主体访问对象,seccomp 缩小进程可调用的系统调用集合,dm-verity 校验只读 分区块完整性。三者防护对象不同,不能用其中一种替代另外两种。
LSM、seccomp 与 dm-verity 防护对象不同
| 常见误解 | 正确理解 |
|---|---|
| 内核安全就是 SELinux | LSM 框架、seccomp、dm-verity 等共同构成内核安全 |
| seccomp 只给沙箱用 | 系统服务也用它限制系统调用面 |
| dm-verity 只防篡改应用 | 它校验系统分区块,防的是运行期被改 |
核心结论
- LSM 提供内核安全钩子,SELinux 基于它做强制访问控制。
- seccomp 按进程过滤系统调用,减少可利用面。
- dm-verity 校验系统分区哈希,篡改即启动失败或拒载。
- 三者与沙箱、权限共同构成纵深防御。
- 安全排障先分清“策略、系统调用、完整性”三类问题。
内核安全主链
逐步解释:
- 操作:进程请求执行操作或调用。
- LSM:按安全策略判定。
- seccomp:过滤系统调用面。
- 完整性:分区数据校验。
- 结果:任一机制拒绝即拒绝。
三者如何分工
| 机制 | 管什么 | 典型日志/现象 |
|---|---|---|
| LSM/SELinux | 访问控制 | avc denied |
| seccomp | 系统调用 | EPERM / seccomp 日志 |
| dm-verity | 分区完整 | 启动校验失败 |
排障时先判断是哪一类,再进入对应机制。
源码证据
阅读目标:确认内核安全实现。
正文指针:内核 security/(LSM);kernel/seccomp.c;drivers/md/dm-verity.c。
// kernel/seccomp.c(伪代码,行号以 r75 为准)
// 按过滤器限制进程可用的系统调用这段代码证明: seccomp 在内核层过滤系统调用;LSM 与 dm-verity 分别是策略与 完整性机制,共同构成内核安全面。
验证与排障
环境:root 设备或模拟器。
adb shell getenforce
adb shell su 0 dmesg | grep -iE "seccomp|avc"
adb shell su 0 dmesg | grep -iE "verity|dm-"
adb shell su 0 cat /proc/<pid>/status | grep -i seccomp先确认 SELinux 模式,再看 seccomp 与 verity 日志。安全拒绝按“策略、系统调用、 完整性”分类定位。
常见误区
- “内核安全就是 SELinux”:LSM 框架 + seccomp + verity。
- “seccomp 只给沙箱”:系统服务同样使用。
- “dm-verity 防应用篡改”:保护系统分区。
- “安全机制互不相关”:共同构成纵深防御。
延伸问题
- LSM 钩子如何被 Android 扩展?
- seccomp 过滤器如何配置与审计?
- dm-verity 与启动链如何衔接?
- 内核漏洞利用通常绕过哪层,如何防御?
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
内核 security/ | LSM | 安全框架 |
kernel/seccomp.c | 过滤 | 系统调用 |
drivers/md/dm-verity.c | 校验 | 分区完整 |
/proc/<pid>/status | seccomp | 状态 |
公共路径:内核 security/、kernel/ 与 drivers/md/。行号以 r75 检索为准。
需要联合 Framework 证据时,见 系统调试与排障。