TikTag - атака на механизм спекулятивного выполнения в CPU ARM, позволяющая обойти защиту MemTag
Группа исследователей из Сеульского университета и компании Samsung разработала технику атаки на процессоры ARM, получившую кодовое имя TikTag, которую можно использовать для обхода аппаратного механизма защиты MemTag (MTE, Memory Tagging Extension), присутствующего в чипах на базе архитектуры ARMv8.5-A. Атака позволяет определить содержимое тегов TikTag для произвольных адресов памяти из-за утечек данных, возникающих в результате спекулятивного выполнения инструкций CPU.Технология MemTag даёт возможность привязать теги к областям в памяти и организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнением буфера и обращением до инициализации. При использовании MemTag для каждых 16 байт физической памяти создаётся 4-битовый тег, который выступает подобием ключа для доступа к этой памяти. Тег может быть сгенерирован приложением для выделяемой области памяти при помощи специальных инструкций CPU, и затем сохранён в верхних неиспользуемых битах указателя. При обращении к памяти с использованием теггированного указателя, процессор проверяет соответствие тега, привязанного к указателю, с тегами, привязанными к блокам памяти, и разрешает доступ только если теги совпадают.
Предложенный метод атаки позволяет определить привязанные к блокам памяти теги и обойти защиту MemTag. Исследователями продемонстрирована возможность осуществления атаки TikTag при эксплуатации уязвимостей в ядре Linux и браузере Chrome, используя существующие в данных продуктах последовательности инструкций (гаджеты), приводящие к спекулятивному выполнению кода. Подобные гаджеты при выполнении в спекулятивном режиме кода, работающего с указателями, вызывают чтение метаданных MemTag в зависимости от внешних условий, на которые может влиять атакующий. После определения ошибочного прогноза результат спекулятивного выполнения отбрасывается, но полученные данные остаются в кэше и могут затем быть извлечены при помощи анализа по сторонним каналам. Вероятность успешного обхода защиты MemTag в проведённых тестах оценена в 95% при проведении атаки в течение примерно 4 секунд.
https://honk.any-key.press/d/jFQSz3nxR7l1jg6ky7.pngВыявлено два вида гаджетов, приводящих к утечке сведения о тегах MemTag. В первом случае спекулятивное выполнение возникает при неверном предсказании перехода, а условия для выполнения гаджета могут быть созданы через манипуляции с системными вызовами. Во втором случае спекулятивное выполнение возникает из-за ошибки предсказания взаимосвязи между операциями чтения и записи при использовании оптимизации STLF (Store-To-Load-Forwarding), что позволяет подобрать тег, оценивая состояние кэша (если тег совпадает, значение будет напрямую перенаправлено из прошлой команды "store" в операцию "load" и изменит состояние кэша). Первый вид гаджетов подходит для атаки на ядро Linux, а второй на JavaScript-движок V8, используемый в браузерах на базе Chromium. Прототип инструментария для проведения атаки опубликован на GitHub.
https://honk.any-key.press/d/fldvGWrmTb3k8bjR91.pnghttps://honk.any-key.press/d/SM7mJtG1w36K2qjzsN.pngКомпания ARM подтвердила возможность совершения атаки на системах с процессорами Cortex-X2, Cortex-X3, Cortex-A510, Cortex-A520, Cortex-A710, Cortex-A715 и Cortex-A720, но не намерена вносить изменения в CPU для блокирования проблемы, так как архитектура MemTag подразумевает, что теги не являются секретными данными для приложений. В кодовой базе Chromium проблема также остаётся неисправленной, так как в браузере Chrome защита на основе MemTag пока не применяется по умолчанию. Команда, отвечающая за безопасность платформы Android, признала возможность совершения атаки на устройства Pixel 8, в которых применяется защита MemTag, добавила исправления для блокирования утечек и выразила готовность выплатить вознаграждение за найденную уязвимость.
В качестве обходных методов для блокирования атаки исследователи предлагают использовать инструкции sb или isb для запрета спекулятивного выполнения во время совершения критических операций с памятью или включать между инструкциями ветвления и инструкциями доступа к памяти заполнение из других инструкций.
Источник: https://www.opennet.ru/opennews/art.shtml?num=61389