El IOMMU no se protegerá contra eso a menos que se combine con el arranque medido. Mientras que un IOMMU protegerá de DMA rogue, eso solo se aplica después de que se haya inicializado. En particular, dado que sería necesario habilitar el arranque medido, se requiere un TPM. Hay dos tipos de arranque medido, llamados SRTM y DRTM . La primera mide el firmware una vez mientras el sistema se está iniciando, mientras que la última mide una parte del software en tiempo de ejecución. Para proteger de un ataque inicial de DMA , es Es necesario utilizar DRTM, en lugar de solo SRTM, para la medición. Esto generalmente requiere configuración manual.
IOMMU es vulnerable durante el inicio temprano porque las tablas de configuración de IOMMU (DMAR) se inicializan en una región de la memoria que no está protegida. Durante el breve período entre la carga de la configuración y la habilitación de IOMMU, un dispositivo malintencionado podría modificarlos, anulando la protección que se supone debe proporcionar. Esto se explica en un documento de investigación sobre omitiendo las protecciones de IOMMU .
Esto es solo un riesgo si inicia el sistema con una tarjeta PCIe maliciosa o comprometida ya instalada. Si uno está conectado mientras el sistema está encendido, o si una tarjeta existente está comprometida (por ejemplo, a través de JTAG) mientras el sistema está encendido, una IOMMU correctamente configurada debería ser suficiente para evitar que el dispositivo emita solicitudes DMA maliciosas. Esto requiere tablas funcionales Reasignación de DMA , o DMAR, que es una tabla ACPI incluida con el BIOS. Si el DMAR no funciona, como suele ocurrir con ciertas computadoras portátiles, es posible que el sistema no se inicie correctamente con la IOMMU habilitada a través de intel_iommu=on
o amd_iommu=on
.