Schrödinger syn fertroude boot. Intel Boot Guard

Schrödinger syn fertroude boot. Intel Boot Guard
Wy stelle foar om wer nei it lege nivo te gean en te praten oer de feiligens fan firmware x86-kompatible kompjûterplatfoarms. Dizze kear is de wichtichste yngrediïnt fan it ûndersyk Intel Boot Guard (net te betiizjen mei Intel BIOS Guard!) - in hardware-stipe BIOS fertroude boottechnology dy't in kompjûtersysteemferkeaper permanint kin ynskeakelje of útskeakelje by it produksjestadium. No, wy kenne it ûndersyksresepsje al: snij de ymplemintaasje fan dizze technology dun troch reverse engineering, beskriuw de arsjitektuer, folje it mei net-dokumintearre details, seizoen it mei oanfalfektors om te priuwen en te mingjen. Litte wy fjoer tafoegje mei in ferhaal oer hoe't in klone brek yn 'e produksje fan ferskate leveransiers jierrenlang in potinsjele oanfaller kin dizze technology brûke om in ferburgen rootkit te meitsjen dy't net kin wurde fuortsmiten (sels troch in programmeur) yn it systeem.

Trouwens, it artikel is basearre op de rapporten "On Guard for Rootkits: Intel BootGuard" fan 'e konferinsje ZeroNights 2016 en 29e gearkomste DefCon Ruslân (beide presintaasjes hjir).

Firmware foar in kompjûter platfoarm mei Intel 64 arsjitektuer

Om te begjinnen, litte wy de fraach beantwurdzje: wat is de firmware fan in moderne kompjûterplatfoarm mei de Intel 64-arsjitektuer? Fansels, UEFI BIOS. Mar dit antwurd sil net krekt wêze. Litte wy ris nei de figuer sjen, dy't de buroblêd (laptop) ferzje fan dizze arsjitektuer toant.

Schrödinger syn fertroude boot. Intel Boot Guard
De basis is de keppeling:

  • Prozessor (CPU, Central Processing Unit), dy't, neist de wichtichste kearnen, hat in ynboude graphics kearn (net yn alle modellen) en in ûnthâld controller (IMC, Integrated Memory Controller);
  • Chipsatz (PCH, Platform Controller Hub), mei ferskate controllers foar ynteraksje mei perifeare apparaten en behear fan subsystemen. Under harren is de beruchte Intel Management Engine (ME), dy't ek hat in firmware (Intel ME firmware).

Laptops, neist it boppesteande, fereaskje in yntegreare controller (ACPI EC, Advanced Control en Power Interface Embedded Controller), dy't ferantwurdlik is foar de wurking fan it macht subsysteem, touchpad, toetseboerd, Fn toetsen (skerm helderheid, lûd folume, toetseboerd efterljochting, ensfh.) en mear. En hy hat ek syn eigen firmware.

Dus, de kombinaasje fan 'e boppesteande firmware is de firmware fan' e kompjûterplatfoarm (systeemfirmware), dy't opslein is op in mienskiplik SPI-flashgeheugen. Sadat brûkers fan dit ûnthâld net betize wurde wêr't immen leit, wurdt de ynhâld fan dit ûnthâld ferdield yn de folgjende regio's (lykas werjûn yn 'e figuer):

  • UEFI BIOS;
  • ACPI EC-firmware (in aparte regio ferskynde mei de Skylake-prosessor-mikroarsjitektuer (2015), mar yn 'e wylde hawwe wy noch gjin foarbylden sjoen fan har gebrûk, dus de ynbêde controller-firmware is noch altyd diel fan' e UEFI BIOS);
  • Intel ME firmware;
  • konfiguraasje (MAC adres, ensfh) fan de ynboude GbE (Gigabit Ethernet) netwurk adapter;
  • flash-beskriuwers - de haadregio fan flash-ûnthâld, dy't oanwizers nei oare regio's befettet, lykas tagongsrjochten om se te krijen.

Schrödinger syn fertroude boot. Intel Boot Guard
Differinsjaasje fan tagong ta regio's (yn oerienstimming mei de opjûne tagongsrjochten) wurdt behannele troch de SPI-busmaster - de SPI-controller ynboud yn 'e chipset, wêrmei't dit ûnthâld tagong wurdt. As de tagongsrjochten binne ynsteld op de wearden oanrikkemandearre (om feiligensredenen) troch Intel, dan hat elke brûker fan 'e SPI-flitser folsleine tagong (lêzen / skriuwe) allinich nei har regio. De rest is òf allinnich-lêzen òf net tagonklik. Bekend feit: op in protte systemen hat de CPU folsleine tagong ta de UEFI BIOS en GbE, allinich lêzen tagong ta flash-beskriuwers, en hielendal gjin tagong ta de Intel ME-regio. Wêrom in protte en net allegear? Wat wurdt oanrikkemandearre is opsjoneel. Wy sille jo letter yn it artikel mear fertelle.

Mechanismen foar it beskermjen fan de firmware fan in kompjûterplatfoarm tsjin wiziging

Fansels moat de firmware fan in komputerplatfoarm beskerme wurde tsjin mooglike kompromis, wêrtroch in potinsjele oanfaller in foet fêst kin krije dêryn (oerlibje OS-fernijings / werynstallaasjes), har koade útfiere yn 'e meast befoarrjochte modi, ensfh. En delimiting tagong ta SPI flash ûnthâld regio, fansels, is net genôch. Dêrom wurde ferskate meganismen spesifyk foar elke útfieringsomjouwing brûkt om de firmware te beskermjen tsjin wizigingen.

