Interested Article - Intel MPX
- 2020-07-29
- 1
Intel MPX ( англ. Memory Protection Extensions — расширения защиты памяти) — расширение набора инструкций для архитектуры x86 / x86-64 , предложенное в 2013 году. С поддержкой со стороны компилятора , библиотек среды выполнения и операционной системы, расширение Intel MPX увеличивает безопасность программ по отношению к доступу к памяти , добавляя проверки доступа по указателям , в частности, для предотвращения атак, использующих переполнение буфера .
Поддержка расширения была удалена из многих программных продуктов в конце 2018 — начале 2019 года.
Расширения
MPX вводит новые регистры границ и несколько инструкций , которые обрабатывают эти регистры. Дополнительно вводится понятие «таблиц границ», которые хранят описания диапазонов памяти, в случае нехватки регистров границ.
MPX определяет четыре новых 128-разрядных регистра границ,
BND0..BND3
, каждый из которых хранит пару 64-битных нижних границ (LB) и верхних границ (UB) значений какого-то объекта в памяти, например буфера или массива. Верхняя граница хранится в формате
дополнения до единицы
, преобразование происходит при загрузке значения инструкциями
BNDMK
и
BNDCU
. В архитектуру добавлен пользовательский регистр конфигурации
BNDCFGU
, привилегированный регистр конфигурации
IA32_BNDCFGS
(в состав
MSR-регистров
), и регистр состояния
BNDSTATUS
, который предоставляет информацию об ошибочном адресе в памяти и код ошибки в случае исключения.
Приложение может использовать каталог границ — Bounds Directory (BD) из нескольких таблиц границ — Bounds Tables (BT), которые содержат линейные адреса указателя на буфер, вместе с границами буфера. Таблицы организованы как двухуровневое radix-дерево от линейного адреса указателя
. Два инструкции загрузки и сохранения —
BNDLDX
и
BNDSTX
— синхронизируют значения регистров
BNDx
с границами, указанными в каталоге.
Две инструкции, вставляемые компилятором,
BNDCL
и
BNDCU
, производят проверку указателя на нахождение в пределах указанных границ (нижней и верхней соответственно) и приводят к генерации исключения при выходе за границы.
Применение MPX требует дополнительной памяти для описания границ. В наихудшем случае для 4 килобайтов различных указателей (1024 или 512) потребуется 16 килобайт таблиц границ (каждая граница хранит 4 величины размером с указатель). Загрузка границ из таблиц или в таблицы является обращением в память и может несколько замедлять работу некоторых программ .
Поддержка
Расширения Intel МРХ были введены в микроархитектуре Skylake . Микроархитектуры Intel Goldmont (Atom) также поддерживают Intel MPX.
Поддержка в ядре Linux появилась в версии 3.19 (8 февраля 2015), дополнена с версии 4.1 . В 2018 году было предложено удалить поддержку Intel MPX из предстоящего релиза ядра Linux 4.20 , однако соответствующие изменения были приняты только к версии 5.6. Поддержка MPX была удалена в вышедшей в марте 2020 года версии ядра Linux 5.6 .
Поддерживались в компиляторе GCC в версиях с 5.2 до 9.0 (май 2019) . Реализованы в Intel Compiler 15.0 , а также Microsoft Visual Studio 2015 Update 1 .
Анализ Intel MPX
В 2017 был опубликован независимый обзор расширения и сравнение технологии с тремя современными программными системами обеспечения безопасности памяти ( , SAFECode, SoftBound).
- Несмотря на аппаратные блоки, используемые в Intel MPX, он не приводит к более быстрому исполнению программ по сравнению с программными методами защиты. Новые инструкции MPX в худшем приводят к четырехкратному замедлению, а при использовании оптимизаций в среднем замедление составляет около 50 %.
- В отличие от других методов, MPX не защищает от нарушений безопасной работы с памятью во времени.
- Intel MPX не содержит явных способов поддержки многопоточности, что может приводить к состоянию гонки в устаревших многопоточных приложениях если компиляторы не используют явную синхронизацию границ.
- Intel MPX не поддерживает несколько часто применяемых идиом языков C/C++ из-за ограничений на расположение участков памяти.
- Intel MPX не в полной степени совмести с отдельными расширениями, в частности возможны проблемы производительности и безопасности при смешивании с и Intel SGX .
- При выполнении операций MPX на старых поколениях процессоров (например, Haswell) происходит замедление примерно на 15 %.
Обзор пришел к неготовности MPX к использованию в промышленном применении и указал, что является более качественным вариантом. Такое же мнение высказал разработчик AddressSanitizer, сотрудник транснациональной корпорации Google, Kostya Serebryany .
Изучение MPX в свете уязвимостей Meltdown и Spectre показало, что Meltdown-атаки не останавливаются при помощи Intel MPX и что возможно проведение утечки данных (фильтрации данных) через побочный канал по методике Flush+Reload при обращениях вне границ массива, защищенного MPX.
Примечания
- . Intel . Дата обращения: 4 ноября 2013. 10 ноября 2013 года.
- . Intel (16 июля 2013). Дата обращения: 10 сентября 2013. 28 июля 2013 года.
- . code.google.com . Дата обращения: 4 ноября 2013. 4 июля 2015 года.
- ↑ . gcc.gnu.org . Дата обращения: 4 ноября 2013. 11 июня 2019 года.
- ↑ (PDF). Intel (декабрь 2013). Дата обращения: 17 января 2014. 1 февраля 2014 года.
- ↑ от 2 апреля 2017 на Wayback Machine , 2016
- . Intel (15 июня 2012). Дата обращения: 4 ноября 2013. 16 октября 2013 года.
- . Intel. Дата обращения: 21 ноября 2016. 6 мая 2019 года.
- . kernelnewbies.org (9 февраля 2015). Дата обращения: 9 февраля 2015. 12 февраля 2015 года.
- Jonathan Corbet. . LWN.net (29 января 2014). Дата обращения: 9 февраля 2015. 9 февраля 2015 года.
- . Phoronix . Дата обращения: 31 марта 2020. 28 апреля 2020 года.
- . Дата обращения: 1 августа 2019. 7 августа 2019 года.
- . www.phoronix.com . Дата обращения: 31 марта 2020. 29 февраля 2020 года.
- . Дата обращения: 1 августа 2019. 19 февраля 2022 года.
- . Дата обращения: 1 августа 2019. 9 февраля 2019 года.
- 21 ноября 2016 года.
- . Дата обращения: 1 августа 2019. 15 января 2019 года.
- ↑ Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). "Intel MPX Explained: An Empirical Study of Intel MPX and Software-based Bounds Checking Approaches". arXiv : [ ].
- . research.google.com . Дата обращения: 1 августа 2019. 16 сентября 2016 года.
- . Дата обращения: 4 ноября 2013. 12 января 2019 года.
- Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2018). "A Systematic Evaluation of Transient Execution Attacks and Defenses". arXiv : [ ].
Ссылки
- 2020-07-29
- 1