加密、完整性与文件系统安全

加密、完整性与文件系统安全

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

  • nodev
  • nosuid
  • noexec
  • ro
  • nosymfollow(按本分支支持)

这些是纵深防御。noexec 不阻止解释器主动读取脚本,也不是内容信任机制。

8. 安全开发

  • 使用 openat2 防路径逃逸;
  • 不跟随不可信 symlink;
  • 校验 ioctl/xattr/fiemap 长度;
  • privileged copy 保留 ACL/xattr/ownership;
  • fs parser 使用类型化 spec;
  • 处理 idmapped mount;
  • 对 image mount 使用只读、nodev、nosuid、noexec 和隔离 namespace;
  • fuzz 测试不可信磁盘镜像解析器。

文章互动

阅读 --

留言

0 条留言

正在加载留言…