Dat, de Intel ME-firmware is tekene foar yntegriteit en autentisiteitskontrôle, en wurdt kontrolearre troch de ME-controller elke kear as it wurdt laden yn it ME UMA-ûnthâld. Dit ferifikaasje proses is al besprutsen troch ús yn ien fan 'e artikelswijd oan it Intel ME subsysteem.

En ACPI EC firmware, as in regel, wurdt kontrolearre allinnich foar yntegriteit. Fanwegen it feit dat dizze binêr is opnaam yn 'e UEFI BIOS, is it lykwols hast altyd ûnderwurpen oan deselde beskermingsmeganismen dy't de UEFI BIOS brûkt. Lit ús prate oer harren.

Dizze meganismen kinne wurde ferdield yn twa kategoryen.

Skriuwbeskerming nei UEFI BIOS-regio

  1. Fysike beskerming fan de ynhâld fan it SPI flash ûnthâld mei in skriuw-beskerme jumper;
  2. Beskerming fan 'e projeksje fan' e UEFI BIOS-regio yn 'e CPU-adresromte mei de PRx-registers fan' e chipset;
  3. Blokkearje besykjen om te skriuwen nei de UEFI BIOS-regio troch it generearjen en ferwurkjen fan de oerienkommende SMI-ûnderbrekking troch it ynstellen fan de BIOS_WE / BLE- en SMM_BWP-bits yn 'e chipsetregisters;
  4. In mear avansearre ferzje fan dizze beskerming is Intel BIOS Guard (PFAT).

Neist dizze meganismen kinne leveransiers har eigen feiligensmaatregels ûntwikkelje en útfiere (bygelyks ûndertekening fan kapsules mei UEFI BIOS-fernijings).

