Хотя мобильные устройства пользуются все большим и большим спросом, а кеш-атаки представляют собой мощнейший способ эксплуатации современных системных архитектур, до 2016 года существовало лишь несколько публикаций о кеш-атаках на смартфоны. Восполним этот пробел.

Когда говорят о кеш-атаках, чаще ограничиваются рассмотрением атак на 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].


 

Благодарности

Редакция выражает свою благодарность Gerhart’у — крутому хакеру, написавшему монументальный труд Исследуем внутренние механизмы работы Hyper-V (в двух частях: первая и вторая) — за ценные комментарии к готовому тексту.

 

История сторонних каналов

По мере усложнения программного обеспечения и по мере увеличения количества передовых программных защит взлом системы на аппаратном уровне, в частности использование кеш-атак на сторонние каналы, становится все более привлекательной альтернативой. Эти атаки основываются на уязвимостях, найденных в архитектуре взаимодействия процессора с памятью [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].

 

Разновидности кеш-атак

В общем виде кеш-атаку по стороннему каналу можно разделить на три этапа:

  1. Идентификация микроархитектурного сигнала, «просачивающегося» из «негерметичной» электронной системы; типичные примеры таких просачивающихся микроархитектурных сигналов — это потребляемая мощность и электромагнитное излучение интегральных микросхем [2, 3].
  2. Мониторинг и анализ этого сигнала при работе системы.
  3. Выявление шаблонных различий микроархитектурного сигнала [2].
 

Evict + Time

Основная идея заключается в том, чтобы определить, к каким наборам кешей обращается программа-жертва.

Алгоритм:

  1. Измерить время выполнения программы-жертвы.
  2. Вытеснить определенную часть кеша.
  3. Измерить время выполнения программы-жертвы снова.

С помощью временной разницы между двумя измерениями можно определить, сколько времени определенная часть кеша использовалась жертвой во время выполнения. В 2010 году был продемонстрирован мощный тип атаки на основе Evict + Time — против AES на OpenSSL, без необходимости наличия открытого и зашифрованного текстов [18, 19].

 

Prime + Probe

Этот метод — так же как и предыдущий — позволяет злоумышленнику определить, к каким наборам кешей обращается программа-жертва.

Алгоритм:

  1. Заполнить определенную часть кеша.
  2. Передать управление программе-жертве.
  3. Определить, какая часть заполненного кеша все еще принадлежит нам.

Это может быть сделано с помощью измерения времени доступа к адресам, которые злоумышленник использовал для заполнения кеша на первом этапе. Таким образом, если программа-жертва будет использовать адреса, сопоставляемые с теми же областями кеша, что и злоумышленник, то она будет вытеснять данные злоумышленника из кеша, и злоумышленник это может отследить на третьем этапе. В [19] продемонстрирована атака, использующая этот механизм, на OpenSSL AES и линуксовский dm-crypt.

В 2015 году [20] было продемонстрировано, как, используя Prime + Probe, можно смонтировать межъядерный и межвиртуальномашинный скрытый канал и затем атаковать ElGamal в GnuPG. В том же году была продемонстрирована успешная атака на реализацию OpenSSL AES в облачной среде [21].

 

Flush + Reload

В 2011 году [22] было показано, как можно применить clflush для атаки на AES. Clflush используется для того, чтобы вытеснить из кеша отслеживаемую ячейку памяти, с последующей проверкой, была ли эта ячейка заново загружена в кеш после того, как программа-жертва выполнила небольшое количество инструкций.

Алгоритм:

  1. Спроецировать бинарник (например, разделяемый объект) в свое адресное пространство (с помощью соответствующего системного вызова, такого как mmap).
  2. Вытеснить строку кеша (код или данные) из кеша.
  3. Передать управление на программу-жертву.
  4. Проверить, была ли эта строка кеша (из п. 2) загружена программой-жертвой (измеряя время доступа к ячейке памяти).

Продолжение статьи доступно только подписчикам

Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

3 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…