Что такое unified extensible firmware interface
Немного про UEFI и Secure Boot
UEFI (Unified Extensible Firmware Interface) — замена устаревшему BIOS. Эта спецификация была придумана Intel для Itanium, тогда она еще называлась EFI (Extensible Firmware Interface), а потом была портирована на x86, x64 и ARM. Она разительно отличается от BIOS как самой процедурой загрузки, так и способами взаимодействия с ОС. Если вы купили компьютер в 2010 году и позже, то, вероятнее всего, у вас UEFI.
Основные отличия UEFI от BIOS:
Как происходит загрузка в UEFI?
С GPT-раздела с идентификатором EF00 и файловой системой FAT32, по умолчанию грузится и запускается файл \efi\boot\boot[название архитектуры].efi, например \efi\boot\bootx64.efi
Т.е. чтобы, например, создать загрузочную флешку с Windows, достаточно просто разметить флешку в GPT, создать на ней FAT32-раздел и просто-напросто скопировать все файлы с ISO-образа. Boot-секторов больше нет, забудьте про них.
Загрузка в UEFI происходит гораздо быстрее, например, загрузка моего лаптопа с ArchLinux с нажатия кнопки питания до полностью работоспособного состояния составляет всего 30 секунд. Насколько я знаю, у Windows 8 тоже очень хорошие оптимизации скорости загрузки в UEFI-режиме.
Secure Boot
«Я слышал, что Microsoft реализовывает Secure Boot в Windows 8. Эта технология не позволяет неавторизированному коду выполняться, например, бутлоадерам, чтобы защитить пользователя от malware. И есть кампания от Free Software Foundation против Secure Boot, и многие люди были против него. Если я куплю компьютер с Windows 8, смогу ли я установить Linux или другую ОС? Или эта технология позволяет запускать только Windows?»
Начнем с того, что эту технологию придумали не в Microsoft, а она входит в спецификацию UEFI 2.2. Включенный Secure Boot не означает, что вы не сможете запустить ОС, отличную от Windows. На самом деле, сертифицированные для запуска Windows 8 компьютеры и лаптопы обязаны иметь возможность отключения Secure Boot и возможность управления ключами, так что беспокоится тут не о чем. Неотключаемый Secure Boot есть только на планшетах на ARM с предустановленной Windows!
Что дает Secure Boot? Он защищает от выполнения неподписанного кода не только на этапе загрузки, но и на этапе выполнения ОС, например, как в Windows, так и в Linux проверяются подписи драйверов/модулей ядра, таким образом, вредоносный код в режиме ядра выполнить будет нельзя. Но это справедливо только, если нет физического доступа к компьютеру, т.к., в большинстве случаев, при физическом доступе ключи можно заменить на свои.
Для 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, и, по моему мнению, делает это эффективно.
Спасибо за внимание!
Унифицированный расширяемый интерфейс прошивки
Оглавление
Особенности
В отличие от старой системы BIOS, UEFI содержит интерфейсы и таблицы данных с информацией о платформе, а также службы загрузки и выполнения, доступные загрузчику операционной системы и, как следствие, операционной системе. Прошивка UEFI предлагает различные технические преимущества по сравнению с системой BIOS:
история
Унифицированный EFI (UEFI)
Безопасная загрузка
Shim возникла потому, что многие производители материнских плат поставляют подписи только для продуктов Microsoft в своих реализациях UEFI и устанавливают пользовательские подписи на свое оборудование, например Б. для установки ядра Linux, или, по крайней мере, не только с помощью встроенных ресурсов UEFI. Практически все текущие дистрибутивы Linux используют Shim для запуска компьютеров с активированной безопасной загрузкой.
В 2016 году стало известно об уязвимости системы безопасности в загрузчике Microsoft, которая позволила обойти защиту.
Группа реагирования на безопасность UEFI (USRT)
Группа реагирования на безопасность UEFI (USRT) была основана в 2017 году для работы в качестве интерфейса и контактного лица между людьми, занимающимися ИТ-безопасностью, такими как хорошие хакеры (так называемые «белые шляпы»), и компаниями, производящими оборудование на основе UEFI. Цель состоит в том, чтобы облегчить и сократить путь, по которому кто-то должен идти, чтобы проинформировать отрасль о дыре в безопасности, обнаруженной в UEFI, чтобы в конечном итоге отрасль также могла быстрее реагировать с помощью исправлений безопасности.
Реализации
Tianocore EDK2
Подводная лодка
UEFI API доступен в универсальном загрузчике ( Das U-Boot ) с 2017 года. На архитектуре Armv8-A дистрибутивы Linux используют реализацию U-Boot UEFI вместе с GNU GRUB для загрузки (например, SUSE Linux ). OpenBSD также использует UEFI API для запуска из U-Boot.
Альтернативы
Техники и возможности
Интерфейс EFI должен устранить недостатки BIOS, широко распространенной с 1980-х годов, и открыть новые возможности. Согласно спецификациям EFI, к ним относятся:
Проникновение на рынок
Операционные системы
В большинстве операционных систем 64-разрядное ядро может использовать только 64-разрядные драйверы, включая драйверы (U) EFI, а 32-разрядное ядро может использовать только 32-разрядные драйверы. Это часто означает, что только 32-битная операционная система может быть запущена из 32-битной (U) прошивки EFI, и только 64-битная операционная система может быть запущена из 64-битной (U) прошивки EFI (например, с Microsoft Windows и большинство дистрибутивов Linux). Тем не менее, 32/64 бит (U) EFI в принципе не препятствует запуску 64/32 битной операционной системы; Например, загрузчик популярного дистрибутива Linux Fedora может запустить 64-битный Linux в системе только с 32-битным UEFI.
Itanium (IA-64)
x86 (IA-32)
Для конечных пользователей Windows (U) поддерживает EFI в основном в 64-разрядных версиях Windows Vista со встроенным пакетом обновления 1 или Windows Server 2008; некоторые 32-разрядные версии Windows также поддерживают 32-разрядный UEFI.
Для преемника Windows 7 Windows 8 рекомендуется EFI 2.x. Системы с системными дисками размером более 2 терабайт и системы с процессорами Arm требуют EFI.
Все версии Windows до Vista для архитектуры x86 работают на материнских платах (U) EFI только при наличии уровня совместимости с BIOS (CSM). Это з. B. Предоставляется компьютерами Macintosh с процессорами Intel, но также является частью большинства текущих реализаций UEFI на материнских платах ПК до 2020 года.
Linux
Fedora поддерживает EFI начиная с версии 17 при установке и соответствующим образом настраивает систему, чтобы иметь возможность работать с EFI. Debian поддерживает EFI начиная с версии 7.0 Wheezy со своим собственным загрузчиком. Загрузчик Fedora может по-прежнему устанавливать и запускать 64-разрядный Linux в 64-разрядной системе с 32-разрядным UEFI, чего не может сделать большинство других дистрибутивов Linux.
macOS (Mac OS X)
критика
Спецификация UEFI (Unified Extensible Firmware Interface, Унифицированный расширяемый микропрограммный интерфейс, унифицированный расширяемый интерфейс прошивки или расширяемый аппаратный интерфейс), ранее известная как Extensible Firmware Interface ( EFI ), определяет интерфейс между операционной системой и микрокодом (микропрограммами), управляющим оборудованием. Другими словами, UEFI это интерфейс, который располагается “поверх” аппаратных компонентов компьютера, которые, в свою очередь, функционируют на собственных прошивках (микрокодах).
Давайте теперь совершим небольшой экскурс в историю персональных компьютеров, с целью понять причины, которые приводили к попыткам замены стандартного BIOS на что-то принципиально новое.
Старый-добрый BIOS
Основные принципы функционирования BIOS (базовой системы ввода-вывода) для персональных компьютеров были определены еще в конце 70х годов прошлого века. На протяжении довольно большого промежутка времени, прошедшего с той поры, компьютерная отрасль интенсивно развивалась, это приводило к тому, что на определенных этапах возможностей BIOS было недостаточно, поскольку выпускаемые производителями устройства имели на борту новые технологии, часто не совместимые с текущими версиями BIOS. Что бы уйти от подобных проблем, разработчикам приходилось порой довольно существенно модифицировать код BIOS, однако целый ряд ограничений так и остался неизменным до настоящего времени. И, если первоначально архитектура BIOS была достаточно простой, то по прошествии времени она неминуемо усложнялась, адаптируясь под все новые и новые технологии, поэтому, к определенному моменту она стала напоминать нагромождение различного рода устаревшего и плохо взаимодействующего между собой кода. Ограничения, которые и по сей день можно встретить в коде BIOS, объясняются необходимостью сохранять совместимость с базовыми функциями, необходимыми для функционирования старого ПО. Всё это привело к тому, что BIOS, по сути, стал самым устаревшим компонентом современных ПК. На данный момент BIOS мало удовлетворяет требованиям новейшего оборудования и имеет следующие недостатки:
Все эти, а так же некоторые другие, недостатки традиционной модели BIOS и привели к тому, что коалиция производителей аппаратуры и ПО начала работать над созданием спецификации UEFI. Начиная, по собственным наблюдениям, где-то с 2010 года, спецификация UEFI начала массово внедряться во все вновь выпускаемые материнские платы ведущих производителей, поэтому на данный момент найти новый компьютер с традиционным BIOS практически невозможно. Однако, сильно огорчаться из-за этого не стоит, поскольку многие производители в своих системных платах сохраняют совместимость с функционалом традиционных BIOS. К примеру, очень важным моментом является поддержка традиционного режима загрузки при помощи MBR. С этой целью был разработан UEFI-модуль режима эмуляции BIOS, который носит название Compatibility Support Module (CSM). Правда, я так полагаю, со временем все меньше и меньше производителей будут поддерживать в своих прошивках данный режим.
Преимущества UEFI
Тут я хотел бы определить достоинства интерфейса UEFI:
Недостатки UEFI
А теперь хотелось бы осветить недостатки технологии UEFI:
Алгоритм работы UEFI
В процессе создания UEFI, разработчиками с самого начала были установлены жесткие рамки для каждого процесса, участвующего в ходе выполнения. Первые три фазы (SEC, PEI, DXE) подготавливают платформу для загрузчика ОС, четвертая фаза (BDS) непосредственно производит загрузку загрузчика ОС. Давайте попробуем разобрать алгоритм работы UEFI и подробнее рассмотреть все его фазы.
Алгоритм работы UEFI Boot Manager
Концепция загрузки UEFI существенно отличается от аналогичной в BIOS. Если вспомнить BIOS, то за загрузку там отвечал код начального загрузчика int 19h (bootstrap loader), задача которого состояла лишь в том, чтобы загрузить главную загрузочную запись (MBR) с устройства загрузки в память и передать ей управление. В UEFI всё несколько интереснее, она содержит свой собственный полноценный встроенный загрузчик, который носит название UEFI Boot Manager (Менеджер загрузки UEFI или просто Boot Manager), имеющий куда более богатый функционал.
Boot Manager реализует довольно широкий набор функций, в число которых входит загрузка таких UEFI-образов, как: UEFI-загрузчиков ОС первой стадии, UEFI-драйверов, UEFI-приложений. Загрузка может производиться из любого UEFI-образа, размещенного на любой поддерживаемой UEFI файловой системе, располагающейся на любом поддерживаемом платформой физическом носителе информации. UEFI Boot Manager имеет свою собственную конфигурацию, параметры которой в виде ряда переменных располагаются в общей NVRAM (Non-volatile RAM).
Вот так, примерно, я представляю себе алгоритм перебора носителей в процессе работы UEFI:
Требования к загрузочным носителям UEFI
Спецификация UEFI, наряду с прочим, описывает и определенные требования к правилам размещения разделов и загрузчиков на носителях. И для различных классов устройств, как мы увидим далее, они существенно отличаются.
Требования для жестких дисков
СОДЕРЖАНИЕ
История
Версия 2.0 спецификации UEFI была выпущена 31 января 2006 года. Она добавила криптографию и безопасность. Версия 2.1 спецификации UEFI была выпущена 7 января 2007 года. В нее добавлена сетевая аутентификация и архитектура пользовательского интерфейса («Инфраструктура интерфейса пользователя» в UEFI).
Последняя спецификация UEFI, версия 2.9, была опубликована в марте 2021 года.
Преимущества
Интерфейс, определенный спецификацией EFI, включает таблицы данных, которые содержат информацию о платформе, а также службы загрузки и выполнения, доступные загрузчику ОС и ОС. Прошивка UEFI имеет несколько технических преимуществ по сравнению с традиционной системой BIOS:
Совместимость
Совместимость процессора
Совместимость дискового устройства
Linux
Поддержка GPT в Linux включается включением опции CONFIG_EFI_PARTITION (EFI GUID Partition Support) во время настройки ядра. Эта опция позволяет Linux распознавать и использовать GPT-диски после того, как микропрограмма системы передает управление системой Linux.
Для обратной совместимости большинство реализаций UEFI также поддерживают загрузку с дисков с разделами MBR через модуль поддержки совместимости (CSM), который обеспечивает совместимость с устаревшими версиями BIOS. В этом случае загрузка Linux в системах с UEFI такая же, как и в устаревших системах на основе BIOS.
Майкрософт Виндоус
Функции
Услуги
Службы протокола вывода графики (GOP) Протокол выдаваемой графики (GOP) обеспечивает во время выполнения услуги; см. также раздел « Графические особенности » ниже. Операционной системе разрешено напрямую записывать в буфер кадра, предоставляемый GOP, в режиме выполнения. Сервисы карт памяти UEFI SMM услуги Услуги ACPI Услуги SMBIOS Различные услуги Переменные UEFI предоставляют способ хранения данных, в частности, энергонезависимых данных. Некоторые переменные UEFI являются общими для прошивки платформы и операционных систем. Пространства имен переменных идентифицируются идентификаторами GUID, а переменные представляют собой пары ключ / значение. Например, переменные UEFI могут использоваться для хранения сообщений о сбоях в NVRAM после сбоя, чтобы операционная система могла их получить после перезагрузки. Службы времени UEFI предоставляет службы времени. Службы времени включают поддержку полей часового пояса и перехода на летнее время, которые позволяют устанавливать аппаратные часы реального времени на местное время или UTC. На машинах, использующих часы реального времени PC-AT, по умолчанию аппаратные часы по-прежнему должны быть установлены на местное время для совместимости с Windows на основе BIOS, если только не используются последние версии и не установлена запись в реестре Windows, указывающая на использование. UTC.
Приложения
Протоколы
Драйверы устройств
Некоторые зависящие от архитектуры (не относящиеся к байтовому коду EFI) драйверы EFI для некоторых типов устройств могут иметь интерфейсы для использования ОС. Это позволяет ОС полагаться на EFI для драйверов для выполнения основных графических и сетевых функций до и в случае загрузки драйверов для конкретной операционной системы.
В других случаях драйвером EFI могут быть драйверы файловой системы, позволяющие загружаться с дисковых томов других типов. Примеры включают файлы efif для 37 файловых систем (на основе кода GRUB2 ), используемые Rufus для последовательной загрузки файловых систем NTFS.
Графические особенности
Спецификация EFI 1.0 определяет протокол UGA (универсальный графический адаптер) как способ поддержки графических функций. UEFI не включал UGA и заменял его GOP (протокол вывода графики).
UEFI 2.1 определил «Инфраструктуру интерфейса пользователя» (HII) для управления вводом пользователя, локализованными строками, шрифтами и формами (в смысле HTML ). Это позволяет производителям оригинального оборудования (OEM) или независимым поставщикам BIOS (IBV) разрабатывать графические интерфейсы для настройки перед загрузкой.
Самые ранние реализации прошивки UEFI были консольными. Сегодня многие реализации прошивки UEFI основаны на графическом интерфейсе.
Системный раздел EFI
Загрузка
Загрузка UEFI
Диспетчер загрузки также часто имеет текстовый пользовательский интерфейс, поэтому пользователь может выбрать желаемую ОС (или служебную программу установки) из списка доступных параметров загрузки.
Загрузка CSM
В ноябре 2017 года Intel объявила, что планирует прекратить поддержку CSM к 2020 году.
Загрузка по сети
Образы ОС могут удаленно храниться в сетях хранения данных (SAN) с помощью интерфейса малых компьютерных систем Интернета (iSCSI) и Fibre Channel over Ethernet (FCoE) в качестве поддерживаемых протоколов для доступа к SAN.
Безопасная загрузка
Оболочка UEFI
Исходный код для UEFI оболочки можно загрузить из Intel «s TianoCore проекта UDK / EDK2. Также доступен предварительно созданный ShellBinPkg. Shell v2 лучше всего работает в системах с UEFI 2.3+ и рекомендуется вместо Shell v1 в этих системах. Shell v1 должна работать во всех системах UEFI.
Команды
Ниже приводится список команд, поддерживаемых оболочкой EFI.
Расширения
Капсула UEFI
Аппаратное обеспечение
Классы UEFI
Машины с UEFI могут иметь один из следующих «классов», которые использовались для облегчения перехода на UEFI. Intel прекратила использование Legacy BIOS в 2020 году.
Этапы загрузки
Второй этап загрузки UEFI состоит из диспетчера зависимостей, который загружает и запускает модули PEI (PEIM) для обработки задач начальной инициализации оборудования, таких как операции инициализации основной памяти и восстановления микропрограмм. Кроме того, он отвечает за обнаружение текущего режима загрузки и обработку многих операций ACPI S0ix / ACPI S3. В случае возобновления ACPI S0ix / ACPI S3 он отвечает за восстановление многих аппаратных регистров до состояния, предшествующего спящему режиму. PEI также использует кеш-память ЦП в качестве ОЗУ.
Этот этап состоит из модулей C и диспетчера зависимостей. Теперь, когда основная память доступна, ЦП, набор микросхем, материнская плата и периферийные устройства инициализируются в DXE и BDS.
BDS является частью DXE. На этом этапе инициализируются устройства ввода- вывода и загрузочные устройства, выполняются драйверы UEFI или дополнительные ПЗУ устройств PCI в соответствии с конфигурацией системы и обрабатываются параметры загрузки.
Это этап между выбором загрузочного устройства и передачей ОС. На этом этапе можно войти в оболочку UEFI или запустить приложение UEFI, такое как загрузчик ОС.
Когда используется устаревшая ОС, CSM будет обрабатывать этот вызов, обеспечивая совместимость системы с ожиданиями устаревшей BIOS.
Реализация и принятие
Intel EFI
Внедрение UEFI в Phoenix Technologies носит название SecureCore Technology (SCT). American Megatrends предлагает собственную реализацию прошивки UEFI, известную как Aptio, а Insyde Software предлагает InsydeH2O.
Das U-Boot
Реализация UEFI API была представлена в универсальном загрузчике ( Das U-Boot ) в 2017 году. На архитектуре ARMv8 дистрибутивы Linux используют реализацию UEFI UEFI вместе с GNU GRUB для загрузки (например, SUSE Linux ), то же самое верно и для OpenBSD. Для загрузки с iSCSI iPXE может использоваться как приложение UEFI, загружаемое с помощью U-Boot.
Платформы, использующие EFI / UEFI
В течение 2005 года более одного миллиона систем Intel было поставлено с внедрением Intel UEFI. Новые мобильные, настольные и серверные продукты, в которых используется реализация Intel UEFI, начали поставляться в 2006 году. Например, платы, использующие серию наборов микросхем Intel 945, используют реализацию встроенного ПО Intel UEFI.
В 2008 году большее количество систем x86-64 приняли UEFI. Хотя многие из этих систем по-прежнему позволяют загружать только ОС на базе BIOS через модуль поддержки совместимости (CSM) (таким образом, пользователю не кажется, что они основаны на UEFI), другие системы начали разрешать загрузку ОС на основе UEFI. Например, сервер IBM x3450, материнские платы MSI с ClickBIOS, ноутбуки HP EliteBook.
В 2009 году IBM поставила машины System x (x3550 M2, x3650 M2, iDataPlex dx360 M2) и BladeCenter HS22 с поддержкой UEFI. Dell поставила серверы PowerEdge T610, R610, R710, M610 и M710 с поддержкой UEFI. Более коммерчески доступные системы упоминаются в техническом документе UEFI.
В октябре 2017 года Intel объявила, что к 2020 году она откажется от поддержки устаревшей BIOS для всех своих продуктов в пользу UEFI Class 3.
Операционные системы
Использование UEFI с виртуализацией
Разработка приложений
Минималистичная « Привет, мир » программа C написано с использованием EADK похожа на свою обычную C коллегу :
Критика
Безопасная загрузка
Другие разработчики выразили озабоченность по поводу юридических и практических вопросов реализации поддержки безопасной загрузки в системах Linux в целом. Бывший разработчик Red Hat Мэтью Гарретт отметил, что условия Стандартной общественной лицензии GNU версии 3 могут препятствовать использованию GNU GRand Unified Bootloader без раскрытия разработчиком дистрибутива закрытого ключа (однако Фонд свободного программного обеспечения с тех пор разъяснил свою позицию, заверив, что ответственность за предоставление ключей лежит на производителе оборудования), и что опытным пользователям также будет сложно создать собственные ядра, которые могли бы работать с включенной безопасной загрузкой, без их самоподписывания. Другие разработчики предложили предоставить подписанные сборки Linux с другим ключом, но отметили, что будет сложно убедить OEM-производителей поставлять свои компьютеры с требуемым ключом вместе с ключом Microsoft.
На конференции Black Hat в августе 2013 года группа исследователей безопасности представила серию эксплойтов в реализациях UEFI конкретных поставщиков, которые могут использоваться для использования безопасной загрузки.
Проблемы с прошивкой
Возросшее значение прошивки UEFI в устройствах также привело к ряду технических проблем, связанных с их соответствующими реализациями.
После выпуска Windows 8 в конце 2012 года было обнаружено, что некоторые модели компьютеров Lenovo с безопасной загрузкой имели встроенное ПО, жестко запрограммированное таким образом, чтобы разрешать загрузку только исполняемых файлов с именами « Windows Boot Manager » или « Red Hat Enterprise Linux », независимо от любых других. параметр. С другими проблемами столкнулись несколько моделей ноутбуков Toshiba с безопасной загрузкой, в которых отсутствовали определенные сертификаты, необходимые для его правильной работы.