• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Timing the Transient Execution - Новая атака по сторонним каналам на процессоры Intel

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Аннотация.

Атака с временным выполнением — это тип атаки, использующий уязвимость современных технологий оптимизации ЦП. Новые атаки появляются быстро. Побочный канал является ключевой частью атак с временным выполнением для утечки данных.

В этой работе мы обнаруживаем уязвимость, заключающуюся в том, что изменение регистра EFLAGS в переходном исполнении может иметь побочный эффект для инструкции Jcc после нее в процессорах Intel. Основываясь на нашем открытии, мы предлагаем новую атаку по побочному каналу, которая использует время как временного выполнения, так и инструкций Jcc для доставки данных. Эта атака кодирует секретные данные в изменение регистра, что немного замедляет время выполнения контекста, что может быть использовано злоумышленником для декодирования данных. Эта атака не зависит от системы кэширования и не требует ручного сброса регистра EFLAGS в исходное состояние перед атакой, что может затруднить ее обнаружение или устранение. Мы реализовали этот побочный канал на машинах с процессорами Intel Core i7-6700, i7-7700 и i9-10980XE. В первых двух процессорах мы объединили его в качестве побочного канала атаки Meltdown, что могло обеспечить 100%-ную вероятность утечки. Мы оцениваем и обсуждаем потенциальные средства защиты от атаки. Наш вклад включает в себя обнаружение уязвимостей безопасности в реализации инструкций Jcc и регистра EFLAGS, а также предложение новой атаки по побочному каналу, которая не зависит от системы кэширования.

ВВЕДЕНИЕ

Возрастающая сложность и агрессивная оптимизация современных ЦП с их многочисленными микроархитектурными особенностями привели к повышению производительности, но также создали ряд уязвимостей в системе безопасности [1], [2]. Эта сложность и оптимизация являются основной причиной многих проблем с безопасностью, включая атаки по сторонним каналам [3], атаки Meltdown [4], [5], атаки Spectre [6], [7], атаки с использованием микроархитектурной выборки данных (MDS) [8]–[10], атака с внедрением ошибок [11]–[16] и другие. Сложный и динамичный характер современных процессоров сделал их сложной целью для исследователей и разработчиков в области безопасности, которую необходимо обнаружить и устранить, а также постоянным источником беспокойства для пользователей. Поскольку область компьютерной безопасности продолжает развиваться, потребуются новые методы и меры противодействия, чтобы идти в ногу с постоянно меняющимся ландшафтом угроз.

Ряд микроархитектурных атак по сторонним каналам основан на побочных эффектах и состоянии системы кэширования. Есть много способов утечки информации через кеш-систему. После первой атаки кэш-тайминга, о которой сообщил Bern-stein в 2005 году [17]. Несколько вариантов, таких как evict+time (2006) [18], flush+reload (2014) [19], prime+probe (2015) [3], flush+flush (2016) [20]. Новые атаки по сторонним каналам кэша все еще обнаруживаются, например, атаки в политиках замены кэша (2020 г.) [21], оптимизации (2021 г.) [22], использовании грязных состояний кэша (2022 г.) [23], когерентности кэша (2022 г.) [22]. 24]. Кроме того, некоторые атаки не зависят напрямую от системы кэширования, например, PortSmash [25], PlatyPus(2021) [26], PMU-Spill [27].

Атаки с временным выполнением [28], включая атаки Meltdown, Spec-tre и MDS, используют сложную и агрессивную оптимизацию [10] современных процессоров для утечки конфиденциальной информации через переходные состояния. В общем обзоре [28] атаки с временным выполнением состоят из пяти фаз: (1) подготовка микроархитектуры, (2) инициирование ошибки, (3) кодирование секретных данных в скрытый канал, (4) сброс переходных инструкций и (5) декодирование секретных данных. Успех фаз 3 и 4 зависит от побочных каналов, которые требуют, чтобы состояние канала было инициализировано или установлено в определенное состояние. Например, в атаке flush+reload [19] злоумышленнику необходимо сбросить отслеживаемую строку памяти из кеша на фазе 1 и закодировать секретные данные, загрузив один индекс строки памяти в кеш на фазе 4. Это позволяет злоумышленник измеряет время загрузки отслеживаемой строки памяти в кэш на этапе 5 для декодирования данных.

Усилия по обратному проектированию, такие как попытки uops.info [29], пытались раскрыть информацию о поведении микроархитектуры процессора, несмотря на отсутствие общедоступных подробностей реализации. Руководство Intel [30] предоставило дополнительную информацию о характеристиках производительности инструкций, подчеркнув, что некоторые инструкции могут вызывать остановки конвейера или другие эффекты из-за их функциональных требований [31]. Например, инструкция MFENCE вводит остановку в конвейере до тех пор, пока не будут завершены все предыдущие операции с памятью. Осведомленность об этих нюансах имеет решающее значение для оптимизации кода, чтобы максимизировать производительность на конкретной архитектуре процессора и выявить потенциальные уязвимости безопасности.

В своей работе мы проводим углубленное исследование поведения и побочных эффектов атак с временным выполнением и обнаруживаем уязвимость реализации в процессорах Intel. В частности, изменение регистра EFLAGS при временном выполнении может повлиять на инструкцию Jcc, следующую за ней. Основываясь на нашем открытии, мы представляем новую атаку по побочному каналу, которая использует время временного выполнения с помощью инструкции Jcc. Изменение EFLAGS при временном выполнении может немного замедлить некоторые инструкции Jcc после него. Как показано на рис. 1, кодируя секретные данные в регистр EFLAGS, мы можем измерить время выполнения контекста инструкции Jcc для декодирования данных без необходимости сбрасывать регистр EFLAGS в исходное состояние в фазе 1 временной атаки.

Эта атака не зависит от системы кэширования, что может затруднить ее обнаружение по сравнению с предыдущими атаками по сторонним каналам. Мы реализуем этот побочный канал на реальных машинах с процессорами Intel Core i7-6700 и i7-7700 и i9-10980XE. Мы строим атаку Meltdown с нашей атакой по сторонним каналам и оцениваем ее на процессорах i7-6700 и i7-7700. На практике наш побочный канал может достичь 100% успеха.

1685266730880.png


Чтобы защититься от этоай атаки, мы предлагаем несколько практических методов защиты, основанных на нашей оценке.

Наше исследование вносит несколько вкладов:

1) Обнаружены уязвимости безопасности в реализации регистра EFLAGS и инструкции Jcc. Изменение регистра EFLAGS во время временного выполнения может повлиять на синхронизацию инструкции Jcc после нее.
2) Мы предлагаем новую атаку по побочному каналу, которая использует время выполнения, на которое влияют инструкции Jcc, которые зависят от регистра EFLAGS. Наша атака отличается от предыдущих атак по сторонним каналам тем, что она не полагается на систему кэширования и не требует сброса исходного состояния на этапе подготовки к атаке с временным выполнением.
3) Мы реализуем этот сайд-канал в процессорах Intel Core i7-6700, i7-7700 и i9-10980XE. Мы построили атаку Meltdown с этим побочным каналом на процессорах Intel Core i7-6700 и i7-7700 на реальной машине, и она может достичь 100% успеха.

Насколько нам известно, регистр EFLAGS впервые используется в качестве побочного канала. Мы надеемся, что наша работа поможет улучшить безопасность будущих процессоров и даст представление об исследованиях атак на микроархитектуру. Исходный код наших атак будет опубликован на https://github.com/.

Оставшаяся часть теста организована следующим образом. В Разделе II мы вводим базовые знания об атаках по сторонним каналам и атаках с временным выполнением. В разделе III мы представляем детали атаки. В разделе IV мы оцениваем нашу атаку на ЦП Intel. В разделе V мы предлагаем несколько способов защиты этого побочного канала. В разделе VI мы обсуждаем ограничения этой атаки и будущую работу. Наконец, мы завершаем нашу работу в разделе VII.

II. Описание

А. Микроархитектура


Микроархитектура [32] каждого ядра ЦП состоит из нескольких компонентов, таких как система кэш-памяти, внешний интерфейс, включающий предсказатель ветвления, модуль выполнения вне очереди и т. д. Ядро ЦП является ядром процессора. ЦП, который отвечает за выполнение инструкций. Кэш-система используется для хранения часто используемых данных и инструкций. Внешний интерфейс отвечает за выборку и декодирование инструкций. Блок внеочередного исполнения отвечает за неупорядоченное выполнение инструкций. Поскольку современный ЦП представляет собой сложную микроархитектурную систему то дляля большинства коммерческих ЦП микроархитектура ЦП представляет собой черный ящик, и многие исследования пытаются реконструировать его [33]–[35].

B. Атаки по сторонним каналам

Атаки по сторонним каналам в микроархитектуре [36] — это класс атак, которые используют побочные эффекты программы для утечки информации о выполнении программы. Побочными эффектами могут быть система кэширования [3], [17]–[21], [37], предсказатель ветвлений [38], [39], мощность [26] и т. д. Например, система кэширования может использоваться для утечки информации о шаблоне доступа к памяти программы. Предсказатель ветвления можно использовать для утечки информации о потоке управления программы. Основной причиной [1] большинства атак по сторонним каналам в микроархитектуре является общий ресурс, который является одним из ключей к оптимизации производительности ЦП.

