Intel MPX (Защита памяти Extensions ) - это набор расширений для x86 архитектуры набора команд. Благодаря поддержке компилятора, библиотеки времени выполнения и операционной системы Intel MPX заявила о повышении безопасности программного обеспечения путем проверки ссылок на указатели, чьи обычные намерения во время компиляции злонамеренно используются во время выполнения из-за переполнения буфера. На практике в дизайне было обнаружено слишком много недостатков, чтобы его можно было использовать, а поддержка была объявлена устаревшей или удалена из большинства компиляторов и операционных систем.
Содержание
- 1 Расширения
- 2 Поддержка программного обеспечения
- 3 Анализ Intel MPX
- 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 публично не разглашается.
См. Также
Ссылки
Внешние ссылки
- Справочник по программированию расширений набора команд архитектуры Intel (PDF). Intel. Июль 2013. Дата обращения 10 января 2016.
- Олексенко, Алексей; Кувайский, Дмитрий; Бхатотия, Прамод; Фельбер, Паскаль; Фетцер, Кристоф (2017). "Intel MPX Explained: эмпирическое исследование Intel MPX и подходов к проверке границ на основе программного обеспечения". arXiv : 1702.00719 [cs.CR ].
- «Введение в расширения защиты памяти Intel». Intel. 2013-07-16. Проверено 10 сентября 2013 г.
- «Intel ISA Extensions». Intel. Проверено 4 ноября 2013 г.
- «Поддержка Intel® Memory Protection Extensions (Intel® MPX) в компиляторе GCC». gcc.gnu.org. Проверено 4 ноября 2013 г.
- Хансен, Дэйв (16 марта 2016 г.). «Расширения защиты памяти Intel® (Intel® MPX) для Linux». Проверено 17 мая 2018 г.