Трохи про UEFI і Secure Boot

UEFI

UEFI (Unified Extensible Firmware Interface) – заміна застарілого BIOS. Ця специфікація була придумана Intel для Itanium, тоді вона ще називалася EFI (Extensible Firmware Interface), а потім була перенесена на x86, x64 і ARM. Вона разюче відрізняється від BIOS як самою процедурою завантаження, так і способами взаємодії з ОС. Якщо ви купили комп’ютер в 2010 році і пізніше, то, найімовірніше, у вас UEFI.

bios_to_bios

Основні відмінності UEFI від BIOS:

  1. Підтримка GPT (GUID Partition Table). GPT – новий спосіб розмітки, заміна MBR. На відміну від MBR, GPT підтримує диски розміром більше 2ТБ і необмежену кількість розділів, у той час як MBR підтримує тільки 4. UEFI за замовчуванням підтримує FAT32 з GPT-розділів. MBR сам UEFI не підтримує, підтримка і завантаження з MBR здійснюється розширенням CSM (Compatibility Support Module).
  2. Підтримка сервісів. В UEFI є два типи сервісів: boot services і runtime services. Перші працюють тільки до завантаження ОС і забезпечують взаємодію з графічними та текстовими терміналами, шинами, блоковими пристроями і т.д., а runtime services може використовувати ОС. Один із прикладів runtime services – variable service, який зберігає значення в NVRAM. ОС Linux використовує variable service для зберігання краш дампів, які можна витягнути після перезавантаження комп’ютера.
  3. Модульна архітектура. Ви можете використовувати свої додатки в UEFI. Ви можете завантажувати свої драйвери в UEFI. Справді! Є така штука, як UEFI Shell. Деякі виробники включають його в свій UEFI. Але можна його просто завантажити з інтернету і поставити на флешку або жорсткий диск. Також існують драйвери для ReiserFS, ext2 / 3 / 4. Їх можна завантажити з UEFI Shell і лазити по своїй файловій системі прямо з UEFI. Ще UEFI підтримує мережу, так що якщо знайдете UEFI-драйвер до своєї мережевої карти, або якщо він включений виробником материнської плати, то можете попінговать 8.8.8.8 з Shell. Взагалі, специфікація UEFI передбачає взаємодії драйверів UEFI з ОС, тобто якщо у вас в ОС немає драйвера на мережеву карту, а в UEFI він завантажений, то ОС зможе використовувати мережеву карту через UEFI.
  4. Вбудований менеджер завантаження. У загальному випадку, для UEFI не потрібно ставити завантажувач, якщо ви хочете мультизавантаження. Можна додавати свої пункти меню, і вони з’являться в завантажувальному меню UEFI, прямо поруч з дисками і флешками. Це дуже зручно і дозволяє вантажити Linux взагалі без завантажувача, а відразу ядро. Таким чином, можна встановити Windows і Linux без сторонніх завантажувачів.

Як відбувається завантаження в UEFI?

З GPT-розділу з ідентифікатором EF00 і файлової системою FAT32, за замовчуванням вантажиться і запускається файл \ efi \ boot \ boot [назва архітектури] .efi, наприклад \ efi \ boot \ bootx64.efi

Тобто щоб, наприклад, створити завантажувальну флешку з Windows, досить просто розмітити флешку в GPT, створити на ній FAT32-розділ і просто-напросто скопіювати всі файли з ISO-образу. Boot-секторів більше немає, забудьте про них.

Завантаження в UEFI відбувається набагато швидше. У Windows 8 теж дуже хороші оптимізації швидкості завантаження в UEFI-режимі.

Secure Boot

Почнемо з того, що цю технологію придумали не в Microsoft, а вона входить в специфікацію UEFI 2.2. Включений Secure Boot не означає, що ви не зможете запустити ОС на відмінну від Windows. Насправді, сертифіковані для запуску Windows 8 комп’ютери і лептопи зобов’язані мати можливість відключення Secure Boot і можливість управління ключами, так що турбується тут нема про що. Не відлючаємий Secure Boot є тільки на планшетах на ARM з предустановленою Windows!

Що дає Secure Boot? Він захищає від виконання непідписаного коду не тільки на етапі завантаження, але і на етапі виконання ОС, наприклад, як в Windows, так і в Linux перевіряються підписи драйверів / модулів ядра, таким чином, шкідливий код в режимі ядра не можна буде виконати. Але це справедливо тільки, якщо немає фізичного доступу до комп’ютера, тому, у більшості випадків, при фізичному доступі ключі можна замінити на свої.

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

Для Linux є 2 пре-завантажувача, які підтримують Secure Boot:

  • Shim
  • PRELoader

Вони схожі, але є невеликі нюанси. У Shim є 3 типи ключів: Secure Boot keys (ті, які в UEFI), Shim keys (які можна згенерувати самому і вказати при компіляції), і MOKі (Machine Owner Key, зберігаються в NVRAM). Shim не використовує механізм завантаження через UEFI, тому завантажувач, який не підтримує Shim і нічого не знає про MOK, не зможе виконати код (таким чином, завантажувач gummiboot не працюватиме). PRELoader, навпаки, вбудовує свої механізми аутентифікації в UEFI, і ніяких проблем немає. Shim залежить від MOK, тобто бінарники повинні бути змінені (підписані) перед тим, як їх виконувати. PRELoader ж «запам’ятовує» правильні бінарники, ви йому повідомляєте, довіряєте ви їм, чи ні.

Обидва пре-завантажувача є в скомпільованому вигляді з валідним підписом від Microsoft, тому міняти UEFI-ключі не обов’язково.

Secure Boot покликаний захистити від буткітів, від атак типу Evil Maid, і робить це ефективно.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *


The reCAPTCHA verification period has expired. Please reload the page.