Подробный гайд по аппаратной защите ПК от DMA-атак с помощью IOMMU

Подробный гайд по аппаратной защите ПК от DMA-атак с помощью IOMMU. Настройка VT-d и AMD-Vi для блокировки доступа к памяти через PCIe и Thunderbolt в BIOS и ОС.

2026.10.03                  


Подробный гайд по аппаратной защите ПК от DMA-атак с помощью IOMMUПодробный гайд по аппаратной защите ПК от DMA-атак с помощью IOMMU

1. Введение: Анатомия DMA-атаки

Direct Memory Access (DMA) — это механизм, позволяющий периферийным устройствам (сетевым картам, GPU, контроллерам Thunderbolt/USB4) читать и писать данные напрямую в оперативную память (RAM), минуя центральный процессор. Это критически важно для производительности.

Суть уязвимости:

Если злоумышленник получает физический доступ к порту с поддержкой DMA (PCIe, Thunderbolt, FireWire, ExpressCard), он может подключить вредоносное устройство (например, на базе FPGA-платы с прошивкой PCILeech).



Атака:

Устройство притворяется легитимным девайсом, получает доступ к шине и начинает сканировать физическую память.

Цель:

Считывание паролей, ключей шифрования (BitLocker, LUKS), инъекция shell-кода в ядро ОС (обход экранов блокировки и антивирусов).


Решение:

Технология IOMMU (Input-Output Memory Management Unit). Она работает по тому же принципу, что и MMU для процессора, но изолирует доступ к памяти для внешних устройств.


2. Как работает IOMMU (Архитектура защиты)

IOMMU перехватывает все DMA-запросы от устройств. Вместо того чтобы видеть реальную физическую память (PA), устройство видит только I/O Virtual Addresses (IOVA).

Ключевые механизмы защиты:

  1. Трансляция адресов (Remapping): IOMMU транслирует запросы устройства. Если устройство пытается обратиться к области памяти, где хранится ядро ОС, IOMMU аппаратно блокирует транзакцию и отправляет ошибку.
  2. Изоляция (IOMMU Groups): Устройства группируются по топологии шины PCIe. ОС может передать контроль над целой группой виртуальной машине (VFIO) или жестко ограничить её права.
  3. Защита от подмены (Interrupt Remapping): Предотвращает инъекцию ложных прерываний (MSI/MSI-X), которые вредоносные устройства используют для эскалации привилегий в системе.

Аппаратные стандарты:

  • Intel: VT-d (Virtualization Technology for Directed I/O)
  • AMD: AMD-Vi (I/O Virtualization Technology)

3. Настройка BIOS/UEFI (Фундамент)

Защита должна быть включена на уровне микрокода материнской платы до загрузки ОС.

  1. Включите Virtualization Technology:
    • Intel: Intel Virtualization Technology (VT-x).
    • AMD: SVM Mode.
  2. Включите сам IOMMU:
    • Intel: Intel VT-d (Virtualization for Directed I/O) -> Enabled.
    • AMD: IOMMU или AMD-Vi -> Enabled.
  3. Настройки Thunderbolt / USB4:
    • Найдите опции Thunderbolt Security, DMA Protection или Pre-boot DMA Protection. Установите их в состояние Enabled (или Security Level 2/3).

Важный нюанс (ACS):

Для корректной изоляции PCIe-устройств за коммутаторами (PCIe Switches) должна поддерживаться технология ACS (Access Control Services). Если в BIOS есть опция PCIe ACS или ACS Enable, её также необходимо активировать. Иначе IOMMU будет воспринимать группу устройств как единое целое, что снижает гранулярность защиты.


4. Реализация защиты в ОС Windows

В современных версиях Windows 10 и 11 защита реализована через функцию Kernel DMA Protection (Защита ядра от DMA), которая автоматически использует IOMMU для блокировки внешних устройств до авторизации пользователя.

Как проверить статус:

  1. Нажмите Win + R, введите msinfo32 и нажмите Enter.
  2. В окне "Сведения о системе" найдите строку "Защита ядра от DMA" (Kernel DMA Protection).

* Включено: IOMMU активен, драйверы внешних шин защищены.
* Не поддерживается / Выключено: Либо отключен VT-d/AMD-Vi в BIOS, либо не поддерживается драйверами, либо система загружена в Legacy-режиме (требуется чистый UEFI).


Дополнительные меры Windows:

