UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Введение

О том, как устроен и работает SecureBoot, я уже рассказывал в начале

, повторяться смысла не вижу. Если вы не в курсе, о чем весь этот UEFI SecureBoot вообще, кто такие

PKKEKdbdbx

, и почему с точки зрения SecureBoot по умолчанию хозяином вашей системы является производитель UEFI, а единственным авторизованным пользователем является Microsoft — смело проследуйте туда, мы вас тут пока подождем.

С ликбезом закончили, теперь к делу. Несмотря на то, что про создание своих ключей и настройку SecureBoot написано за три последних года с десяток отличных статей (ссылки на часть из которых приведены в разделе Литература), воз и ныне там. Основная проблема с информацией о настройке SecureBoot даже в англоязычном сегменте сети (не говоря уже о рунете) — большая часть статей, текстов и постов обрывается на «вот у нас теперь есть ключи в формате EFI Signature List, добавьте их зависимым от вашего вендора прошивки способом и готово».

При этом сами вендоры не торопятся описывать меню настройки SecureBoot ни в документации на свои платформы для OEM’ов, ни в мануалах на конечные системы, в результате пользователь теряется на незнакомой местности и либо отключает SecureBoot, мешающий загружать его любимую OpenBSD (или что там у него), либо оставляет его на настройках по умолчанию (а чего, Windows грузится же). Именно этот последний шаг я и попытаюсь описать более подробно, но не в ущерб остальным необходимым шагам.

Введение и еще один отказ от ответственности

Не хочу повторять свою тираду про необходимость SPI-программатора и тот факт, что все модификации вы делаете на свой страх и риск, поэтому если вдруг вы ее не читали —

и возвращайтесь.

С этого момента я полагаю, что с восстановлением после неудачной прошивки у вас пролем нет, и с UEFITool’ом вы тоже знакомы, поэтому останавливаться на технических вопросах типа «Как мне вытащить из образа файл» и «как потом его вставить обратно» не буду.

Advanced settings unlock

Что

: разблокировка доступа к скрытым настройкам BIOS Setup.

Зачем

: среди эти настроек может попасться что-то интересное, но обычно их скрывают не просто так.

Где искать

Aes ni unlock

Что

: обход установки бита LOCK (0x02) в регистр MSR 0x13C

Зачем

: включение аппаратного ускорения AES на системах с экспортными ограничениями

Где искать

: в UEFI-драйверах, относящихся к CPU PM, чаще всего в PowerManagement

Способ модификации

: мало чем отличается от PM patch’а (и уже

), поэтому останавливаться подробно на нем не буду.

Ami aptiov

У большинства прошивок, основанных на коде AMI, управление технологией SecureBoot находится на вкладке Security, у меня это управление выглядит так:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Заходим в меню Key Management (раньше оно было на той же вкладке, сейчас его выделили в отдельное) и видим там следующее:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Выбираем нужную нам переменную, после чего сначала предлагают выбрать между установкой нового ключа и добавлением к уже имеющимся, выбираем первое:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Теперь предлагается либо установить значение по умолчанию, либо загрузить собственное из файла, выбираем последнее:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


Далее нужно устройство и файл на нем, а затем выбрать формат этого файла, в нашем случае это Authenticated Variable:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Затем нужно подтвердить обновление файла, и если все до этого шло хорошо, в результате получим лаконичное сообщение:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Повторяем то же самое для KEK и PK, и получам на выходе вот такое состояние:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


Все верно, у нас есть единственный PK, всего один ключ в KEK и три ключа в db, возвращаемся в предыдущее меню кнопкой Esc и включаем SecureBoot:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Готово, сохраняем настройки и выходим с перезагрузкой, после чего пытаемся загрузиться с нашей флешки и видим вот такую картину:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Отлично, неподписанные загрузчики идут лесом, осталось проверить подписанный. Вставляем другую флешку, перезагружаемся и видим что-то такое:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


Вот теперь можно сказать, что SecureBoot работает как надо.

Если у вашего AMI UEFI такого интерфейса для добавления ключей нет, то вам подойдет другой способ, о котором далее.

Bios lock removal

Что

: снятие защиты от прошивки модифицированных образов UEFI встроенным программатором.

Зачем

: при большом количестве экспериментов с UEFI доставать каждый раз программатор быстро надоедает, да и прошивка встроенным программатором происходит быстрее (засчет работы по протоколу QuadSPI вместо обыкновенного SPI в случае внешнего программматора).

Где искать

: в драйверах чипсета, чаще всего в PchInitDxe (другой вариант мода — в BiosWriteProtect)

Способ модификации

: вариант модификации PchInitDxe полностью описан

на английском, поэтому я приведу только идею. Необходимо найти запись бита BIOS Lock Enable (BLE) в регистр BIOS_CNTL чипсета и предотвратить её. Сделать это можно в нескольких местах, например, вот здесь:

