De integriteit van je firmware controleren

Meestal wordt firmware gemaakt door een computerfabrikant en vervolgens onderhouden en bijgewerkt. Tenminste, als je het geluk hebt de trotse eigenaar te zijn van een NovaCustom-laptop. Het is namelijk zo dat veel computerleveranciers niet eens firmware-updates aanbieden, of op zijn minst een toegankelijke manier om ze te installeren. Dit is behoorlijk verontrustend, omdat de firmware van de laptop steeds belangrijker wordt voor de algehele veiligheid van je apparaat. Maar hoe weet je zeker dat de firmware die je draait niet is gemanipuleerd?

Het korte en onbevredigende antwoord is: dat kan je niet nagaan na de installatie. Tenzij je Heads firmware hebt, die geïntegreerde integriteitsverificatiemethoden heeft. Om de integriteit van de firmware te garanderen voor de standaard EDK II (TianoCore) firmwareversie, moet je de firmware overschrijven. En dat is precies wat we in dit artikel gaan doen.

Er zijn twee soorten firmware aanwezig op het moederbord van de laptop:

  • BIOS firmware
  • EC firmware

In dit artikel richten we ons op de BIOS firmware, omdat dat het type firmware is dat verantwoordelijk is voor het opstartproces en mogelijk malware kan bevatten.

Opmerking: zorg er bij het flashen van firmware altijd voor dat de BIOS firmware-versie overeenkomt met de EC firmware-versie. Anders kan het zijn dat de laptop niet opstart of dat er stabiliteitsproblemen optreden.

1. De firmware builden

Dasharo coreboot firmware builds zijn reproduceerbaar, dus het eerste wat we gaan doen is de firmware vanaf de broncode builden. Dit vereist de docker-applicatie. Het is makkelijker om deze te installeren met apt, in plaats van de Requirements stappen te volgen van de officiële build-handleiding. We moeten dus een terminalvenster openen (Ctrl + Alt + T) en het volgende uitvoeren:

sudo apt install git docker.io -y

Volg nu de Dasharo firmware build-handleiding (alleen de stappen onder de sectie build Dasharo BIOS firmware). Stap 1, 2 en 3 moeten worden uitgevoerd volgens de stappen van die link.

Na het uitvoeren van de regel uit stap 4, krijg je een foutmelding. Dit komt omdat we docker via apt hebben geïnstalleerd. Voer direct na het verschijnen van de foutmelding het volgende uit:

sudo !!

Dit voert het vorige docker-commando uit met rootrechten, wat de foutmelding zou moeten voorkomen.

Ga nu verder met stap 5 en 6 zoals beschreven in de build-handleiding.

Als het builden succesvol is afgerond, wordt de binary aangemaakt in de map ~/coreboot/build/coreboot.rom. Houd er rekening mee dat het build-proces veel tijd in beslag kan nemen.

Opmerking: Heads heeft een aparte build-handleiding. De binary kan zich op een andere plaats bevinden. Zorg er bij verdere uit te voeren opdrachten voor dat je het pad van de binary dienovereenkomstig wijzigt.

Ga nu verder met 2: Verifieer de hash van de binary.

2. Verifieer de hash van de binary

Nu we de binaire firmware vanuit de bron hebben opgebouwd, moeten we ervoor zorgen dat deze identificeerbaar is door de sha256-hashwaarde op te vragen. Dit kunnen we doen door het volgende uit te voeren:

sha256sum ~/coreboot/build/coreboot.rom

De uitvoer toont de hash en de bestandsnaam van het bestand als volgt:

Opmerking: dit is slechts een voorbeeld.

00b6338389cc5d020b641629971aac6d4047be6134c6e8d0228140edc42584f6  coreboot.rom

Je kunt de firmware op een andere computer in een ander netwerk builden en dan controleren of de sha256-hash hetzelfde is.

Wat als de hash niet overeenkomt?

Als de hash niet overeenkomt, betekent dit dat de broncode van de binary die je hebt gebouwd niet overeenkomt met de broncode van de binary die werd gebruikt bij het andere build-proces. Dit kan duiden manipulatie, maar dat hoeft niet. Het kan ook bestandscorruptie zijn die de verandering in de hash veroorzaakt.

Opmerking: zelfs de kleinste verandering in de configuratie zorgt ervoor dat de hash anders is.

We zijn deze discussie gestart om de binary te kunnen verifiëren met de binary die is gemaakt door de firmware-ontwikkelaars. Momenteel is dit niet mogelijk vanwege vboot signing.

Discussieer mee op Github!

3. Installeer de firmware

Er zijn twee manieren om de firmware van de laptop te installeren (overschrijven):

  1. Door intern te flashen.
  2. Door extern te flashen.

Extern flashen is de veiligste methode, maar vereist wel wat tools. Met intern flashen zou je kunnen stellen dat het flashproces – in theorie – nep kan worden gemaakt door kwaadaardige firmware. Toch leggen we uit hoe je de firmware intern flasht, omdat sommigen misschien niet de benodigde tools hebben om de firmware extern te flashen.

Wil je de instructies voor intern of extern flashen zien?


Intern flashen

Kopieer eerst het coreboot.rom-bestand naar een USB-stick.

Zorg er vervolgens voor dat BIOS Boot Lock, SMM BIOS Write Protection en UEFI Secure Boot zijn uitgeschakeld.

Start de laptop op naar de Dasharo Tools Suite. Je kunt zelfs DTS builden vanaf de broncode en flashen naar een andere USB stick als je de geïntegreerde iPXE boot-optie niet vertrouwt, of als je een Heads-variant gebruikt die iPXE booting niet geïntegreerd heeft.

Zodra DTS opgestart is, wordt er in het hoofdmenu van DTS gevraagd wat te doen. Kies optie 9: Drop to shell. Voer nu uit:

mkdir /mnt/usb

Sluit nu de USB-stick aan die het bestand coreboot.rom bevat. Identificeer de stick met het volgende commando:

fdisk -l

Koppel de partitie van de USB-stick aan de map die je eerder hebt gemaakt door de onderstaande opdracht uit te voeren.

Opmerking: in het onderstaande voorbeeld gebruiken we /dev/sda1. Het partitiepad kan echter anders zijn, afhankelijk van andere opslagschijven die mogelijk zijn aangesloten. Vervang /dev/sda1 door het partitiepad dat je hebt geïdentificeerd met de eerder uitgevoerde opdracht fdisk -l.

mount /dev/sda1 /mnt/usb

Controleer nu opnieuw de sha256 hash van de coreboot.rom binary door het volgende uit te voeren:

sha256sum /mnt/usb/coreboot.rom

Dit is niet alleen om te controleren of de binary in de tussentijd is gemanipuleerd, maar ook om er zeker van te zijn dat de binary niet corrupt is geraakt tijdens het kopieerproces.

Zorg ervoor dat de hash van de uitvoer hetzelfde is als de hash die je in deze stap hebt genoteerd.

Voer nu het commando uit om de binary te flashen en schakel de laptop uit zodra het flashproces is voltooid. Je kunt dit doen met het volgende commando:

flashrom -p internal --ifd -i bios -w /mnt/usb/coreboot.rom && systemctl poweroff

Het flashen begint. Dit duurt ongeveer 3 minuten. Daarna wordt de laptop uitgeschakeld en is de firmware succesvol geïnstalleerd.

Extern flashen

