Рубрики
boot \ grub4dos

uefi windows / boot system

Вводная информация:

UEFI (Unified Extensible Firmware Interface) — замена устаревшему BIOS. 
Windows поддерживает работу с uefi только в 64-битных редакциях
Основные отличия UEFI от BIOS:
BIOS был 16-битным.UEFI же работает в «родном» для процессора  режиме, ему доступны все гигабайты оперативной памяти компьютера.
GPT - новый способ разметки, замена MBR. 
GPT - поддерживает диски размером более 2ТБ и неограниченное количество разделов ( хз ограничение в 128 разделов)
MBR - поддерживает без костылей только 4. 
UEFI по умолчанию поддерживает FAT32 с GPT-разделов. 
MBR сам UEFI не поддерживает, поддержка и загрузка с MBR осуществляется расширением CSM (Compatibility Support Module).
В UEFI есть два типа сервисов: boot services и runtime services. 
Boot services - работают только до загрузки ОС и обеспечивают взаимодействие 
с графическими и текстовыми терминалами, шинами, блочными устройствами и т.д., 
Runtime services может использовать ОС. 
Runtime services — variable service, который хранит значения в NVRAM. 
ОС Linux использует variable service для хранения креш дампов, 
которые можно вытащить после перезагрузки компьютера.

Как происходит загрузка в UEFI?

С GPT-раздела с идентификатором EF00 и файловой системой FAT32, 
по умолчанию грузится и запускается файл \efi\boot\boot[название архитектуры].efi, например \efi\boot\bootx64.efi
Т.е. чтобы, например, создать загрузочную флешку с Windows, достаточно просто разметить флешку в GPT, 
создать на ней FAT32-раздел и просто-напросто скопировать все файлы с ISO-образа. 
Boot-секторов больше нет, забудьте про них.

Secure Boot

Secure Boot призван защитить от буткитов, от атак типа Evil Maid.
Эту технологию придумали не в Microsoft, а она входит в спецификацию UEFI 2.2. 
Неотключаемый Secure Boot есть только на планшетах на ARM с предустановленной Windows!
Он защищает от выполнения неподписанного кода не только на этапе загрузки, 
но и на этапе выполнения ОС, например, как в Windows, так и в Linux проверяются 
подписи драйверов/модулей ядра, таким образом, вредоносный код в режиме ядра выполнить будет нельзя. 
Но это справедливо только, если нет физического доступа к компьютеру, т.к., 
в большинстве случаев, при физическом доступе ключи можно заменить на свои.

Secure Boot есть 2 режима: Setup и User.
Setup - служит для настройки, из него вы можете заменить PK (Platform Key, по умолчанию стоит от OEM), 
KEK (Key Exchange Keys), db (база разрешенных ключей) и dbx (база отозванных ключей). 
KEK может и не быть, и все может быть подписано PK, но так никто не делает, вроде как. 
PK — это главный ключ, которым подписан KEK, в свою очередь ключами из KEK (их может быть несколько) 
подписываются db и dbx. 
User - служит для запуска .efi-файл (в Setup он должен быть подписан ключом, который в db(не в dbx))

Для Linux есть 2 пре-загрузчика, которые поддерживают Secure Boot: Shim и PRELoader.
Оба пре-загрузчика есть в скомпилированном виде с валидной подписью от Microsoft, 
поэтому менять UEFI-ключи не обязательно.

x86-процессор стартует с адреса 0xfffffff0