48 8B 4C 24 40         mov         rcx,qword ptr [rsp 40h] ; Загрузить в RCX адрес структуры PchPlatformData
48 8B 41 50            mov         rax,qword ptr [rcx 50h] ; А в RAX - адрес дочерней структуры LockdownConfig
F6 00 10               test        byte ptr [rax],10h ; Проверить, установлен ли пятый бит (BiosLock) 
74 25                  je          0000000180001452 ; Если не установлен, перепрыгнуть весь код ниже
8A 50 01               mov         dl,byte ptr [rax 1]
B9 B2 00 00 00         mov         ecx,0B2h ; 
E8 A2 5A 00 00         call        0000000180006EDC
4C 8D 87 DC 00 00 00   lea         r8,[rdi 000000DCh] ; В RDI лежит базовый адрес регистров LPC чипсета, а 0xDC - смещение регистра BIOS_CNTL
33 C9                  xor         ecx,ecx
4C 8B CD               mov         r9,rbp
33 D2                  xor         edx,edx
4C 89 44 24 20         mov         qword ptr [rsp 20h],r8
E8 AA 76 00 00         call        0000000180008AFC ; Установить лок

Можно изменить JE на JMP, но иногда вместо короткого прыжка попадается длинный, у которого приходится дополнительно вычислять смещение, поэтому лучше изменить test на любую команду, устанавливающую флаг ZF, например на xor rax, rax (48 31 C0), а возможную разницу в размерах команд исправить добавлением NOP’ов.

Если в PchInitDxe нужного кода не нашлось, можно изменить драйвер BiosWriteProtect таким образом, чтобы обойти регистрацию находящегося в нем SMI-обработчика, который устанавливает бит BLE при попытке его сброса, после чего для разблокировки прошивки достаточно сбросить этот бит. У меня отлично работает вышеописанный способ, поэтому этот вариант я пока не пробовал и потому подробно описывать не буду.

Cpu microcode, optionrom, drivers and images update

Что

: обновление микрокодов CPU, прошивок различных переферийных устройств, EFI-драйверов и отображаемых при загрузке и в BIOS Setup картинок.

Зачем

: иногда обновление помогает исправить ошибки в работе системы, иногда добавляет поддержку важной фичи (работу TRIM для SSD в RAID0, к примеру), но чаще всего обновление производится потому, что наконец вышла новая версия.

Где искать

: сильно зависит от производителя, EFI-драйверы можно найти просто по имени (SataDriver, например), микрокод можно найти по Model ID процессора, для которого он предназначен, OROMы — по VID/DID устройств, которые они обслуживают, картинки в формате JPEG можно найти по строке «JFIF», в GIF — по «GIF8» и т.п.

Способ модификации

: прост как мычание — найти новую версию в свободном доступе, найти, где в образе лежит старая, и заменить одно на другое. Для AMI товарищем

LS_29

Cpu pm patch, msr 0xe2 lock removal

Что

: обход установки бита LOCK (0x0F) в регистр MSR_PMG_CST_CONFIG_CONTROL (0xE2) после прохождения POST

Зачем

: открытый регистр 0xE2 необходим для работы подсистемы CPU Power Management в MacOS X, при закрытом происходит kernel panic. Если вы не планируете её уставновку или в вашем UEFI BIOSе присутсвует настройка «Unlock C-State MSR» — эта модификация вам не нужна.

Где искать

: в UEFI-драйверах, относящихся к CPU PM. В старых БИОСах код установки лока находится в модуле CpuPei, в новых — в модуле PowerManagement (может также называться PowerManagement2.efi или PowerMgmtDxe.efi).

Способ модификации

: В CpuPei код, который нужно модифицировать, выглядит примерно так:

81 FB D0 06 02 00  cmp         ebx,206D0h
75 0C              jne         FFFE426E
0D 00 80 00 18     or          eax,18008000h ; Бит 15 (LOCK) ставится здесь
EB 05              jmp         FFFE426E
0D 00 80 00 00     or          eax,8000h     ; Или здесь
6A FF              push        0FFFFFFFFh
6A F8              push        0FFFFFFF8h
6A 00              push        0
50                 push        eax
56                 push        esi
E8 DC 0F 00 00     call        FFFE5257      ; А внутри этой функции находится wrmsr

Достаточно заменить в этом месте 00800018 на 00000018 и 00800000 на 00000000, чтобы обойти установку лока.

В PowerManagement код выглядит иначе, чаще всего вот так:

80 FB 01           cmp         bl,1                    ; Если BL == 1
75 08              jne         0000000180002700        ; Перепрыгнуть две следующие команды
0F BA E8 0F        bts         eax,0Fh                 ; Установить бит 15 (LOCK)
89 44 24 30        mov         dword ptr [rsp 30h],eax ; Сохранить результат в переменную на стеке 
48 8B 54 24 30     mov         rdx,qword ptr [rsp 30h] ; Загрузить значение из этой переменной в RDX
B9 E2 00 00 00     mov         ecx,0E2h                ; А номер MSR в ECX
E8 79 0C 00 00     call        0000000180003388        ; И вызвать функцию с wrmsr внутри

