SPOILER — новая атака на механизм спекулятивного выполнения CPU Intel

Группа исследователей из Вустерского политехнического института (США) и Любекского университета (Германия) раскрыли детали новой атаки SPOILER на механизм спекулятивного выполнения операций в процессорах. Атака специфична для процессоров Intel и не проявляется в CPU AMD и ARM. Предложенная техника атаки даёт возможность определить отражение виртуальных адресов в физическую память, что позволяет существенно повысить эффективность проведения известных низкоуровневых атак, манипулирующих раскладкой страниц в физической памяти.

По данным исследователей техника SPOILER позволяет в 4096 раз ускорить проведение атаки Prime+Probe для определения содержимого памяти на основе анализа состояния процессорного кэша. Метод также применим для определения размещённых друг за другом страниц памяти, что позволяет повысить до 100% эффективность атаки RowHammer, применяемой для выборочного изменения содержимого памяти других процессов. В том числе отмечается возможность реализации подобных атак из виртуальных машин, например, с использованием выполняемого в браузере JavaScript-кода, несмотря на ранее предпринятые в браузерах меры ограничения точности таймера.

Разработанные для Spectre меры защиты не блокируют атаку SPOILER. Атаки класса Spectre манипулируют спекулятивным выполнением отдельных инструкций, результат которых отбрасывается процессором после определения неудачного прогноза, но следы выполнения оседают в общем кэше. Техника SPOILER затрагивает механизм упреждающей загрузки содержимого памяти в регистры процессора.

Для взаимодействия с памятью в процессоре используется буфер упорядоченного доступа к памяти (MOB, Memory Order Buffer), реализующий два цикличных буфера - один для записи данных из регистров в память, а другой для чтения из памяти в регистры. Разбор буфера записи всегда выполняется в порядке следования инструкций, а буфер чтения допускает упреждающую загрузку данных в кэш, не дожидаясь синхронизации с буфером записи и лишь частично проверяя зависимость.

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

Подобная манипуляция приводит к возникновению задержки при конфликте доступа к физическим адресам, появление которой можно отследить. Используя инструкции rdtscp и mfence можно добиться заполнения буфера записи адресами с идентичным смещением, но в разных виртуальных страницах памяти. Далее анализируя задержки при обращении к областям памяти с такими же смещениями но в разных страницах памяти атакующий может выявить сбои при определении зависимостей в буфере упорядоченного доступа к памяти и определить раскладку страниц физической памяти.

Проблема проявляется начиная с первого поколения процессоров Intel Core. В процессорах AMD и ARM применяется иная логика обработки буфера упорядоченного доступа к памяти, поэтому проблема их не затрагивает. Компания Intel была уведомлена об уязвимости 3 месяца назад, но исправления пока не предложены. По мнению выявивших уязвимость исследователей программные способы защиты не эффективны для блокирования атак на базе техники SPOILER и проблему можно решить только на аппаратном уровне, ценой заметного снижения производительности.

Источник: OpenNET