1685266758409.png


С тех пор как были обнаружены атаки Meltdown [4] и Spectre [6], атаки временного выполнения [28] стали горячей темой в сообществе безопасности. Временное выполнение может быть вызвано ошибкой, неверным предсказанием ветвления, промахом кеша и т. д. Существует несколько вариантов атак с временным выполнением [5], [7]–[10], [40]–[44]. Поставщики IP, такие как Intel и AMD, выпустили обновление микрокода для защиты от атак временного выполнения [45]. Исследователь также предложил некоторые контрмеры для его защиты [1], [28], [46]–[48].

III. ПЕРЕХОДНЫЕ АТАКИ ВРЕМЕНИ ВЫПОЛНЕНИЯ

Предположение: Доступ к секретным данным можно получить с помощью временной атаки выполнения. Существует множество атак с временным выполнением, таких как Meltdown [4], Spectre [6], Foreshadow [5], ZombieLoad [10] и т. д. Хотя большинство существующих атак были смягчены, они могут иметь нераскрытые уязвимости временного выполнения в ЦП и были использованы в дальнейшем [27].

Модель угрозы: Злоумышленник работает в непривилегированном режиме. И есть еще один процесс-жертва, работающий на той же машине. Мы определяем модель угроз в этом исследовании следующим образом: злоумышленник использует временное время выполнения для восстановления секретных данных, полученных в ходе атак с временным выполнением.

B. Обзор атаки

Мы реализуем атаку как побочный канал атаки Meltdown, показанной на рис. 1. Атака состоит из двух фаз. На первом этапе мы запускаем временное выполнение и кодируем секретные данные через регистр EFLAGS. На втором этапе мы измеряем время выполнения контекста инструкции Jcc для декодирования данных. Чтобы закодировать секрет с помощью двоичного флага, нам нужно использовать итерацию test_num для установки флага. Если test_num равен секрету, флаг будет установлен, и секрет будет успешно закодирован.

C. Детали реализации

Мы записываем secret_addr как адрес секретных данных. А смещение — это смещение secret_addr. Инструкция EFLAGS — это инструкция, которая может изменить регистр EFLAGS. Инструкция Jcc — это инструкция, на которую может влиять регистр EFLAGS. Доступный набор инструкций представлен в Таблице I. Мы используем __rdtsc из x86intrin.h для получения счетчика меток времени.

1685266802196.png


secret_addr — это адрес в пространстве ядра. И злоумышленник, работающий в непривилегированном режиме, не может получить доступ к secret_addr. Смещение является смещением secret_addr. В транзакции TSX злоумышленник попытается получить доступ к secret_addr с помощью инструкции sub. Временное выполнение будет вызвано ошибкой. Во время временного выполнения ZF может быть установлен в 1, если секретные данные в *(secret_addr+offest) равны i. И ZF будет восстановлен до 0 после переходного выполнения. ZF будет использоваться инструкцией JZ для определения перехода к равной метке или к неравной метке. В нашем эксперименте, если секретные данные в *(secret_addr+offest) равны i, время выполнения контекста будет медленнее, чем время выполнения контекста, которому секретные данные в *(secret_addr+offest) не равны к I. max_time — это максимальное время выполнения контекста. argmax — это секретные данные, как мы показали распределение на рис. 3. max_time и argmax можно использовать для декодирования секретных данных.

1685266812961.png


IV. ЭКСПЕРИМЕНТ И ОЦЕНКА

А. Экспериментальная установка и результат


Мы реализуем атаку на процессорах Intel i7-6700, i7-7700 и i9-10980XE. Эксперимент проводится в Ubuntu 16.04 xenial с ядром версии 4.15.0 (i7-6700, i7-7700) и Ubuntu 22.04 jammy с ядром версии 5.15.0 (i9-10980XE). Мы выполняем атаку Meltdown с нашим побочным каналом для чтения памяти ядра из пользовательского пространства и достижения 100% успеха утечки на первых двух процессорах.

Б. Оценка

В нашем эксперименте мы обнаружили, что влияние регистра EFLAGS на время выполнения инструкции Jcc не такое постоянное, как состояние кэша. В течение примерно 6-9 циклов после выполнения переходного процесса время выполнения Jcc не будет направлено на создание бокового канала.

Эмпирически атака должна повторяться тысячи раз для более высокой точности. В листинге 1 мы используем Intel TSX, реализацию транзакционной памяти, чтобы полностью подавить исключение. Мы также используем обработчики системных прерываний для подавления исключения и достижения того же эффекта. TSX более эффективен, чем обработчики системных прерываний для атак временного выполнения.

