Хотя мобильные устройства пользуются всё большим и большим спросом, а атаки на кэш-память по обходным каналам (далее по тексту – кэш-атаки) представляют собой мощнейший способ взлома современной микропроцессорной электроники, до 2016 года существовало лишь несколько публикаций о применимости этих атак к смартфонам. Причём эти ранние публикации ограничивались рассмотрением атак на AES-таблицу и не затрагивали более современные методы межъядерных атак: Prime+Probe [6], Flush+Reload [6], Evict+Reload [7], Flush+Flush [8], Rowhammer [9]. Кроме того, до 2016 года считалось, что межъядерные кэш-атаки можно осуществить только на платформах Intel и AMD, однако недавно они были осуществлены и для ARMированных платформ (на смартфонах и других мобильных устройствах). [6]


В последние годы наблюдается бурный всплеск интереса со стороны специалистов кибербезопасности – к кэш-атакам на смартфоны. Данная статья представляет собой аналитический обзор основных открытий в этой области за период с 2015 по 2017.


– История обходных каналов
– Чем так уникальны кэш-атаки на ARM
– Разновидности кэш-атак
– – Evict+Time
– – Prime+Probe
– – Flush+Reload
– – Evict+Reload
– – Flush+Flush
– – AnC
– Эффект Rowhammer
– Дедубликация системной памяти
– Псевдоизоляция ядра операционной системы
– Межъядерные и межпроцессорные скрытые каналы



