Атака Foreshadow пользуется тем, что при доступе к памяти по виртуальному адресу, приводящему к исключению (terminal page fault), процессор спекулятивно рассчитывает физический адрес и загружает данные, если они имеются в L1-кэше. Спекулятивное обращение выполняется до завершения перебора таблицы страниц памяти и независимо от состояния записи в таблице страниц памяти (PTE), т.е. до проверки наличия данных в физической памяти и их доступности для чтения. После завершения проверки доступности памяти, в случае отсутствия флага Present в PTE операция отбрасывается, но данные оседают в кэше и их можно извлечь при помощи методов определения содержимого кэша по сторонним каналам (через анализ изменения времени доступа к прокэшированным и не прокэшированным данным).
Исследователи показали, что имеющиеся методы защиты от Foreshadow неэффективны и реализованы с неверной трактовкой проблемы. Уязвимость Foreshadow может быть эксплуатирована независимо от применения в ядре механизмов защиты, которые ранее считались достаточными. В итоге исследователями была продемонстрирована возможность совершения атаки Foreshadow в системах с относительно старыми ядрами, в которых включены все имеющиеся режимы защиты от Foreshadow, а также с новыми ядрами, в которых отключена только защита от Spectre-v2 (используется опция ядра Linux nospectre_v2).
Было обнаружено, что эффект упреждающей загрузки не связан с программными инструкциями prefetch или аппаратным эффектом упреждающей загрузки в процессе доступа к памяти, а возникает при спекулятивном разыменовании регистров пространства пользователя в ядре. Подобное неверное толкование причины возникновения уязвимости изначально привело к предположению, что утечка данных в Foreshadow может произойти только через кэш L1, в то время как наличие в ядре определённых отрывков кода (prefetch-гаджетов) может способствовать утечке данных вне L1-кэша, например, в кэш L3.
Выявленная особенность также открывает возможности по созданию новых атак, нацеленных на процессы трансляции виртуальных адресов в физические в изолированных окружениях и определение адресов и данных, сохранённых в регистрах CPU. В качестве демонстраций исследователи показали возможность использования выявленного эффекта для извлечения данных из одного процесса в другой с производительностью около 10 бит в секунду на системе с CPU Intel Core i7-6500U CPU. Также показана возможность утечки содержимого регистров из анклава Intel SGX (на определение 32-разрядного значения, записанного в 64-разрядный регистр ушло 15 минут). Некоторые виды атак оказалось возможным реализовать на JavaScript и WebAssembly, например, удалось определить физический адрес JavaScript-переменной и заполнить 64-разрядные регистры значением, контролируемым атакующим.
Для блокирования атаки Foreshadow через кэш L3 эффективен метод защиты Spectre-BTB (Branch Target Buffer), реализованный в наборе патчей retpoline. Таким образом, исследователи считают необходимым оставление retpoline включённым даже на системах с новыми CPU, в которых уже имеется защита от известных уязвимостей в механизме спекулятивного выполнения инструкций CPU. При этом представители Intel заявили, что не планируют добавлять в процессоры дополнительные меры защиты от Foreshadow и считают достаточным включения защиты от атак Spectre V2 и L1TF (Foreshadow).
Источник: http://www.opennet.ru/opennews/art.shtml?num=53513