Intel MPX: дополнительная защита для приложений

01 Янв 2017

Intel MPX: приложения получат дополнительную защиту

Архитектура аппаратной поддержки многозадачности и вза­им­ной из­о­ля­ции программ в многопользовательской сре­де, при­сут­ству­ю­щая в про­цес­со­рах Intel уже несколько де­ся­ти­ле­тий, берет свое на­чало со вре­мен пер­во­го x86-про­цес­сора, под­дер­жи­ва­ющего за­щи­щен­ный режим (Pro­tected Mo­de). Напомним, это был Intel 80286.

Фундаментальный принцип безопасности прост: при­ло­же­ние мо­жет изменить (в том числе разрушить) собственный контекст, но не дол­жно иметь возможности для не­санк­ци­о­ни­ро­ван­ного воздействия на опе­ра­ци­онную систему и другие приложения, выполняемые на том же компьютере. Четыре «кольца защиты», из­вестные как Ring[0…3], из которых со­вре­мен­ные ОС используют только 0 и 3, реализуют данный прин­цип.

О проблеме

Внутри одного приложения, даже сравнительно несложного, существует множество объектов и модулей, со­став­ля­ю­щих локальную иерархию. С точки зрения классического механизма защиты, дифференцирование статуса таких объектов отсутствует, поэтому возможность взаимного влияния между ними находится вне аппаратного контроля. Поэтому, например, записывая одиннадцатый элемент в массиве, размером 10 элементов, программист может случайно или намеренно исказить объект, расположенный в оперативной памяти выше рассматриваемого массива. Используя отрицательный индекс, можно получить доступ к участку оперативной памяти ниже ад­ре­су­емого объекта.

Конечно, ряд систем программирования (например, виртуальная машина Java) реализуют многочисленные про­вер­ки валидности указателей, не допуская выход за пределы массива или другого адресуемого объекта. Но выполняется это программно, при этом инструкции сравнения перед использованием указателя с ветвлениями для условного запуска процедуры обработки исключения, неизбежно отражаются на производительности.

О решении

Очевидно, отказываться от контроля границ массива нежелательно, ведь это не только фактор безопасности сис­тем для потребителя но и возможность эффективного формирования предметных отчетов о произошедших сбоях и быстрого обнаружения различных трудновыявляемых ошибок для разработчика.

Поэтому, контроль был реализован аппаратно в рамках технологии Intel MPX или Memory Protection Extension. В ос­но­ве концепции 128-битные регистры границ диапазона, bounds registers. Каждый регистр задает минимальный (lower bound) и максимальный (upper bound) адрес контролируемого диапазона.

Регистры BND0-3 задают границы контролируемых диапазонов
Рис. 1. Регистры BND0-3 задают границы контролируемых диапазонов

Текущие реализации Intel MPX поддерживают 4 таких регистра BND0-BND3, при большем количестве защищаемых объектов, могут использоваться таблицы границ диапазонов, размещаемые в оперативной памяти.

Эксперимент на ноутбуке ASUS T302

Воспользовавшись утилитой Java CPUID собственной разработки, убедимся в поддержке технологии Intel MPX на ноутбуке ASUS T302, исследованном в нашей тестовой лаборатории.

Процессор исследуемого ноутбука поддерживает Intel MPX
Рис. 2 Процессор исследуемого ноутбука поддерживает Intel MPX: установлен бит 14 регистра EBX, как результат подфункции 0 функции 7 инструкции CPUID

Как следует из Рис.2, бит, индицирующий поддержку Intel MPX процессором, установлен. Это означает, что тех­но­ло­гия поддерживается.

Операционная система, предустановленная на исследуемом ноутбуке, поддерживает Intel MPX
Рис. 3 Операционная система, предустановленная на исследуемом ноутбуке, поддерживает Intel MPX: согласно результатам функции 0Dh инструкции CPUID, поддерживается сохранение и восстановление контекста Intel MPX в многозадачной среде

Как следует из Рис.3, операционная система готова к использованию технологии Intel MPX приложениями. Кри­те­рий готовности ОС состоит в том, что системные ресурсы, обеспечивающие работу этой технологии, в частности, описанные четыре регистра контроля границ а также регистры управления и статуса, ассоциированные с каждым приложением, включены в контекст, автоматически аппаратно сохраняемый и восстанавливаемый операционной системой при переключении задач.

Вместо послесловия

Логично предположить, что технология Intel MPX усилит позиции систем программирования, пред­усма­три­ва­ю­щих безопасность указателей, ведь отныне такая безопасность возможна без снижения производительности.

Вместе с тем, польза от рассмотренного нововведения достигается только в том случае, если компилятор или вир­ту­аль­ная среда выполнения его явно поддерживает. Унаследованный код, содержащий инструкции сравнения перед использованием указателей, не получит ускорения от Intel MPX.

Загрузить Java CPUID

Загрузить утилиту Java CPUID v0.44, предназначенную для информирования пользователя о свойствах уста­нов­лен­но­го процессора, можно прямо с нашего сайта. Замечания и предложения о ее работе приветствуются.

Теги: