В процессорах Intel нашли очередную уязвимость к краже данных по сторонним каналам
Читать в полной версииОбнаружен новый способ взлома систем по побочному каналу, затрагивающий несколько поколений процессоров Intel. Данный способ атаки позволяет извлечь конфиденциальные данные через регистр EFLAGS и анализ тайминга выполнения инструкций. Фактически это ответвление уязвимости Meltdown, которая была обнаружена в 2018 году и затрагивает многие микропроцессоры на базе x86, а позже было обнаружено ещё ряд уязвимостей данного типа.
По словам исследователей из Университета Цинхуа и Университета Мэриленда, новый способ взлома использует уязвимость во временном выполнении, которая позволяет извлекать секретные данные из пространства пользовательской памяти посредством временного анализа.
Исследователи считают, что лазейка для взлома — это недостаток в изменении регистра EFLAGS при переходном выполнении, влияющий на синхронизацию инструкций JCC (переход по коду условия). Регистр EFLAGS — это регистр ЦП, который содержит различные флаги, связанные с состоянием процессора, а инструкция JCC — это инструкция ЦП, которая допускает условное ветвление на основе содержимого регистра EFLAGS. Атака выполняется в два этапа: первый заключается в запуске временного выполнения и кодировании секретных данных через регистр EFLAGS, а второй — в измерении времени выполнения инструкции JCC для декодирования данных.
Экспериментальные данные показали, что атака позволила извлечь 100 % данных в случае с системами на Intel Core i7-6700 и Intel Core i7-7700, и имела некоторый успех против более нового процессора Intel Core i9-10980XE. Эксперимент проводился на Ubuntu 22.04 jammy с ядром Linux версии 5.15.0. Тем не менее, исследователи отмечают, что эта атака по времени не так надёжна, как методы побочного канала с состоянием кеша, и чтобы получить лучшие результаты в последних чипах, атаку пришлось бы повторять тысячи раз.
Исследователи признают, что первопричины атаки остаются неуловимыми, и предполагают, что в исполнительном блоке ЦП Intel есть буфер, которому нужно время для возврата, если выполнение должно быть прекращено и процесс, который вызывает остановку, если последующая инструкция зависит от цели буфера.
Тем не менее, они по-прежнему предлагают некоторые нетривиальные меры, такие как изменение реализации инструкции JCC, чтобы сделать измерение состязательного выполнения невозможным ни при каких условиях, или переписывание EFLAGS после временного выполнения, чтобы уменьшить его влияние на инструкцию JCC.