Extensible Firmware Interface

Plaats van UEFI tussen het besturingssysteem en de hardware

EFI (of UEFI) is een afkorting van (Unified) Extensible Firmware Interface, een specificatie voor de koppeling tussen het besturingssysteem van een computer en de firmware van het platform. EFI werd ontwikkeld door Intel; de opvolger UEFI heeft op pc's het traditionele BIOS vervangen. Een UEFI-implementatie verzorgt bij het opstarten van een computer dezelfde taken als het BIOS: de hardware initialiseren en het besturingssysteem laden. De specificatie wordt sinds 2005 ontwikkeld door het UEFI Forum, een samenwerkingsverband uit de computerindustrie met meer dan 250 leden.

Geschiedenis

Het BIOS is de opstartcode van de IBM PC, die in augustus 1981 werd geïntroduceerd en die andere fabrikanten nabouwden voor hun IBM-compatibele computers. In 1998 begon Intel met het programma Intel Boot Initiative, bedoeld voor een nieuwe generatie computers op basis van Intel-architectuur. Computers met Itanium-processors gebruikten EFI in plaats van een BIOS om het besturingssysteem te starten. Intel publiceerde de specificatie onder de naam EFI; de laatste versie onder die naam was EFI 1.10. In 2004 bracht Intel de basiscode van zijn implementatie, ontwikkeld onder de projectnaam Tiano, uit als opensourcesoftware. Daaruit ontstonden de ontwikkelomgevingen EDK en EDK II van het TianoCore-project.

In 2005 werd het Unified EFI Forum (kortweg UEFI Forum) opgericht. Met EFI 1.10 als uitgangspunt ontwikkelt dit forum de specificatie verder onder de naam UEFI. Intel behoudt het auteursrecht op EFI 1.10, maar nieuwe EFI-versies verschijnen niet meer. UEFI 2.0 verscheen in januari 2006. De meest recente versie, UEFI 2.11, kwam uit in december 2024. Het forum beheert daarnaast onder meer de Platform Initialization-specificatie (PI), een specificatie voor de UEFI-shell en de ACPI-specificatie.

Invoering

In januari 2006 bracht Apple zijn eerste Macintosh-computers met een Intel-processor uit. Deze Macs gebruiken EFI. Microsoft ondersteunt het opstarten via UEFI vanaf de 64-bitversies van Windows Vista en Windows Server 2008. Rond de introductie van Windows 8 kreeg de beveiligingsfunctie Secure Boot een centrale plaats. Voor Windows 11 moet een pc UEFI met Secure Boot ondersteunen.

Lange tijd bevatte UEFI-firmware op pc's een Compatibility Support Module (CSM), waarmee een systeem zich als een BIOS kon gedragen. In november 2017 maakte Intel bekend dat zijn platforms vanaf 2020 alleen nog UEFI class 3 zouden ondersteunen: UEFI zonder CSM, waarop opstarten in BIOS-modus niet meer mogelijk is.

Werking

Schema van de opeenvolgende fasen bij het opstarten van een UEFI-systeem

UEFI beschrijft een interface, geen bepaalde firmware. De specificatie legt vast welke gegevenstabellen en diensten de firmware aanbiedt aan het besturingssysteem en de bootloader. De specificatie omvat de processorarchitecturen IA-32, Itanium, x64, 32- en 64-bits ARM, RISC-V en LoongArch.

Opstartfasen

De Platform Initialization-specificatie verdeelt het opstarten in fasen. Na een eerste verwerking in de SEC-fase (Security) initialiseert de PEI-fase (Pre-EFI Initialization) met minimale middelen de basishardware, waaronder een deel van het permanente geheugen. Uitgebreidere initialisatie volgt in de DXE-fase (Driver Execution Environment).

Daarna neemt de bootmanager het over. Die probeert de opstartopties in de volgorde die in variabelen in niet-vluchtig geheugen (NVRAM) is vastgelegd. Noemt een opstartoptie geen bepaald bestand, dan zoekt de firmware op het medium naar een standaardbestand, op x64-systemen \EFI\BOOT\BOOTX64.EFI. Zo kan een computer zonder voorafgaande instelling opstarten van een verwisselbaar medium, zoals een USB-stick.

Diensten

De firmware biedt twee soorten diensten. Opstartdiensten (boot services) zijn alleen beschikbaar zolang de firmware de computer beheert; het besturingssysteem beëindigt ze met de functie ExitBootServices(). Stuurprogramma's van de firmware voor deze fase worden dan afgesloten, en hun geheugen gaat over naar het besturingssysteem. Runtimediensten (runtime services), zoals klok, variabelen en herstarten, blijven ook daarna beschikbaar.

Partities

UEFI definieert de GUID Partition Table (GPT) als alternatief voor de master boot record (MBR). De MBR werkt met 32-bits sectoradressen en hooguit vier primaire partities. GPT gebruikt 64-bits adressen, ondersteunt veel meer partities en bewaart een reservekopie van de partitietabel met controlesommen. Een beschermende MBR aan het begin van de schijf voorkomt dat oudere software een GPT-schijf verkeerd leest. Om van een schijf op te starten is een EFI-systeempartitie (ESP) nodig. Onder Windows is deze partitie ongeveer 100 MB groot, en Windows start alleen in 64-bitversies op UEFI-systemen op van een GPT-schijf.

Secure Boot

Instellingen voor Secure Boot in de firmware van een laptop