:/>  Виртуальные рабочие столы Windows 10

Можно заменить JNE на JMP, BTS на BTR или просто «занопать» весь код установки лока. Проще всего сделать первое, т.е. поменять 75 08 на EB 08.

Если такого кода в вашем UEFI BIOS не нашлось, ищите в драйверах, относящихся к CPU Power Management, значение 0xE2, и проверяйте весь код на предмет установки 15-го бита. В последних версиях BIOSов для некоторых современных десктопных плат AMI перестали лочить этот регистр, поэтому такого кода в них уже не найти — считайте, что производитель сделал этот мод за вас.

Insyde h2o

Здесь все несколько хуже, чем в предыдущем случае. Никакого интерфейса для добавления собственных ключей нет, и возможностей настройки SecureBoot предлагается всего три: либо удалить все переменные разом, переведя SecureBoot в Setup Mode, либо выбрать исполняемый файл, хеш которого будет добавлен в db, и его можно будет запускать даже в том случае, если он не подписан вообще, либо вернуться к стандартным ключам, в качестве которых на этой машине выступают PK от Acer, по ключу от Acer и MS в KEK и куча всякого от Acer и MS в db.

Впрочем, нет интерфейса — ну и черт с ним, у нас для этого

KeyTool

есть, главное, что в Setup Mode перейти можно. Интересно, что BIOS Setup не дает включить SecureBoot, если пароль Supervisor Password не установлен, поэтому устанавливаем сначала его, затем выполняем стирание ключей:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


После чего на соседней вкладке Boot выбираем режим загрузки UEFI и включаем SecureBoot:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Т.к. фотографии у меня посреди ночи получаются невыносимо отвратительными, то скриншоты

KeyTool

‘а я сделаю на предыдущей системе, и придется вам поверить в то, что на этой все выглядит точно также (мамой клянусь!).

Загружаемся с нашего носителя в

KeyTool

, и видим примерно следующее:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


Выбираем Edit Keys, попадаем в меню выбора хранилища:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Там сначала выбираем

db

, затем Replace Keys, затем наше USB-устройство, а затем и файл:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Нажимаем Enter и без всяких сообщений об успехе нам снова показывают меню выбора хранилища. Повторяем то же самое сначала для KEK, а затем и для PK, после выходим в главное меню двойным нажатием на Esc. Выключаем машину, включаем заново, пытаемся загрузить

KeyTool

снова и видим такую картину (которую я утащил из дампа прошивки, ее фото на глянцевом экране еще кошмарнее, чем предыдущие):

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Ну вот, одна часть SecureBoot’а работает, другая проверяется запуском подписанной нами

RU.efi

и тоже работает. У меня на этой системе Windows 8 установлена в UEFI-режиме, так вот — работает и она, Microsoft с сертификатом не подвели.

Phoenix sct

Здесь возможностей еще меньше, и во всем меню Secure Boot Configuration на вкладке Security всего два пункта: возврат к стандартным ключам и удаление всех ключей с переводом системы в SetupMode, нам нужно как раз второе:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

Затем на вкладке Boot нужно выбрать тип загрузки UEFI, включить SecureBoot, и создать загрузочную запись для

KeyTool

‘а, иначе на этой платформе его запустить не получится:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows


Нажимаем Yes, выходим с сохранением изменений, перезагружаемся, нажимаем при загрузке F12, чтобы попасть в загрузочное меню, оттуда выбираем

KeyTool

, работа с которым описана выше. После добавления ключей и перезагрузки попытка повторного запуска

KeyTool

‘а заканчивается вот так:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows

При этом установленный на той же машине Linux продолжает исправно загружаться, как и подписанная нами

RU.efi

, так что SecureBoot можно признать работоспособным.

Whitelist removal

Что

: обход белого списка совместимого оборудования, который использую в своих UEFI BIOS’ах некоторые производители ноутбуков.

Зачем

: идея производителя понятна — можно продать обладателям «несовместимого» оборудования еще и ребрендированное совместимое втридорога. Если вы сами хотите решать, что какое оборудование совместимо с вашим ноутбуком — эта модификация для вас.

Где искать

: в UEFI-драйверах, относящихся к PCIe-устройствам. У HP это драйвер обычно называется BiosLockPcie, у Lenovo — LenovoWmaPolicyDxe.efi, но может называться и иначе.

Способ модификации

: т.к. производители ноутбуков стараются менять код проверки Whitelist почаще, то описать какой-то постоянный способ довольно трудно.