It is wichtich om te notearjen dat op in spesifyk systeem (ôfhinklik fan 'e ferkeaper), net alle boppesteande beskermingsmeganismen kinne wurde tapast, se kinne hielendal net tapast wurde, of se kinne op in kwetsbere manier útfierd wurde. Jo kinne mear lêze oer dizze meganismen en de situaasje mei har ymplemintaasje yn dit artikel. Foar belangstellenden, wy riede oan dat jo lêze de hiele rige fan artikels oer UEFI BIOS feiligens fan CodeRush.

UEFI BIOS Authentication Ferifikaasje

As wy prate oer fertroude boottechnologyen, is it earste ding dat yn 't sin komt Secure Boot. Arsjitektoanysk is it lykwols ûntworpen om komponinten bûten it UEFI BIOS te autentisearjen (bestjoerders, loaders, ensfh.), En net de firmware sels.

Dêrom implementearre Intel yn SoC's mei de Bay Trail-mikroarsjitektuer (2012) in hardware net-wikselbere Secure Boot (Verified Boot), dy't neat te krijen hat mei de earder neamde Secure Boot-technology. Letter (2013) waard dit meganisme ferbettere en, ûnder de namme Intel Boot Guard, waard útbrocht foar buroblêden mei de Haswell-mikroarsjitektuer.

Foardat wy Intel Boot Guard beskriuwe, litte wy nei de útfieringsomjouwings sjen yn 'e Intel 64-arsjitektuer, dy't, yn kombinaasje, de woartels fan fertrouwen binne foar dizze fertroude boottechnology.

Intel CPU

Cap suggerearret dat de prosessor de wichtichste útfieringsomjouwing is yn 'e arsjitektuer fan Intel 64. Wêrom is it ek de woartel fan fertrouwen? It docht bliken dat it it besit fan de folgjende eleminten is dat it sa makket:

  • Microcode ROM is in net-flechtich, net-herskriuwber ûnthâld foar it bewarjen fan mikrokoade. It wurdt leaud dat mikrokoade de ymplemintaasje is fan it prosessorynstruksjesysteem op 'e ienfâldichste ynstruksjes. It bart ek yn mikrokoade bugs. Dus yn 'e BIOS kinne jo binaries fine mei mikrokoade-updates (se wurde oerstapt by it opstarten, om't de ROM net oerskreaun wurde kin). De ynhâld fan dizze binaries is fersifere, dy't de analyze tige komplisearret (dêrom is de spesifike ynhâld fan 'e mikrokoade allinich bekend foar dyjingen dy't it ûntwikkelje), en tekene om de yntegriteit en autentisiteit te kontrolearjen;
  • AES-kaai om de ynhâld fan mikrokoade-updates te ûntsiferjen;
  • in hash fan de iepenbiere RSA-kaai dy't de hantekening fan mikrokoade-updates kontrolearret;
  • RSA iepenbiere kaai hash, dy't kontrolearret de hantekening fan Intel-ûntwikkele ACM (Authenticated Code Module) koade modules, dy't de CPU kin rinne foardat de BIOS begjint (hallo mikrokoade) of ûnder syn wurking, as guon eveneminten foarkomme.

Intel ME

Dit subsysteem yn ús blog wie wijd oan twa artikels. Tink derom dat dizze útfierbere omjouwing basearre is op 'e mikrokontroller dy't yn' e chipset ynboud is en de meast ferburgen en befoarrjochte yn it systeem is.

Nettsjinsteande de stealth is Intel ME ek de woartel fan fertrouwen, om't it hat:

  • ME ROM - net-flechtich, net-herskriuwber ûnthâld (gjin fernijingsmetoade foarsjoen), mei de startkoade, lykas de SHA256-hash fan 'e RSA iepenbiere kaai, dy't de hantekening fan 'e Intel ME-firmware kontrolearret;
  • AES-kaai foar it bewarjen fan geheime ynformaasje;
  • tagong ta in set fan lont (FPFs, Field Programmierbare Fuses) yntegrearre yn de chipset foar permaninte opslach fan guon ynformaasje, ynklusyf ynformaasje oantsjutte troch de kompjûter systeem ferkeaper.

Intel Boot Guard 1.x

Lytse disclaimer. De ferzjenûmers fan Intel Boot Guard-technology dy't wy yn dit artikel brûke binne willekeurich en hawwe miskien neat te krijen mei de nûmering dy't brûkt wurdt yn ynterne Intel-dokumintaasje. Derneist, de ynformaasje oer de ymplemintaasje fan dizze technology jûn hjir waard krigen tidens reverse engineering, en kin befetsje inaccuracies yn ferliking mei de spesifikaasje foar Intel Boot Guard, dat is net wierskynlik ea wurde publisearre.

Dus, Intel Boot Guard (BG) is in hardware-stipe UEFI BIOS-ferifikaasjetechnology. Beoardielje nei syn lytse beskriuwing yn it boek [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot], wurket it as in fertroude bootketen. En de earste kepling dêryn is de bootkoade (mikrokoade) binnen de CPU, dy't wurdt trigger troch it RESET-evenemint (net te betiizjen mei de RESET-fektor yn 'e BIOS!). De CPU fynt in koademodule (Intel BG opstart ACM) ûntwikkele en tekene troch Intel op it SPI-flashûnthâld, laadt it yn syn cache, ferifiearret it (it waard hjirboppe al opmurken dat de CPU in iepenbiere kaai hat dy't de ACM-hântekening ferifiearret ) en begjint.

Schrödinger syn fertroude boot. Intel Boot Guard

Dizze koademodule is ferantwurdlik foar it ferifiearjen fan in lyts begjinpunt fan 'e UEFI BIOS - Initial Boot Block (IBB), dy't op syn beurt de funksjonaliteit befettet foar it kontrolearjen fan it haaddiel fan it UEFI BIOS. Sa lit Intel BG jo de autentisiteit fan 'e BIOS ferifiearje foardat jo it OS opstarte (dat kin wurde útfierd ûnder tafersjoch fan Secure Boot technology).

Intel BG technology jout twa modus fan operaasje (en men net bemuoie mei de oare, d.w.s. beide modus kinne wurde ynskeakele op it systeem, en beide kinne wurde útskeakele).

Metten Boot

Yn Measured Boot (MB) modus "mjittet" elke bootkomponint (begjinnend mei de CPU-boot-ROM) de folgjende mei de mooglikheden fan 'e Trusted Platform Module (TPM). Foar dyjingen dy't it net witte, lit my útlizze.

TPM hat PCR's (Platform Configuration Registers), dy't it resultaat fan 'e hashing-operaasje opnimme neffens de formule:

Schrödinger syn fertroude boot. Intel Boot Guard

Dy. de hjoeddeiske PCR wearde hinget ôf fan de foarige, en dizze registers wurde reset allinnich as it systeem is RESET.

Sa, yn MB-modus, op in stuit yn 'e tiid, reflektearje PCR's in unike (binnen de mooglikheden fan' e hash-operaasje) identifier fan 'e koade of gegevens dy't "mjitten" waarden. De PCR-wearden kinne brûkt wurde yn 'e fersifering fan guon gegevens (TPM_Seal) operaasje. Dêrnei sil har ûntsiferje (TPM_Unseal) allinich mooglik wêze as de PCR-wearden net binne wizige as gefolch fan it laden (d.w.s. gjin inkele "mjitten" komponint is wizige).

Ferifieare boot

It skriklikste ding foar dyjingen dy't it UEFI BIOS wolle wizigje, is de Verified Boot (VB) modus, wêryn elke bootkomponint kryptografysk de yntegriteit en autentisiteit fan 'e folgjende ferifiearret. En yn gefal fan in ferifikaasjeflater komt (ien fan 'e folgjende) foar:

  • shutdown troch timeout fan 1 minút oant 30 minuten (sadat de brûker hat tiid om te begripen wêrom't syn kompjûter net opstarte, en, as mooglik, soe besykje te herstellen de BIOS);
  • direkte shutdown (sadat de brûker gjin tiid hat om te begripen en boppedat te dwaan);
  • fuortsetting fan wurk mei in rjocht gesicht (it gefal as der gjin tiid foar feiligens, om't der wichtiger dingen te dwaan).

De kar fan aksje hinget ôf fan de spesifisearre Intel BG konfiguraasje (nammentlik op de saneamde hanthavenjen belied), dat wurdt permanint opnommen troch de kompjûter platfoarm ferkeaper yn in spesjaal ûntwurpen opslach - chipset fuses (FPFs). Op dit punt sille wy letter yn mear detail yngean.

Neist de konfiguraasje genereart de ferkeaper twa RSA 2048-kaaien en makket twa gegevensstruktueren (oanjûn yn 'e figuer):

  1. It manifest fan 'e root-kaai fan' e ferkeaper (KEYM, OEM Root Key Manifest), dy't de SVN (Security Version Number) fan dit manifest pleatst, de SHA256-hash fan 'e iepenbiere kaai fan it folgjende manifest, de iepenbiere RSA-kaai (d.w.s. it iepenbiere diel fan 'e ferkeaper root-kaai) om de hantekening fan dit manifest en de hantekening sels te ferifiearjen;
  2. It IBB-manifest (IBBM, Initial Boot Block Manifest), dat de SVN fan dit manifest, de SHA256-hash fan 'e IBB, de iepenbiere kaai foar it ferifiearjen fan de hantekening fan dit manifest, en de hantekening sels.

De SHA256-hash fan 'e OEM Root Key is permanint skreaun nei chipset-fuses (FPF's), krekt lykas de Intel BG-konfiguraasje. As de Intel BG-konfiguraasje foar it opnimmen fan dizze technology foarsjocht, dan kin dit systeem fan no ôf allinich de eigner fan it privee diel fan 'e OEM Root Key de BIOS bywurkje (d.w.s. kinne dizze manifesten opnij berekkenje), d.w.s. ferkeaper.

Schrödinger syn fertroude boot. Intel Boot Guard

As jo ​​​​nei de foto sjogge, ûntsteane fuortendaliks twifels oer de needsaak foar sa'n lange ferifikaasjeketen - jo koenen ien manifest brûke. Wêrom komplisearje?

Yn feite jout Intel sa de ferkeaper de mooglikheid om ferskate IBB-kaaien te brûken foar ferskate produktlinen en ien as de root. As it privee diel fan 'e IBB-kaai (dy't it twadde manifest tekenet) wurdt útlekt, sil it ynsidint mar ien produktline beynfloedzje en allinich oant de ferkeaper in nij pear genereart en de opnij berekkene manifesten yn 'e folgjende BIOS-fernijing mooglik makket.

Mar as de root-kaai kompromittearre is (wêrmei it earste manifest is tekene), sil it net mooglik wêze om it te ferfangen, de ynlûkingsproseduere wurdt net levere. de hash fan it iepenbiere diel fan dizze kaai wurdt foar iens en foar altyd yn FPF's programmearre.

Intel Boot Guard Konfiguraasje

Litte wy no in tichterby besjen op de Intel BG-konfiguraasje en it proses fan syn skepping. As jo ​​​​nei de oerienkommende ljepper sjogge yn 'e GUI fan it Flash Image Tool fan' e Intel System Tool Kit (STK), sille jo merke dat de Intel BG-konfiguraasje in hash omfettet fan it iepenbiere diel fan 'e root-kaai fan' e ferkeaper, in pear obskure wearden, ensfh. Intel BG profyl.

Schrödinger syn fertroude boot. Intel Boot Guard

De struktuer fan dit profyl:

typedef struct BG_PROFILE
{
	unsigned long Force_Boot_Guard_ACM : 1;
	unsigned long Verified_Boot : 1;
	unsigned long Measured_Boot : 1;
	unsigned long Protect_BIOS_Environment : 1;
	unsigned long Enforcement_Policy : 2; // 00b – do nothing
                                              // 01b – shutdown with timeout
                                              // 11b – immediate shutdown
	unsigned long : 26;
};

Yn 't algemien is de Intel BG-konfiguraasje in heul fleksibele entiteit. Tink bygelyks oan de Force_Boot_Guard_ACM flagge. As it wurdt wiske, as de BG opstarten ACM module op de SPI flash wurdt net fûn, gjin fertroude boot plakfine. It sil ûnbetrouber wêze.

Wy hawwe hjirboppe al skreaun dat it hanthaveningsbelied foar de VB-modus kin wurde konfigureare sadat as ferifikaasje mislearret, wer in net-fertroude download sil plakfine.

Lit sokke dingen oer oan de ferkeapers ...

De GUI fan it hulpprogramma biedt de folgjende "klear makke" profilen:

Nûmer
Mode
beskriuwing

0
No_FVME
Intel BG technology útskeakele

1
VE
VB modus ynskeakele, shutdown troch timeout

2
VME
beide modes binne ynskeakele (VB en MB), shutdown troch timeout

3
VM
beide modi binne ynskeakele, sûnder útsette it systeem

4
FVE
VB-modus ynskeakele, direkte ôfsluting

5
FVME
beide modi ynskeakele, direkte shutdown

Lykas al neamd, moat de Intel BG-konfiguraasje ienris en foar altyd skreaun wurde troch de systeemferkeaper yn chipset-fuses (FPF's) - in lytse (neffens net ferifiearre ynformaasje, mar 256 bytes) hardware-ynformaasje opslach binnen de chipset, dy't bûten programmearre wurde kin. fan Intel's produksjefoarsjenningen (dus dêrom Field Programmierber fuses).

It is geweldich foar it bewarjen fan konfiguraasje omdat:

  • hat in ien kear programmearre gegevens opslach gebiet (krekt dêr't de Intel BG konfiguraasje wurdt skreaun);
  • allinich Intel ME kin it lêze en programmearje.

Dat, om de konfiguraasje foar Intel BG-technology op in spesifyk systeem yn te stellen, docht de ferkeaper it folgjende by produksje:

  1. Mei help fan de Flash Image Tool (fan Intel STK), makket in firmware ôfbylding mei in opjûne Intel BG konfiguraasje as fariabelen binnen de Intel ME regio (de saneamde tydlike spegel foar FPFs);
  2. Mei help fan de Flash Programming Tool (fan Intel STK), skriuwt dizze ôfbylding oan de SPI flash ûnthâld fan it systeem en slút de saneamde. manufacturing modus (yn dit gefal wurdt it korrespondearjende kommando stjoerd nei Intel ME).

As gefolch fan dizze operaasjes sil Intel ME de opjûne wearden fan 'e spegel foar FPF's yn' e ME-regio ynsette foar FPF's, de tagongsrjochten yn SPI-flitsbeskriuwers ynstelle op 'e wearden oanrikkemandearre troch Intel (beskreaun oan it begjin fan' e artikel) en fier in systeem RESET út.

Intel Boot Guard Implementation Analysis

Om de ymplemintaasje fan dizze technology op in spesifyk foarbyld te analysearjen, hawwe wy de folgjende systemen kontrolearre op spoaren fan Intel BG-technology:

systeem
remark

Gigabyte GA-H170-D3H
Skylake, d'r is stipe

Gigabyte GA-Q170-D3H
Skylake, d'r is stipe

Gigabyte GA-B150-HD3
Skylake, d'r is stipe

MSI H170A Gaming Pro
Skylake, gjin stipe

Lenovo ThinkPad 460
Skylake, stipe beskikber, technology ynskeakele

Lenovo Yoga 2 Pro
Haswell, gjin stipe

Lenovo U330p
Haswell, gjin stipe

"Stipe" betsjut de oanwêzigens fan de Intel BG opstart ACM module, de manifestaasjes neamd hjirboppe en de oerienkommende koade yn de BIOS, d.w.s. ymplemintaasje foar analyse.

As foarbyld, litte wy dejinge nimme dy't fan it kantoar is ynladen. ferkeaper site ôfbylding fan SPI flash ûnthâld foar Gigabyte GA-H170-D3H (ferzje F4).

Intel CPU boot ROM

Lit ús earst prate oer de aksjes fan 'e prosessor as Intel BG technology is ynskeakele.

It wie net mooglik om samples fan 'e ûntsifere mikrokoade te finen, dus hoe't de aksjes dy't hjirûnder beskreaun binne wurde ymplementearre (yn mikrokoade as yn hardware) is in iepen fraach. Dochs is it feit dat moderne Intel-processors dizze aksjes "kinne" útfiere.

Nei it ferlitten fan 'e RESET-tastân, fynt de prosessor (yn waans adresromte de ynhâld fan it flashûnthâld al is yn kaart brocht) de FIT (Firmware Interface Table). It is maklik te finen, de oanwizer nei it is skreaun op it adres FFFF FFC0h.

Schrödinger syn fertroude boot. Intel Boot Guard
Yn dit foarbyld befettet dit adres de wearde FFD6 9500h. Trochgean nei dit adres sjocht de prosessor de FIT-tabel, wêrfan de ynhâld is ferdield yn records. De earste yngong is de kop fan 'e folgjende struktuer:

typedef struct FIT_HEADER
{
	char           Tag[8];     // ‘_FIT_   ’
	unsigned long  NumEntries; // including FIT header entry
	unsigned short Version;    // 1.0
	unsigned char  EntryType;  // 0
	unsigned char  Checksum;
};

Schrödinger syn fertroude boot. Intel Boot Guard
Om ien of oare ûnbekende reden wurdt de kontrôlesum net altyd yn dizze tabellen berekkene (it fjild wurdt nul litten).

De oerbleaune yngongen wize op ferskate binaries dy't moatte wurde parsed / útfierd foardat de BIOS wurdt útfierd, d.w.s. foardat jo wikselje nei de legacy RESET-vektor (FFFF FFF0h). De struktuer fan elke sa'n yngong is as folget:

typedef struct FIT_ENTRY
{
	unsigned long  BaseAddress;
	unsigned long  : 32;
	unsigned long  Size;
	unsigned short Version;     // 1.0
	unsigned char  EntryType;
	unsigned char  Checksum;
};

Schrödinger syn fertroude boot. Intel Boot Guard
It fjild EntryType jout oan op it type blok dat dizze yngong wiist. Wy witte fan ferskate soarten:

enum FIT_ENTRY_TYPES
{
	FIT_HEADER = 0,
	MICROCODE_UPDATE,
	BG_ACM,
	BIOS_INIT = 7,
	TPM_POLICY,
	BIOS_POLICY,
	TXT_POLICY,
	BG_KEYM,
	BG_IBBM
};

No is it dúdlik dat ien fan 'e yngongen ferwiist nei de lokaasje fan' e Intel BG opstart ACM binêr. De koptekststruktuer fan dit binêr is typysk foar koademodules ûntwikkele troch Intel (ACM's, mikrokoade-updates, Intel ME-koadeseksjes, ...).

typedef struct BG_ACM_HEADER
{
	unsigned short ModuleType;     // 2
	unsigned short ModuleSubType;  // 3
	unsigned long  HeaderLength;   // in dwords
	unsigned long  : 32;
	unsigned long  : 32;
	unsigned long  ModuleVendor;   // 8086h
	unsigned long  Date;           // in BCD format
	unsigned long  TotalSize;      // in dwords
	unsigned long  unknown1[6];
	unsigned long  EntryPoint;
	unsigned long  unknown2[16];
	unsigned long  RsaKeySize;     // in dwords
	unsigned long  ScratchSize;    // in dwords
	unsigned char  RsaPubMod[256];
	unsigned long  RsaPubExp;
	unsigned char  RsaSig[256];
};

Schrödinger syn fertroude boot. Intel Boot Guard
De prosessor laadt dit binêr yn syn cache, ferifiearret en lanseart.

Intel BG opstarten ACM

Ut de analyze fan it wurk fan dizze ACM waard dúdlik dat it it folgjende docht:

  • ûntfangt fan Intel ME de Intel BG-konfiguraasje skreaun nei de chipset-fuses (FPF's);
  • fynt KEYM en IBBM manifestearret, ferifiearret se.

Om dizze manifestaasjes te finen, brûkt ACM ek de FIT-tabel, dy't twa soarten yngongen hat om nei dizze struktueren te wizen (sjoch FIT_ENTRY_TYPES hjirboppe).

Litte wy de manifesten fan tichterby besjen. Yn 'e struktuer fan it earste manifest sjogge wy ferskate obskure konstanten, in hash fan' e iepenbiere kaai fan 'e twadde manifest, en in iepenbiere OEM Root Key tekene as in nestele struktuer:

typedef struct KEY_MANIFEST
{
	char           Tag[8];          // ‘__KEYM__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned char  : 8;             // 1
	unsigned short : 16;            // 0Bh
	unsigned short : 16;            // 20h == hash size?
	unsigned char  IbbmKeyHash[32]; // SHA256 of an IBBM public key
	BG_RSA_ENTRY   OemRootKey;
};

typedef struct BG_RSA_ENTRY
{
	unsigned char  : 8;             // 10h
	unsigned short : 16;            // 1
	unsigned char  : 8;             // 10h
	unsigned short RsaPubKeySize;   // 800h
	unsigned long  RsaPubExp;
	unsigned char  RsaPubKey[256];
	unsigned short : 16;            // 14
	unsigned char  : 8;             // 10h
	unsigned short RsaSigSize;      // 800h
	unsigned short : 16;            // 0Bh
	unsigned char  RsaSig[256];
};

Schrödinger syn fertroude boot. Intel Boot Guard
Om de iepenbiere kaai fan 'e OEM Root Key te ferifiearjen, herinnerje wy dat de SHA256-hash fan' e lonten wurdt brûkt, dy't op dit stuit al ûntfongen is fan Intel ME.

Lit ús gean nei it twadde manifest. It bestiet út trije struktueren:

typedef struct IBB_MANIFEST
{
	ACBP Acbp;         // Boot policies
	IBBS Ibbs;         // IBB description
	IBB_DESCRIPTORS[];
	PMSG Pmsg;         // IBBM signature
};

De earste befettet wat konstanten:

typedef struct ACBP
{
	char           Tag[8];          // ‘__ACBP__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 1
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned short : 16;            // x & F0h = 0
	unsigned short : 16;            // 0 < x <= 400h
};

De twadde befettet de SHA256-hash fan 'e IBB en it oantal beskriuwers dy't de ynhâld fan' e IBB beskriuwe (dus wêrfan de hash wurdt berekkene):

typedef struct IBBS
{
	char           Tag[8];            // ‘__IBBS__’
	unsigned char  : 8;               // 10h
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // x <= 0Fh
	unsigned long  : 32;              // x & FFFFFFF8h = 0
	unsigned long  Unknown[20];
	unsigned short : 16;              // 0Bh
	unsigned short : 16;              // 20h == hash size ?
	unsigned char  IbbHash[32];       // SHA256 of an IBB
	unsigned char  NumIbbDescriptors;
};

De IBB-beskriuwers folgje dizze struktuer, de iene nei de oare. Har ynhâld hat it folgjende formaat:

typedef struct IBB_DESCRIPTOR
{
	unsigned long  : 32;
	unsigned long  BaseAddress;
	unsigned long  Size;
};

It is ienfâldich: elke descriptor befettet it adres / grutte fan in IBB-brok. Sa is de gearhing fan 'e blokken oanwiisd troch dizze descriptors (yn' e folchoarder fan 'e descriptors sels) is IBB. En, yn 'e regel, is IBB in kombinaasje fan alle modules fan' e SEC- en PEI-fazen.

It twadde manifest einiget mei in struktuer dy't de iepenbiere kaai IBB befettet (ferifiearre troch de SHA256-hash fan it earste manifest) en de hantekening fan dit manifest:

typedef struct PMSG
{
	char           Tag[8];            // ‘__PMSG__’
	unsigned char  : 8;               // 10h
	BG_RSA_ENTRY   IbbKey;
};

Schrödinger syn fertroude boot. Intel Boot Guard
Dus, sels foar it begjin fan 'e útfiering fan' e UEFI BIOS, sil de prosessor ACM starte, dy't de autentisiteit fan 'e ynhâld fan seksjes sil kontrolearje mei de SEC- en PEI-fazekoade. Dêrnei ferlit de prosessor de ACM, beweecht lâns de RESET-fektor en begjint it BIOS út te fieren.

De PEI ferifiearre partition moat befetsje in module dy't sil kontrolearje de rest fan de BIOS (DXE koade). Dizze module wurdt al ûntwikkele troch IBV (Independent BIOS Vendor) of it systeem ferkeaper sels. Omdat Allinich Lenovo- en Gigabyte-systemen die bliken ta ús beskikking te wêzen en Intel BG-stipe te hawwen, litte wy de koade beskôgje dy't út dizze systemen is helle.

UEFI BIOS module LenovoVerifiedBootPei

Yn it gefal fan Lenovo die bliken de LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} module te wêzen, ûntwikkele troch Lenovo.

Syn taak is om (troch GUID) in hash-tabel foar de DXE op te sykjen en de DXE te ferifiearjen.

if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	if (!VerifyDxe())
		return EFI_SECURITY_VIOLATION;
}

Хеш таблица {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} имеет следующий формат:

typedef struct HASH_TABLE
{
	char          Tag[8];            // ‘$HASHTBL’
	unsigned long NumDxeDescriptors;
	DXE_DESCRIPTORS[];
};

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long Offset;
	unsigned long Size;
};

UEFI BIOS module BootGuardPei

Yn it gefal fan Gigabyte die bliken dat it de BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} module wie, ûntwikkele troch AMI, en dus oanwêzich yn elke AMI BIOS mei Intel BG-stipe.

It algoritme fan 'e operaasje is wat oars, lykwols komt it op itselde del:

int bootMode = EFI_PEI_SERVICES->GetBootMode();

if (bootMode != BOOT_ON_S3_RESUME &&
    bootMode != BOOT_ON_FLASH_UPDATE &&
    bootMode != BOOT_IN_RECOVERY_MODE)
{
	HOB* h = CreateHob();
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	WriteHob(&h, VerifyDxe());
	return h;
}

De hash-tabel {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} dy't it opsyket hat it folgjende formaat:

typedef HASH_TABLE DXE_DESCRIPTORS[];

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long BaseAddress;
	unsigned long Size;
};

Intel Boot Guard 2.x

Litte wy koart prate oer in oare ymplemintaasje fan Intel Boot Guard, dy't fûn waard yn in nijere systeem basearre op Intel SoC mei Apollo Lake mikroarsjitektuer - ASRock J4205-IT.

Hoewol dizze ferzje sil allinich brûkt wurde yn SoC's (nije systemen mei Kaby Lake-prosessor-mikroarsjitektuer bliuwe Intel Boot Guard 1.x brûke), is it fan grut belang foar it ferkennen fan in nije arsjitektueropsje foar platfoarms basearre op Intel SoC's, dy't taastber sjoen hat feroarings, bygelyks:

  • BIOS- en Intel ME-regio's (of leaver Intel TXE, neffens Intel SoC-terminology) binne no ien IFWI-regio;
  • hoewol't Intel BG wie ynskeakele op it platfoarm, struktueren lykas FIT, KEYM, IBBM waarden net fûn yn flash ûnthâld;
  • neist TXE- en ISH-kearnen (x86), waard in tredde kearn (wer ARC, trouwens) tafoege oan 'e chipset - PMC (Power Management Controller), ferbûn mei it garandearjen fan de operabiliteit fan it machtsubsysteem en prestaasjesmonitoring.

Schrödinger syn fertroude boot. Intel Boot Guard
De ynhâld fan 'e nije IFWI-regio is in set fan' e folgjende modules:

Bias
namme
beskriuwing

0000 2000 oere
SMIP
guon platfoarm konfiguraasje, tekene troch de ferkeaper

0000 6000 oere
RBEP
Intel TXE firmware koade seksje, x86, tekene troch Intel

0001 0000 oere
PMCP
firmware koade seksje Intel PMC, ARC, tekene troch Intel

0002 0000 oere
FTPR
Intel TXE firmware koade seksje, x86, tekene troch Intel

0007B000h
UCOD
CPU microcode updates tekene troch Intel

0008 0000 oere
IBBP
UEFI BIOS, SEC / PEI fazen, x86, ferkeaper ûndertekene

0021 8000 oere
ISHC
koade seksje fan de Intel ISH firmware, x86, tekene troch de ferkeaper

0025 8000 oere
NFTP
Intel TXE firmware koade seksje, x86, tekene troch Intel

0036 1000 oere
IUNP
is net bekend

0038 1000 oere
OBBP
UEFI BIOS, DXE faze, x86, net ûndertekene

Tidens de analyze fan 'e TXE-firmware waard it dúdlik dat nei RESET, TXE de prosessor yn dizze steat hâldt oant it de basisynhâld fan' e adresromte foar de CPU taret (FIT, ACM, RESET vector ...). Boppedat pleatst TXE dizze gegevens yn syn SRAM, wêrnei't it de prosessor tydlik tagong jout en "frijlitte" fan RESET.

Op wacht fan rootkits

No, no litte wy oergean nei it "waarme". Wy hawwe ienris ûntdutsen dat op in protte systemen SPI-flash-beskriuwers tagongsrjochten hawwe om tagong te krijen ta regio's fan SPI-flashûnthâld, sadat alle brûkers fan dit ûnthâld elke regio kinne skriuwe en lêze. Dy. echt net.

Nei it kontrolearjen mei it MEinfo-hulpprogramma (fan Intel STK), seagen wy dat de produksjemodus op dizze systemen net sletten wie, dêrom waarden de chipset-fuses (FPF's) yn in ûnbepaalde steat efterlitten. Ja, Intel BG is yn sokke gefallen net ynskeakele noch útskeakele.

Wy hawwe it oer de folgjende systemen (oangeande Intel BG en wat sil wurde beskreaun letter yn it artikel, wy sille prate oer systemen mei Haswell prosessor microarchitecture en heger):

  • alle Gigabyte produkten;
  • alle MSI produkten;
  • 21 Lenovo laptop modellen en 4 Lenovo tsjinner modellen.

Fansels rapporteare wy de fynst oan dizze leveransiers, lykas oan Intel.

Adekwate reaksje folge allinnich út Lenovody't erkende it probleem en in patch útbrocht.

Gigabyte It liket derop dat se ynformaasje oer de kwetsberens hawwe akseptearre, mar op gjin inkelde manier kommentaar hawwe.

Kommunikaasje mei MSI folslein stoppe op ús fersyk om ús iepenbiere PGP-kaai te stjoeren (om se in fersifere befeiligingsadvys te stjoeren). Se stelden dat se "in hardwarefabrikant binne en gjin PGP-kaaien meitsje."

Mar mear nei it punt. Om't de lonten yn in net definieare steat bliuwe, kin de brûker (as oanfaller) se sels programmearje (it dreechste is fyn Intel STK). Dit fereasket de folgjende stappen.

1. Boot yn Windows OS (yn 't algemien kinne de hjirûnder beskreaune stappen ek dien wurde fanút Linux, as jo in analoog fan Intel STK ûntwikkelje foar it winske OS). Mei it MEinfo-hulpprogramma, soargje derfoar dat de lonten op dit systeem net binne programmearre.

Schrödinger syn fertroude boot. Intel Boot Guard
2. Lês de ynhâld fan flash ûnthâld mei help fan de Flash Programming Tool.

Schrödinger syn fertroude boot. Intel Boot Guard
3. Iepenje de lêsôfbylding mei elk UEFI BIOS-bewurkingsark, meitsje de nedige wizigingen (bygelyks in rootkit ymplementearje), meitsje / bewurkje de besteande KEYM- en IBBM-struktueren yn 'e ME-regio.

Schrödinger syn fertroude boot. Intel Boot Guard
Schrödinger syn fertroude boot. Intel Boot Guard
It iepenbiere diel fan 'e RSA-kaai is markearre yn' e ôfbylding, wêrfan de hash sil wurde programmearre yn 'e chipset-fuses tegearre mei de rest fan' e Intel BG-konfiguraasje.

4. Bouwe in nije firmwareôfbylding mei it Flash Image Tool (troch de Intel BG-konfiguraasje yn te stellen).

Schrödinger syn fertroude boot. Intel Boot Guard
5. Skriuw in nije ôfbylding om te flitsen mei it Flash Programming Tool, ferifiearje mei MEinfo dat de ME-regio no de Intel BG-konfiguraasje befettet.

Schrödinger syn fertroude boot. Intel Boot Guard
6. Brûk it Flash Programming Tool om de produksjemodus te sluten.

Schrödinger syn fertroude boot. Intel Boot Guard
7. It systeem sil opnij starte, wêrnei't jo mei MEinfo kinne ferifiearje dat de FPF's no binne programmearre.

Schrödinger syn fertroude boot. Intel Boot Guard
Dizze aksjes foar ivich ynskeakelje Intel BG op dit systeem. It sil ûnmooglik wêze om de aksje ûngedien te meitsjen, wat betsjut:

  • allinich de eigner fan it privee diel fan 'e root-kaai (dus dejinge dy't Intel BG ynskeakele hat) sil de UEFI BIOS op dit systeem kinne bywurkje;
  • as jo de orizjinele firmware werombringe nei dit systeem, bygelyks mei in programmeur, sil it net iens ynskeakelje (in gefolch fan hanthaveningsbelied yn gefal fan in ferifikaasjeflater);
  • om sa'n UEFI BIOS kwyt te reitsjen, moatte jo de chipset ferfange troch programmearre FPF's mei in "skjinne" (dat wol sizze de chipset opnij as jo tagong hawwe ta in ynfraread soldeerstasjon foar de priis fan in auto, of gewoan it moederbord ferfange ).

Om te begripen wat sa'n rootkit kin dwaan, moatte jo evaluearje wat it mooglik makket om jo koade út te fieren yn in UEFI BIOS-omjouwing. Sis, yn 'e meast befoarrjochte modus fan' e prosessor - SMM. Sa'n rootkit kin de folgjende eigenskippen hawwe:

  • wurde útfierd parallel mei it OS (jo kinne ferwurkjen ynstelle troch it generearjen fan in SMI-ûnderbrekking, dy't troch in timer wurdt trigger);
  • hawwe alle foardielen fan wêzen yn SMM modus (folsleine tagong ta de ynhâld fan RAM en hardware boarnen, geheimhâlding fan it OS);
  • De rootkit-koade kin wurde fersifere en ûntsifere as it wurdt lansearre yn SMM-modus. Alle gegevens beskikber allinnich yn SMM modus kin brûkt wurde as in fersifering kaai. Bygelyks, in hash út in set fan adressen yn SMRAM. Om dizze kaai te krijen, moatte jo yn 'e SMM klimme. En dit kin dien wurde op twa manieren. Fyn de RCE yn 'e SMM-koade en eksploitearje it, of foegje jo eigen SMM-module ta oan it BIOS, wat ûnmooglik is, om't wy Boot Guard ynskeakele hawwe.

Sa lit dizze kwetsberens in oanfaller ta:

  • meitsje in ferburgen, net te ferwiderjen rootkit fan ûnbekend doel yn it systeem;
  • útfiere jo koade op ien fan 'e chipset-kearnen binnen de Intel SoC, nammentlik op' e Intel ISH (sjoch neier nei de ôfbylding).

Schrödinger syn fertroude boot. Intel Boot Guard
Schrödinger syn fertroude boot. Intel Boot Guard
Hoewol de mooglikheden fan it Intel ISH-subsysteem noch net ûndersocht binne, liket it in nijsgjirrige oanfalvektor te wêzen tsjin Intel ME.

befinings

  1. De stúdzje levere in technyske beskriuwing fan hoe't Intel Boot Guard technology wurket. Minus in pear geheimen yn Intel syn feiligens fia obscurity model.
  2. In oanfalsscenario wurdt presintearre wêrmei it meitsjen fan in unremovable rootkit yn it systeem.
  3. Wy hawwe sjoen dat moderne Intel-processors in protte proprietêre koade kinne útfiere sels foardat de BIOS begjint.
  4. Platfoarmen mei Intel 64-arsjitektuer wurde hieltyd minder geskikt foar it útfieren fan fergese software: hardwareferifikaasje, in tanimmend oantal proprietêre technologyen en subsystemen (trije kearnen yn 'e SoC-chipset: x86 ME, x86 ISH en ARC PMC).

Mitigaasjes

Ferkeapers dy't de produksjemodus mei opsetsin iepen litte, moatte it perfoarst slute. Oant no slute se allinich de eagen en de nije Kaby Lake-systemen litte dit sjen.

Brûkers kinne Intel BG op har systemen útskeakelje (dy't wurde beynfloede troch de beskreaune kwetsberens) troch it Flash Programming Tool út te fieren mei de opsje -closemnf. Earst moatte jo derfoar soargje (mei MEinfo) dat de konfiguraasje fan Intel BG yn 'e ME-regio soarget foar it krekt útskeakeljen fan dizze technology nei programmearring yn FPF's.

Boarne: www.habr.com

Add a comment