TLBleed

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

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

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

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

История

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

Механизм

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

  • Выяснить предварительно конфигурацию TLB (ассоциативность, размер) на используемом процессоре. Для этого можно использовать открытые источники информации[4] или использовать реверс-инжиниринг, используя низкоуровневые инструкции[5]. Помимо данных о параметрах TLB требуется также выяснить соответствие между виртуальными адресами и ячейками TLB, чтобы иметь впоследствии возможность отслеживания состояния произвольных ячеек, обращаясь к требуемым виртуальным адресам. В простейшем случае ячейка буфера ассоциативной трансляции определяется младшими битами адреса страницы, однако могут использоваться и более сложные функции отображения, такие как побитовое исключающее ИЛИ номера потока и определённых бит адреса страницы.
  • Найти способ отслеживания обращений атакуемого процесса к ячейкам TLB. Авторы исследования используют классическую атаку по времени доступа, чтобы определить, использовалась ли процессом-жертвой некоторая ячейка TLB. Дополнительную сложность вносит тот факт, что, как правило, буфер ассоциативной трансляции в современных процессорах представляет собой двухуровневую структуру (по аналогии с иерархической организацией кэша, L1 TLB и L2 TLB). Тем не менее по времени доступа можно определить, находится ли адрес требуемой страницы в TLB одного из уровней (в противном случае выполняется процедура многоуровневой трансляции виртуального адреса, занимающая сотни циклов работы процессора).
  • Запустить вредоносный код на одном и том же аппаратном ядре с потоком процесса-жертвы. Утверждается, что выполнение этого условия для реальной реализации уязвимости очень сложно и требует нетривиальных усилий. Однако современные операционные системы предоставляют механизмы привязки процессов к конкретным аппаратным ядрам процессора, что существенно упрощает задачу[6].
  • Использование статистики обращений процесса-жертвы к различным ячейкам TLB для восстановления информации об исполнении атакуемого процесса. Атакующему предоставляется свобода выбора в том, как и какую информацию извлекать из собранной статистики. В частности, можно пытаться определять, какой участок кода исполняет атакуемый процесс в тот или иной момент времени. При этом задача сводится к восстановлению зависимости , где  — вектор обращений в ячейки TLB в зависимости от времени, а  — искомый участок кода. Во многих случаях этой информации оказывается достаточно для точного воспроизведения обрабатываемых данных. В частности, в алгоритмах шифрования исполняются те или иные операции в зависимости от поступающих битов, что и позволяет эксплуатировать уязвимость.

Влияние

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

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

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

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

Примечания

  1. Black Hat USA 2018. www.blackhat.com. Дата обращения: 19 декабря 2018. Архивировано 7 января 2019 года.
  2. TLBleed Side-Channel CPU Attack Detailed at Black Hat. eWEEK. Дата обращения: 19 декабря 2018.
  3. 1 2 Williams, Chris. Meet TLBleed: A crypto-key-leaking CPU attack that Intel reckons we shouldn't worry about (англ.), The Register (22 June 2018). Архивировано 8 декабря 2018 года. Дата обращения: 19 декабря 2018.
  4. WikiChip (англ.). en.wikichip.org. Дата обращения: 19 декабря 2018. Архивировано 26 октября 2020 года.
  5. “RevAnC: A Framework for Reverse Engineering Hardware Page Table Caches” (PDF). the 10th European Workshop [англ.]. Архивировано из оригинала (PDF) 2018-12-20. Дата обращения 2018-12-20.
  6. sched_setaffinity(2) - Linux manual page. man7.org. Дата обращения: 19 декабря 2018. Архивировано 20 декабря 2018 года.
  7. Halfacree, Gareth. Researchers warn of TLBleed Hyper-Threading vuln (англ.), bit-tech.net (25 June 2018). Архивировано 13 февраля 2019 года. Дата обращения: 19 декабря 2018.
  8. 1 2 3 OpenBSD chief de Raadt says no easy fix for new Intel CPU bug (англ.). www.itwire.com (25 июня 2018). Дата обращения: 25 июня 2018. Архивировано 25 июня 2018 года.
  9. OpenBSD disables hyperthreading support for Intel CPUs due to likely data leaks (англ.). www.itwire.com (21 июня 2018). Дата обращения: 19 декабря 2018. Архивировано 9 июля 2018 года.

Ссылки