Хотя статистическое распределение argmax по времени можно использовать для декодирования секретных данных. Распределение средних часов из-за шума нельзя использовать в качестве побочного канала, как мы показали на рис. 4.

V. Защита

Для Защиты от атак Transient Execution Timing мы можем использовать два гаджета для задержки инструкции Jcc или перезаписи регистра EFLAGS после временного выполнения.

A. Защита от аппаратных средств

Реализация инструкции Jcc не должна иметь временных или других побочных эффектов в различных условиях, чтобы избежать состязательного измерения выполнения.

B. Задержка Jcc

Если инструкция Jcc не выполняется сразу после изменения регистра EFLAGS, влияние регистра EFLAGS можно уменьшить. 10 циклов достаточно, чтобы уменьшить влияние регистра EFLAGS. .rept count Повторить последовательность строк между директивой .rept и следующей директивой .endr count раз. Используя инструкцию NOP для задержки инструкции Jcc, мы можем уменьшить влияние регистра EFLAGS на время выполнения. Есть много способов задержки, мы приведем здесь только один пример.

C. Перепиcm EFLAGS

Инструкции LAHF и SAHF представляют собой инструкции языка ассемблера x86, которые используются для управления младшими 8 битами регистра FLAGS в процессоре x86 [30]. Инструкция LAHF является сокращением от «Загрузить AH из флагов». Он загружает младшие 8 бит регистра FLAGS в регистр AH, оставляя старшие 8 бит регистра AH без изменений. Регистр AH — это 16-битный регистр, который используется для хранения старшего байта регистра AX. Инструкция SAHF — это сокращение от «Сохранить AH во флагах». Он сохраняет младшие 8 бит регистра AH в младшие 8 бит регистра FLAGS, оставляя старшие 8 бит регистра FLAGS без изменений.

Инструкции PUSHF и POPF — это инструкции языка ассемблера x86, которые используются для помещения и извлечения содержимого регистра FLAGS из стека соответственно. Инструкция PUSHF помещает весь 16-битный регистр FLAGS на вершину стека. Сюда входят флаги состояния, которые используются для указания результата арифметических и логических операций, а также другие флаги управления, управляющие поведением процессора. Инструкция POPF выталкивает содержимое вершины стека в регистр FLAGS. Это можно использовать для восстановления состояния регистра FLAGS после его сохранения предыдущей инструкцией PUSHF.

Переписывая EFLAGS с помощью команд LAHF и SAHF или PUSHF и POPF, можно уменьшить влияние регистра EFLAGS.

VI. ОБСУЖДЕНИЕ И БУДУЩАЯ РАБОТА

Коренные причины этой атаки до сих пор полностью не изучены. Мы предполагаем, что в исполнительном блоке процессора Intel есть какой-то буфер, которому нужно некоторое время, чтобы вернуться, если выполнение должно быть остановлено. Этот процесс вывода вызовет остановку, если следующая инструкция зависит от цели буфера.

А. Ограничение

Эта атака по времени опирается на другие атаки с временным выполнением для создания атаки в реальном мире, и ее легко потревожить шумом. Но это все еще новая атака по побочным каналам, и ее стоит изучить. Эта атака может дать представление о новых атаках на микроархитектуру и предоставить новый способ создания атак по сторонним каналам в ЦП, устойчивом к кешу по сторонним каналам.

1685266862145.png


1685266870682.png


Б. Будущая работа

а) В сочетании с другими атаками временного выполнения: проводятся дополнительные эксперименты, чтобы полностью понять это. Которые будут опубликованы в будущем.

б) Поиск других различных: могут быть другие микроархитектурные компоненты и инструкции, которые можно использовать в качестве побочных каналов синхронизации. Мы продолжим исследовать эту область.

VII. ВЫВОДЫ

Мы представляем новую атаку по побочному каналу, при которой происходит утечка информации из-за времени выполнения. Когда ZF был изменен с 0 на 1 во время временного выполнения, вызванного сбоем в атаке Meltdown, хотя ZF будет восстановлен до 0 после временного выполнения, время выполнения такой инструкции, как JZ, будет немного больше. В результате мы можем получить утечку информации из регистра EFLAGS, измерив время выполнения контекста. По сравнению с предыдущими атаками по сторонним каналам, наша атака не полагается на систему кэширования, что может затруднить ее обнаружение с помощью существующих инструментов или методов [49]–[51].

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

Переведено специально для xss.pro
Автор перевода: yashechka
Источник: arxiv.org/pdf/2304.10877.pdf
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх