Атака Prime+Probe
Атака Prime+Probe — это метод криптоанализа по сторонним каналам (side-channel attack), использующий особенности работы кэш-памяти центрального процессора для извлечения конфиденциальной информации (например, криптографических ключей) из других процессов или виртуальных машин, выполняющихся на том же физическом оборудовании. Относится к классу атак на кэш-память (cache-based attacks) и основана на измерении времени доступа к данным, которые были вытеснены или загружены в определённые наборы кэша (cache sets) в результате действий жертвы.
Принцип работы
Атака Prime+Probe состоит из трёх последовательных этапов, которые циклически повторяются для сбора данных о доступе жертвы к памяти.
Этап 1: Prime (заполнение)
Атакующий процесс (программа-шпион) заполняет все строки определённого набора кэш-памяти (например, последнего уровня — L3-кэша) своими данными. Для этого он считывает массив собственных данных, размер которого кратен размеру кэша, так, чтобы каждое обращение попадало в разные строки одного и того же набора. В результате все строки данного набора кэша оказываются занятыми (в состоянии «valid» и «dirty»).
Этап 2: Ожидание (Probe)
Атакующий приостанавливает выполнение своего кода и ожидает, пока процесс-жертва (например, шифровальный алгоритм) выполнит свои операции. В ходе работы жертва может считывать или записывать данные в память, что приводит к вытеснению (eviction) некоторых строк кэша, принадлежащих атакующему, из того же набора. Если жертва обращается к адресу, который отображается в тот же набор кэша, одна из строк атакующего будет вытеснена.
Этап 3: Probe (зондирование)
Атакующий снова считывает свои данные, которые были загружены на этапе Prime. Измеряя время доступа к каждой строке, он определяет, какие из них были вытеснены (доступ к ним занимает больше времени, так как данные приходится загружать из оперативной памяти), а какие остались в кэше (доступ быстрый). По разнице во времени атакующий восстанавливает, к каким адресам памяти обращалась жертва. Повторяя цикл (Prime → ожидание → Probe) многократно, можно построить временную последовательность обращений жертвы и, зная алгоритм работы шифра, вычислить секретный ключ.
Классификация
Атака Prime+Probe относится к атакам на кэш-память и является разновидностью атак по времени доступа (timing attack). В отличие от атаки Flush+Reload, которая требует общей памяти между атакующим и жертвой (например, через разделяемые библиотеки), Prime+Probe не требует разделения памяти — атакующий и жертва могут быть изолированы в разных виртуальных машинах или процессах, если они используют один и тот же физический кэш (например, L3-кэш в многоядерных процессорах). Это делает Prime+Probe более универсальной, но и более сложной в реализации, так как требует точного знания структуры кэша (размера строки, количества наборов, ассоциативности) и способности атакующего контролировать заполнение кэша.
История
Метод Prime+Probe был впервые описан в 2005 году исследователями Дэном Пейджем (Dan Page) и Колином Персивалем (Colin Percival) в контексте атак на криптографические алгоритмы. Однако широкую известность он получил после публикации в 2017 году исследований, связанных с уязвимостями Spectre и Meltdown, где Prime+Probe использовался как один из способов извлечения данных из кэша процессора в условиях изоляции между процессами или виртуальными машинами.
В 2018 году исследователи из группы Graz University of Technology (Австрия) продемонстрировали практическую реализацию атаки Prime+Probe для извлечения ключей шифрования AES из облачных виртуальных машин, работающих на одном физическом сервере. Они показали, что атака может быть выполнена удалённо, без физического доступа к оборудованию, и требует лишь возможности запуска кода в той же среде.
Уязвимые системы
Атака Prime+Probe эффективна против процессоров, использующих кэш-память с общими наборами (set-associative cache), что характерно для большинства современных x86-процессоров (Intel, AMD) и ARM-процессоров. Наиболее уязвимыми являются системы, где несколько процессов или виртуальных машин разделяют один физический кэш последнего уровня (L3-кэш), например:
- Облачные вычислительные платформы (Amazon AWS, Microsoft Azure, Google Cloud), где виртуальные машины разных клиентов могут размещаться на одном физическом сервере.
- Многопользовательские операционные системы (Linux, Windows) без аппаратной изоляции кэша.
- Системы с гипервизорами, не реализующими полную изоляцию кэша между виртуальными машинами.
Методы защиты
Для защиты от атак типа Prime+Probe применяются как программные, так и аппаратные меры:
Программные методы
- Маскирование времени доступа — введение случайных задержек или постоянных операций, чтобы скрыть временные различия между кэш-хитами и кэш-промахами.
- Постоянное время выполнения (constant-time implementation) — реализация криптографических алгоритмов, при которой время выполнения не зависит от обрабатываемых данных (например, использование таблиц с фиксированным доступом).
- Изоляция кэша — выделение отдельных наборов кэша для процессов (например, с помощью технологии Intel Cache Allocation Technology (CAT) или AMD Cache QoS).
- Очистка кэша — принудительное сброс кэша после выполнения критических операций.
Аппаратные методы
- Аппаратная изоляция кэша — использование аппаратных механизмов, таких как Intel SGX (Software Guard Extensions), которые изолируют память и кэш для защищённых анклавов.
- Кэш с динамическим отображением (randomized cache) — использование кэшей с псевдослучайным отображением адресов, что затрудняет атакующему предсказание, какие наборы будут затронуты.
- Аппаратное маскирование времени — встроенные механизмы, скрывающие временные различия доступа к кэшу.
Примеры реализации
Одной из известных реализаций атаки Prime+Probe является инструмент CacheBleed, опубликованный в 2016 году, который демонстрировал извлечение ключей RSA из процессоров Intel Xeon. В 2018 году исследователи из Университета Граца (Graz University of Technology) создали открытый инструмент Prime+Probe Attack Toolkit, позволяющий воспроизводить атаку на процессорах Intel и AMD.
Критика и ограничения
Атака Prime+Probe имеет ряд ограничений:
- Требует точного знания структуры кэша (размера строки, количества наборов, ассоциативности), что может различаться между разными моделями процессоров.
- Необходимость в высоком временном разрешении (субмикросекундном) для точного измерения времени доступа, что может быть затруднено в условиях многозадачности или использования аппаратных таймеров с низкой точностью.
- Эффективность снижается при использовании кэшей с высокой ассоциативностью или при аппаратной изоляции кэша.
- Атака требует многократного повторения циклов (тысячи или миллионы раз) для накопления статистически значимых данных, что увеличивает время атаки и может быть обнаружено системами мониторинга.
Источники
- Page, D. (2005). "Defending against cache-based side-channel attacks". Information Security Technical Report.
- Percival, C. (2005). "Cache missing for fun and profit". Proceedings of BSDCan 2005.
- Osvik, D. A., Shamir, A., & Tromer, E. (2006). "Cache attacks and countermeasures: the case of AES". CT-RSA 2006.
- Gruss, D., Maurice, C., & Mangard, S. (2016). "CacheBleed: a timing attack on OpenSSL constant-time RSA". Journal of Cryptographic Engineering.
- Kocher, P., et al. (2019). "Spectre attacks: exploiting speculative execution". Communications of the ACM.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →