加密、完整性与文件系统安全
1. fscrypt
fs/crypto/ 为 ext4/f2fs/UBIFS 等提供文件级加密公共层:
- policy 与 context;
- keyring/key specifier;
- filename encryption;
- data bio crypto;
- inline encryption;
- key setup/eviction;
- encrypted symlink。
文件系统负责存储 encryption context 并在 inode/dir 操作中调用 helper。
2. 名称和数据
fscrypt 通常分别派生:
- file content key;
- filename key;
- inode nonce/context。
无 key 时仍可能枚举加密名称的编码形式,但不能透明访问明文。加密不自动隐藏目录结构、大小、时间等所有 metadata。
3. Inline crypto
支持 blk-crypto 的控制器可按 bio 使用硬件 inline encryption。是否启用取决于:
- filesystem policy;
- block device keyslot manager;
- algorithm/data unit size;
- 驱动和硬件;
- fallback 配置。
RK3588 平台必须通过实际内核配置和控制器驱动确认,不能仅凭 SoC 加密模块存在推断。
4. fs-verity
fs/verity/ 为只读文件内容建立 Merkle tree,打开/读页时验证数据:
- enable ioctl 构建 descriptor/tree;
- digest 标识可信内容;
- read path 验证数据块到 root hash;
- 可结合 signature/keyring。
启用后文件内容不可再修改。fs-verity 是完整性,不是保密性。
5. 与 dm-verity 区别
| 机制 | 粒度 |
|---|---|
| fs-verity | 单文件 |
| dm-verity | 整个只读块设备映射 |
| fscrypt | 文件/目录内容加密 |
| dm-crypt | 块设备加密 |
产品可组合,但 key、更新和错误恢复策略不同。
6. VFS 安全钩子
open、permission、create、rename、xattr、mount、ioctl 等路径调用 LSM hooks。文件系统自身权限检查不能绕过 VFS/LSM;stacked/network fs 还要考虑 lower/server 权限。
7. Mount flags
nodevnosuidnoexecronosymfollow(按本分支支持)
这些是纵深防御。noexec 不阻止解释器主动读取脚本,也不是内容信任机制。
8. 安全开发
- 使用
openat2防路径逃逸; - 不跟随不可信 symlink;
- 校验 ioctl/xattr/fiemap 长度;
- privileged copy 保留 ACL/xattr/ownership;
- fs parser 使用类型化 spec;
- 处理 idmapped mount;
- 对 image mount 使用只读、nodev、nosuid、noexec 和隔离 namespace;
- fuzz 测试不可信磁盘镜像解析器。
正在加载留言…