No-IOMMU 模式与安全边界
1. 定义
CONFIG_VFIO_NOIOMMU允许无 IOMMU设备复用 VFIO接口,但设备 DMA仍使用主机物理地址,没有内存隔离。
2. 启用
通常还需模块参数允许 unsafe no-IOMMU。使用会 taint kernel,Kconfig明确标记 unsupported。
3. 权限
Core要求高权限,如 CAP_SYS_RAWIO。这只是访问控制,不会让 DMA变安全。
4. 风险
设备或用户程序可:
-读写任意主机 RAM;
-修改内核代码/凭据;
-读取其他进程密钥;
-破坏文件缓存;
-绕过 VM隔离;
-造成不可恢复系统损坏。
5. 不能用于VM安全直通
Kconfig明确说明 no-IOMMU不提供 DMA translation,不能作为安全 VM assignment方案。即便 QEMU能打开接口,也不构成隔离。
6. 适用范围
仅可考虑:
-完全可信、隔离实验机;
-开发原型;
-无 DMA能力设备;
-设备 DMA由外部硬件防火墙限制且经过独立验证。
生产、多租户、联网设备不应启用。
7. 与UIO
No-IOMMU VFIO可能提供更统一 region/IRQ接口,但安全性并不优于未隔离的 UIO DMA。选择接口不能替代威胁模型。
8. RK3588
由于 PCIe root未见 IOMMU映射,启用 no-IOMMU可能看似能让 vfio-pci工作,但这是绕过问题,不是解决问题。
9. 加固
- kernel config关闭 VFIO_NOIOMMU;
-禁止 unsafe module parameter;
-限制/dev/vfio权限;
-模块签名;
-禁用无用 vfio driver;
-审计 driver_override/bind;
-监控 kernel taint。
正在加载留言…