Что касается кэш-атак на 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» с процессором «CortexA53» архитектуры 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) загружена программой-жертвой (эта проверка осуществляется посредством измерения времени доступа к ячейке памяти). В 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 – в условиях отсутствия программных ошибок и при активном состоянии всех доступных защит. В результате этой атаки злоумышленник получает полный доступ к адресному пространству браузера; с возможностью чтения и записи данных. Кроме того, на примере популярного веб-сервера ngnix было продемонстрировано, как используя ту же самую технику, можно захватить всю системную память: выйти из изолированной среды браузера и провести атаку на любой другой независимый процесс, работающий в той же самой системе. [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 (с двумя процессорами по 8 ядер) составляет 12,5бит/с. Номер кредитной карты по такому каналу передаётся от 5 секунд до 4 минут. [32]
  • Также в 2015 году в рамках демонстрации возможностей скрытого теплового канала было показано, что эта методика позволяет идентифицировать приложения на основе их тепловых следов. При этом, с течением времени эффективность и производительность скрытых тепловых каналов будет только расти, потому что пользователю предоставляется всё более подробная информация о температуре системы – чтобы он мог предпринимать эффективные меры по охлаждению. [32]
  • В 2016 году была представлена новая реализация скрытого канала на Android, которая работает в 250 раз быстрее, чем какие-либо другие ранее предложенные реализации. [1]

Библиография

1. Moritz Lipp, Daniel Gruss. ARMageddon: Cache Attacks on Mobile Devices // Proceedings of the 25th USENIX Security Symposium. 2016. pp. 549-564.
2. 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), Pages 242-254, December 2014.
3. Junrong Liu. Small Tweaks do Not Help: Differential Power Analysis of MILENAGE Implementations in 3G/4G USIM Cards. BlackHat 2015.
4. Herbert Bos, Ben Gras. Reverse Engineering Hardware Page Table Caches Using Side-Channel Attacks on the MMU. 2017.
5. 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.
6. Falkner Katrina. Flush+Reload: A High Resolution, Low Noise, L3 Cache Side-Channel Attack // Proceedings of the 23rd USENIX Security Symposium. 2014. pp. 719–732.
7. Gruss Daniel, Maurice Clementine M angard, Stefan. Rowhammer.js: A Remote Software-Induced Fault Attack in JavaScript. 2016.
8. Gruss Daniel, Wagner Klaus. Flush+Flush: A Stealthier Last-Level Cache Attack. 2015.
9. 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).
10. Eck Wim. Electromagnetic radiation from video display units: An eavesdropping risk? // Computers and Security. No. 4, 1985. pp. 269-286.
11. Biham Eli, Shamir Adi. Differential Fault Analysis of Secret Key Cryptosystem // Advances in Cryptology – CRYPTO ’97 Bd. 1294.
12. 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. pp. 242–254.
13. Genkin Daniel. ECDH key-extraction via low-bandwidth electromagnetic attacks on PCs // Cryptology ePrint Archive, Report 2016/129.
14. Gruss Daniel. Cache template attacks: Automating attacks on inclusive last-level caches // Proceedings of the 24th USENIX Security Symposium. 2015. pp. 897–912.
15. Seaborn Mark. Exploiting the DRAM rowhammer bug to gain kernel privileges. 2015.
16. Gruss Daniel. Rowhammer bitflips on Skylake with DDR4. 2016.
17. Lanteigne Mark. How Rowhammer Could Be Used to Exploit Weakness Weaknesses in Computer Hardware. 2016.
18. Osvik Dag, Shamir Adi. Cache Attacks and Countermeasures: the Case of AES // Topics in Cryptology. 2005. pp. 1-20.
19. Tromer Eran, Osvik Dag. Efficient cache attacks on AES, and countermeasures // Journal of Cryptology. 23(1), 2010. pp. 37-71.
20. Liu Fangfei, Yarom, Yuval. Last-level cache side-channel attacks are practical // Proceedings of the IEEE Symposium on Security and Privacy Bd. 2015. pp. 605-622.
21. 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.
22. 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. pp. 490-505.
23. Irazoqui Gorka, Inci Mehmet. Wait a minute! A fast, cross-VM attack on AES // Lecture Notes in Computer Science Bd. 2014. pp. 299-319.
24. Yarom Yuval, Benger Naomi. Recovering OpenSSL ECDSA Nonces Using the Flush+Reload Cache Side-channel Attack // Cryptology ePrint Archive, Report 2014/140 (2014).
25. 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. pp. 111-126.
26. Irazoqui Gorka, IncI Mehmet. Know Thy Neighbor: Crypto Library Detection in Cloud // Proceedings of the Privacy Enhancing Technologies. 2015. pp. 25–40.
27. Pessl Peter, Gruss Daniel. Reverse Engineering Intel DRAM Addressing and Exploitation. 2015.
28. Marforio Claudio, Ritzdorf Hubert. Analysis of the communication between colluding applications on modern smartphones // Proceedings of the 28th Annual Computer Security Applications Conference. 2012. pp. 51-60.
29. Clementine Maurice, Manuel Webe. Hello from the Other Side: SSH over Robust Cache Covert Channels in the Cloud. 2017.
30. 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. pp. 1675-1689.
31. Kaveh Razavi, Ben Gras. Flip Feng Shui: Hammering a Needle in the Software Stack // Proceedings of the 25th USENIX Security Symposium. 2016. pp. 1-18.
32. Ramya Jayaram Masti, Devendra Rai. Thermal Covert Channels on Multi-core Platforms // Proceedings of the 24th USENIX Security Symposium. 2015. pp. 865-880.
33. Angelos Oikonomopoulos. Poking Holes in Information Hiding // Proceedings of the 25th USENIX Security Symposium. 2016. pp. 121-138.
34. Koen Koning. No Need to Hide: Protecting Safe Regions on Commodity Hardware // Proceedings of the Twelfth European Conference on Computer Systems. 2017. pp. 437-452.
35. Erik Bosman. Dedup Est Machina: Memory Deduplication as an Advanced Exploitation Vector // Proceedings of the IEEE Symposium on Security and Privacy. 2016. pp. 987-1004.
36. Evtyushkin, D., Ponomarev, D. Jump over ASLR: Attacking branch predictors to bypass ASLR // Proceedings of the 49th International Symposium on Microarchitecture. 2016. pp. 1-13.
37. Daniel Gruss, Moritz Lipp. KASLR is Dead: Long Live KASLR. 2017.

Комментарии (2)


  1. DrunkBear
    10.06.2019 18:03

    45кб/с хватит на небольшой скрытый мессенжер?


  1. Peter03
    11.06.2019 00:03

    Опосредованные атаки?