Secure Boot is een onderdeel van UEFI dat tijdens het opstarten alleen geverifieerde programma's toelaat. Het is bedoeld als verdediging tegen malware die al vóór het besturingssysteem wordt geladen. Secure Boot werkt met digitale handtekeningen en publieke sleutels. De platformsleutel (PK) legt het vertrouwen vast tussen de eigenaar van het platform en de firmware. Met key exchange keys (KEK) kunnen besturingssystemen wijzigingen in de handtekeningdatabases ondertekenen. Database db bevat de toegestane programma's; database dbx, de herroepingslijst, bevat de programma's die niet meer mogen worden uitgevoerd. Zonder platformsleutel staat de firmware in de setupmodus, waarin de sleutels vrij kunnen worden aangepast. Na het vastleggen van een platformsleutel moeten wijzigingen ondertekend zijn.

Op de meeste computers voor algemeen gebruik is Secure Boot optioneel en kan het worden uitgeschakeld; de fabrikant bepaalt het beleid per apparaat. Pc's vertrouwen doorgaans certificaten van Microsoft, waarmee zowel Windows als bootloaders van andere partijen worden ondertekend.

Rond de introductie van Windows 8 vreesden critici dat Secure Boot de installatie van Linux en andere besturingssystemen zou belemmeren. Microsoft verklaarde dat het de firmware-instellingen voor andere besturingssystemen niet voorschrijft en dat fabrikanten bepalen of Secure Boot kan worden uitgeschakeld. Ook later bleef er kritiek vanuit de opensourcegemeenschap.

Beveiliging

Een bootkit, een soort rootkit die zich in het opstartproces nestelt, heeft volledige controle over het laden van het besturingssysteem en kan daarin beveiligingsmechanismen uitschakelen. Fouten in UEFI-implementaties zijn daarom een geliefd doelwit.

Aanvallen en kwetsbaarheden

  • In 2013 lieten drie onderzoekers op de Black Hat-conferentie met een laptop van Asus zien dat fouten van fabrikanten bij de implementatie van UEFI het mogelijk maakten Secure Boot te omzeilen.
  • In maart 2023 publiceerde ESET een analyse van BlackLotus, de eerste in het wild aangetroffen UEFI-bootkit die Secure Boot kon omzeilen, zelfs op volledig bijgewerkte systemen met Windows 11. De bootkit misbruikte een beveiligingslek dat Microsoft in januari 2022 had gedicht, maar de kwetsbare bestanden stonden nog niet op de herroepingslijst. Op hackersfora werd BlackLotus sinds oktober 2022 voor 5000 dollar aangeboden.
  • Eind 2023 maakte het beveiligingsbedrijf Binarly onder de naam LogoFAIL kwetsbaarheden bekend in de code die het opstartlogo weergeeft, in firmware van AMI, Insyde en Phoenix. Met een gemanipuleerde afbeelding op de EFI-systeempartitie kon een aanvaller Secure Boot omzeilen.
  • In juli 2024 meldde Binarly onder de naam PKfail dat honderden apparaatmodellen van onder meer Acer, Dell, HP, Lenovo en Supermicro een testplatformsleutel van AMI gebruikten, die was gemarkeerd als niet te vertrouwen. Een privésleutel daarvan was eerder uitgelekt.

Firmware-updates en actuele status

Een lek in UEFI-firmware moet per fabrikant en per apparaatmodel worden gedicht. Volgens het UEFI Forum duurt het uitbrengen van een firmwarepatch vaak langer dan bij andere software. Bovendien blijven kwetsbare opstartbestanden bruikbaar zolang ze niet op de herroepingslijst staan, zoals BlackLotus liet zien. Het Amerikaanse Cybersecurity and Infrastructure Security Agency (CISA) riep de sector in augustus 2023 daarom op updates betrouwbaarder te maken, herroeping te automatiseren en beter te reageren op meldingen van kwetsbaarheden.

Meldingen van kwetsbaarheden worden gecoördineerd door het UEFI Security Response Team (USRT) van het UEFI Forum. Dat houdt ook een lijst bij van de beveiligingscontactpunten van onder meer AMD, AMI, Apple, Dell, HP, Insyde, Intel, Lenovo, Microsoft en Phoenix. Firmware-updates verschijnen dus bij de afzonderlijke fabrikanten. De bestanden voor het bijwerken van de Secure Boot-databases, waaronder de herroepingslijst, werden jarenlang door het UEFI Forum gepubliceerd en worden inmiddels door Microsoft beschikbaar gesteld.

De oorspronkelijke Secure Boot-certificaten van Microsoft uit 2011 verlopen in 2026: de KEK CA 2011 op 24 juni, de UEFI CA 2011 op 27 juni en de Windows Production PCA 2011 op 19 oktober. Microsoft vervangt ze door certificaten uit 2023. Apparaten die de nieuwe certificaten niet krijgen, blijven gewoon opstarten. Ze kunnen echter geen nieuwe beveiligingsupdates voor het opstartproces meer ontvangen, zoals herroepingslijsten en nieuwe versies van de Windows Boot Manager.

Implementaties

De referentie-implementatie is EDK II van het opensourceproject TianoCore, dat de UEFI- en PI-specificaties implementeert. Commerciële UEFI-firmware wordt onder meer geleverd door American Megatrends (AMI), Insyde Software, Phoenix Technologies en Byosoft.

Zie ook