Содержание статьи
- Кеш-атаки на AES-таблицы
- История сторонних каналов
- Чем так уникальны кеш-атаки на ARM?
- Разновидности кеш-атак
- Evict + Time
- Prime + Probe
- Flush + Reload
- Evict + Reload
- Flush + Flush
- AnC
- Эффект Rowhammer
- О чем это?
- Дедупликация системной памяти
- Псевдоизоляция ядра операционной системы
- Межъядерные и межпроцессорные скрытые каналы
- Библиография
Когда говорят о кеш-атаках, чаще ограничиваются рассмотрением атак на AES-таблицу и не затрагивая более современные методы межъядерных атак:
- Prime + Probe
[6]
; - Flush + Reload
[6]
; - Evict + Reload
[7]
; - Flush + Flush
[8]
; - Rowhammer
[9]
.
Кроме того, до 2016 года считалось, что межъядерные кеш-атаки можно осуществить только на платформах Intel и AMD (на персональных компьютерах), однако недавно они были реализованы и для ARM-платформ (на смартфонах и других мобильных устройствах) [6]
. В последние два года наблюдается бурный всплеск интереса со стороны специалистов кибербезопасности к кеш-атакам по сторонним каналам. Именно эта тенденция и побудила нас просуммировать все то, что появилось по теме в паблике за последние два года.
WWW
В этом материале много отсылок к дополнительной литературе и презентациям. Одни есть в специализированных библиотеках со ссылками, другие мы приводим по названиям. Чтобы не усложнять статью громоздкими тайтлами в каждом предложении, мы собрали и вынесли библиографию единым блоком в конце материала, а по тексту промаркировали ссылки в вики-формате. Во врезке ты уже найдешь развернутую информацию о публикации — авторы, год, издание, а также примерные номера страниц, на которых описывается предмет.
Кеш-атаки на AES-таблицы
Хотя уже довольно давно известно, что эти атаки возможны, уязвимая реализация AES-таблиц по-прежнему используется как стандарт де-факто, в том числе в современных встраиваемых криптоустройствах, таких как SIM-карты. Например, в сетях 3G/4G используется алгоритм аутентификации MILENAGE, основанный на AES. Его компрометация позволяет клонировать USIM-карты и подслушивать разговоры. Так что кеш-атаки по сторонним каналам актуальны и для SIM-карт (используемых для доступа к сети 2G), и для USIM-карт (обеспечивающих доступ к сетям 3G/4G). В 2015 году была описана «дифференциальная атака по энергопотреблению» (DPA) — атака, которая восстанавливает ключи шифрования (используемые алгоритмом MILENAGE) и другие секреты USIM-карт в течение всего нескольких минут [3]
.
История сторонних каналов
По мере усложнения программного обеспечения и по мере увеличения количества передовых программных защит взлом системы на аппаратном уровне, в частности использование кеш-атак на сторонние каналы, становится все более привлекательной альтернативой. Эти атаки основываются на уязвимостях, найденных в архитектуре взаимодействия процессора с памятью [4]
.
В 1985 году была представлена технология считывания информации с видеодисплеев — измерением наводимых ими электромагнитных помех [10]
. На основе этой технологии в 2014 году был разработан кейлоггер, построенный на базе смартфона и радиоантенны [12]
.
В 1996 году было показано, что, тщательно измеряя количество времени, затрачиваемого на выполнение операций с секретными ключами, можно взломать различные криптографические системы, например шифр DES. В 2016 году была впервые продемонстрирована атака по сторонним каналам на устройство шифрования, использующее передовую эллиптическую криптографию; в ходе атаки из целевого устройства, находящегося в другой комнате, был извлечен секретный дешифрующий ключ [13]
.
В 1997 году был представлен «метод дифференциальных искажений» (DFA) — атака, которая использует различные модели микросбоев, а также методы криптоанализа для восстановления секретных параметров со смарт-карт и других защищенных от несанкционированного доступа устройств [11]
. Имея физический доступ к устройству, можно изменять напряжение питания, частоту синхросигнала или условия окружающей среды (например, температуру), чтобы заставить смарт-карту работать неправильно. Более того, сбои в работе оборудования можно спровоцировать даже одним лишь только программным вмешательством, и, следовательно, это можно сделать в режиме удаленного доступа.
В 2014 году была продемонстрирована атака по сторонним каналам на кеш-память. Эта атака использует утечки информации, вызванные разницей времени доступа к данным, в зависимости от того, находятся они в кеш-памяти или нет; таким образом, атака дает понять, какими данными исследуемый код недавно оперировал. В процессе этой атаки было продемонстрировано полное восстановление AES-ключей [9]
. Чуть позже, в 2015 году, было показано, что сторонние каналы кеш-памяти можно использовать не только для нападения на криптографические системы, но и для сбора информации о нажатии клавиш [14]
.
В 2014 году было продемонстрировано, что обращение с высокой частотой к одной и той же ячейке памяти может спровоцировать самопроизвольные переключения битов в микросхемах DRAM (эффект Rowhammer) [9]
. Поскольку DRAM масштабируется в мельчайших размерах, предотвратить электрическое взаимовлияние между отдельными ячейками весьма непросто. Именно поэтому активация определенной строки из памяти приводит к искажению данных в соседних строках.
В 2015 году было продемонстрировано, что эффект Rowhammer можно использовать для повышения привилегий до суперпользователя [15]
. В том же году было продемонстрировано, что самопроизвольные переключения битов могут быть спровоцированы даже загруженным на веб-сайт Java-кодом [7]
. Первоначально этот сценарий был реализован только для систем Intel и AMD, использующих модули DDR3 и DDR4 [16, 17]
. Однако в 2016 году эта атака была также продемонстрирована и на ARM-платформах [1]
. В том же году было показано, что кеш-атаки могут применяться и для мониторинга кеш-активности в TrustZone [1]
.
В 2016 году была проведена «обратная инженерия» для функций адресации DRAM, повсеместно используемой в современных смартфонах. В результате были обнаружены дополнительные способы переключения битов, доступные для реализации на миллионах Android-устройств, без необходимости работы в привилегированном режиме [1]
.
В 2016 году была впервые продемонстрирована атака на последний уровень кеш-памяти ARM-процессора. Эта атака может быть реализована для межъядерной и межпроцессорной кеш-атаки по сторонним каналам [1]
.
Чем так уникальны кеш-атаки на ARM?
Такие методы атаки, как Flush + Reload и Flush + Flush, используют непривилегированную x86-инструкцию сброса clflush для удаления строки данных из кеш-памяти. Однако, за исключением процессоров ARMv8-A, ARM-платформы не имеют непривилегированных инструкций сброса кеша, и поэтому в 2016 году был предложен косвенный метод вытеснения кеша, с использованием эффекта Rowhammer [1]
.
Для проведения успешной кеш-атаки необходимо знать точное время цикла обращения к ячейке памяти. Ранние кеш-атаки использовали для этих целей системные счетчики производительности, но этот способ неэффективен, поскольку эти счетчики на ARM-процессорах доступны только в привилегированном режиме.
Однако в 2016 году были предложены три альтернативных источника синхронизации, доступные в том числе и в непривилегированном режиме [1]
. Один из них — запуск параллельного синхронизирующего потока, который непрерывно инкрементирует глобальную переменную. Читая значение этой переменной, злоумышленник может измерять время цикла обращения к ячейке памяти.
Кроме того, в ARM-процессорах действует так называемая политика псевдослучайного замещения, в результате действия которой вытеснение из кеша происходит менее предсказуемо, чем в процессорах Intel и AMD. Тем не менее в 2016 году была продемонстрирована эффективная кеш-атака даже в таких зашумленных условиях — для трех смартфонов: OnePlus One (использует Snapdragon 801 SoC с процессором Krait 400 архитектуры ARMv7-A), Alcatel One Touch Pop 2 (использует Snapdragon 410 SoC с процессором Cortex-A53 архитектуры ARMv8-A), Samsung Galaxy S6 (использует Samsung Exynos 7 Octa 7420 SoC с двумя процессорными кластерами ARMv8-A) [1]
.
Разновидности кеш-атак
В общем виде кеш-атаку по стороннему каналу можно разделить на три этапа:
- Идентификация микроархитектурного сигнала, «просачивающегося» из «негерметичной» электронной системы; типичные примеры таких просачивающихся микроархитектурных сигналов — это потребляемая мощность и электромагнитное излучение интегральных микросхем
[2, 3]
. - Мониторинг и анализ этого сигнала при работе системы.
- Выявление шаблонных различий микроархитектурного сигнала
[2]
.
Evict + Time
Основная идея заключается в том, чтобы определить, к каким наборам кешей обращается программа-жертва.
Алгоритм:
- Измерить время выполнения программы-жертвы.
- Вытеснить определенную часть кеша.
- Измерить время выполнения программы-жертвы снова.
С помощью разницы между двумя измерениями можно определить, сколько времени определенная часть кеша использовалась жертвой при выполнении. В 2010 году был продемонстрирован мощный тип атаки на основе Evict + Time — против AES на OpenSSL, без необходимости наличия открытого и зашифрованного текстов [18, 19]
.
Prime + Probe
Этот метод — так же как и предыдущий — позволяет злоумышленнику определить, к каким наборам кешей обращается программа-жертва.
Алгоритм:
- Заполнить определенную часть кеша.
- Передать управление программе-жертве.
- Определить, какая часть заполненного кеша все еще принадлежит нам.
Это может быть сделано с помощью измерения времени доступа к адресам, которые злоумышленник использовал для заполнения кеша на первом этапе. Таким образом, если программа-жертва будет использовать адреса, сопоставляемые с теми же областями кеша, что и злоумышленник, то она будет вытеснять данные злоумышленника из кеша, и злоумышленник это может отследить на третьем этапе. В [19]
продемонстрирована атака, использующая этот механизм, на OpenSSL AES и линуксовский dm-crypt.
В 2015 году [20]
было продемонстрировано, как, используя Prime + Probe, можно смонтировать межъядерный и межвиртуальномашинный скрытый канал и затем атаковать ElGamal в GnuPG. В том же году была продемонстрирована успешная атака на реализацию OpenSSL AES в облачной среде [21]
.
Flush + Reload
В 2011 году [22]
было показано, как можно применить clflush для атаки на AES. Clflush используется для того, чтобы вытеснить из кеша отслеживаемую ячейку памяти, с последующей проверкой, была ли эта ячейка заново загружена в кеш после того, как программа-жертва выполнила небольшое количество инструкций.
Алгоритм:
- Спроецировать бинарник (например, разделяемый объект) в свое адресное пространство (с помощью соответствующего системного вызова, такого как mmap).
- Вытеснить строку кеша (код или данные) из кеша.
- Передать управление на программу-жертву.
- Проверить, была ли эта строка кеша (из п. 2) загружена программой-жертвой (измеряя время доступа к ячейке памяти).
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»