Атака TSA, приводящая к утечке информации из микроархитектурных структур CPU AMD

Компания AMD раскрыла информацию новом классе микроархитектурных атак на свои процессоры – TSA (Transient Scheduler Attack). Атака позволяет злоумышленнику обойти механизмы изоляции CPU и определить данные, обрабатываемые в других контекстах, например, из пространства пользователя определить информацию, обрабатываемую на уровне ядра, или из гостевой системы узнать данные, используемые в другой гостевой системе.

Уязвимости выявлены в ходе разработки инструментария, созданного исследователями из Microsoft и Швейцарской высшей технической школы Цюриха для стресс-тестирования микроархитектурной изоляции между различными зонами разграничений доступа, такими как ядро, виртуальные машины и процессы.

Метод атаки основан на зависимости времени выполнения некоторых инструкций от состояния микроархитекткрных структур. Когда процессор ожидает быстрого завершения инструкции чтения данных из памяти (например, полагая, что данные есть в кэше L1), но не удаётся успешно получить данные, возникает состояние “ложного завершения” инструкции (false completion). При этом процессор ещё до определения этого состояния может запланировать спекулятивное выполнение других операций, зависящих от результата выполнения инструкции загрузки из памяти.

Так как загрузка оказалась не завершена, ассоциированные с ней данные признаются процессором недействительными, а операция загрузки позднее повторяется ещё раз. Зависимые операции также повторно выполняются после готовности корректных данных. При этом сброс конвейера (pipeline flush) после выполнения инструкции, для которой зафиксировано состояние “ложного завершения”, не производится, и некорректные данные могут быть перенаправлены в зависимые операции.

Выполнение подобных операций не меняет состояние кэша и TLB (Translation Lookaside Buffer), т.е. данные не могут быть восстановлены при помощи традиционных методов определения состояния кэша. Но эти данные влияют на время выполнения других инструкций. Анализ времени выполнения может использоваться как источник утечки информации из микроархитектурных структур, оставшейся после спекулятивного выполнения других операций.

В зависимости от источника извлечения остаточных данных выделены две уязвимости:

  • CVE-2024-36350 (TSA-SQ – TSA Store Queue) – утечка из буфера временного хранения операций записи (Store Queue), позволяющая
    определить результат работы инструкций записи в память.
  • CVE-2024-36357 (TSA-L1 – TSA L1 Data Cache) – утечка через кэш L1D.

Уязвимости проявляются в семействе процессоров AMD (Fam19h) на базе микроархитектур Zen 3 и Zen 4. Например, проблема присутствует в сериях CPU AMD Ryzen 5000/6000/7000/8000, AMD EPYC Milan/Milan-X/Genoa/Genoa-X/Bergamo/Siena, AMD Instinct MI300A, AMD Ryzen Threadripper PRO 7000 WX, AMD EPYC Embedded 7003/8004/9004/97X4, AMD Ryzen Embedded 5000/7000/V3000.

Необходимые для блокирования уязвимости изменения включены в состав декабрьского обновления микрокода и PI-прошивок (Platform Initialization), переданных OEM-производителям. Патчи для защиты от уязвимости переданы для включения в состав ядра Linux (для отключения защиты, негативно влияющей на производительность, предусмотрена опция командной строки ядра “tsa=off”). Исправление также добавлено в гипервизор Xen. Для блокирования уязвимости требуется одновременно как обновление микрокода, так и включение режима защиты на уровне ядра или гипервизора.

Release. Ссылка here.