TLBleed


TLBleed — аппаратная уязвимость некоторых современных процессоров, имеющих буфер трансляции команд и поддерживающих режим одновременной многопоточности. Уязвимость позволяет пользовательскому приложению (локальному атакующему, при запуске специальной программы), исполняющемся на одном из аппаратных потоков, несанкционированно извлекать информацию об исполнении другого потока при помощи скрытого канала. Утечка информации потенциально может использоваться для получения надежного доступа к конфиденциальным данным, обрабатываемым другим потоком.

Краткое описание

TLBleed является атакой по стороннему каналу и поэтому имеет общие черты с другими уязвимостями микропроцессоров, такими как Meltdown и Spectre. Традиционный подход при эксплуатации подобных уязвимостей основывается на измерении времени доступа к отдельным ячейкам кэша процессора для определения, какие конкретные ячейки были загружены в кеш атакуемым процессом. Таким образом удается извлечь косвенную информацию об исполнении и защищенных данных процесса-жертвы. В случае атаки TLBleed побочным каналом является не обычный кэш с данными, а буфер ассоциативной трансляции (TLB) — специальный кеш, хранящий соответствия между страницами виртуальной памяти и страницами физической памяти процессора, использующийся для ускорения трансляции виртуальных адресов. Ключевая возможность атаки обеспечивается тем, что в реализации режима одновременной многопоточности (SMT) в процессорах Intel буфер ассоциативной трансляции является общим и используется всеми аппаратными потоками одновременно (подобный сторонний канал может существовать и в реализациях микропроцессоров других компаний, однако подобный анализ до сих пор не был произведен).

Суть атаки заключается в следующем. По времени доступа к отдельным ячейкам TLB определяется, к каким страницам памяти обращается атакуемый процесс. При этом даже минимальной гранулярности адресации (4096 байт на современных системах) недостаточно для прямого получения данных атакуемого процесса (например, уязвимость Meltdown использует косвенную адресацию для подгрузки и последующей идентификации конкретной ячейки кеша, адрес которой определяет часть секрета). Однако с помощью анализа характера доступа в память (порядка обращения к страницам памяти, промежутков между обращениями) с использованием методов машинного обучения удается идентифицировать участок исполняемого кода. В случае, если, например, в алгоритме шифрования при обработке логической «1» вызывается один участок кода, а при обработке логического «0» — другой, оказывается возможным полностью восстановить шифруемые данные.

История

Изначальное исследование было обнародовано группой ученых свободного Амстердамского университета 22 июня 2018 г. Детали уязвимости были позже раскрыты руководителем проекта Беном Грасом на конференции по компьютерной безопасности Black Hat. Несмотря на то, что уязвимость была продемонстрирована на многих процессорах Intel нескольких современных архитектур, компания отказалась подать заявку на присвоение CVE-идентификатора уязвимости, ссылаясь на её незначимость. По мнению исследователей, такая позиция не отражает реального положения дел, поскольку TLBleed является существенно новым типом атаки, представляет существенную угрозу и может служить отправной точкой для поиска других сходных уязвимостей.

Механизм

Для реализации описанной атаки требуется решить ряд технических проблем:

  • Выяснить предварительно конфигурацию TLB (ассоциативность, размер) на используемом процессоре. Для этого можно использовать открытые источники информации или использовать реверс-инжиниринг, используя низкоуровневые инструкции. Помимо данных о параметрах TLB требуется так же выяснить соответствие между виртуальными адресами и ячейками TLB, чтобы иметь впоследствии возможность отслеживания состояния произвольных ячеек, обращаясь к требуемым виртуальным адресам. В простейшем случае ячейка буфера ассоциативной трансляции определяется младшими битами адреса страницы, однако могут использоваться и более сложные функции отображения, такие как побитовое исключающее ИЛИ номера потока и определенных бит адреса страницы.
  • Найти способ отслеживания обращений атакуемого процесса к ячейкам TLB. Авторы исследования используют классическую атаку по времени доступа для определения, использовалась ли процессом-жертвой некоторая ячейка TLB. Дополнительную сложность вносит тот факт, что, как правило, буфер ассоциативной трансляции в современных процессорах представляет собой двухуровневую структуру (по аналогии с иерархической организацией кеша, L1 TLB и L2 TLB). Тем не менее по времени доступа можно определить, находится ли адрес требуемой страницы в TLB одного из уровней (в противном случае выполняется процедура многоуровневой трансляции виртуального адреса, занимающая сотни циклов работы процессора).
  • Запустить вредоносный код на одном и том же аппаратном ядре с потоком процесса-жертвы. Утверждается, что выполнение этого условия для реальной реализации уязвимости очень сложно и требует нетривиальных усилий. Однако современные операционные системы предоставляют механизмы привязки процессов к конкретным аппаратным ядрам процессора, что существенно упрощает задачу.
  • Использование статистики обращений процесса-жертвы к различным ячейкам TLB для восстановления информации об исполнении атакуемого процесса. Атакующему предоставляется полная свобода выбора в том, как и какую информацию извлекать из собранной статистики. В частности, можно пытаться определять, какой участок кода исполняет атакуемый процесс в тот или иной момент времени. При этом задача ставится как восстановление зависимости X → ( t ) → y {displaystyle {overrightarrow {X}}(t) ightarrow y} , где X → ( t ) {displaystyle {overrightarrow {X}}(t)} — вектор обращений в ячейки TLB в зависимости от времени, а y {displaystyle y} — искомый участок кода. Во многих случаях этой информации оказывается достаточно для точного воспроизведения обрабатываемых данных. В частности, в алгоритмах шифрования исполняются те или иные операции в зависимости от поступающих битов, что и позволяет эксплуатировать уязвимость.

Влияние

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

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

Механизмы защиты

  • Основной и очевидный метод устранения уязвимости — отключение режима одновременной многопоточности (Hyper Threading). Очевидно, отключение SMT ведет к сильному падению производительности и неэффективному использованию аппаратуры микропроцессора. Применен в системе OpenBSD.
  • Программное разделение доступа аппаратных потоков в линии кеша TLB. Для использования метода требуется запретить каждому из аппаратных потоков доступ в определенные области виртуальной памяти, так, чтобы в результате линии TLB, используемые потоками, не пересекались. Метод сложен для реализации, так как нарушает концепцию целостной виртуальной памяти. Однако потенциально такой подход может быть применен на уровне операционной системы и не требует изменения аппаратуры.
  • Аппаратное разделение доступа потоков в TLB. Фактически требует разделения общего TLB на несколько независимых буферов адресуемых каждым из потоков отдельно. Следует ожидать деградации производительности вследствие снижения суммарного размера TLB в расчете на один аппаратный поток.


Имя:*
E-Mail:
Комментарий: