Wat zijn UEFI, TPM en Secure Boot?
Een vraag die ik vaak krijg en waar ik zelf ook een tijdje mee rondgelopen heb is “wat is nu UEFI, TPM en Secure Boot en wat hebben deze componenten met elkaar gemeen. Natuurlijk, deze componenten zijn allemaal relatief nieuwe technieken waarbij “security” en belangrijk sleutelwoord is. Maar hoe dan? Welke component doet wat precies en zijn ze ook afhankelijk van elkaar? Dat gaan we deze post bekijken!
Om deze post duidelijk te houden is het goed dat we eerst kijken naar het “normale” boot proces van een oudere PC welke nog boot middels BIOS firmware. We drukken de aan/uit button van de computer in en na een tijdje kunnen we inloggen in Windows. Sure! Maar er gebeurt in deze tussenliggende periode wel het e.e.a. Zo moeten o.a. de BIOS, de hardware en het OS goed werken om te komen tot het inlogscherm. Laten we eens kijken hoe BIOS firmware dit doet.
1.
Wanneer de computer voor de eerste keer wordt ingeschakeld, initialiseert de CPU zichzelf. Dit doet de CPU middels een serie kloktikken die door de systeemklok worden gegenereerd. Een onderdeel van de initialisatie van de CPU is om naar de (ROM) BIOS (Basic Input/Output System) van het systeem te kijken voor de eerste instructie in het opstartprogramma. De BIOS slaat de eerste instructie op, namelijk de instructie om de power-on zelftest (POST) uit te voeren, in een vooraf bepaald geheugenadres.
2.
De POST (Power On Self Test) start en controleert de essentiële hardware apparaten (video kaarten, Plug & Play devices andere BIOSen) op correcte werking. Ook voert het een korte geheugentest uit (hoeveel geheugen zit in het systeem) en wijst het resources (DMA kanalen en IRQ’s) toe.
3.
Als de POST slaagt en alle hardware is goed geinitialiseerd dan kijkt de BIOS naar de locatie(s) vanwaar het OS gestart moet worden. Alle variabele BIOS settings zoals geïnstalleerde disks, geheugen, huidige datum en tijd, systeemklok, bootvolgorde etc.) worden opgeslagen op de CMOS (Complementary Metal-Oxide-Semiconductor) chip welke normaliter 256 bytes opslagcapaciteit heeft.
4.
Nu het systeem weet v.a. welke locatie deze moet booten zal deze het medium aanspreken. Hierop zal de BIOS als eerste terecht komen op het Master Boot Record (blok 0) welke de BIOS verteld waar de het begin van het OS te vinden is. Het Master Boot Record noemen we ook wel de First Stage Boot Loader en is 512 bytes groot.
5.
Nadat het BIOS de besturing heeft overgebracht naar het begin van de MBR die in het geheugen is geladen, scant de MBR-code de partitietabel en laadt het Volume Boot Record (VBR) voor die partitie. De VBR is een opeenvolging van opeenvolgende blokken die begint bij het eerste schijfblok van de aangewezen partitie. Het eerste blok van de VBR identificeert het partitietype en de grootte en bevat een Initial Program Loader (IPL). De IPL is code welke extra blokken laadt die de Second Stage Bootloader vormen. Op Windows NT-based systemen laadt de IPL een programma genaamd NTLDR welke vervolgens het besturingssysteem laadt. Een van de redenen de stage 1 bootloader op een laag niveau het moeilijk heeft met het laden van een volledig besturingssysteem, met name een die uit meerdere bestanden kan bestaan, is dat de bestandssysteemstructuur moet worden ontleed. Dit betekent dat hij inzicht en kennis moet hebben van de manier waarop directories en bestandsnamen opgemaakt zijn en hoe hij de datablokken vindt die overeenkomen met een specifiek bestand. Zonder veel code is het veel eenvoudiger om alleen opeenvolgende blokken te lezen. Een Second Stage Bootloader op een hoger niveau, zoals NTLDR van Microsoft of SysLinux van Linux, kan de bestandsindelingen (NTFS, FAT, EXT) lezen en interpreteren en kan zo het besturingssysteem starten.
6.
Nu zal het OS zichzelf initialiseren en de BIOS zal zijn settings wegschrijven in het geheugen (RAM) waarna het OS de controle overneemt.
7.
Nu het OS de controle heeft voert het besturingssysteem opnieuw een inventaris uit van het geheugen en de geheugenbeschikbaarheid van het systeem (dat het BIOS al heeft gecontroleerd) en laadt het OS de apparaat stuurprogramma’s die het nodig heeft om de randapparaten te bedienen.
In het kort is dat dus:
- CPU initialisatie
- POST
- BIOS settings worden geladen en boot locatie wordt doorgegeven
- First Stage Bootloader start Second Stage Bootloader
- Second Stage Bootloader verteld waar het OS te vinden is
- OS initialiseerd zichzelf
- OS laad de apparaat stuurprogramma’s (drivers)
UEFI (Unified Extensible Firmware Interface)
Omdat in rap tempo 32-bits architecturen veranderen naar 64-bits architecturen raakt uit de huidige BIOS welke opstartcode in 16-bits modus uitvoert met een 20-bits adressering aardig outdated. Intel heeft besloten om hiervoor een nieuwe standaard te ontwikkelen, namelijk de UEFI (Unified Extensible Firmware Interface) standaard. Ondanks dat Intel de UEFI standaard bedacht heeft wordt de UEFI specificatie sinds 2005 beheerd door het Unified EFI Forum. Nu vrijwel alle machines een 64-bits architectuur hebben worden ook de meeste moederborden uitgerust met een UEFI firmware. Let op, zeg nooit UEFI BIOS. UEFI en BIOS zijn beide verschillende soorten computer firmware. UEFI is specifieke firmware met eenzelfde soort doel als BIOS firmware maar met een volledig andere werking. Vaak is nog wel een legacy BIOS aanwezig voor het starten van niet-UEFI compatible OS Systemen (zodat er b.v. van een MBR gestart kan worden).
UEFI heeft een groot aantal voordelen tegenover de oude BIOS boot methode. Met UEFI is het niet langer nodig dat het MBR (Master Boot Record) een stage 1 bootloader opslaat omdat UEFI slim genoeg is om zelf het gebruikte bestandssysteem te ontleden en een specifiek bestand zelf te laden, zelfs als dat bestand geen aangrenzende schijfblokken heeft. UEFI leest namelijk de GUID (Globally Unique IDentifier) PartitieTabel (GPT) uit. De GPT bevind zich direct na blok 0 omdat blok 0 nog steeds de MBR bevat. De GPT beschrijft de indeling van de partitietabel op een schijf. Hieruit identificeert de EFI-bootloader de EFI systeempartitie. De EFI systeempartitie is een speciale partitie welke de opstart loaders voor alle besturingssystemen bevat die op andere partities op het apparaat zijn geïnstalleerd. Voor EFI-bewuste Windows-systemen laadt UEFI de UEFI Windows Boot Manager (bootmgfw.efi). Voor oudere 64-bits NT-systemen laadt EFI IA64ldr. Voor Linux zijn er uiteraard ook mogelijkheden zoals door b.v. een EFI-bewuste versie van GRUB (Grand Unified Bootloader) gebruiken. of om EFI load (elilo.efi) te laden. Over het algemeen zal UEFI de OS specifieke bootloader gebruiken i.p.v. om het OS rechtstreeks te laden. De behoefte aan een multi-boot opstartproces waarvoor meerdere opstartladers moeten worden geladen, is echter met UEFI niet langer nodig. Nog een aantal voordelen van UEFI:
- Geen multi-stage bootloaders nodig
Het oude BIOS kon slechts 1 enkele blok te laden (First Stage Bootloader) waardoor een multi-stage opstartproces noodzakelijk was. UEFI heeft zijn eigen opdrachtinterpreter en complete opstartmanager. Er is dus geen speciale bootloader meer nodig. Zolang de opstartbare bestanden op de UEFI-opstartpartitie geplaatst worden (FAT). - Support voor grotere disks
BIOS ondersteunde maximaal 4 partities per disk met een partitiegroote van maximaal 2.2 TB per partitie. UEFI ondersteund een maximale partitiegrootte van 9.4 ZB (Zettabyte) - Uitbreidbaarheid
De UEFI Firmware is uitbreidbaar. UEFI extensies kunnen in non-volatile geheugen worden geladen waardoor ze ook persistent zijn. - Volledig geheugen
Niet meer nodig om in 16-bit (real mode) te starten. De pre-boot omgeving geeft direct toegang tot het volledige systeemgeheugen. - UEFI bevat apparaat stuurprogramma’s
Met UEFI heb je de mogelijkheid om architectuuronafhankelijke EFI Byte Code (EBC) te interpreteren en gebruiken voor stuurprogramma’s van systemen welke nodig zijn voor het opstarten (net zoals de klassieke BIOS ook zijn eigen drivers heeft voor o.a. plug & play apparatuur). - Shell
Jazeker, UEFI kan beheerd worden middels een MS-DOS-like shell. - Sneller booten
Omdat UEFI feitelijk een mini besturingssysteem is welke zelf de belangrijke interfaces in het geheugen kan laden levert dit in theorie een kortere boot-tijd op. - Veiliger
Omdat UEFI gegevens (start- en verwerkingsinformatie voor het opstarten) vast te leggen in het geheugen kunnen we deze gegevens ook gebruiken om het hele boot proces veiliger te maken.
In het kort is het bootproces van UEFI als volgt:
- CPU initialisatie
- POST
- UEFI settings worden geladen
- UEFI detecteert het type bestandssysteem en gebruikte OS
- UEFI laad het OS met de loaders die aanwezig zijn op de EFI systeempartitie
UEFI is dus de grote opvolger van het verouderde BIOS en biedt daarmee ook diverse voordelen zoals ondersteuning, snelheid en veiligheid. Een van de nieuwe veiligheidsopties is “secure boot”.
Secure Boot
Secure Boot is een nieuw veiligheidsmechanisme om voornamelijk rootkits de baas te zijn. Het oude BIOS bepaalde v.a. welk apparaat geboot kon worden en het MBR op dat apparaat verzorgde het verdere boot proces. Een rootkit nestelt zich vaak in dit proces. Zo kan een rootkit het MBR overschrijven, zorgen dat de malafide software in het geheugen word geladen en vervolgens het boot proces voort zetten alsof er niets aan de hand is. Het OS zal gewoon laden en de rootkit blijft volledig verborgen omdat deze op een andere laag actief is. Secure Boot doet dit proces anders.
Secure Boot is aanwezig in de meeste UEFI firmware en zorgt ervoor dat alleen signed boot software gestart mag worden. Secure Boot doet dit middels certificaten. Als een specifiek stukje boot software (zoals UEFI-firmware-stuurprogramma’s (Option ROM’s), EFI-toepassingen en het besturingssysteem zelf) geen geldige handtekening kan overleggen zal de software ook niet gestart worden. Als de handtekeningen wel geldig zijn, start de pc op en geeft de firmware controle aan het besturingssysteem.
Zo verplicht Microsoft dat leveranciers (OEM’s ofwel original equipment manufacturers)het Microsoft certificaat laden binnen secure boot en vervolgens secure boot activeren. Zonder deze eis mag de OEM geen “Windows X Certified” stikker op de PC plakken.
Secure Boot is een optie die primair door Microsoft gebruikt wordt. Maar ook andere OS leveranciers kunnen gebruik maken van Secure Boot. Zo zijn er diverse Linux distributeurs die gebruik maken van een door Microsoft signed “shim”. Deze “shim” is een applicatie welke op zijn beurt weer controleert of er gebruik gemaakt wordt van een Linux signed boot loader. Zo ja, dan zal de boot loader (GRUB) het OS laden.
Secure Boot maakt het opstartproces significant veiliger. De zwakheid zit hem in het feit dat Secure Boot uit te schakelen is en dat sleutels gelekt kunnen worden (dit is al gebeurt) waarmee rootkits zichzelf zouden kunnen ondertekenen waardoor ze als veilig aangemerkt worden en dus alsnog gestart worden.
TPM – Trusted Platform Module
Dan hebben we nog een techniek genaamd “TPM” ofwel “Trusted Platform Module” (ISO/IEC 11889). TPM is een meestal een hardware implementatie bestaande uit een of meerdere kleine chips die in veel (vooral zakelijke) devices te vinden zijn. Deze chips noemen we ook wel “veilige cryptoprocessors”. TPM chips fungeren als hardware embedded endpoint security en verhogen voornamelijk de veiligheid van verloren of gestolen apparaten. Idealiter werken de TPM chips samen met encryptiesoftware zoals BitLocker en TrueCript.
Een TPM chip bestaat uiteraard uit een microcontroller maar ook uit volatile memory, non-volatile memory, en IO communicatie.
Hoe werkt TPM? TPM chips hebben een ingebrande unieke RSA sleutel waardoor deze als een vaste token kan fungeren. De chip zelf wordt gebruikt om gegevens versleuteld op te slaan. Dit kunnen gegevens zijn van gebruikte hardware en software, cryptografische sleutels, certificaten etc. De beveiliging van deze chip wordt gewaarborgd door het TCG-subsysteem (Trusted Computing Group).
TPM kan omgaan met asymmetrische encryptie (RSA / ECC), symmetrische cryptografie (AES128 / AES256), hashes (SHA1 / SHA256), HMAC en kan willekeurige nummers genereren, cryptosleutels genereren en cryptosleutels en certificaten opslaan.
Alle gegevens worden dus versleuteld opgeslagen. De TPM chip controleert met deze gegevens het opstartproces en kan hiermee gemakkelijk controleren of er aanpassingen gemaakt zijn aan zowel hardware als software. Als er wijzingen zijn dan kan de TPM chip het verdere opstartproces blokkeren. Door samen te werken met BitLocker en andere encryptie standaarden kan de volledige schijf versleuteld worden. TPM bepaald dan of decryptie mag plaatsvinden of niet.
TPM biedt diverse voordelen. TPM is bijvoorbeeld niet kwetsbaar voor fysieke of virtuele aanvallen, dynamisch inzetbaar en beschikt over een unieke RSA sleutel waarmee het apparaat i.p.v. de gebruiker geauthentiseerd kan worden. Let wel, als het moederbord defect gaat is het zaak om de decryptie sleutel te herstellen van een externe media bron. Als je geen back-up hebt van deze sleutel en je gegevens zijn versleuteld middels in het TPM opgeslagen gegevens dan kun je je gegevens nooit meer ontsleutelen als het moederbord en daarmee ook de chip defect gaat.
Een lang verhaal kort, TPM bied voornamelijk hardwarematige encryptie mogelijkheden en versleutelde opslag. TPM kan gebruikt worden in combinatie met BitLocker en kan het boot proces controleren waardoor, net als bij “secure boot” rootkits zich niet kunnen nestelen in het opstartproces.
Secure boot kan gebruik maken van een TPM chip om bepaalde informatie (certificaten) op te slaan en terug te lezen. Naast Secure Boot kennen we ook Trusted Boot welke het verdere OS opstartproces beveiligd. Secure Boot + Trusted Boot noemen we Measured Boot. Om Trusted Boot uit te kunnen voeren is een TPM chip wel verplicht.
Trusted Boot is net als Secure Boot afhankelijk van een “Root of Trust” als uitgangspunt voor een reeks vertrouwensrelaties. Bij Trusted Boot berekend het actieve object de unieke hash van het volgende object dat gestart wordt. Deze hash wordt opgeslagen in de keten van hashes zodat ze later veilig kunnen worden opgehaald. Deze hashes worden altijd opgeslagen in een TPM chip. Op die manier kan Teasured Boot berekenen of het volgende onderdeel welke gestart wordt onaangetast is. Secure Boot beveiligd het primaire (UEFI) opstartproces en Trusted Boot beveiligd de OS opstartprocessen. Measured Boot, dus het gebruik maken van beide technologieen zorgt voor een veilige opstartmethode waarna het OS en de aanwezige virusscanners de controle weer overneemt.
Let wel, Trusted Boot maakt geen impliciet waardeoordeel en boot het OS, zelfs als de hashes niet overeenkomen. Het OS kan op zijn beurt wel gebruik maken van de opgeslagen hashes en aan de hand hiervan zijn eigen “gezondheid” in kaart brengen.
De TPM hardwarematige beveiliging zorgt voor snelle en zeer veilige encryptie. Wanneer er iets wijzigt aan de configuratie van de computer zoals b.v. het installeren van een nieuw OS dan is het zaak de TPM chip te resetten zodat het nieuwe OS nieuwe Trusted Boot gegevens kan wegschrijven naar de TPM chip. Wanneer een TPM chip gereset wordt dan worden alle gegevens gewist (dus ook het UEFI wachtwoord en encryptie sleutels). Zorg voor een TPM reset dus altijd dat alle veiligheidsmechanismes die gebruik maken van TPM disabled zijn. TPM kan ook een “owner” hebben. Dit is hoe de TPM chip beveiligd is. Alvorens een TPM chip gewist kan worden moet men eerst owner credentials invoeren. Dit kan een specifieke sleutel, registerwaarde of bestand zijn.
Conclusie
Hoe komen al deze onderdelen nu samen. UEFI is firmware welke ontwikkeld is om de OUDE boot firmware uit te migreren. UEFI biedt hiermee diverse voordelen zoals o.a. de Secure Boot optie. Met Secure Boot beveiligen we d.m.v. signed certificaten of UEFI de processen mag starten die nodig zijn voor het opstarten van de PC. Na Secure Boot kan de computer ook een Trusted Boot uitvoeren voor het verdere opstartproces van het OS. Secure Boot en Trusted Boot samen noemen we “Measured Boot”. Trusted Boot is afhankelijk van een zogenaamde TPM chip. De TPM chip en een cryptografische chip welke diverse taken op zich neemt zoals versleuteling en veilige opslag. Ook UEFI en Secure Boot kunnen gebruik maken van de TPM chip.
Ik hoop dat nu de begrippen UEFI, Secure Boot en TPM iets duidelijker zijn. Zo niet dan hoor ik dat uiteraard heel erg graag! Vond je deze post leuk en/of verhelderen laat het me dan zeker ook even weten 🙂 Leuke opmerkingen geven me weer de brandstof voor nieuwe posts!