Общая стратегия поиска такова:

  1. Вставить несовместимую карту в нотбук, дождаться сообщения о невозможности загрузки и запомнить его.
  2. Найти это сообщение в одном из FFS-файлов.
  3. Найти код, который ссылается на это сообщение.
  4. Исследовать этот код и попробовать изменить его так, чтобы проверка всегда заканчивалась успешно. Сделать это можно двумя способами: либо пропатчить переход, либо добавить свои Vendor ID и Device ID в белый список.

Подробности модификации на примере HP хорошо описаны

широко известным в кругах моддеров товарищем

Donovan6000

, а я опишу вариант модификации на примере Lenovo X121E.


Проверка осуществляется драйвером LenovoWmaPolicyDxe.efi, попасть необходимо вот сюда:

44 38 0D F0 0F 00 00   cmp         byte ptr [00001BF0h],r9b
75 18                  jne         0000000000000C1A
E8 35 FD FF FF         call        000000000000093C
48 85 C0               test        rax,rax
4C 8B C8               mov         r9,rax
0F 88 77 FF FF FF      js          0000000000000B8A
C6 05 D6 0F 00 00 01   mov         byte ptr [00001BF0h],1
49 8B C1               mov         rax,r9
E9 68 FF FF FF         jmp         0000000000000B8A

Все переходы к этому коду необходимо пропатчить на безусловные, а в самом коде необходимо «занопать» первую и вторую строки, после чего проверка всегда будет заканчиваться успешно.

Генерируем ключевые пары

Ключей понадобится сгенерировать три штуки: PK, KEK и

ISK

Начнем с PK, для генерации которого нужно выполнить следующее

openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -subj "/CN=Platform Key" -keyout PK.key -out PK.pem

после чего ввести и подтвердить пароль, который потом спросят при попытке подписи чего-либо получившимся закрытым ключом.


Командой выше мы просим OpenSSL сгенерировать нам ключевую пару RSA2048/SHA256 со сроком действия на один год, под названием Platform Key, с выводом закрытого ключа в файл PK.key, а открытого — в файл PK.pem. Если добавить

-nodes

, то для подписи этой ключевой парой не нужен будет пароль, но здесь мы этого делать не станем — с паролем хоть ненамного, но безопаснее.

Таким же образом генерируем ключевые пары для KEK и ISK, пароли при этом советую вводить разные:

openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -subj "/CN=Key Exchange Key" -keyout KEK.key -out KEK.pem
openssl req -new -x509 -newkey rsa:2048 -sha256 -days 365 -subj "/CN=Image Signing Key" -keyout ISK.key -out ISK.pem

Генерируем собственные ключи для secureboot

Как обычно, есть несколько способов сделать что-либо, и чем мощнее используемый инструмент, тем таких способов больше. OpenSSL же как инструмент развит настолько, что кажется, что он умеет делать вообще всё, а если почитать к нему man — то и абсолютно всё остальное. Поэтому в этой статье я ограничусь непосредственной генерацией ключевых файлов, а танцы вокруг создания собственного

CA

оставлю на

Готовим плацдарм

Начнем с лирического отступления о наличии нужного софта для разных ОС. Несмотря на то, что Microsoft является одним из разработчиков технологии, в открытом доступе до сих пор отсутствуют нормальные средства для работы с ней из Windows (ключи можно сгенерировать утилитой

из Windows SDK, а для всего остального

третьих лиц за большие деньги). Я подумывал сначала взять и написать нужную утилиту на Qt, но потому решил, что ключи и подписи каждый день генерировать не нужно, а на пару раз хватит и существующих решений. Можете попробовать переубедить меня в комментариях, если хотите.

В общем, для всего нижеперечисленного вам понадобится Linux (который можно запустить с LiveUSB, если он у вас не установлен). Для него существует целых два набора утилит для работы с SecureBoot:

efitools/sbsigntool EFIKeyGen/pesign

. У меня есть положительный опыт работы с первым набором, поэтому речь пойдет именно о нем.


В итоге, кроме Linux, нам понадобятся несколько вещей:

1. Пакет

openssl

и одноименная утилита из него для генерирования ключевых пар и преобразования сертификатов из DER в PEM.

2. Пакет

efitools

, а точнее утилиты

cert-to-efi-sig-listsign-efi-sig-list

для преобразования сертификатов в формат ESL и подписи файлов в этом формате, и

KeyTool.efi

для управления ключами системы, находящейся в SetupMode.

3. Пакет

sbsigntool

, а точнее утилита

sbsign

для подписи исполняемых файлов UEFI (т.е. загрузчиков, DXE-драйверов, OptionROM’ов и приложений для UEFI Shell) вашим ключом.

:/>  Как отключить службу через реестр? |


Загрузите Linux, установите вышеуказанные пакеты, откройте терминал в домашней директории и переходите к следующему шагу.

