Компания AMD опубликовала отчёт с анализом безопасности технологии оптимизации PSF (Predictive Store Forwarding), реализованной в процессорах серии Zen 3. В ходе исследования теоретически подтверждена применимость к технологии PSF метода атаки Spectre-STL (Spectre-v4), выявленного в мае 2018 года, но на практике способных привести к атаке шаблонов кода пока не найдено и общая опасность оценена как незначительная.
Напомним, что атака Spectre-v4 (Speculative Store Bypass) основывается на восстановлении данных, осевших в процессорном кэше после отбрасывания результата спекулятивного выполнения операций при обработке чередующихся операций записи и чтения с использованием косвенной адресации. Когда операция чтения следует за операцией записи (например, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), смещение адреса для чтения уже может быть известно из-за выполнения похожих операций (операции чтения выполняются значительно чаще и чтение может быть выполнено из кэша) и процессор может спекулятивно выполнить чтение раньше записи, не дожидаясь пока будет вычислено смещение косвенной адресации для записи.
Данная особенность позволяет инструкции чтения получить доступ к старому значению по некоторому адресу во время пока операция сохранения ещё не завершена. При ошибке прогнозирования, неудачная спекулятивная операция будет отброшена, но следы её выполнения останутся процессорном кэше и могут быть извлечены одним из способов определения содержимого кэша на основе анализа изменения времени доступа к прокэшированным и не прокэшированным данным.
Технология PSF реализует оптимизацию STLF (Store-To-Load-Forwarding), спекулятивно выполняющую операции чтения на основе предсказания взаимосвязи между операциями чтения и записи. При использовании STLF процессор выполняет операцию “load” с данными, напрямую перенаправленными из прошлой команды “store”, но не дожидаясь фактической записи в память результата, но удостоверившись, что использованные в командах “load” и “store” адреса совпадают. Оптимизация PSF делает проверку адресов спекулятивной и выполняет операцию “load” до завершения вычисления информации об адресах, если до этого была выполнена пара store/load, манипулирующая одним адресом.
Если прогноз оказался не верен, то состояние отказывается.
Атака на PSF осуществима только в рамках привилегий одного уровня, охватывает только текущий контекст процесса и блокируется методами изоляции адресного пространства или аппаратными sandbox-механизмами. При этом программные методы sandbox-изоляции в процессах потенциально могут быть затронуты проблемой. Атака представляет опасность для систем, таких как браузеры, виртуальных машины для выполнения кода и JIT, которые выполняют сторонний код внутри одного процесса (в результате атаки незаслуживающий доверия изолированный код может получить доступ к другим данным процесса).
Компания AMD предоставила ряд методов полного или выборочного отключения PSF, но с учётом незначительного риска для большинства приложений рекомендовала не отключать данную оптимизацию по умолчанию. Для защиты предложена техника отключения PSF через установку MSR-битов “SSBD” и “PSFD”, в том числе для отдельных потоков. Для ядра Linux подготовлены патчи c реализацией опций командной строки “psfd” и “nopsfd”, управляющих включением и выключением PSF.