Группа исследователей из Грацского технического университета (Австрия) и Центра Гельмгольца по информационной безопасности (CISPA) раскрыла сведения об уязвимости (CVE-2021-26318) во всех процессорах AMD, делающей возможным проведение атак по сторонним каналам класса Meltdown (изначально предполагалось, что процессоры AMD не подвержены уязвимости Meltdown). С практической стороны атака может применяться для организации скрытых каналов передачи данных, мониторинга за активностью в ядре или получения сведений об адресах в памяти ядра для обхода защиты на основе рандомизации адресов (KASLR) в процессе эксплуатации уязвимостей в ядре.
Компания AMD считает нецелесообразным принятие специальных мер для блокирования проблемы, так как уязвимость, как и выявленная в августе похожая атака, малоприменима в реальных условиях, ограничена текущими границами адресного пространства процесса и требует наличия в ядре определённых готовых последовательностей инструкций (гаджетов). Для демонстрации атаки исследователи загружали собственный модуль ядра с искусственно добавленным гаджетом. В реальных условиях для подстановки необходимых последовательностей атакующие могут использовать, например, регулярно всплывающие уязвимости в подсистеме eBPF.
Для защиты от нового вида атаки компания AMD рекомендовала применять методы безопасного кодирования, которые помогают блокировать атаки Meltdown, такие как использование инструкций LFENCE. Выявившие проблему исследователи рекомендуют включить более строгую изоляцию таблиц страниц памяти (KPTI), которая до этого применялась только для процессоров Intel.
В ходе эксперимента исследователям удалось добиться утечки информации из ядра в процесс в пространстве пользователя со скоростью 52 байта в секунду, при наличии в ядре гаджета, выполняющего операцию "if (offset < data_len) tmp = LUT[data[offset] * 4096];". Предложено несколько методов извлечения по сторонним каналам сведений, оседающих в кэше в ходе спекулятивного выполнения. Первый метод основан на анализе отклонений времени выполнения процессорной инструкцией "PREFETCH" (Prefetch+Time), а второй на изменении изменения энергопотребления при выполнении "PREFETCH" (Prefetch+Power).
Напомним, что классическая уязвимость Meltdown основывается на том, что в ходе спекулятивного выполнения инструкций процессор может выполнить обращение к закрытой области данных, после чего отбросить результат, так как выставленные привилегии запрещают такое обращение из процесса пользователя. В программе спекулятивно выполняемый блок отделяется от основного кода условным переходом, который в реальных условиях всегда срабатывает, но из-за того, что в условном операторе используется вычисляемое значение, которое процессор не знает во время упреждающего выполнения кода, осуществляется спекулятивное выполнение всех вариантов ветвления.
Так как для спекулятивно выполняемых операций используется тот же кэш, что и для обычно выполненных инструкций, имеется возможность в ходе спекулятивного выполнения выставить в кэше маркеры, отражающие содержимое отдельных битов в закрытой области памяти, и затем в обычно выполняемом коде определить их значение через анализ времени обращения к прокэшированным и не прокэшированным данным.
Компания AMD считает нецелесообразным принятие специальных мер для блокирования проблемы, так как уязвимость, как и выявленная в августе похожая атака, малоприменима в реальных условиях, ограничена текущими границами адресного пространства процесса и требует наличия в ядре определённых готовых последовательностей инструкций (гаджетов). Для демонстрации атаки исследователи загружали собственный модуль ядра с искусственно добавленным гаджетом. В реальных условиях для подстановки необходимых последовательностей атакующие могут использовать, например, регулярно всплывающие уязвимости в подсистеме eBPF.
Для защиты от нового вида атаки компания AMD рекомендовала применять методы безопасного кодирования, которые помогают блокировать атаки Meltdown, такие как использование инструкций LFENCE. Выявившие проблему исследователи рекомендуют включить более строгую изоляцию таблиц страниц памяти (KPTI), которая до этого применялась только для процессоров Intel.
В ходе эксперимента исследователям удалось добиться утечки информации из ядра в процесс в пространстве пользователя со скоростью 52 байта в секунду, при наличии в ядре гаджета, выполняющего операцию "if (offset < data_len) tmp = LUT[data[offset] * 4096];". Предложено несколько методов извлечения по сторонним каналам сведений, оседающих в кэше в ходе спекулятивного выполнения. Первый метод основан на анализе отклонений времени выполнения процессорной инструкцией "PREFETCH" (Prefetch+Time), а второй на изменении изменения энергопотребления при выполнении "PREFETCH" (Prefetch+Power).
Напомним, что классическая уязвимость Meltdown основывается на том, что в ходе спекулятивного выполнения инструкций процессор может выполнить обращение к закрытой области данных, после чего отбросить результат, так как выставленные привилегии запрещают такое обращение из процесса пользователя. В программе спекулятивно выполняемый блок отделяется от основного кода условным переходом, который в реальных условиях всегда срабатывает, но из-за того, что в условном операторе используется вычисляемое значение, которое процессор не знает во время упреждающего выполнения кода, осуществляется спекулятивное выполнение всех вариантов ветвления.
Так как для спекулятивно выполняемых операций используется тот же кэш, что и для обычно выполненных инструкций, имеется возможность в ходе спекулятивного выполнения выставить в кэше маркеры, отражающие содержимое отдельных битов в закрытой области памяти, и затем в обычно выполняемом коде определить их значение через анализ времени обращения к прокэшированным и не прокэшированным данным.