Intel MPX

редактировать

Intel MPX (Защита памяти Extensions ) - это набор расширений для x86 архитектуры набора команд. Благодаря поддержке компилятора, библиотеки времени выполнения и операционной системы Intel MPX заявила о повышении безопасности программного обеспечения путем проверки ссылок на указатели, чьи обычные намерения во время компиляции злонамеренно используются во время выполнения из-за переполнения буфера. На практике в дизайне было обнаружено слишком много недостатков, чтобы его можно было использовать, а поддержка была объявлена ​​устаревшей или удалена из большинства компиляторов и операционных систем.

Содержание

  • 1 Расширения
  • 2 Поддержка программного обеспечения
  • 3 Анализ Intel MPX
    • 3.1 Meltdown
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Расширения

Intel MPX вводит новые границы регистров и новые расширения набора команд, которые работают с этими регистрами. Кроме того, имеется новый набор «связанных таблиц», в которых хранятся границы, превышающие то, что может поместиться в регистры границ.

MPX использует четыре новых 128-битных регистра границ, от BND0до BND3, каждый из которых хранит пару значений 64-битной нижней границы (LB) и верхней границы (UB) буфера. Верхняя граница сохраняется в форме с дополнением до единиц, где BNDMK(создать границы) и BNDCU(проверить верхнюю границу), выполняя преобразование. Архитектура включает два регистра конфигурации BNDCFGx(BNDCFGUв пользовательском пространстве и BNDCFGSв режиме ядра) и регистр состояния BNDSTATUS, который предоставляет адрес памяти и код ошибки в случае исключения.

Двухуровневая трансляция адресов используется для сохранения границ в памяти. Верхний уровень состоит из Bounds Directory (BD), созданного при запуске приложения. Каждая запись BD либо пуста, либо содержит указатель на динамически созданную таблицу границ (BT), которая, в свою очередь, содержит набор границ указателя вместе с линейными адресами указателей. Инструкции загрузки (BNDLDX) и сохранения (BNDSTX) прозрачно выполняют преобразование адресов и границы доступа в соответствующей записи BT.

Intel MPX был представлен как часть микроархитектуры Skylake.

Микроархитектура Intel Goldmont также поддерживает Intel MPX.

Поддержка программного обеспечения

  • GNU Compiler Collection (GCC) 5.0 добавлена ​​поддержка MPX. В 2018 году поддержка этих расширений прекратилась из-за бремени обслуживания и разработчиков Intel, периодически вносящих исправления, что привело к предложению прекратить поддержку в GCC 9.0. Поддержка была удалена в GCC 9.1.
  • Компилятор Intel C ++ (icc) 15.0 добавил поддержку Intel MPX.
  • Программная поддержка уровня ядра для Intel MPX была объединена с основной веткой ядра Linux. в версии ядра 3.19, выпущенной 8 февраля 2015 года. В 2018 году Томас Глейкснер предложил удалить поддержку MPX из ядра Linux 4.18. Запрос на вытягивание с его удалением был опубликован в декабре 2018 года в ходе цикла разработки 4.20, но не был принят. Вторая попытка была предпринята в июле 2019 года. Поддержка MPX была удалена в 5.6.
  • QEMU поддерживал MPX с версии 2.6 и прекратил поддержку в выпуске 4.0.
  • Microsoft Visual Studio 2015 Обновление 1 добавлено экспериментально поддержка MPX.

Анализ Intel MPX

В исследовании изучалось подробное межуровневое разбиение системного стека MPX и сравнение с тремя известными программными системами безопасности памяти (AddressSanitizer, SAFECode, SoftBound) и делает следующие выводы.

  • Несмотря на то, что Intel MPX - это специально разработанный подход с аппаратной поддержкой, он не быстрее, чем подходы на основе программного обеспечения. Новые инструкции Intel MPX могут вызвать замедление до 4 раз в худшем случае, хотя оптимизация компилятора амортизирует его и приводит к накладным расходам времени выполнения в среднем примерно на 50%.
  • В отличие от других решений, Intel MPX не обеспечивает защиты от ошибок безопасности временной памяти.
  • Intel MPX по своей сути не поддерживает многопоточность, что может привести к небезопасным гонкам данных в устаревших многопоточных программах и если компиляторы не синхронизируют границы явно.
  • Intel MPX не поддерживает поддерживают несколько распространенных идиом программирования C / C ++ из-за ограничений на допустимую структуру памяти.
  • Intel MPX конфликтует с некоторыми другими расширениями ISA, что приводит к проблемам с производительностью и безопасностью. В частности, эти проблемы возникают, когда Intel MPX используется в сочетании с Intel TSX и Intel SGX.
  • . Наконец, инструкции MPX приводят к значительному снижению производительности (15 +%) даже на более ранних поколениях процессоров Intel. без поддержки MPX (например, Haswell).

Кроме того, в обзоре сделан вывод, что MPX не был готов к производству, и AddressSanitizer был лучшим вариантом. Обзор Кости Серебряного из Google, разработчика AddressSanitizer, дал аналогичные результаты.

Meltdown

Еще одно исследование, посвященное изучению возможностей Spectre и Meltdown безопасности уязвимости обнаружили, что Meltdown может использоваться для обхода Intel MPX с помощью аппаратного исключения Bound Range Exceeded (#BR). Согласно их публикации, исследователи смогли осуществить утечку информации через скрытый канал Flush + Reload из стороннего доступа к массиву, защищенному системой MPX. Их Proof Of Concept публично не разглашается.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-24 03:58:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте