02.02.2023

Уязвимости в механизме MMIO процессоров Intel

Компания Intel раскрыла информацию о новом классе утечек данных через микроархитектурные структуры процессоров, позволяющих через манипуляцию с механизмом MMIO (Memory Mapped Input Output) определить информацию, обрабатываемую на других ядрах CPU. Например, уязвимости позволяют извлекать данные из других процессов, анклавов Intel SGX или виртуальных машин. Уязвимости специфичны только для CPU компании Intel, процессоры других производителей уязвимости не затрагивают.

Уязвимости проявляются в различных CPU Intel, включая процессоры на базе микроархитектур Haswell, Skylake, IceLake, Broadwell, Lakefield, Kabylake, Cometlake и Rocketlake, а также серверные процессоры Xeon EP/EX, Scalable и некоторые Atom. Для совершения атаки требуется доступ к MMIO, который, например, может быть получен в системах виртуализации, предоставляющих возможность обращения к MMIO для гостевых систем, подконтрольных атакующему. Исправление также может потребоваться для систем, использующих изолированные анклавы Intel SGX (Software Guard Extensions).

Для блокирования уязвимости требуется как обновление микрокода, так и применение дополнительных программных методов защиты, основанных на применении инструкции VERW для очистки содержимого микроархитектурных буферов в момент возвращения из ядра в пространство пользователя или при передаче управления гостевой системе. Подобная защита также применяется для блокирования ранее выявленных атак класса MDS (Microarchitectural Data Sampling), SRBDS (Special Register Buffer Data Sampling) и TAA (Transactional Asynchronous Abort).

На стороне микрокода необходимые для реализации защиты изменения предложены в майском обновлении микрокода для CPU Intel (IPU 2022.1). В ядре Linux защита от нового класса атак включена в состав выпусков 5.18.5, 5.15.48, 5.10.123, 5.4.199, 4.19.248, 4.14.284 и 4.9.319. Для проверки подверженности системы уязвимостям в MMIO и оценки активности тех или иных механизмов защиты в ядро Linux добавлен файл «/sys/devices/system/cpu/vulnerabilities/mmio_stale_data». Для управления включением защиты реализован загрузочный параметр ядра «mmio_stale_data», который может принимать значения «full» (включение чистки буферов при переходе в пространство пользователя и в VM), «full,nosmt» (как «full» + дополнительно отключается SMT/Hyper-Threads) и «off» (защита отключена). Отдельные исправления предложены для гипервизора Xen и операционной системы Qubes.

Суть выявленного класса уязвимостей в том, что некоторые операции приводят к копированию или перемещению данных, оставшихся после выполнения на других ядрах CPU, из одного микроархитектурного буфера в другой. Уязвимости в MMIO позволяют перенести эти остаточные данные из изолированных микроархитектурных буферов в видимые приложениям регистры или буферы CPU. Выявлено три метода извлечения остаточных данных через MMIO:

  • DRPW (Device Register Partial Write, CVE-2022-21166) — проблема с некорректной обработкой операций записи в некоторые регистры MMIO. Если размер записываемых данных меньше размера регистра, то в регистр копируется и остаточная информация из буферов заполнения (fill buffer). В итоге, процесс, инициировавший неполную операцию записи в регистр MMIO, может получить данные, оставшиеся в микроархитектурных буферах после операций, выполненных на других ядрах CPU.
  • SBDS (Shared Buffers Data Sampling, CVE-2022-21125) — утечка остаточных данных из привязанного к ядру буфера заполнения, попавших в результате перемещения из общих для всех ядер промежуточных буферов.
  • SBDR (Shared Buffers Data Read, CVE-2022-21123) — проблема походит на SBDS, но отличается тем, что остаточные данные могут попасть в видимые приложениям структуры CPU. Проблемы SBDS и SBDR проявляются только на процессорах для клиентских систем и на серверном семействе Intel Xeon E3.

Источник.