Als je niet wilt vertrouwen op de Dasharo Tools Suite, of als je bang bent dat het interne flash-proces nep zou kunnen zijn, dan kun je de firmware extern flashen. Hiervoor zijn de volgende tools nodig:

  1. Een CHA341A firmware programmer die op het juiste voltage flasht. Je kunt er een kopen in onze webshop.
    Je hebt de EEPROM clip-versie nodig voor moederborden met een Intel CPU van de 11e generatie en lager. Je hebt de WSON 8×6-variant nodig voor moederborden met de Intel 12e generatie CPU en hoger.
  2. Voor het geval je laptop een WSON 8×6 firmware chip heeft: Een klem om de probe op zijn plaats te houden op de chip.
    -Dit is inbegrepen als je de programmer in onze webshop koopt.
  3. Iets zwaars om op de klem te leggen, om ervoor te zorgen dat de probe op de WSON 8×6 chip blijft zitten tijdens het flashproces. Wij gebruiken daar een grote nijptang voor.
  4. Een andere computer waarop GNU/Linux is geïnstalleerd en die toegang heeft tot internet. De onderstaande stappen worden beschreven voor Ubuntu.

Download, build en installeer op de andere computer flashrom versie v1.3.0 of hoger door de volgende commando’s uit te voeren:

sudo apt update
sudo apt upgrade -y
sudo apt remove flashrom -y # Om eventuele reeds bestaande flashrom-pakketten te verwijderen
sudo apt install git make binutils build-essential ca-certificates libpci-dev libftdi-dev libusb-1.0-0-dev -y
git clone https://github.com/flashrom/flashrom
cd flashrom
make CONFIG_CH341A_SPI=yes
sudo make install

Nu flashrom is geïnstalleerd, is het tijd om de onderkant van de laptop die je gaat flashen los te schroeven. Sluit dan de CH341A 3.3V programmer aan op de flashrom computer en verbind de probe met de SPI (BIOS) chip door gebruik te maken van de klem en het zware voorwerp. Zie de afbeelding verderop om te zien hoe dit eruit kan zien. Tijdens het flashproces is het belangrijk dat zowel de CMOS-batterij als de accu losgekoppeld zijn.

Start het flashproces met het volgende commando:

sudo flashrom -p ch341a_spi --ifd -i bios -w ~/coreboot/build/coreboot.rom

Opmerking: het bovenstaande commando gaat ervan uit dat de coreboot.rom binary zich in ~/coreboot/build/coreboot.rom bevindt. Vervang het indien nodig naar het juiste pad.

In sommige gevallen vraagt flashrom om de chip te specificeren. Voeg in dit geval -c DETECTEDCHIP toe aan het einde van het flashrom commando, maar vervang DETECTEDCHIP door de eerste gedetecteerde chip uit de eerdere uitvoer (tussen dubbele aanhalingstekens). Als het commando een foutmelding geeft kan je het opnieuw proberen, maar dan met de tweede gedetecteerde chip.

Het flashproces begint wanneer de opdracht Reading flash wordt gegeven. Het hele flashproces duurt ongeveer 10 minuten, dus wees geduldig. Tijd voor koffie! Zodra het flashproces is voltooid, staat er VERIFIED op je scherm.

Zodra het flashproces is voltooid, kun je de probe en de programmer verwijderen. Zorg er daarna voor dat je de CMOS-batterij en de accu weer aansluit. Je kunt nu de onderkant van de behuizing terugplaatsen en de laptop aanzetten.

Opmerking: de eerste keer opstarten kan tot twee minuten duren.

Opmerking: het flashen van de firmware zet ook de instellingen van de UEFI-firmware terug naar de standaardinstellingen. Voor de meeste toepassingen raden we aan om de Intel Management Engine (ME) uit te schakelen na het flashen. Je kunt ook andere Dasharo System Features controleren om beveiligingsfuncties in te schakelen die mogelijk niet standaard zijn ingeschakeld.

Over de auteur: Wessel Klein Snakenborg is al sinds zijn kindertijd gepassioneerd door technologie. In 2015 lanceerde hij NovaCustom, een bedrijf dat laptops op maat maakt met het oog op privacy en veiligheid. Met een focus op gebruiksvriendelijkheid blijft NovaCustom de laptopervaring herdefiniëren, geleid door Wessel's toewijding aan innovatie en samenwerking.

Reacties graag alleen in het Engels.

Je winkelwagen delen