SWAPGS - ailagbara tuntun ninu ẹrọ ipaniyan arosọ Sipiyu

Исследователи из компании Bitdefender fi han новую уязвимость (CVE-2019-1125) в механизме спекулятивного выполнения инструкций современных CPU, которая получила имя SWAPGS, соответствующее названию процессорной инструкции, вызывающей проблему. Уязвимость ti o faye gba непривилегированному атакующему определить содержимое областей памяти ядра или запущенных виртуальных машин. Проблема timo в процессорах Intel (x86_64) и частично ni ipa lori процессоры AMD, для которых не проявляется основной вектор атаки. Ранее реализованные методы противодействия уязвимостям Spectre и Meltdown не защищают от атаки SWAPGS при использовании процессоров Intel, но для Linux, ChromeOS, Android и Windows уже предложены исправления.

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

Особенность новой атаки в использовании утечки, возникающей в ходе спекулятивного выполнения инструкции SWAPGS, которая применяется в операционных системах для замены значения регистра GS при переходе управления из пространства пользователя в ядро ОС (используемое в пространстве пользователя значение GS заменяется на значение, используемое при операциях в ядре). В ядре Linux в GS хранится указатель per_cpu, используемый для доступа к данным ядра, а в пространстве пользователя указатели на TLS (Thread Local Storage).

Для исключения двойного вызова инструкции SWAPGS при повторном обращении к ядру из пространства ядра или когда выполняется код, не требующий замены регистра GS, перед инструкцией осуществляется проверка и условный переход. Механизм спекулятивного выполнения заранее переходит к выполнению кода с инструкцией SWAPGS, не дожидаясь результата проверки, и если выбранная ветка не подтвердилась, отбрасывает результат. Таким образом, может возникнуть ситуация, когда спекулятивно будет выбрана ветка не предусматривающая выполнение SWAPGS, но в процессе спекулятивного выполнения значение регистра GS будет изменено инструкцией SWAPGS и использовано в зависимых операциях с памятью, которые оседают в кэше CPU.

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

В ядре Linux проблема imukuro через изменение логики вызова инструкции SWAPGS (блокирование спекулятивного выполнения), по аналогии с исправлением других уязвимостей класса Spectre v1. Предполагается, что добавленная защита минимально повлияет на производительность типовых рабочих нагрузок. Задержка возникает на этапе переключения между пространством пользователя и ядра, что может привести к снижению производительности, например, при интенсивном выполнении системных вызовов из приложения или частой генерации NMI и прерываний.

Исправление требует установки обновления ядра как в основной системе, так и в гостевых окружениях, с последующей перезагрузкой системы. Для отключения защиты в Linux может быть использована опция «nospectre_v1», которая также отключает меры для блокирования уязвимости SWAPGS. Исправление доступно в виде alemo для ядра Linux, который уже включён в состав выпусков 4.19.65, 5.2.7, 4.14.137, 4.9.188 и 4.4.188. Обновления для дистрибутивов Linux пока не выпущены (Debian, RHEL, Fedora, Arch Linux, SUSE/ṣiiSUSE, Ubuntu). В Windows проблема без лишней огласки была устранена в июльском обновлении. Компания Google pese sile исправление для ядра 4.19, поставляемого в ChromeOS и Android.

По заявлению исследователей из компании Bitdefender, Intel был информирован о проблеме ещё в августе прошлого года. Проблему было решено устранить программно, для чего к скоординированной выработке исправления были привлечены разработчики из Microsoft, Google и ядра Linux. Старые процессоры Intel, до Ivy Bridge, атаковать значительно труднее из-за отсутствия поддержки инструкции WRGSBASE, использованной в эксплоите. Системы ARM, POWER, SPARC, MIPS и RISC-V не подвержены проблеме, так как не поддерживают инструкцию SWAPGS.

Проблема угрожает главным образом обладателям процессоров Intel —
на системах AMD удалось воспроизвести только второй сценарий атаки, ограничивающийся спекулятивной обработкой базового значения регистра GS, что можно использовать для поиска определённых значений в случайных областях памяти. Для блокирования данного варианта атаки jẹ to существующих методов защиты от уязвимостей Spectre v1.

orisun: opennet.ru

Fi ọrọìwòye kun