Дополнительная  информация

  • Обновленная до второй версии утилита поддерживает 32-разрядные платформы, хотя и создавалась для 64-разрядных.
  • Функционал выглядит как таблицы значений о состоянии компьютерных компонентов, загрузочные сервисы и так называемый runtime – набор инструментов для работы с ОС.
  • Расширения EFI устанавливаются и с энергонезависимых источников – с флешки или съемного HDD .
  • Для «машин» с предустановленной Windows 8 могут возникнуть сложности с переходом на Линукс – их дистрибутивы должны иметь подписанные (заверенные сертификатом) криптоключи от изготовителя.

Загрузка uefi и подготовка к установке

Настройка UEFI проводится подобно  настройке БИОСа. Перезапустите ПК , и как только он начнет загружаться, нажмите клавишу F2 ( или Delete, это зависит от того , какая установлена материнская плата, проверить можно только опытным путем ).

Нажмите кнопку F7 и выберите подраздел «Дополнительно». Во вкладке «boot» или «startup» (загрузка) нужно выбрать функцию «поддержка USB» и установить там пункт « Full initialization» ( полная инициализация).

Во вкладке «безопасная загрузка» (Secure Boot) следует отметить пункт «Windows uefi mode» (Режим Виндовс UEFI).

Во вкладке «Загрузка» выбирается «Compatibility Support Module» (модуль поддержки совместимости) и отмечается как «enabled» (доступный). Не будет лишним кликнуть на добавочные ссылки и найти строчку «настройки загрузочных устройств», где выбрать « only uefi» ( только uefi).

Как найти утилиту для прошивки флешки

Важно!

После прошивки флешки — вся информация на ней будет удалена!

1) Зная модель контроллера — можно просто воспользоваться поисковиками (Google, Яндекс например) и найти нужное.

Как отключить uefi

Если у вас не Windows 7-8-10, а  XP или Ubuntu, режим UEFI может вызвать проблемы при запуске ОС с диска или флеш-карты. Лучшим решением будет отключить данный режим.

Как узнать, включен ли режим безопасного запуска

Этот вариант подходит  для восьмой и десятой версий Windows. Нажмите кнопки Windows R и в полученном окне введите команду «msinfo32» ( без кавычек). Нажмите кнопку Enter.

В появившемся окне слева следует выбрать раздел «Сведения о системе», а справа найти строку «Состояние безопасной загрузки». Столбец «Значение» показывает , включена или отключена рассматриваемая функция.

Конвертируем открытые ключи в формат esl

Теперь нужно сконвертировать открытые ключи из формата PEM в понятный UEFI SecureBoot формат ESL. Этот бинарный формат описан в

(раздел 30.4.1 в текущей версии 2.5) и интересен тем, что файлы в нем можно соединять друг с другом конкатенацией, и этот факт нам еще пригодится.

cert-to-efi-sig-list -g "$(uuidgen)" PK.pem PK.esl
cert-to-efi-sig-list -g "$(uuidgen)" KEK.pem KEK.esl
cert-to-efi-sig-list -g "$(uuidgen)" ISK.pem ISK.esl

Ключ -g добавляет к сгенерированному ESL-файлу GUID, в нашем случае — случайный, полученый запуском утилиты

uuidgen

и использованием ее вывода. Если этой утилиты у вас нет — придумывайте GUIDы сами или оставьте значение по умолчанию.

Модификации

Довольно предисловий, перейдем к сами модификациям. Здесь я опишу только те модификации, которые протестировал сам, поэтому список

может быть

обязательно будет неполным. Если вы пробовали какие-то другие моды — прошу поделиться результатами в коментариях. Формат описания будет таким: название модификации или класса модификаций, назначение и краткое описание необходимых шагов. Поехали.

Необходимые инструменты


Чтобы успешно модифицировать ваш образ UEFI BIOS, могут потребоваться следующие инструменты:

  1. Hex-редактор на ваш выбор.
  2. Редактор образов UEFI, в качестве которого я, по понятным причинам, буду использовать UEFITool, но вы также можете использовать PhoenixTool (универсальный и хорошо отлаженый, но не без ограничений) или MMTool (более или менее сносно работает только с образами AMI Aptio).
  3. Если для необходимой модификации не нашлось постоянного паттерна, могут потребоваться ассемблер и дизассемблер с поддержкой x86-64. Ассемблера вполне досточно онлайнового, а вот дизассемблер нужен нормальный, иначе поиски точки модификации могут сильно затянуться.
    К сожалению, бесплатная версия IDA Pro не поддерживает разбор 64-битных PE-файлов, поэтому для Windows я рекомендую использовать утилиту dumpbin, входящую в набор компиляторов Microsoft, а для MacOS X — либо objdump, либо пробную версию Hopper Disassembler.
  4. Если модификация может быть выполнена утилитой от производителя UEFI-платформы, пусть ей она и будет выполнена — это надежнее, чем вручную. К сожалению, «узок круг этих революционеров и страшно далеки они от народа», поэтому чаще всего подходящей утилиты от производителя не существует.

Об интерфейсах для настройки secureboot

