Интел МПХ
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 ]
Двухуровневая трансляция адресов используется для хранения границ в памяти. Верхний уровень состоит из каталога границ (BD), создаваемого при запуске приложения. Каждая запись BD либо пуста, либо содержит указатель на динамически создаваемую таблицу границ (BT), которая, в свою очередь, содержит набор границ указателя вместе с линейными адресами указателей. Границы загружаются ( BNDLDX
) и сохранить ( BNDSTX
) инструкции прозрачно выполняют преобразование адресов и границы доступа в соответствующей записи BT. [ 7 ] [ 8 ]
Intel MPX был представлен как часть микроархитектуры Skylake . [ 9 ]
Микроархитектура Intel Goldmont также поддерживает Intel MPX. [ 9 ]
Поддержка программного обеспечения
[ редактировать ]- glibc удалил поддержку в версии 2.35.
- В 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 ]
- ядра Программная поддержка Intel MPX на уровне была объединена с основной веткой ядра Linux в версии ядра 3.19, выпущенной 8 февраля 2015 года. [ 13 ] [ 14 ] В 2018 году Томас Гляйкснер предложил удалить поддержку 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 Update 1 добавлена экспериментальная поддержка MPX. [ 21 ]
Анализ
[ редактировать ]В исследовании был рассмотрен подробный межуровневый анализ системного стека MPX и сравнение с тремя известными программными механизмами защиты памяти ( AddressSanitizer , SAFECode и SoftBound) и представлены следующие выводы. [ 8 ]
- Несмотря на то, что Intel MPX представляет собой специально разработанный аппаратный подход с собственным добавленным набором аппаратных регистров, он не быстрее любого из программных подходов. Новые инструкции Intel MPX могут в худшем случае вызвать замедление в 4 раза, хотя оптимизация компилятора амортизирует это и приводит к накладным расходам во время выполнения в среднем на ~ 50%.
- В отличие от других программных решений, Intel MPX не обеспечивает защиты от временных ошибок безопасности памяти.
- Чтение и запись из таблиц двунаправленных границ не является потокобезопасным.
- MPX не поддерживает некоторые распространенные идиомы программирования C / C++ , такие как гибкие члены массива , ссылка на одно поле как на смещение от другого и т. д.
- MPX конфликтует с некоторыми другими расширениями ISA, что приводит к проблемам с производительностью и безопасностью. В частности, эти проблемы возникают, когда Intel MPX используется в сочетании с другими аппаратными механизмами защиты, такими как Intel TSX и Intel SGX .
- Инструкции MPX приводят к значительному снижению производительности (более 15%) даже на процессорах Intel без поддержки MPX.
Кроме того, обзор пришел к выводу, что MPX не готов к производству, и AddressSanitizer . лучшим вариантом является [ 8 ] A review by Kostya Serebryany at Google, AddressSanitizer's developer, [ 22 ] были аналогичные выводы. [ 23 ]
Крах
[ редактировать ]Еще одно исследование [ 24 ] изучение масштабов уязвимостей безопасности Spectre и Meltdown обнаружило, что Meltdown можно использовать для обхода Intel MPX с использованием аппаратного исключения Bound Range Exceeded (#BR). Согласно их публикации, исследователям удалось осуществить утечку информации через скрытый канал Flush+Reload из внешнего доступа к массиву, защищенному системой MPX. Их доказательство концепции не было публично раскрыто.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 1: Базовая архитектура . Интел . ноябрь 2020 года . Проверено 03 марта 2021 г.
- ^ «Расширения Intel ISA» . Интел . Проверено 4 ноября 2013 г.
- ^ «Введение в расширения защиты памяти Intel» . Интел . 16 июля 2013 г. Проверено 10 сентября 2013 г.
- ^ «Обсуждение расширений Intel Memory Protection Extensions (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 . Проверено 06 февраля 2017 г.
- ^ Перейти обратно: а б «Справочник по программированию расширений набора команд архитектуры Intel» (PDF) . Интел . Декабрь 2013 года . Проверено 17 января 2014 г.
- ^ Перейти обратно: а б с д Олексенко, Алексей; Кувайский, Дмитрий; Бхатотия, Прамод; Фельбер, Паскаль; Фетцер, Кристоф (2017). «Объяснение Intel MPX: эмпирическое исследование Intel MPX и программных подходов к проверке границ». arXiv : 1702.00719 [ cs.CR ].
- ^ Перейти обратно: а б «Эмулятор разработки программного обеспечения Intel» . Интел . 15 июня 2012 г. Проверено 4 ноября 2013 г.
- ^ Перейти обратно: а б «Проектирование Intel MPX» . Интел.
- ^ «Похоже, что в GCC 9 будет удалена поддержка Intel MPX» . Фороникс . Проверено 27 апреля 2018 г.
- ^ «Поддержка Intel MPX удалена из GCC 9 — Phoronix» . www.phoronix.com .
- ^ «Ядро Linux 3.19, раздел 1.2. Поддержка расширений Intel Memory Protection Extensions» . kernelnewbies.org . 9 февраля 2015 года . Проверено 9 февраля 2015 г.
- ^ Джонатан Корбет (29 января 2014 г.). «Поддержка Intel MPX в Linux» . LWN.net . Проверено 9 февраля 2015 г.
- ^ «Ядро Linux может прекратить поддержку расширений защиты памяти» . Фороникс .
- ^ «[GIT PULL] x86: удалить Intel MPX» .
- ^ «[ИСПРАВЛЕНИЕ 0/3] [RFC] x86: запустите процесс удаления MPX» .
- ^ «Поддержка Intel MPX прекращена в Linux 5.6 — Phoronix» . www.phoronix.com .
- ^ «Журнал изменений/2.6» .
- ^ «QEMU 4 поставляется с игрушками для поклонников Arm, революционеров RISC-V, патриотов POWER… ну, вы поняли» . Регистр .
- ^ «Обновление 1 для Visual Studio 2015: новая экспериментальная функция — MPX» . Майкрософт . 20 января 2016 г.
- ^ Серебряный Константин. «Константин Серебряный» . Google Исследования . Архивировано из оригинала 27 июля 2023 г. Проверено 18 июля 2024 г.
- ^ «АдрессанитизерIntelMemoryProtectionExtensions» . Гитхаб . Архивировано из оригинала 18 июля 2024 г. Проверено 4 ноября 2013 г.
- ^ Канелла, Клаудио; Ван Балк, Джо; Шварц, Майкл; Липп, Мориц; фон Берг, Бенджамин; Ортнер, Филипп; Писсенс, Франк; Евтюшкин Дмитрий; Грусс, Дэниел (2018). «Систематическая оценка временных атак и защиты». arXiv : 1811.05441 [ cs.CR ].
Внешние ссылки
[ редактировать ]- Справочник по программированию расширений набора команд архитектуры Intel (PDF) . Интел . Июль 2013 года . Проверено 10 января 2016 г.
- Олексенко, Алексей; Кувайский, Дмитрий; Бхатотия, Прамод; Фельбер, Паскаль; Фетцер, Кристоф (2017). «Объяснение Intel MPX: эмпирическое исследование Intel MPX и программных подходов к проверке границ». arXiv : 1702.00719 [ cs.CR ]. Дополнительные материалы в Интернете по адресу https://intel-mpx.github.io .
- «Введение в расширения защиты памяти Intel» . Интел . 16 июля 2013 г. Проверено 10 сентября 2013 г.
- «Расширения Intel ISA» . Интел . Проверено 4 ноября 2013 г.
- «Поддержка расширений Intel® Memory Protection Extensions (Intel® MPX) в компиляторе GCC» . gcc.gnu.org . Проверено 4 ноября 2013 г.
- Хансен, Дэйв (16 марта 2016 г.). «Расширения защиты памяти Intel® (Intel® MPX) для Linux» . Проверено 17 мая 2018 г.