Новые процессоры Intel: противодействие взлому

14 Июн 2013

Новые процессоры Intel: противодействие взлому

Архитектура персональных платформ под­ра­зу­ме­ва­ет наличие целого ряда объектов и событий, которые BIOS (или UEFI firmware) стремится скрыть от операционной системы. И далеко не всегда дело в секретности или обес­пе­че­нии информационной безопасности. Часто это связано с оп­ти­ми­за­ци­ей разделения функций между программными модулями.

Казалось бы, с появлением интерфейса ACPI, приватное взаимодействие платформы и firm­ware должно было прекратиться, ведь в ос­нове этого нововведения лежит декла­ри­ро­ва­ние аппаратно-за­ви­си­мых регистровых полей с помощью таб­лиц и передача операционной системе функций по управлению ими. Но при внимательном чтении спецификации ACPI станет очевидно, что две модели – приватная и открытая, мирно уживаются в рамках данного стандарта.

Вспомним, как выполняется перевод платформы в режим ACPI. Операционная система должна записать значение ACPI_ENABLE в порт SMI_CMD. Данные для записи и адрес регистра декларированы в таблице FADT (Fixed ACPI Description Table). Что же происходит после передачи этой команды? Контроллер ACPI не отрабатывает ее ап­па­рат­но. Вместо этого генерируется прерывание SMI (System Management Interrupt), при обработке которого процессор выполняет Platform-Specific процедуру. Эта процедура и обеспечивает включение ACPI mode. Ее выполнение про­ис­хо­дит в изолированном адресном пространстве с использованием приватной памяти (System Management RAM) и незаметно для ОС.

Доступ к SMRAM или входим в открытую дверь

Раньше, получить доступ к SMRAM было очень просто. Вспомним регистр System Management RAM Control, а в нем бит D_OPEN (бит 6), установив который в «1» можно включать SMRAM в адресное пространство, независимо от текущего состояния процессора (SMM или не-SMM).


Рис 1. Описание регистра SMRAM Control на примере чипста Intel 915

Предусмотренный бит блокировки D_LCK (бит 4) теоре­ти­че­ски мог защищать этот регистр от записи, но боль­шин­ство реализаций BIOS не включали такую защиту, поэтому любое программное обеспечение могло бес­пре­пят­ствен­но выполнять чтение и запись SMRAM.


Рис 2. Пример доступа к SMRAM на плате ASUS P5GPL-X

Отравление кэш-памяти или входим в закрытую дверь

Практиковались и более сложные методы доступа к SMRAM, позволяющие обойти блокировку, включаемую по D_LCK=1. Они основывались на технологии отравления кэш-памяти, а именно на создании кэшированного образа памяти SMRAM, отличного от ее истинного содержимого. Таким методом, хакер подключал собственную про­це­ду­ру обработки прерывания SMI. (Rafal Wojtczuk, Joanna Rutkowska Attacking SMM Memory via Intel CPU Cache Poisoning).

Intel закручивает гайки

В документации на новые процессоры Intel (Socket 1155, 2011) регистр SMRAM Control Register не описан, вместо него используются регистры SMRR (System Management Range Registers), расположенные в пространстве Model-Specific регистров процессора. Согласно документации, перезаписать их может только программа, работающая в System Management Mode.


Рис 3Описание Model-Specific регистров процессора, управляющих доступом к SMRAM. Слева указан адрес регистра в шестнадцатеричной и десятичной системах счисления. Центральные колонки описывают назначение битов регистров. Правая колонка описывает метод декларирования поддержки указанных регистров.

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

Начинаем эксперименты

Наши объекты исследования – плата ASUS Z87-K на основе системной логики Intel Z87 для процессоров Socket 1150. Процессор – Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz. Используя программное обеспечение, написанное в нашей тестовой лаборатории, мы провели ряд простых экспериментов. 

Чтение SMRR-регистров


Рис 4. Подготавливаем входной параметр – адрес регистра для чтения MSR 000001F2h


Рис 5. Результат – в 64-битном регистре число 00000000DF000006h

MSR#000001F2h, IA32_SMRR_PHYSBASE = 00000000.DF000006h

Базовый адрес SMRAM = DF000000h, атрибут MTRR равен 06h, что означает кэшируемая память, тип кэширования Writeback (WB).


Рис 6. Подготавливаем входной параметр – адрес регистра для чтения MSR 000001F3h


Рис 7. Результат – в 64-битном регистре число 00000000FF000800h

MSR#000001F3h, IA32_SMRR_PHYSMASK = 00000000.FF000800h

Размер диапазона = 16 мегабайт, бит 11 установлен в “1”, то есть диапазон включен.

Запись SMRR-регистров

Наша цель — отменить специальный статус SMRAM диапазона DF000000h-DFFFFFFFh, и сделать память SMRAM доступной в адресном пространстве. Для этого попробуем обнулить бит 11 регистра IA32_SMRR_PHYSMASK.


Рис 8. Подготавливаем входные параметры – адрес регистра для записи MSR 000001F3h и данные записи 00000000FF000000h


Рис 9. Результат – ошибка записи в регистр 000001F3h

Попытка перезаписи данного регистра вызывает General Protection Fault. Заявление Intel соответствует действительности.


Рис 10. Просматриваем дамп региона SMRAM и убеждаемся, что оперативная память недоступна

Просматривая дамп памяти, мы видим, что SMRAM не появилась в адресном пространстве, все байты FFh.

Резюме

Более десяти лет ситуация с аппаратной защитой SMRAM напоминала анекдот про разведчика, который, когда враги перекрыли все выходы, вышел через вход. Но видимо, шутки закончились. На сегодня, нашей тестовой ла­бо­ратории не удалось взломать защиту SMRAM, разработанную Intel. Хотя, работы в этом направлении ведутся, ста­но­вит­ся доступной новая документация, поэтому не будем торопиться делать выводы…