На всех вышеперечисленных системах производитель заявляет о поддержке технологии UEFI SecureBoot, но интерфейс для ее настройки сильно отличается между системами. К счастью, это не очень большая проблема, поскольку для настройки SecureBoot на совместимых со спецификацией UEFI 2.3.1C (и более новых) прошивках

никакого интерфейса в Setup, кроме возможности удаления текущего PK

(т.е. перевода SecureBoot в так называемый Setup Mode)

не требуется

, а после этого можно использовать любое EFI-приложение, способное вызвать UEFI-сервис gRS->SetVariable с предоставленными пользователем данными, в том числе утилиту

KeyTool.efi

из пакета

, которая специально для управления ключами и предназначена, осталось только научиться ей пользоваться.


Тем не менее, если удобный интерфейс для настройки присутствует (у AMI он, на мой взгляд, даже удобнее

KeyTool

‘а) — можно воспользоваться им, так что рассказывать про эти самые интерфейсы все равно придется.

Пара слов про скриншоты UEFI

Благодаря универсальности

GOP

, ConIn/ConOut и DevicePath можно было сесть и написать за полчаса простой DXE-драйвер, который снимал бы замечательные скриншоты в формате BMP со всего, что происходит в графической консоли после его (драйвера) загрузки по нажатию горячей клавиши, после чего сохранял бы их на первом попавшемся USB-носителе с ФС FAT32… Но его нужно сначала написать, потом отладить, потом интегрировать в прошивки так, чтобы они от этого не развалились (а на ноутбуках придется микросхему с прошивкой выпаивать и под программатор класть, если вдруг что-то не так пойдет), плюс с подконтрольного мне AptioV можно снимать скриншоты просто используя терминал и console serial redirection, а у остальных там настроек буквально на два-три экрана, которые можно банально с монитора сфотографировать, поэтому прошу вас, уважаемые читатели, простить вашего покорного слугу за эти кривые фотографии и за тот факт, что он — ленивая жопа.

Определение модели контроллера флешки

Оказалась по воле судьбы у меня одна флешка, которую Windows отказывалась форматировать — вылетала ошибка: “Windows не удается завершить форматирование”.

Флешка, по заверениям владельца, не падала, в нее не проникала влага, да и вообще, с ней довольно бережно обращались…

Всё, что было ясно (по ее виду): что это флешка от SmartBuy, и она на 16 GB (фото ниже). При подключении к ПК — загорался светодиод, флешка определялась и была видна в проводнике, но работала со сбоями.

Подписываем esl-файлы

Для правильно работы SecureBoot необходимо, чтобы PK был подписан сам собой, KEK подписан PK, а хранилища db и dbx — сответственно KEK. При этом PK не может быть несколько, а вот ситуация с несколькими KEK хоть и встречается в дикой природе, но я все же настоятельно рекомендую удалить предустановленный ключ Microsoft из KEK по простой причине — db и dbx могут быть подписаны любым ключом из хранилища KEK, т.е.

если ключ MS оттуда не удалить, то у MS будет возможность управлять содержимым db и dbx, т.е. добавлять любые новые ключи или хеши в список доверенной загрузки и удалять из него существующие. На мой взгляд, это немного слишком, и если мы берем управление ключами в свои руки, то нужно делать это до конца.

С другой стороны, если вы не хотите терять возможность загрузки Windows и подписанных ключом Microsoft исполняемых компонентов (к примеру, GOP-драйверов внешних видеокарт и PXE-драйверов внешних сетевых карточек), то к нашему ISK.esl надо будет добавить еще пару ключей — ключ

, которым MS подписывает собственные загрузчики и ключ

, которым подписываются компоненты третьих сторон (именно им, кстати, подписан загрузчик Shim, с помощью которого теперь стартуют разные дистрибутивы Linux, поддерживающие SecureBoot из коробки).

Последовательность та же, что и под спойлером выше. Конвертируем из DER в PEM, затем из PEM в ESL, затем добавляем к db.esl, который в конце концов надо будет подписать любым ключом из KEK:

openssl x509 -in MicWinProPCA2022_2022-10-19.crt -inform DER -out MsWin.pem -outform PEM
openssl x509 -in MicCorUEFCA2022_2022-06-27.crt -inform DER -out UEFI.pem -outform PEM
cert-to-efi-sig-list -g "$(uuidgen)" MsWin.pem MsWin.esl
cert-to-efi-sig-list -g "$(uuidgen)" UEFI.pem UEFI.esl
cat ISK.esl MsWin.esl UEFI.esl > db.esl


Теперь подписываем PK самим собой:

sign-efi-sig-list -k PK.key -c PK.pem PK PK.esl PK.auth

Подписываем KEK.esl ключом PK:

sign-efi-sig-list -k PK.key -c PK.pem KEK KEK.esl KEK.auth

Подписываем db.esl ключом KEK:

sign-efi-sig-list -k KEK.key -c KEK.pem db db.esl db.auth


