Поколение 1150: тень прошлого?

17 Июн 2013

Поколение 1150: тень прошлого?

Механизм теневой памяти или Shadow RAM, появившийся более 20 лет назад в системах класса PC/AT 286, сегодня является обязательным ат­ри­бутом персональных платформ. Как используя в качестве носителей BIOS недорогие микросхемы ROM с разрядностью 8-бит и временем вы­борки сотни на­но­се­кунд не жертвовать производительностью? Ответ простой — при старте ком­пьютера сделать копию содержимое ROM в оперативную память и ис­поль­зо­вать ее в течение всего рабочего сеанса. Напомним, что скорость работы последней существенно выше. Для со­вре­мен­ных систем, использование памяти Shadow RAM не опциональ­но, а обязательно, так как основной блок BIOS или UEFI firmware хранится в ROM в упакованном виде, соответ­ствен­но, его необходимо распаковывать в RAM.

Для корректной эмуляции ROM и предотвращения модификации процедур BIOS Runtime, системная логика ис­поль­зу­ет механизм защиты записи Shadow RAM.

Постановка задачи

Для детального исследования персональных платформ и отладки процедур BIOS может потребоваться выключить защиту записи Shadow RAM и внести изменения в содержимое блоков BIOS Runtime. Эта задача успешно ре­ша­лась в нашей тестовой лаборатории для целого ряда платформ на основе процессоров Intel и AMD.

Сегодня поэкспериментируем на плате ASUS Z87-K на основе системной логики Intel Z87 для процессоров Socket 1150. Процессор — Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz. Тестируемая платформа оснащена UEFI BIOS про­из­вод­ства American Megatrends, в частности — Aptio IV.

Для примера возьмем 32-килобайтный регион F8000h-FFFFFh (это часть области System BIOS Shadow). Путем не­слож­ной модификации приведенных процедур можно выполнить аналогичную операцию для региона Video BIOS Shadow или включить доступ к оперативной памяти в любом незадействованном регионе Shadow RAM.

План решения задачи

Для превращения Read-Only памяти Shadow RAM в обычную Read/Write память, требуется перенастроить два системных регистра:

  1. Регистр PAM (Programmable Attribute Map), управляющий трансляцией шинных циклов для заданного диапазона памяти. Регистры PAM адресуются в PCI-конфигурационном пространстве и относятся к блоку регистров северного моста, интегрированного в процессор. Как следует из документации, для установки режима Normal DRAM в диапазоне F0000h-FFFFFh, в регистр PAM0 требуется записать число 00110000b=30h.
  2. Регистр MTRR (Memory Type and Range Register), задающий дисциплину кэширования для заданного диапазона памяти. Регистры MTRR адресуются в пространстве Model-Specific регистров процессора. Для установки режима Write-Through в диапазоне F8000h-FFFFFh, в регистр IA32_MTRR_FIX4K_F8000 требуется записать 0404040404040404h. Адрес этого регистра в пространстве MSR равен 0000026Fh.

Решение задачи

Просматриваем дамп System BIOS Shadow до манипуляций с системными регистрами, пробуем перезаписать содержимое и убеждаемся, что запись не работает:

До настройки регистров чипсета доступ к Shadow RAM не работает
Рис 1. Запись не работает

Подготавливаем параметры для записи в регистр PAM0 и выполняем запись:

Настройка регистра PAM0
Рис 2. Выполняем запись в регистр PAM0

Адрес регистра в пространстве PCI: Bus=0, Device=0, Function=0, Register=80h. Данные записи: Data=30h.

Настройка регистра IA32_MTRR_FIX4K_F8000
Рис 3. Подготавливаем параметры для записи в регистр IA32_MTRR_FIX4K_F8000 и выполняем запись

Адрес регистра в пространстве MSR: 0000026Fh. Данные записи: Data=0404040404040404h.

Просматриваем дамп System BIOS Shadow после настройки регистров чипсета
Рис 4. Просматриваем дамп System BIOS Shadow после манипуляций с системными регистрами, пробуем записать код 11h вместо 5 байт по адресу 000FFFF0h

Убеждаемся в успешном результате (см. нижнюю строку дампа).

Измеряем время выполнения операций

Как было показано выше, включение защиты записи для заданного диапазона Shadow RAM, приводит к тран­с­ля­ции циклов записи, выполняемых в этот диапазон, на шину DMI (Direct Media Interface). Для диапазона, запись в который разрешена, циклы транслируются на шину оперативной памяти. Очевидно, в первом случае время вы­пол­не­ния циклов будет больше. Проверим это.

Подготовка параметров для измерения времени выполнения циклов записи
Рис 5. Подготовка параметров (адрес и данные) для измерения времени выполнения циклов записи

Время выполнения 64-битного цикла записи в память – около 480 наносекунд
Рис 6. Результат для DMI forwarding: время выполнения 64-битного цикла записи в память – около 480 наносекунд

Время выполнения 64-битного цикла записи в память – около 34 наносекунд
Рис 7. Результат для DRAM forwarding: время выполнения 64-битного цикла записи в память – около 34 наносекунд

Резюме

В отличие от описанного эксперимента с Shadow RAM, аналогичные попытки проникновения в SMRAM на той же пла­те ASUS Z87-K пока успехом не увенчались. Память SMRAM защищена лучше, чем Shadow RAM и причина это­го очевидна, для доступа к стратегическим ресурсам платформы, первая значительно важнее.

С другой стороны, корпорация Intel, свою часть работы по защите Shadow RAM выполнила. Об этом сви­де­тель­ству­ет комментарий “This register is locked by Intel TXT” в описании регистра PAM0. И уязвимость, которой мы сегодня успешно воспользовались, существует только потому, что UEFI BIOS от American Megatrends не активировал тех­но­ло­гию Intel Trusted Execution Technology, во всяком случае, для тех режимов загрузки ОС, которые мы исполь­зо­ва­ли.

Эксперименты осуществлялись в среде DOS, но попытка перезаписи регистра PAM0 была также успешно вы­пол­не­на в UEFI Shell с использованием встроенной команды “MM”.

Подчеркнем, что мы редактировали блок BIOS Runtime, находящийся в оперативной памяти, а не BIOS ROM, по­это­му описанные опыты не связаны с риском выведения из строя платформы из-за искажения BIOS. Вместе с тем, самостоятельное и безопасное повторение описанных экспериментов возможно только при наличии со­от­вет­ству­ю­щей подготовки в области цифровой схемотехники и системного программирования.