Содержание статьи
- Unified Extensible Firmware Interface
- Аппаратное расположение прошивки UEFI
- Образы и протоколы в UEFI
- Основные фазы функционирования ПО UEFI
- Режим системного управления (SMM)
- SMRAM
- SMI-прерывания
- Обработчики SMI-прерываний
- CHIPSEC
- Что такое CHIPSEC?
- Установка
- Описание модулей CHIPSEC
- CHIPSEC в Python
- Практические результаты
- Заключение
Unified Extensible Firmware Interface
После подачи питания на аппаратную платформу ЭВМ должна произойти корректная инициализация оборудования и выбор загрузчика операционной системы. Если раньше эту функцию выполнял всем известный BIOS Legacy, то со временем производители аппаратных платформ пришли к использованию более усовершенствованной технологии — UEFI.
Некоторые отличия между BIOS Legacy и UEFI отражены в сравнительной таблице.
Характеристики BIOS Legacy | Характеристики UEFI | |
---|---|---|
Поддерживаемые режимы работы процессора | Режим реальных адресов | Режим реальных адресов, защищенный режим работы процессора |
Поддержка виртуальной памяти | Не поддерживает | Поддерживает |
Объем используемой оперативной памяти | 1 Мбайт | Не ограничен |
Пространство опционального ПЗУ (Option ROM) | 1 Мбайт | Не ограничено |
Доступ к регистрам | 16-битный | 16-битный, 32-битный, 64-битный |
Независимость от архитектуры | Не обеспечивает | Обеспечивает |
Язык программирования | Ассемблер | Си/ассемблер |
Функция безопасной загрузки | Отсутствует | Присутствует |
Таблица разделов жесткого диска | MBR | GPT |
Спецификация UEFI описывает интерфейс между операционной системой и программным обеспечением аппаратной платформы во время загрузки. Основная идея, заложенная в спецификации, — сделать прошивку модульной и расширяемой.
Изменениями в спецификации управляет сообщество Unified Extensible Firmware Interface Forum, основная задача которого — расширять и улучшать существующую спецификацию, добавляя новые функциональные возможности и исправляя текущие недостатки. Для разработчиков программных компонентов спецификация UEFI предоставляет возможности повторного использования кода, расширяемости, модульности, а также легкого прототипирования в процессе разработки.
Хорошо это или плохо? С одной стороны, расширяемость и модульность позволяют разработчикам наделять прошивку дополнительными функциональными возможностями. С другой — обилие программного кода делает ее более уязвимой. Так как низкоуровневое программное обеспечение прошивки UEFI первостепенно в системе, уровень защищенности прошивки играет основную роль при оценке защищенности всей ЭВМ.
Аппаратное расположение прошивки UEFI
Совокупность всех прошивок в системе называют прошивкой платформы. Как правило, она расположена во флеш-памяти SPI (Flash memory). В этой же памяти располагается прошивка UEFI.
Для того чтобы система могла различать прошивки между собой, флеш-память делится на регионы. Доступ к регионам разграничивает встроенный в чипсет PCH SPI-контроллер (в современных системах PCH играет роль южного моста). На скриншоте представлен дамп флеш-памяти SPI в утилите UEFITool.
Описание некоторых регионов флеш-памяти SPI:
- Flash Descriptor (Descriptor region) — регион дескриптора, содержащий основные смещения и настройки флеш-памяти SPI;
- GbE region — регион, содержащий основные настройки сетевой карты;
- ME region — регион, содержащий прошивку ME (ME выполняет функции управления энергопотреблением, функции инициализации и запуска основного процессора);
- UEFI region (BIOS region) — содержит прошивку UEFI;
- PDR region — регион, предназначенный для описания возможностей, зависящих от платформы.
Образы и протоколы в UEFI
Спецификация UEFI позволяет расширять прошивку через загрузку образов. Образ в UEFI может быть представлен в виде отдельного драйвера или приложения (наглядный пример — приложение UEFI Shell). Структура любого образа описывается форматом PE32/PE32+.
Расширение, а также идентификация компонентов UEFI выполняется с помощью GUID-записей. GUID представляет собой уникальный 128-битный идентификатор, соответствующий тому или иному компоненту прошивки.
Любое устройство или образ в UEFI имеют собственный протокол обработки. Каждый протокол состоит из GUID и структуры интерфейса протокола. Структура интерфейса протокола содержит функции и данные, которые используются для доступа к тому или иному устройству. Управление протоколами обеспечивают специальные службы UEFI (LocateProtocol, OpenProtocol и другие).
Основные фазы функционирования ПО UEFI
Работу ПО UEFI условно можно разбить на два этапа:
- во время инициализации платформы;
- во время загрузки и работы ОС.
Ниже описано, за что отвечает каждая фаза.
SEC:
- обработка всех событий перезапуска платформы;
- создание хранилища временной памяти;
- проверка целостности и подлинности элементов прошивки;
- подготовка и передача необходимой информации в следующую фазу.
PEI:
- инициализация постоянной памяти;
- описание памяти в специальных структурах Hand-Off Blocks (HOBs);
- описание адресов размещений микропрограмм в HOBs-структурах;
- передача управления в фазу среды выполнения драйверов.
DXE:
- инициализация служб загрузки, служб реального времени выполнения и служб DXE (DXE Services);
- обнаружение и выполнение драйверов DXE;
- инициализация процессора, набора микросхем и компонентов платформы.
BDS:
- инициализация консольных устройств;
- загрузка драйверов устройств;
- попытка загрузки в ОС;
- если попытка не удалась, повторно выполняется фаза DXE.
В качестве отдельной фазы выделяют режим системного управления (SMM).
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»