Intel MPX ( расширения защиты памяти ) - это набор расширений для архитектуры набора команд x86 . С помощью компилятора , библиотеки времени выполнения и поддержки операционной системы Intel MPX заявила, что повышает безопасность программного обеспечения , проверяя ссылки на указатели, чьи обычные намерения во время компиляции злонамеренно используются во время выполнения из-за переполнения буфера.. На практике в дизайне было обнаружено слишком много недостатков, чтобы его можно было использовать, а поддержка была объявлена устаревшей или удалена из большинства компиляторов и операционных систем. Intel указала MPX как аппаратное обеспечение, удаленное в 2019 году и далее в разделе 2.5 Руководства разработчика программного обеспечения Intel® 64 и IA-32, том 1 [1]
Расширения
Intel MPX представляет новые регистры границ и новые расширения набора команд, которые работают с этими регистрами. Кроме того, есть новый набор «связанных таблиц», в которых хранятся границы, превышающие те, которые могут уместиться в регистрах границ. [2] [3] [4] [5] [6]
MPX использует четыре новых 128-битных регистров ограничивает, BND0
чтобы BND3
, каждый из которых хранит пару 64-битных снизу (LB) и верхняя граница значений (UB) буфера. Верхняя граница сохраняется в форме дополнения единиц , при этом BNDMK
(создать границы) и BNDCU
(проверить верхнюю границу) выполнить преобразование. Архитектура включает два регистра конфигурации BNDCFGx
( BNDCFGU
в пользовательском пространстве и BNDCFGS
в режиме ядра) и регистр состояния BNDSTATUS
, который предоставляет адрес памяти и код ошибки в случае исключения. [7] [8]
Двухуровневая трансляция адресов используется для хранения границ в памяти. Верхний уровень состоит из Bounds Directory (BD), создаваемого при запуске приложения. Каждая запись BD либо пуста, либо содержит указатель на динамически создаваемую таблицу границ (BT), которая, в свою очередь, содержит набор границ указателя вместе с линейными адресами указателей. Инструкции bounds load ( BNDLDX
) и store ( BNDSTX
) прозрачно выполняют преобразование адресов и границы доступа в соответствующей записи BT. [7] [8]
Intel MPX был представлен как часть микроархитектуры Skylake . [9]
Микроархитектура Intel Goldmont также поддерживает Intel MPX. [9]
Поддержка программного обеспечения
- В GNU Compiler Collection (GCC) 5.0 добавлена поддержка MPX. [10] В 2018 году поддержка этих расширений прекратилась из-за бремени обслуживания и разработчиков Intel, периодически добавляющих исправления, что привело к предложению прекратить поддержку в GCC 9.0. [11] Поддержка была удалена в GCC 9.1. [12]
- В компилятор Intel C ++ (icc) 15.0 добавлена поддержка Intel MPX. [10]
- Kernel -LEVEL поддержка программного обеспечения для Intel MPX была слита в Linux ядра магистрального в ядре версии 3.19, который был выпущен 8 февраля 2015 года [13] [14] В 2018 году, Томас Gleixner предложил удаление поддержки MPX из Linux ядра 4.18. [15] Запрос на извлечение с его удалением был опубликован в декабре 2018 года, во время цикла разработки 4.20 [16], но не был принят. Вторая попытка была предпринята в июле 2019 года. [17] Поддержка MPX была удалена в версии 5.6. [18]
- QEMU поддерживал MPX с версии 2.6 [19] и прекратил поддержку в выпуске 4.0. [20]
- В Microsoft Visual Studio 2015 с обновлением 1 добавлена экспериментальная поддержка MPX. [21]
Анализ Intel MPX
В исследовании было изучено подробное межуровневое расслоение системного стека MPX и сравнение с тремя известными программными механизмами защиты памяти ( AddressSanitizer , SAFECode и SoftBound) и представлены следующие выводы. [8]
- Несмотря на то, что 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.
Кроме того, обзор пришел к выводу, что MPX не был готов к производству, и AddressSanitizer был лучшим вариантом. [8] Обзор Кости Серебряного из Google, разработчика AddressSanitizer, [22] дал аналогичные выводы. [23]
Meltdown
Другое исследование [24], изучающее объем уязвимостей безопасности Spectre и Meltdown, обнаружило, что Meltdown можно использовать для обхода Intel MPX с помощью аппаратного исключения Bound Range Exceeded (#BR). Согласно их публикации, исследователи смогли осуществить утечку информации через скрытый канал Flush + Reload из стороннего доступа к массиву, защищенному системой MPX. Их Proof Of Concept публично не разглашается.
Смотрите также
- Ключи защиты памяти
- Расширения Software Guard
Рекомендации
- ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32 Том 1: Базовая архитектура . Intel . Ноябрь 2020 . Источник 2021-03-03 .
- ^ «Расширения Intel ISA» . Intel . Проверено 4 ноября 2013 .
- ^ «Введение в расширения защиты памяти Intel» . Intel . 2013-07-16 . Проверено 10 сентября 2013 .
- ^ «Обсуждение расширений защиты памяти Intel (MPX) и сравнение с AddressSanitizer» . code.google.com . Проверено 4 ноября 2013 .
- ^ «Поддержка Intel® Memory Protection Extensions (Intel® MPX) в компиляторе GCC» . gcc.gnu.org . Проверено 4 ноября 2013 .
- ^ «Объяснение Intel MPX: сохранение границ в памяти» . intel-mpx.github.io . Проверено 6 февраля 2017 .
- ^ а б «Справочник по программированию расширений набора команд архитектуры Intel» (PDF) . Intel . Декабрь 2013 . Проверено 17 января 2014 .
- ^ а б в г Олексенко, Алексей; Кувайский, Дмитрий; Бхатотия, Прамод; Фельбер, Паскаль; Фетцер, Кристоф (2017). «Объяснение Intel MPX: эмпирическое исследование Intel MPX и подходов к проверке границ на основе программного обеспечения». arXiv : 1702.00719 [ cs.CR ].
- ^ а б «Эмулятор разработки программного обеспечения Intel» . Intel . 2012-06-15 . Проверено 4 ноября 2013 .
- ^ а б «Дизайн Intel MPX» . Intel.
- ^ «Похоже, что GCC 9 откажется от поддержки Intel MPX» . Фороникс . Проверено 27 апреля 2018 .
- ^ «Поддержка Intel MPX удалена из GCC 9 - Phoronix» . www.phoronix.com .
- ^ «Ядро Linux 3.19, раздел 1.2. Поддержка расширений защиты памяти Intel» . kernelnewbies.org . 9 февраля 2015 года . Проверено 9 февраля 2015 года .
- ^ Джонатан Корбет (29 января 2014 г.). «Поддержка Intel MPX в Linux» . LWN.net . Проверено 9 февраля 2015 года .
- ^ «Ядро Linux может отказаться от поддержки расширений защиты памяти» . Фороникс .
- ^ «[GIT PULL] x86: удалить Intel MPX» .
- ^ «[PATCH 0/3] [RFC] x86: запустить процесс удаления MPX» .
- ^ «Поддержка Intel MPX мертва с Linux 5.6 - Phoronix» . www.phoronix.com .
- ^ «ChangeLog / 2.6» .
- ^ «QEMU 4 поставляется с игрушками для поклонников Arm, революционеров RISC-V, патриотов POWER ... вы поняли» .
- ^ «Обновление 1 для Visual Studio 2015: новая экспериментальная функция - MPX» . Microsoft . 2016-01-20.
- ^ «Константин Серебряный - Исследование в Google» . research.google.com .
- ^ «Обсуждение расширений защиты памяти Intel (MPX) и сравнение с AddressSanitizer» . Проверено 4 ноября 2013 .
- ^ Канелла, Клаудио; Ван Балк, Джо; Шварц, Майкл; Липп, Мориц; фон Берг, Бенджамин; Ортнер, Филипп; Писсенс, Франк; Евтюшкин Дмитрий; Грусс, Даниэль (2018). «Систематическая оценка временных атак выполнения и защиты». arXiv : 1811.05441 [ cs.CR ].
Внешние ссылки
- Справочник по программированию расширений набора команд архитектуры Intel (PDF) . Intel . Июль 2013 . Проверено 10 января 2016 .
- Олексенко, Алексей; Кувайский, Дмитрий; Бхатотия, Прамод; Фельбер, Паскаль; Фетцер, Кристоф (2017). «Объяснение Intel MPX: эмпирическое исследование Intel MPX и подходов к проверке границ на основе программного обеспечения». arXiv : 1702.00719 [ cs.CR ].
- «Введение в расширения защиты памяти Intel» . Intel . 2013-07-16 . Проверено 10 сентября 2013 .
- «Расширения Intel ISA» . Intel . Проверено 4 ноября 2013 .
- «Поддержка Intel® Memory Protection Extensions (Intel® MPX) в компиляторе GCC» . gcc.gnu.org . Проверено 4 ноября 2013 .
- Хансен, Дэйв (2016-03-16). «Расширения защиты памяти Intel® (Intel® MPX) для Linux» . Проверено 17 мая 2018 .