Хакер - Кеш-атаки по сторонним каналам. Что произошло в области утечек на аппаратном уровне за последние два года
nopaywall

Содержание статьи
- Кеш-атаки на 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].
Благодарности
Автор и редакция выражают свою благодарность 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].
Разновидности кеш-атак
В общем виде кеш-атаку по стороннему каналу можно разделить на три этапа:
- Идентификация микроархитектурного сигнала, «просачивающегося» из «негерметичной» электронной системы; типичные примеры таких просачивающихся микроархитектурных сигналов — это потребляемая мощность и электромагнитное излучение интегральных микросхем
[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) загружена программой-жертвой (измеряя время доступа к ячейке памяти).
В 2014 году было продемонстрировано полное восстановление секретного ключа AES в виртуальной машине VMware через кеш-атаку Flush + Reload [23]. В том же году было продемонстрировано восстановление секретного ключа OpenSSL-алгоритма ECDSA (алгоритм цифровых подписей на основе эллиптических кривых) посредством той же атаки [24]. В 2015 году при помощи атаки Flush + Reload был скомпрометирован системный механизм «дедупликации памяти», в результате чего открылась возможность несанкционированной коммуникации между виртуальными машинами, работающими на общей физической машине [25]. В том же году было продемонстрировано, как через Flush + Reload получить информацию о том, какие именно криптографические библиотеки используются различными виртуальными машинами, работающими на общей физической машине [26].
В 2015 году также было показано, что метод Flush + Reload может использоваться также и для кейлоггера [14].
Evict + Reload
Был представлен в 2015 году [14]. Использует Flush + Reload для вытеснения — вместо инструкции вытеснения. Хотя эта атака для x86 не имеет практического смысла (для выполнения clflush не нужны привилегии), для ARM-процессоров она весьма актуальна (поскольку там подобная инструкция доступна только в привилегированном режиме).
Суть Evict + Reload заключается в том, что для вытеснения нужной ячейки из кеша мы заполняем кеш-память большим количеством взаимосвязанных адресов, в результате чего механизм, отвечающий за вытеснение, сам принимает решение вытеснить нужную нам ячейку кеша.
Кроме того, в 2016 году было показано, что эффективная и быстрая стратегия вытеснения может инициировать самопроизвольное переключение битов в соседних строках DRAM-модулей (в результате многократного доступа к одной и той же строке памяти) посредством апплетов, написанных на JavaScript [24]. Таким образом, кеш-атаки больше не зависят от привилегированных инструкций очистки кеша вроде clflush.
Flush + Flush
Атаки Flush + Reload и Prime + Probe вызывают многочисленные обращения к кешу, продолжительность которых можно измерять (при помощи системных счетчиков производительности). Атака Flush + Flush, представленная в 2015 году, как раз и основывается на этих наблюдениях [8].
Атака практически такая же, как Flush + Reload. Бинарник или разделенный файл-объект отображается в адресное пространство атакующего. Ячейка памяти вытесняется из кеша, и управление передается на программу-жертву. Однако вместо этапа перезагрузки, где осуществляется обращение к ячейке, за которой мы наблюдаем, она снова вытесняется, не вызывая промахов, в сравнении с Flush + Reload или Prime + Probe. Таким образом легко отличить, кеширована ячейка памяти или нет.
AnC
Это более новая модификация кеш-атаки Evict + Time, представленная в 2017 году [4]. Отличительная черта AnC заключается в том, что эта кеш-атака опирается на анализ кешируемых таблиц страниц, которые используются в большинстве современных процессоров (Intel, AMD, ARM) [4].
Сегодня в основе любого процессора лежит блок управления памятью (MMU), который упрощает управление доступной физической памятью посредством ее виртуализации, для последующего использования несколькими процессами. MMU использует структуру данных «таблица страниц» для сопоставления виртуальных и физических ячеек памяти. «Таблицы страниц» — привлекательная цель для аппаратных атак. Например, самопроизвольного переключения всего одного бита (вызванного эффектом Rowhammer) в «таблице страниц» может хватить, чтобы атакующий получил контроль над физическим адресом памяти, к которому он, по идее, доступа получать не должен; и этого может быть достаточно, чтобы получить привилегии суперпользователя [4].
Эффект Rowhammer
О чем это?
Отдельный DRAM-чип имеет незначительную емкость, и поэтому несколько микросхем соединяются вместе на одной плате, для того чтобы сформировать так называемый DRAM-ряд. Один модуль DRAM-памяти может содержать один или несколько DRAM-рядов. DRAM-чип состоит из двумерного массива ячеек. Каждая ячейка DRAM — это конденсатор; 0 и 1 — это заряженное или разряженное состояние конденсатора. Каждая ячейка в сетке связана с соседней ячейкой проводом. Если какая-либо ячейка активируется, то напряжение подается как на ее конденсатор, так и на все остальные конденсаторы той же строки.
Поскольку ячейки памяти по мере технологического прогресса становятся все меньше и меньше и все ближе друг к другу, помехи, вызванные активацией строки памяти, очень часто влияют на заряды конденсаторов соседних строк. В 2014 году было продемонстрировано [9], что частое обращение к одной и той же ячейке DRAM-памяти приводит к эффекту Rowhammer — самопроизвольным битовым переключениям.
Этот эффект можно использовать для повышения привилегий (например, чтобы выйти из песочницы безопасности [15]); он может быть реализован в том числе в результате исполнения непривилегированного JavaScript-кода, расположенного на веб-сайте.
Чтобы «забить» определенную ячейку памяти, злоумышленнику нужно найти два адреса в одном и том же DRAM-банке — но в разных строках. Для выбора строки, канала и банка расположения памяти используются определенные биты адреса. Однако, каким образом работает функция выборки, не документировано. Поэтому в 2015 году был представлен способ полной автоматизации обратной инженерии соответствующей функции, использующий тот факт, что «строковые конфликты» приводят к увеличению времени доступа к памяти [27].
Подход заключается в поиске адресов, которые сопоставляются с одним и тем же DRAM-банком, но в другой строке, посредством многократного измерения времени доступа к двум случайным адресам. Для некоторых пар адресов время доступа выше, чем для других, — это и означает, что они принадлежат к разным строкам, но к одному и тому же банку. Затем эти адреса группируются в наборы, имеющие один и тот же канал, строку и банк. Эти идентифицированные адреса затем используются для реконструкции функции адресации путем генерации всех линейных функций и применения их ко всем адресам из произвольно выбранного подмножества. Таким образом, поскольку пространство поиска маленькое, метод перебора грубой силой здесь весьма эффективен [1].
Первые реализации атак с использованием эффекта Rowhammer полагались либо на вероятностные методы (из-за чего в процессе атаки могло произойти незапланированное обрушение системы), либо на специализированные функции управления памятью: дедупликацию памяти, паравиртуализацию MMU, интерфейс pagemap. Однако подобные функции на современных устройствах либо недоступны вообще, либо отключены по соображениям безопасности [30].
Поэтому в 2016 году была представлена атака Drammer, свободная от перечисленных недостатков и ограничений. Она опирается только на действующие возможности современных операционных систем, которые доступны без прав суперпользователя, в частности на предсказуемое поведение подсистемы распределения физической памяти. Эта предсказуемость используется для того, чтобы добиться распределения физической памяти (в которой будут обрабатываться конфиденциальные данные, например такие, как таблицы страниц памяти) в выбранном злоумышленником уязвимом месте физической памяти. Соответствующая методика «массажирования памяти» получила название Phys Feng Shui.
Для демонстрации работоспособности атаки Drammer приведена реализация эксплоита, который дает доступ к корневому каталогу для Android-устройства. Этот эксплоит может быть запущен любым приложением без специального разрешения и без использования какой-либо уязвимости программного обеспечения [30].
Таким образом, на примере атаки Drammer было показано, что атаки с использованием эффекта Rowhammer применимы не только для персональных компьютеров (работающих на процессорах Intel и AMD), но и для мобильников (работающих на ARM-процессорах); данная демонстрация показала, что современные программные способы защиты от этой атаки неэффективны и бесполезны [30].
В 2016 году была представлена методика «массажа памяти» Flip Feng Shui (FFS) — новый вектор эксплуатации эффекта Rowhammer, который позволяет злоумышленнику возбуждать предсказуемые битовые перескоки в произвольном месте физической памяти и иметь полный контроль над этим процессом даже при полном отсутствии уязвимостей в атакуемом программном обеспечении. В рамках демонстрации методики FFS скомпрометирован механизм обновления, используемый операционными системами Ubuntu/Debian [31].
В 2017 году было продемонстрировано, что современные MLC NAND модули флеш-памяти, которые используются широко и повсеместно в твердотельных SSD-накопителях, также подвержены атаке, использующей эффект Rowhammer. В результате атаки на эти носители злоумышленник может повредить данные на них. Причем просто одним лишь чтением — без запросов на запись [5].
Дедупликация системной памяти
Подсистема дедупликации контент-ориентированных страниц сканирует всю системную память на идентичные физические страницы памяти и склеивает их в одну физическую страницу. Этот механизм может повысить производительность системы, когда системная память ограничена, например для смартфонов или серверов с большим количеством виртуальных машин [1].
Разделяемая память (прообраз дедупликации) — это общий участок памяти, к которому могут обращаться несколько программ, чтобы обеспечить обмен данными или избежать избыточных копий повторяющегося программного кода в памяти. Разделяемые библиотеки уменьшают объем используемой памяти и увеличивают быстродействие (за счет снижения конкуренции за кеш — ведь код один, и его вытеснять не надо). В числе прочего механизм разделяемой памяти позволяет реализовывать механизм плагинов — когда функции программы заданы не одним исполняемым файлом, а могут подгружаться также и из других мест. В ядре операционной системы механизм разделяемой памяти реализован посредством связывания одной и той же области физической памяти с виртуальными адресными пространствами разных процессов [1].
Дедупликация памяти — широко известная технология уменьшения объема используемой памяти в виртуальных машинах; теперь также по умолчанию используется в ОС Windows 8.1 и 10. Подсистема дедупликации проецирует несколько идентичных копий физических страниц памяти на одну разделяемую копию, с доступом в режиме «копирование при записи». В результате при запросах на чтение каждый процесс получает данные из одной и той же страницы. Если же процесс хочет записать данные, то перед тем, как он сможет это сделать, для него создается отдельная копия страницы. В результате запись в разделенную страницу вызывает «страничный отказ», и, следовательно, запись в разделяемую страницу происходит значительно медленнее, чем запись в обычную страницу. Злоумышленник, способный создавать страницы в целевой системе, может использовать эту разницу во времени, чтобы обнаружить факт существования интересующих его страниц [35].
В 2016 году было продемонстрировано, как посредством атаки по стороннему каналу на подсистему дедупликации злоумышленник может прочитать любые данные из системной памяти. Для этого были представлены три методики. Во-первых, было показано, как благодаря возможности контролировать выравнивание данных в памяти можно наложить конфиденциальную информацию на известный контент, а затем выполнить побайтовое раскрытие конфиденциальных данных (например, рандомизированных 64-битных указателей). Во-вторых, было показано, как даже без возможности контролировать выравнивание, но имея возможность частично перезаписывать данные, злоумышленник все же может добиться побайтового раскрытия конфиденциальных данных. В-третьих, было показано, что, даже когда нет возможности контролировать выравнивание памяти и частично перезаписывать данные, побайтовое раскрытие конфиденциальной информации по-прежнему возможно — посредством побуждения целевого процесса создавать большое количество взаимосвязанных страниц [35].
Для демонстрации трех этих атак по стороннему каналу на подсистему дедупликации была представлена действующая JavaScript-атака на новый браузер Microsoft Edge — в условиях отсутствия программных ошибок и при активном состоянии всех доступных защит. В результате этой атаки злоумышленник получает полный доступ к адресному пространству браузера с возможностью чтения и записи данных. Кроме того, на примере популярного веб-сервера nginx было продемонстрировано, как, используя ту же самую технику, можно захватить всю системную память: выйти из изолированной среды браузера и провести атаку на любой другой независимый процесс, работающий в той же самой системе [35].
Таким образом, расширение функциональности операционных систем приводит к постоянно расширяющейся поверхности возможных атак. Даже на первый взгляд безвредные функции, такие как дедупликация памяти, в руках продвинутого злоумышленника могут повлечь за собой фатальные последствия [35].
Псевдоизоляция ядра операционной системы
ASLR (псевдослучайное распределение адресного пространства) скрывает конфиденциальную информацию (теневые стеки и скрытые регионы) в случайном месте очень обширного адресного пространства. Значительная часть «дерандомизирующих» атак опирается на сложные реализации сторонних каналов или зондирование областей отображаемой памяти. Если предположить, что в реализации «скрытых регионов» нет слабых мест, то эти атаки обычно приводят к многочисленным сбоям в системе и к другим видимым побочным эффектам. По этой причине многие исследователи считают, что псевдоизоляция с использованием ASLR по-прежнему достаточно сильна [33].
Однако в 2016 году была представлена мощная методика взлома ASLR и нахождения скрытых регионов на 32- и 64-разрядных платформах Linux, с использованием очень малого количества «вредоносных манипуляций». Оригинальность предложенной методики в том, что она, вместо того чтобы обращаться к выделенным областям памяти, оперирует невыделенным адресным пространством — посредством многократного выделения больших кусков памяти. Такие манипуляции позволяют злоумышленнику определить местоположение скрытых регионов. Таким образом, ASLR больше не является сильной защитой [33].
Современные ядра операционных систем используют ASLR, чтобы уберечь операционную систему от атак, полагающихся на знание виртуальных адресов, в частности так называемого возвратно-ориентированного программирования (ROP). Это необходимо, поскольку код ядра, так же как и код пользовательских программ, содержит ошибки, которые могут быть использованы для подрыва безопасности системы. Поэтому современные операционные системы стараются изолировать код ядра от пользовательского пространства [37].
В мае 2017 года была представлена защитная система KAISER, которая претендует на то, что надежно изолирует ядро операционной системы от пользовательского адресного пространства. Но, несмотря на маркетинговые заверения, облаченные в технически убедительные аргументы, она, по сути, не решает проблемы, поскольку действует на программном уровне [37]. В частности, KAISER не может противодействовать атаке на BTB (целевой буфер ветвлений), представленной в 2016 году [36].
В 2016 году была представлена атака на буфер ветвлений (BTB). BTB-индексирование полагается на 30 младших бит виртуального адреса. Точно так же, как в уже представленных кеш-атаках, атакующий занимает части BTB, выполняя последовательно несколько инструкций перехода. Если ядро операционной системы использует виртуальные адреса с теми же 30-битовыми значениями, что и атакующий, эта выбранная последовательность команд будет занимать больше времени. Посредством целевого выполнения системных вызовов атакующий может получить информацию о виртуальных адресах кода, который выполняется во время системного вызова. BTB-атака может быть использована для обхода защитного механизма псевдоизоляции ядра. Но эта атака пока еще не реализована для последних архитектур, таких как Intel Skylake (Intel Skylake i7-6700K), поскольку эта архитектура еще не была подвергнута обратной инженерии. Однако это лишь вопрос времени [36].
В апреле 2017 года было показано, что псевдоизоляция, основанная на рандомизации выделения памяти, исчерпала себя и в свете существования современных высокоэффективных кеш-атак не может обеспечить достойной защиты [34].
Межъядерные и межпроцессорные скрытые каналы
Скрытые каналы обходят механизмы изоляции в облаке. В частности, скрытые кеш-каналы позволяют передавать несколько сотен килобитов в секунду — между непривилегированными пользовательскими программами, находящимися на разных виртуальных машинах. Однако кеши невелики, разделяемы, и поэтому подобные коммуникации восприимчивы к шуму от любой активности системы и прерываний [29].
Кеш-атаки позволяют реализовать высокопроизводительные межъядерные и межпроцессорные скрытые кеш-каналы на современных смартфонах, используя Flush + Reload, Evict + Reload или Flush + Flush. Скрытый канал позволяет двум непривилегированным приложениям взаимодействовать друг с другом без использования каких-либо системных механизмов передачи данных. Благодаря этому можно вырваться из песочницы и обойти систему «ограниченных разрешений». В частности, на Android злоумышленник может использовать одно приложение, которое имеет доступ к личным контактам владельца устройства, для отправки данных по скрытому каналу другому приложению, имеющему доступ к интернет (см. пример [28]). Таким образом злоумышленник может украсть личную информацию.
Основная идея скрытого канала заключается в том, что отправитель и получатель согласовывают набор адресов памяти какой-нибудь разделяемой библиотеки. Они используют для передачи информации загрузку ячейки в кеш или ее выгрузку оттуда. Например, если такая-то ячейка находится в кеше, то это единичка, а если нет, то нолик. В [1] представлена пакетная реализация передачи данных с возможностью повторного запроса недоставленных пакетов; здесь используется «бит отправки» и «бит подтверждения», которые реализованы по такому же принципу, а также контрольная сумма введена (а-ля TCP по скрытому каналу).
В 2017 году была представлена первая в своем роде реализация скрытого канала, работающего по протоколу SSH, с относительно высокой пропускной способностью (45 Кбит/с); эта реализация обеспечивает отказоустойчивые коммуникации между двумя виртуальными машинами даже в условиях экстремальной зашумленности кеша. Благодаря такому SSH-туннелированию скрытый канал можно использовать, в числе прочего, для коммуникаций посредством Telnet-сервиса [29].
В 2015 году была представлена уникальная в своем роде методика формирования скрытого канала, способная эффективно работать даже при наличии жестких контрмер. Общая методика противодействия эксплуатации скрытых каналов заключается в псевдоизоляции адресного пространства критических процессов — либо посредством выделения памяти случайным образом (чтобы злоумышленник не смог отследить, с какой частью памяти работает целевая программа), либо посредством выделения для выполнения критических операций отдельного ядра процессора или отдельного физического модуля динамической памяти. Рассматриваемая методика формирования скрытого канала опирается на анализ тепловой активности микропроцессорной системы [32].
Для этого используется информация о температуре, на которую влияют происходящие в ядре процессы. Здесь используются следующие два эффекта. Во-первых, остаточные тепловые следы в ядре сохраняются, даже когда процесс прекратил свое исполнение, и этот след частично передается следующему процессу, который на этом ядре начинает исполняться; таким образом, информация об одном процессе может перетекать в другой, который следует за ним по расписанию. Во-вторых, тепловой след влияет и на другие ядра (если эти несколько ядер на одном чипе расположены) [32].
Конечно, пропускная способность скрытого теплового канала весьма ограничена, однако эти каналы вполне подходят для передачи таких конфиденциальных данных, как номера кредитных карт (16 цифр). Так, пропускная способность «теплового канала» на сервере Intel Xeon (с двумя процессорами по восемь ядер) составляет 12,5 бит/с. Номер кредитной карты по такому каналу передается за промежуток от пяти секунд до четырех минут [32].
Также в 2015 году в рамках демонстрации возможностей скрытого теплового канала было показано, что эта методика позволяет идентифицировать приложения на основе их тепловых следов. При этом с течением времени эффективность и производительность скрытых тепловых каналов будет только расти, потому что пользователю предоставляется все более подробная информация о температуре системы — чтобы предпринимать эффективные меры для охлаждения [32].
В 2016 году была представлена новая реализация скрытого канала на Android, которая работает в 250 раз быстрее, чем какие-либо другие ранее предложенные реализации [1].
Библиография
- Moritz Lipp, Daniel Gruss. ARMageddon: Cache Attacks on Mobile Devices // Proceedings of the 25th USENIX Security Symposium. 2016. P. 549–564.
- Robert Callan. A Practical Methodology for Measuring the Side-Channel Signal Available to the Attacker for Instruction-Level Events // 47th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO). December 2014. P. 242–254.
- Junrong Liu. Small Tweaks do Not Help: Differential Power Analysis of MILENAGE Implementations in 3G/4G USIM Cards. Black Hat 2015.
- Herbert Bos, Ben Gras. Reverse Engineering Hardware Page Table Caches Using Side-Channel Attacks on the MMU. 2017.
- Yu Cai, Saugata Ghose. Vulnerabilities in MLC NAND Flash Memory Programming: Experimental Analysis, Exploits, and Mitigation Techniques // 23rd IEEE Symposium on High Performance Computer Architecture, Industrial session, February 2017.
- Yarom Yuval, Falkner Katrina. Flush+Reload: A High Resolution, Low Noise, L3 Cache Side-Channel Attack // Proceedings of the 23rd USENIX Security Symposium. 2014. P. 719–732.
- Gruss Daniel, Maurice Clementine M angard, Stefan. Rowhammer.js: A Remote Software-Induced Fault Attack in JavaScript // In: arXiv:1507.06955v1 2016.
- Gruss Daniel, Maurice Clementine, Wagner Klaus. Flush+Flush : A Stealthier Last-Level Cache Attack // In: arXiv:1511.04594 abs/1511.0. 2015.
- Kim Yoongu, Daly Ross. Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors // Proceeding of the 41st Annual International Symposium on Computer Architecuture. Piscataway, NJ, USA : IEEE Press, 2012 (ISCA ’14).
- Eck Wim. Electromagnetic radiation from video display units: An eavesdropping risk? // Computers and Security. 1985. No. 4. P. 269–286.
- Biham Eli, Shamir Adi. Differential Fault Analysis of Secret Key Cryptosystem // Advances in Cryptology – CRYPTO ’97 Bd. 1294.
- Callan Robert, Zajic Alenka. A Practical Methodology for Measuring the Side-Channel Signal Available to the Attacker for Instruction-Level Events // Proceedings of the 47th Annual IEEE/ACM International Symposium on Microarchitecture. 2014. P. 242–254.
- Genkin Daniel, Pachmanov Lev. ECDH key-extraction via low-bandwidth electromagnetic attacks on PCs // Cryptology ePrint Archive, Report 2016/129.
- Gruss Daniel, Spreitzer, Raphael. Cache template attacks: Automating attacks on inclusive last-level caches // Proceedings of the 24th USENIX Security Symposium. 2015. P. 897–912.
- Seaborn Mark. Exploiting the DRAM rowhammer bug to gain kernel privileges. 2015
- Gruss Daniel. Rowhammer bitflips on Skylake with DDR4. 2016.
- Lanteigne Mark. How Rowhammer Could Be Used to Exploit Weakness Weaknesses in Computer Hardware. 2016.
- Osvik Dag, Shamir Adi. Cache Attacks and Countermeasures: the Case of AES // Topics in Cryptology. 2005. P. 1–20.
- Tromer Eran, Osvik Dag. Efficient cache attacks on AES, and countermeasures // Journal of Cryptology 23(1), 2010. P. 37–71.
- Liu Fangfei, Yarom, Yuval. Last-level cache side-channel attacks are practical // Proceedings of the IEEE Symposium on Security and Privacy Bd. 2015. P. 605–622.
- Irazoqui Gorka, Eisenbarth Thomas. A Shared Cache Attack that Works Across Cores and Defies VM Sandboxing – and its Application to AES // IEEE Symposium on Security and Privacy. 2015.
- Gullasch David, Bangerter Endre. Cache games – Bringing access-based cache attacks on AES to practice // Proceedings of the IEEE Symposium on Security and Privacy. 2011. P. 490–505.
- Irazoqui Gorka, Inci Mehmet. Wait a minute! A fast, cross-VM attack on AES // Lecture Notes in Computer Science Bd. 2014. P. 299–319.
- Yarom Yuval, Benger Naomi. Recovering OpenSSL ECDSA Nonces Using the Flush+Reload Cache Side-channel Attack // Cryptology ePrint Archive, Report 2014/140 (2014).
- Gulmezoglu Berk, Inci Mehmet. A Faster and More Realistic Flush+Reload Attack on AES // Proceedings of the 6th international workshop on Constructive Side-Channel Analysis and Secure Design. 2015. P. 111–126.
- Irazoqui Gorka, IncI Mehmet. Know Thy Neighbor: Crypto Library Detection in Cloud // Proceedings of the Privacy Enhancing Technologies. 2015. P. 25–40.
- Pessl Peter, Gruss Daniel. Reverse Engineering Intel DRAM Addressing and Exploitation. 2015.
- Marforio Claudio, Ritzdorf Hubert. Analysis of the communication between colluding applications on modern smartphones // Proceedings of the 28th Annual Computer Security Applications Conference. 2012. P. 51–60.
- Clementine Maurice, Manuel Webe. Hello from the Other Side: SSH over Robust Cache Covert Channels in the Cloud. 2017.
- Victor van der Veen, Lindorfer. Drammer: Deterministic Rowhammer Attacks on Mobile Platforms // Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. 2016. P. 1675–1689.
- Kaveh Razavi, Ben Gras. Flip Feng Shui: Hammering a Needle in the Software Stack // Proceedings of the 25th USENIX Security Symposium. 2016. P. 1–18.
- Ramya Jayaram Masti, Devendra Rai. Thermal Covert Channels on Multi-core Platforms // Proceedings of the 24th USENIX Security Symposium. 2015. P. 865–880.
- Angelos Oikonomopoulos. Poking Holes in Information Hiding // Proceedings of the 25th USENIX Security Symposium. 2016. P. 121–138.
- Koen Koning, Herbert Bos. No Need to Hide: Protecting Safe Regions on Commodity Hardware // Proceedings of the Twelfth European Conference on Computer Systems. 2017. P. 437–452.
- Erik Bosman, Kaveh Razavi. Dedup Est Machina: Memory Deduplication as an Advanced Exploitation Vector // Proceedings of the IEEE Symposium on Security and Privacy. 2016. P. 987–1004.
- Evtyushkin, D., Ponomarev, D. Jump over ASLR: Attacking branch predictors to bypass ASLR // Proceedings of the 49th International Symposium on Microarchitecture. 2016. P. 1–13.
- Daniel Gruss, Moritz Lipp. KASLR is Dead: Long Live KASLR. 2017.
Читайте ещё больше платных статей бесплатно: https://t.me/nopaywall