Если еще не надоело, можно добавить чего-нибудь еще в db или создать хранилище dbx, нужные команды вы теперь знаете, все дальнейшее — на ваше усмотрение.

:/>  Оптимизация оперативной памяти в Windows 10

Подписываем загрузчик

Осталось подписать какой-нибудь исполняемый файл ключом ISK, чтобы проверить работу SecureBoot после добавления ваших ключей. Для тестов я советую подписать

, она графическая и яркая, и даже издалека видно, запустилась она или нет. На самом деле, утилита эта чрезвычайно мощная и ей можно натворить немало добрых и не очень дел, поэтому после тестов лучше всего будет её удалить, и в дальнейшем подписывать только загрузчики.


В любом случае, подписываются исполняемые файлы вот такой командой:

sbsign --key ISK.key --cert ISK.pem --output bootx64.efi RU.efi

Здесь я заодно переименовал исполняемый файл в

bootx64.efi

, который нужно положить в директорию /EFI/BOOT тестового USB-носителя с ФС FAT32. Для 32-битных UEFI (избавь вас рандом от работы с ними) используйте

bootia32.efiRU32.efi

В результате вот этого всего у вас получились три файла .auth, которые нужно будет записать «как есть» в NVRAM-переменные db, KEK и PK, причем именно в таком порядке. Скопируйте все три файла в корень другого USB-носителя с ФС FAT32, на котором в качестве /EFI/BOOT/bootx64.efi выступит /usr/share/efitools/efi/KeyTool.efi (скопируйте его еще и в корень, на всякий случай) и ваш «набор укротителя SecureBoot» готов.

Порядок выполнения:

  • Зайти в BIOS и в пункте Secure Boot (защищенная загрузка) выбрать Disable (отключено).
  • В пункте OS Mode Selection (выбор операционной системы) выбрать Uefi и Legacy boot (разрешить загрузку).
  • После этого можно перезапустить BIOS – загрузка с USB активируется.

Преимущества uefi

    • ускорение загрузки ОС;
    • поддержка русского языка;
    • нет проблем с применением жестких дисков большого объема (2 Тб и выше);
    • поддерживание мультизапуска операционных систем, их правильная организация;
    • наглядный контроль состояния частей ПК ;
    • удобный и понятный для человека визуальный интерфейс;
    • микрокод программы содержит большую защиту от вирусов, чем BIOS;
    • подобно полноценным операционным системам имеет собственный софт и сетевое хранилище.

Что касается UEFI Secure Boot, то это заранее предусмотренный разработчиками способ защиты от запуска нелицензионного кода. Он не позволяет вирусным программам заменить загрузчик, а при использовании Microsoft – спасает от пиратской версии ОС. Однако чаще всего данный режим отключен по умолчанию, или же по некоторым причинам пользователям приходится самостоятельно его отключать.

В настоящее время UEFI представляется как отдельная часть стандартного BIOS-а, но уже выпускаются компьютеры с материнскими платами, где все наоборот – BIOS считается дополнительным модулем к UEFI.

Разница между uefi и биос

  • Возможность поддерживать разметку gpt;

Разметка GPT была создана специально , чтобы было менее проблематично работать с дисками объемом 2 Тб и больше . Кроме этого , можно при первом настраивании операционной системы разбить диск на любое количество разделов, что ранее было невозможным. Предыдущий способ разметки – MBR не совместим с uefi и работа с ней возможна только при наличии дополнительного расширения  CSM (Compatibility Support Module).

  • Модульная архитектура;

Модуль shell ( есть не на всех ноутбуках) «разрешает» управлять приложениями юзера прямо в режиме UEFI. Как уже упоминалось, UEFI похожа на самостоятельную операционную систему, даже с поддержкой сетевых драйверов. Спецификация программки «разрешает» использовать драйвера для UEFI при помощи ОС, например , если в основной операционной системе отсутствует или не работает сетевой драйвер.

  • Встроенный загрузочный менеджер;

Если планируется мультизагрузка, не придется устанавливать специализированный загрузочный менеджер. Можно самостоятельно добавить новые разделы в меню, там , где находится список всех дисков и флеш-накопителей. Таким образом, есть возможность запустить ядро Линукса, не используя загрузчик или поставить на одно устройство и Виндовс, и Линукс.

Secure Boot не отменяет такой возможности для пользователей Windows 8. На всех устройствах есть возможность отключить данный режим, кроме планшетов на ARM, где Win 8 была установлена в качестве стандартной ОС. Защищенный режим не позволяет использовать неподписанный код даже при выполнении операционной системы, поэтому вредоносные трояны не проникнут ни в Windows, ни в Linux.

Способ 1: с помощью спец. утилиты

Чтобы восстановить нормальную работу флешки, необходимо перепрошить микросхему контроллера. Делается это специальными утилитами, и для каждого типа контроллера — своя утилита!

Если утилита будет выбрана неверно, то с высокой долей вероятности, вы испортите флешку на всегда! Скажу даже больше, у одного модельного ряда флешек — могут быть разные контроллеры!

У каждого устройства есть свои уникальные идентификационные номера — VID и PID, и флешка здесь не исключение. Чтобы выбрать правильно утилиту для перепрошивки — необходимо определить эти идентификационные номера (а по ним модель контроллера).

  1. VID — идентификатор производителя контроллера;
  2. PID — идентификатор устройства.

Один из самых простых способов узнать VID, PID, и модель контроллера флешки — это использовать специальные утилиты. Одна из лучших в своем роде — это Flash Drive Information Extractor.

Способ 2: визуальный осмотр контроллера

Определить достоверно модель контроллера можно, если разобрать флешку. Правда, не каждый корпус у флешки разборный, и не каждую потом соберешь обратно ☝.

Обычно, чтобы вскрыть корпус флешки, нужен нож и отвертка. При вскрытии корпуса будьте аккуратны, чтобы не повредить внутренности флешки. Пример контроллера показан на скрине ниже.

Способ 3: через диспетчер устройств

Узнать VID и PID флешки можно с помощью диспетчера устройств (в этом случае — ничего и устанавливать не нужно).

Правда в этом случае мы не узнаем модель контроллера, и есть некоторый риск, что по VID и PID не получится точно идентифицировать контроллер. И тем не менее, вдруг вышеприведенная утилита зависнет и не даст вообще никакой информации… 👇

  1. Сначала вставляем флешку в USB-порт;
  2. Далее запускаем диспетчер устройств: нажмите сочетание кнопок WIN R, в строку “Открыть” введите команду devmgmt.msc, нажмите OK(скрин ниже в качестве примера); 👇
  3. В диспетчере устройств откройте вкладку “Контроллеры USB”, а в ней найдите строку “Запоминающее устройство USB” — перейдите в его свойства;
  4. Далее нужно открыть вкладку “Сведения”, выбрать свойство “ИД оборудования”, и вы увидите VID и PID флешки (стрелка 5 на скриншоте ниже); 👇

Вот, собственно, и все — будем считать, что модель контроллера мы все-таки определили…

Тестовая конфигурация


Специально для этой статьи я достал из закромов пару не самых новых ноутбуков с прошивками на платформах Phoenix

SCT

и Insyde H2O, а также совершенно новую плату congatec (разработкой прошивки для которой я занят в данный момент) на платформе AMI AptioV. Встречайте, наши тестовые стенды:

UEFI boot – что это такое? Установка и отключение UEFI boot Windows1AMI

, они же ”

треугольныеcongatec conga-TR3 @ conga-TEVAL

, AMD RX-216GD (Merlin Falcon), AMI AptioV (UEFI 2.4)

UEFI boot – что это такое? Установка и отключение UEFI boot Windows2Insyde

, они же ”

квадратныеAcer Aspire R14 R3-471T (Quanta ZQX)

, Intel Core i3-4030U (Ivy Bridge), Insyde H2O (UEFI 2.3.1C)

UEFI boot – что это такое? Установка и отключение UEFI boot Windows3Phoenix

, они же ”

полукруглыеDell Vostro 3360 (Quanta V07)

, Intel Core i7-3537U (Ivy Bridge), Phoenix SCT (UEFI 2.3.1C)

Укрощение строптивого


Начинается все одинаково: вставляем нашу флешку с ключами и

KeyTool

‘ом в свободный USB-порт, включаем машину, заходим в BIOS Setup. Здесь, прежде чем заниматься настройкой SecureBoot, нужно отключить

CSM

, а с ним — и легаси-загрузку, с которыми наша технология не совместима. Также обязательно поставьте на вход в BIOS Setup пароль подлиннее, иначе можно будет обойти SecureBoot просто отключив его, для чего на некоторых системах с IPMI и/или AMT даже физическое присутсвие не потребуется.

Устранение ошибки, возникающей в windows 8.1

Если после установки windows или после обновления версии до 8.1 в правом углу монитора появляется уведомление о неправильной регулировке secure boot (защищенной загрузки).

На большинстве компьютеров неполадка решается заходом в меню uefi и включением режима «Secure boot» в БИОСе.

Заключение

В итоге, благодаря утилитам с открытым кодом, удалось завести SecureBoot на системах с UEFI трех различных вендоров, сгенерировать свои собственные ключи и подписать ими нужные нам исполняемые файлы. Теперь загрузка платформы целиком в наших руках, но только в случае, если пароль на BIOS стойкий и не хранится

, как у некоторых, а в реализации SecureBoot нет каких-либо известных (или еще неизвестных) дыр. Сам по себе SecureBoot — не панацея от буткитов, но с ним ситуация с безопасной загрузкой все равно намного лучше, чем без него.


Надеюсь, что материал вам поможет, и спасибо за то, что прочитали эту портянку.

Оставьте комментарий

Adblock
detector