* BitLocker:

В современных сборках BitLocker интегрируется с Kernel DMA Protection, чтобы предотвратить атаки Pre-Boot DMA (когда злоумышленник атакует память до того, как ОС успела инициализировать IOMMU).

* Политики доступа к Thunderbolt:

Через gpedit.msc можно настроить запрет на подключение новых устройств Thunderbolt до входа пользователя в систему.


5. Реализация защиты в ОС Linux

В Linux управление IOMMU осуществляется на уровне ядра. Технология также является фундаментом для VFIO (проброса видеокарт и PCIe-устройств в виртуальные машины с полной изоляцией).




Шаг 1: Параметры загрузчика (GRUB)

Откройте файл конфигурации GRUB (обычно /etc/default/grub) и добавьте параметры в строку GRUB_CMDLINE_LINUX_DEFAULT.

Для процессоров Intel:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"

Для процессоров AMD:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on iommu=pt"

(Параметр iommu=pt включает режим Passthrough, который снижает накладные расходы на транслирование адресов для устройств, не требующих изоляции, сохраняя при этом защиту).


После редактирования обновите GRUB:

  • Ubuntu/Debian: sudo update-grub
  • Fedora/RHEL: sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Шаг 2: Проверка работы IOMMU

После перезагрузки проверьте, подхватилось ли ядром IOMMU:

dmesg | grep -i iommu

Вы должны увидеть сообщения вроде DMAR: IOMMU enabled или AMD-Vi: Found IOMMU.


Шаг 3: Анализ IOMMU-групп

Чтобы понять, как аппаратно сгруппированы ваши устройства:

find /sys/kernel/iommu_groups/ -type l

В идеале каждое PCIe-устройство должно находиться в своей собственной группе. Если сетевая карта и контроллер USB "висят" в одной группе, изолировать их друг от друга средствами IOMMU без отключения одного из них не получится (проблема отсутствия ACS на материнской плате).


6. Угроза Pre-Boot DMA и "Слепые зоны"

Самая сложная проблема IOMMU — это временное окно (Pre-Boot).

1. Суть проблемы:

При включении ПК инициализация IOMMU требует времени. До того как BIOS передаст управление загрузчику ОС и тот настроит таблицы DMAR (DMA Remapping Reporting Table), контроллеры памяти открыты. Злоумышленник может успеть внедрить вредоносный код в EFI-раздел или в ранние стадии загрузки ядра.

2. Решение:

  • Pre-Boot DMA Protection: Должна поддерживаться прошивкой UEFI. Она настраивает IOMMU на этапе SEC/PEI (самые ранние стадии инициализации Intel/AMD) до запуска OS.
  • Secure Boot: Обязателен. Он гарантирует, что загружаемое ядро не было подменено на этапе Pre-Boot.
  • Thunderbolt Security Levels (SL): В BIOS должно быть настроено User Authorization (SL1) или Secure Connect (SL2), чтобы порт физически не предоставлял DMA-доступ к шине до разблокировки системы пользователем.

7. Продвинутый уровень: Защита от атак типа Screencap и Rowhammer

Помимо классических DMA-атак через PCIe, IOMMU косвенно помогает в комплексной защите:

  • Изоляция GPU: Пробрасывая дискретную видеокарту в изолированную IOMMU-группу, вы можете запретить её прямой доступ к памяти ядра ОС, используя её исключительно как вычислительный узел или в доверенной среде (Trusted Execution Environment).
  • Защита от DMA через Thunderbolt/USB4: В стандартах USB4 и Thunderbolt 4 используется туннелирование PCIe. Без включенного IOMMU (Kernel DMA Protection) подключение вредоносного кабеля USB-C к выключенному или заблокированному ноутбуку равносильно открытию root-доступа к физической RAM.

Краткий чек-лист безопасности (Summary)

  1. [ ] В BIOS включены VT-d / AMD-Vi.
  2. [ ] В BIOS включена Pre-Boot DMA Protection (если доступно).
  3. [ ] Настроены уровни безопасности Thunderbolt (SL1/SL2).
  4. [ ] В Windows в msinfo32 статус Защиты ядра от DMA = Включено.
  5. [ ] В Linux в параметрах ядра прописан intel_iommu=on / amd_iommu=on.
  6. [ ] Активирован Secure Boot (для предотвращения подмены таблиц DMAR и загрузчика).

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта