20.09.2020

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


Обнародованы сведения о новом классе атак LVI (Load Value Injection, CVE-2020-0551) на механизм спекулятивного выполнения в CPU Intel, которые могут использоваться для организации утечки ключей и секретных данных из анклавов Intel SGX и других процессов.

Новый класс атак основан на манипуляциях с теми же микроархитектурными структурами, что и в атаках MDS (Microarchitectural Data Sampling), Spectre и Meltdown. При этом новые атаки не блокируются существующими методами защиты от Meltdown, Spectre, MDS и других подобных атак. Для обеспечения эффективной защиты от LVI требуется внесение аппаратных изменений в CPU. При организации защиты программным путём фиксируются слишком большие накладные расходы — по оценке исследователей полная программная защита приведёт к снижению производительности в 2-19 раз.

Частично, трудность блокирования проблемы компенсируется тем, что в настоящее время атака носит больше теоретический, чем практический характер (атака теоретически возможна, но очень трудна в реализации). Компания Intel присвоила проблеме умеренный уровень опасности (5.6 из 10) и выпустила обновление прошивки и SDK для окружения SGX, в которых попыталась блокировать проведение атаки обходным путём. Предложенные методы атаки пока применимы только к процессорам Intel, но теоретически не исключается возможность адаптации LVI для других процессов, к которым применимы атаки класса Meltdown.

Проблема была выявлена в апреле прошлого года исследователем Джо Ван Балком (Jo Van Bulck) из Лёвенского университета, после чего при участии 9 исследователей из других университетов, были разработаны пять вариантов совершения атак. Независимо в феврале этого года исследователи из компании Bitdefender также обнаружили один из вариантов атаки LVI-LFB и сообщили о нём в Intel. Варианты атак отличаются использованием различных микроархитектурных структур, таких как буфер хранения (SB, Store Buffer), буфер заполнения (LFB, Line Fill Buffer), буфер переключение контекста FPU и кэш первого уровня (L1D), ранее применяемых в таких атаках как ZombieLoad, RIDL, Fallout, LazyFP, Foreshadow и Meltdown.

Основным отличием LVI от атак MDS является то, что MDS манипулирует определением содержимого микроархитектурных структур, остающихся в кэше после спекулятивной обработки исключений (fault) или операций load и store, в то время как атаки LVI позволяют добиться подстановки данных атакующего в микроархитектурные структуры для влияния на последующее спекулятивное выполнения кода жертвы. При помощи указанных манипуляций атакующий может извлечь содержимое закрытых структур данных в других процессах при исполнении определённого кода на целевом ядре CPU.

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

Исключение «assist», в отличие от «fault», обрабатывается внутри процессора без вызова программных обработчиков. Assist может возникнуть, например, когда требуется обновить бит A (Accessed) или D (Dirty) в таблице страниц памяти. Главная сложность проведения атаки на другие процессы в том, как инициировать возникновение assist, манипулируя процессом жертвы. В настоящее время не существует надёжных способов сделать это, но в будущем не исключается их нахождение. Возможность совершения атаки пока подтверждена только для анклавов Intel SGX, остальные сценарии являются теоретическими или воспроизводимыми в синтетических условиях (требуется добавление в код определённых гаджетов)

Возможные векторы атак:

  • Утечка данных из структур ядра в процесс на уровне пользователя. Имеющаяся в ядре Linux защита от атак класса Spectre 1, а также механизм защиты SMAP (Supervisor Mode Access Prevention) существенно уменьшают вероятность атаки LVI. Внесение дополнительной защиты в ядро может потребоваться при выявления в будущем более простых методов проведения атаки LVI.
  • Утечка данных между разными процессами. Для атаки требуется наличие определённых фрагментов кода в приложении и определение метода формирования исключения в целевом процессе.
  • Утечка данных из хост-окружения в гостевую систему. Атака отнесена к категории слишком сложных, требующих выполнения различных труднореализуемых шагов и предсказаний активности в системе.
  • Утечка данных между процессам в разных гостевых системах. Вектор атаки близок к организации утечки данных между разными процессами, но дополнительно требует выполнения сложных манипуляций для обхода изоляции между гостевыми системами.

Исследователями опубликовано несколько прототипов с демонстрацией принципов проведения атаки, но они пока непригодны для совершения реальных атак. Первый пример позволяет перенаправить спекулятивное выполнение кода в процессе-жертвы по аналогии с возвратно-ориентированным программированием (ROP, Return-Oriented Programming). В данном примере в качестве жертвы выступает специально подготовленный процесс, содержащий необходимые гаджеты (применение атаки к реальным сторонним процессам затруднено). Второй пример позволяет вклиниться в вычисления при шифровании AES внутри анклава Intel SGX и организовать утечку данных во время спекулятивного выполнения инструкций для восстановления значения применяемого для шифрования ключа.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52517

Добавить комментарий