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

 

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

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

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

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


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

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

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

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …