Ang kasaligang boot ni Schrödinger. Intel Boot Guard

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Gisugyot namon nga moadto na usab sa ubos nga lebel ug maghisgot bahin sa seguridad sa firmware nga x86-compatible nga mga platform sa kompyuter. Niining higayona, ang panguna nga sangkap sa panukiduki mao ang Intel Boot Guard (dili malibog sa Intel BIOS Guard!) - usa ka gisuportahan sa hardware nga BIOS nga gisaligan nga teknolohiya sa boot nga ang usa ka tigbaligya sa sistema sa kompyuter mahimo’g permanenteng makapaarang o ma-disable sa yugto sa produksiyon. Aw, nahibal-an na nato ang resipe sa panukiduki: hinayhinay nga giputol ang pagpatuman niini nga teknolohiya pinaagi sa reverse engineering, ihulagway ang arkitektura niini, gipuno kini sa dili dokumentado nga mga detalye, panahon kini sa mga vector sa pag-atake aron matilawan ug isagol kini. Atong idugang ang kalayo uban sa usa ka istorya mahitungod sa kon sa unsang paagi ang usa ka cloned bug sa produksyon sa pipila ka mga vendors sulod sa mga tuig nagtugot sa usa ka potensyal nga tig-atake sa paggamit niini nga teknolohiya sa paghimo sa usa ka tinago nga rootkit nga dili matangtang (bisan sa usa ka programmer) sa sistema.

Pinaagi sa dalan, ang artikulo gibase sa mga taho nga "On Guard for Rootkits: Intel BootGuard" gikan sa komperensya ZeroNights 2016 ug ika-29 nga miting DefCon Russia (ang duha ka presentasyon dinhi).

Firmware alang sa plataporma sa kompyuter nga adunay Intel 64 nga arkitektura

Sa pagsugod, atong tubagon ang pangutana: unsa ang firmware sa usa ka modernong plataporma sa kompyuter nga adunay Intel 64 nga arkitektura? Siyempre, UEFI BIOS. Apan kini nga tubag dili tukma. Atong tan-awon ang numero, nga nagpakita sa desktop (laptop) nga bersyon niini nga arkitektura.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang basehan mao ang link:

  • Processor (CPU, Central Processing Unit), nga, dugang pa sa mga nag-unang mga cores, adunay usa ka built-in nga graphics core (dili sa tanan nga mga modelo) ug usa ka memory controller (IMC, Integrated Memory Controller);
  • Chipset (PCH, Platform Controller Hub), nga adunay lain-laing mga controllers alang sa interaksyon sa peripheral nga mga himan ug pagdumala sa mga subsystem. Lakip kanila mao ang bantog nga Intel Management Engine (ME), nga adunay usa usab ka firmware (Intel ME firmware).

Ang mga laptop, dugang pa sa ibabaw, nanginahanglan usa ka integrated controller (ACPI EC, Advanced Control ug Power Interface Embedded Controller), nga maoy responsable sa operasyon sa power subsystem, touchpad, keyboard, Fn keys (screen brightness, sound volume, keyboard. backlight, etc.).) ug uban pa. Ug siya usab adunay kaugalingon nga firmware.

Busa, ang kombinasyon sa firmware sa ibabaw mao ang firmware sa plataporma sa kompyuter (system firmware), nga gitipigan sa usa ka komon nga SPI flash memory. Aron ang mga tiggamit niini nga panumduman dili malibog kung asa ang usa ka tawo mamakak, ang mga sulod niini nga panumduman gibahin ngadto sa mosunod nga mga rehiyon (sama sa gipakita sa hulagway):

  • UEFI BIOS;
  • ACPI EC firmware (usa ka separado nga rehiyon nagpakita uban sa Skylake processor microarchitecture (2015), apan sa-sa-ihalas nga kita wala pa makakita sa mga pananglitan sa paggamit niini, mao nga ang embedded controller firmware bahin gihapon sa UEFI BIOS);
  • Intel ME firmware;
  • configuration (MAC address, ug uban pa) sa built-in GbE (Gigabit Ethernet) network adapter;
  • flash descriptors - ang nag-unang rehiyon sa flash memory, nga adunay mga pointer sa ubang mga rehiyon, ingon man mga permiso sa pag-access niini.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang pagkalainlain sa pag-access sa mga rehiyon (sumala sa gitakda nga mga pagtugot) gidumala sa SPI bus master - ang SPI controller nga gitukod sa chipset, diin kini nga memorya ma-access. Kung ang mga pagtugot gitakda sa mga kantidad nga girekomenda (alang sa mga hinungdan sa seguridad) sa Intel, nan ang matag tiggamit sa SPI flash adunay bug-os nga pag-access (pagbasa / pagsulat) lamang sa ilang rehiyon. Ang uban kay read-only o dili ma-access. Nahibal-an nga kamatuoran: sa daghang mga sistema, ang CPU adunay bug-os nga pag-access sa UEFI BIOS ug GbE, pagbasa sa pag-access lamang sa mga flash descriptor, ug wala’y pag-access sa rehiyon sa Intel ME. Nganong daghan ug dili tanan? Ang girekomendar kay opsyonal. Isulti namo kanimo ang dugang sa ulahi sa artikulo.

Mga mekanismo sa pagpanalipod sa firmware sa usa ka plataporma sa kompyuter gikan sa pagbag-o

Dayag nga, ang firmware sa usa ka plataporma sa kompyuter kinahanglan mapanalipdan gikan sa posible nga pagkompromiso, nga magtugot sa usa ka potensyal nga tig-atake nga makakuha usa ka baroganan niini (makaluwas sa mga pag-update / pag-install pag-usab sa OS), ipatuman ang ilang code sa labing pribilihiyo nga mga mode, ug uban pa. Ug ang pagdili sa pag-access sa mga rehiyon sa memorya sa flash sa SPI, siyempre, dili igo. Busa, ang lainlaing mga mekanismo nga espesipiko sa matag palibot sa pagpatuman gigamit aron mapanalipdan ang firmware gikan sa mga pagbag-o.

Busa, ang Intel ME firmware gipirmahan alang sa integridad ug kasaligan nga pagkontrol, ug gisusi sa ME controller sa matag higayon nga kini i-load sa ME UMA memory. Kini nga proseso sa pag-verify nahisgutan na namo sa usa sa mga artikulogipahinungod sa Intel ME subsystem.

Ug ang firmware sa ACPI EC, ingon nga usa ka lagda, gisusi lamang alang sa integridad. Bisan pa, tungod sa kamatuoran nga kini nga binary gilakip sa UEFI BIOS, hapit kini kanunay nga gipailalom sa parehas nga mga mekanismo sa pagpanalipod nga gigamit sa UEFI BIOS. Atong hisgotan sila.

Kini nga mga mekanismo mahimong bahinon sa duha ka mga kategorya.

Isulat ang proteksyon sa UEFI BIOS nga rehiyon

  1. Pisikal nga pagpanalipod sa mga sulod sa SPI flash memory nga adunay write-protect jumper;
  2. Pagpanalipod sa projection sa UEFI BIOS nga rehiyon sa CPU address space gamit ang PRx registers sa chipset;
  3. Pag-block sa pagsulay sa pagsulat sa rehiyon sa UEFI BIOS pinaagi sa paghimo ug pagproseso sa katugbang nga SMI interrupt pinaagi sa pagbutang sa BIOS_WE / BLE ug SMM_BWP bits sa mga rehistro sa chipset;
  4. Ang mas abante nga bersyon niini nga proteksyon mao ang Intel BIOS Guard (PFAT).

Dugang pa sa kini nga mga mekanismo, ang mga tigbaligya mahimo’g magpalambo ug magpatuman sa ilang kaugalingon nga mga lakang sa seguridad (pananglitan, pagpirma sa mga kapsula nga adunay mga update sa UEFI BIOS).

Mahinungdanon nga hinumdoman nga sa usa ka piho nga sistema (depende sa tigbaligya), dili tanan nga mga mekanismo sa pagpanalipod sa ibabaw mahimong magamit, mahimo nga dili kini magamit, o mahimo kini ipatuman sa usa ka mahuyang nga paagi. Mahimo nimong basahon ang dugang mahitungod niini nga mga mekanismo ug ang sitwasyon sa ilang pagpatuman sa kini nga artikulo. Alang sa mga interesado, girekomenda namon nga basahon nimo ang tibuuk nga serye sa mga artikulo sa seguridad sa UEFI BIOS gikan sa CodeRush.

UEFI BIOS Authentication Verification

Kung maghisgot kami bahin sa kasaligan nga mga teknolohiya sa boot, ang una nga butang nga naa sa hunahuna mao ang Secure Boot. Bisan pa, sa arkitektura, kini gidisenyo aron mapamatud-an ang mga sangkap sa gawas sa UEFI BIOS (mga driver, loader, ug uban pa), ug dili ang firmware mismo.

Busa, ang Intel sa SoCs nga adunay Bay Trail microarchitecture (2012) nagpatuman sa usa ka hardware nga non-switchable Secure Boot (Verified Boot), nga walay kalabotan sa nahisgutang Secure Boot nga teknolohiya. Sa ulahi (2013), kini nga mekanismo gipauswag ug, ubos sa ngalan nga Intel Boot Guard, gipagawas alang sa mga desktop nga adunay Haswell microarchitecture.

Sa wala pa ihulagway ang Intel Boot Guard, atong tan-awon ang mga palibot sa pagpatuman sa arkitektura sa Intel 64, nga, sa kombinasyon, mao ang mga ugat sa pagsalig alang niining kasaligan nga teknolohiya sa boot.

Intel CPU

Gisugyot ni Cap nga ang processor mao ang nag-unang palibot sa pagpatuman sa arkitektura sa Intel 64. Ngano nga kini usab ang gamut sa pagsalig? Kini nahimo nga kini mao ang pagpanag-iya sa mga mosunod nga mga elemento nga naghimo niini:

  • Ang Microcode ROM usa ka non-volatile, non-rewritable memory para sa pagtipig sa microcode. Gituohan nga ang microcode mao ang pagpatuman sa sistema sa pagtudlo sa processor sa pinakasimple nga mga instruksyon. Mahitabo usab sa microcode mga bug. Mao nga sa BIOS makit-an nimo ang mga binary nga adunay mga pag-update sa microcode (kini gipatong sa oras sa pag-boot, tungod kay ang ROM dili ma-overwritten). Ang sulud niini nga mga binary gi-encrypt, nga labi nga nagpalisud sa pag-analisar (busa, ang piho nga sulud sa microcode nahibal-an lamang sa mga nagpalambo niini), ug gipirmahan aron makontrol ang integridad ug pagkakasaligan;
  • AES yawe sa pag-decrypt sa mga sulod sa microcode updates;
  • usa ka hash sa RSA public key nga nagpamatuod sa pirma sa microcode updates;
  • RSA public key hash, nga nagsusi sa pirma sa Intel-developed ACM (Authenticated Code Module) code modules, nga ang CPU mahimong modagan sa dili pa magsugod ang BIOS (hello microcode) o sa panahon sa operasyon niini, kung mahitabo ang pipila ka mga panghitabo.

Intel AKO

Kini nga subsystem sa among blog gipahinungod sa duha mga artikulo. Hinumdomi nga kini nga executable nga palibot gibase sa microcontroller nga gitukod sa chipset ug mao ang labing tinago ug pribilihiyo sa sistema.

Bisan pa sa tago, ang Intel ME mao usab ang gamut sa pagsalig, tungod kay kini adunay:

  • ME ROM - non-volatile, non-rewritable memory (wala'y gihatag nga pamaagi sa pag-update), nga adunay start code, ingon man ang SHA256 hash sa RSA public key, nga nagsusi sa pirma sa Intel ME firmware;
  • AES yawe alang sa pagtipig sa sekreto nga impormasyon;
  • access sa usa ka set sa mga fuse (FPFs, Field Programmable Fuses) nga gisagol sa chipset alang sa permanente nga pagtipig sa pipila ka impormasyon, lakip ang impormasyon nga gipiho sa tigbaligya sa sistema sa kompyuter.

Intel Boot Guard 1.x

Gamay nga disclaimer. Ang mga numero sa bersyon sa teknolohiya sa Intel Boot Guard nga among gigamit niini nga artikulo kay arbitraryo ug mahimong walay kalabotan sa pag-numero nga gigamit sa internal nga dokumentasyon sa Intel. Dugang pa, ang kasayuran bahin sa pagpatuman niini nga teknolohiya nga gihatag dinhi nakuha sa panahon sa reverse engineering, ug mahimong adunay mga dili tukma kung itandi sa espesipikasyon alang sa Intel Boot Guard, nga lagmit dili mamantala.

Busa, ang Intel Boot Guard (BG) usa ka hardware nga gisuportahan sa UEFI BIOS authentication technology. Paghukom sa gamay nga paghulagway niini sa libro [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot], kini nagtrabaho isip usa ka kasaligan nga kadena sa boot. Ug ang una nga link niini mao ang boot code (microcode) sa sulod sa CPU, nga gi-trigger sa RESET nga panghitabo (dili malibog sa RESET vector sa BIOS!). Ang CPU nakit-an ang usa ka module sa code (Intel BG startup ACM) nga naugmad ug gipirmahan sa Intel sa SPI flash memory, gikarga kini sa cache niini, gipamatud-an kini (nahibal-an na sa ibabaw nga ang CPU adunay usa ka public key hash nga nagpamatuod sa pirma sa ACM ) ug magsugod.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard

Kini nga module sa code mao ang responsable sa pag-verify sa gamay nga pagsugod nga bahin sa UEFI BIOS - Initial Boot Block (IBB), nga, sa baylo, adunay mga gamit alang sa pag-verify sa panguna nga bahin sa UEFI BIOS. Sa ingon, gitugotan ka sa Intel BG nga mapamatud-an ang pagkakasaligan sa BIOS sa wala pa i-boot ang OS (nga mahimo sa ilawom sa pagdumala sa teknolohiya sa Secure Boot).

Ang teknolohiya sa Intel BG naghatag og duha ka mga mode sa operasyon (ug ang usa dili makabalda sa lain, i.e. ang duha nga mga mode mahimong ma-enable sa sistema, ug ang duha mahimong ma-disable).

Gisukod nga Boot

Sa Measured Boot (MB) mode, ang matag boot component (sugod sa CPU boot ROM) "nagsukod" sa sunod gamit ang mga kapabilidad sa Trusted Platform Module (TPM). Sa mga wala kabalo, pasabta ko.

Ang TPM adunay mga PCR (Platform Configuration Registers), nga nagrekord sa resulta sa operasyon sa hashing sumala sa pormula:

Ang kasaligang boot ni Schrödinger. Intel Boot Guard

Mga. ang kasamtangan nga kantidad sa PCR nagdepende sa nauna, ug kini nga mga rehistro ma-reset lamang kung ang sistema RESET.

Busa, sa MB mode, sa usa ka punto sa panahon, ang mga PCR nagpakita sa usa ka talagsaon (sulod sa mga kapabilidad sa hash operation) identifier sa code o data nga "gisukod". Ang mga kantidad sa PCR mahimong magamit sa pag-encrypt sa pipila nga data (TPM_Seal) nga operasyon. Pagkahuman niana, ang ilang pag-decryption (TPM_Unseal) mahimo lamang kung ang mga kantidad sa PCR wala mabag-o ingon usa ka sangputanan sa pagkarga (ie, wala’y usa nga "gisukod" nga sangkap ang nabag-o).

Gipamatud-an nga Boot

Ang labing makahadlok nga butang alang sa mga gusto nga usbon ang UEFI BIOS mao ang Verified Boot (VB) mode, diin ang matag sangkap sa boot cryptographically nagpamatuod sa integridad ug pagkakasaligan sa sunod. Ug sa kaso sa usa ka verification error, (usa sa mosunod) mahitabo:

  • shutdown pinaagi sa timeout gikan sa 1 minutos ngadto sa 30 minutos (aron ang user adunay panahon sa pagsabot ngano nga ang iyang computer dili boot, ug, kon mahimo, mosulay sa pagpasig-uli sa BIOS);
  • diha-diha nga pagsira (aron ang tiggamit walay panahon sa pagsabut ug, dugang pa, sa pagbuhat);
  • pagpadayon sa trabaho nga adunay usa ka tul-id nga nawong (ang kaso kung wala’y oras alang sa kaluwasan, tungod kay adunay mas hinungdanon nga mga butang nga buhaton).

Ang pagpili sa aksyon nagdepende sa gipiho nga Intel BG configuration (nga mao, sa gitawag nga pagpatuman nga palisiya), nga permanente nga natala sa computer platform vendor sa usa ka espesyal nga gidisenyo storage - chipset fuses (FPFs). Atong hisgotan kini nga punto sa mas detalyado sa ulahi.

Dugang pa sa pag-configure, ang vendor nagmugna og duha ka RSA 2048 nga mga yawe ug nagmugna og duha ka mga istruktura sa datos (gipakita sa hulagway):

  1. Ang vendor root key manifest (KEYM, OEM Root Key Manifest), nga nagbutang sa SVN (Security Version Number) niini nga manifest, ang SHA256 hash sa public key sa sunod nga manifest, ang RSA public key (ie ang publikong bahin sa vendor root key) aron mapamatud-an ang pirma niini nga manifest ug ang pirma mismo;
  2. Ang IBB Manifest (IBBM, Initial Boot Block Manifest), nga nagbutang sa SVN niini nga manifest, ang SHA256 hash sa IBB, ang public key para sa pagmatuod sa pirma niini nga manifest, ug ang pirma mismo.

Ang SHA256 hash sa OEM Root Key permanente nga gisulat sa chipset fuses (FPFs), sama sa Intel BG configuration. Kung ang Intel BG configuration naghatag alang sa paglakip niini nga teknolohiya, unya gikan karon niini nga sistema lamang ang tag-iya sa pribadong bahin sa OEM Root Key ang maka-update sa BIOS (ie makahimo sa pag-recalculate niini nga mga manifests), i.e. tigbaligya.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard

Kung imong tan-awon ang litrato, ang mga pagduha-duha mitungha dayon bahin sa panginahanglan alang sa ingon ka taas nga kadena sa pag-verify - mahimo nimo nga gigamit ang usa ka manifest. Nganong complicated?

Sa tinuud, ang Intel sa ingon naghatag sa vendor sa higayon nga magamit ang lainlaing mga yawe sa IBB alang sa lainlaing mga linya sa produkto ug ang usa ingon ang gamut. Kung ang pribado nga bahin sa IBB key (nga nagpirma sa ikaduha nga pagpakita) na-leak, ang insidente makaapekto lamang sa usa ka linya sa produkto ug hangtod nga ang vendor makamugna og bag-ong pares ug makapahimo sa gikalkula nga mga manifest sa sunod nga pag-update sa BIOS.

Apan kung ang ugat nga yawe nakompromiso (diin ang una nga pagpakita gipirmahan), dili mahimo nga ilisan kini, ang pamaagi sa pagbawi wala gihatag. ang hash sa publiko nga bahin niini nga yawe giprograma sa mga FPF sa makausa ug alang sa tanan.

Intel Boot Guard Configuration

Karon atong tan-awon pag-ayo ang Intel BG configuration ug ang proseso sa paghimo niini. Kung imong tan-awon ang katugbang nga tab sa GUI sa Flash Image Tool gikan sa Intel System Tool Kit (STK), imong mamatikdan nga ang Intel BG configuration naglakip sa usa ka hash sa publiko nga bahin sa root key sa vendor, usa ka magtiayon nga dili klaro. mga mithi, ug uban pa. Profile sa Intel BG.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard

Ang istruktura niini nga profile:

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;
};

Sa kinatibuk-an, ang Intel BG configuration usa ka flexible nga entidad. Tagda, pananglitan, ang Force_Boot_Guard_ACM flag. Kung ma-clear na, kung ang BG startup ACM module sa SPI flash dili makit-an, walay kasaligan nga boot nga mahitabo. Kini mahimong dili kasaligan.

Gisulat na namo sa ibabaw nga ang palisiya sa pagpatuman alang sa VB mode mahimong ma-configure aron kung mapakyas ang pag-verify, pag-usab, usa ka dili kasaligan nga pag-download ang mahitabo.

Itugyan ang mga butang nga sama niini sa mga tigbaligya...

Ang GUI sa utility naghatag sa mosunod nga "andam na" nga mga profile:

Gidaghanon
Linya
paghulagway

0
Dili_FVME
Gi-disable ang teknolohiya sa Intel BG

1
VE
Gipaandar ang VB mode, pagsira pinaagi sa timeout

2
VME
ang duha nga mga mode gipalihok (VB ug MB), pagsira pinaagi sa oras

3
VM
ang duha nga mga mode gipalihok, nga wala gipalong ang sistema

4
FVE
Gipaandar ang VB mode, gilayon nga pagsira

5
FVME
ang duha ka mga mode nakahimo, diha-diha nga pagsira

Sama sa nahisgotan na, ang Intel BG configuration kinahanglang isulat sa makausa ug alang sa tanan sa system vendor ngadto sa chipset fuses (FPFs) - usa ka gamay (sumala sa wala mapamatud-an nga impormasyon, 256 bytes lamang) hardware nga pagtipig sa impormasyon sulod sa chipset, nga mahimong maprograma sa gawas. sa mga pasilidad sa produksiyon sa Intel (mao kana ang hinungdan Field Programmable mga piyus).

Maayo kini alang sa pagtipig sa configuration tungod kay:

  • adunay usa ka usa ka higayon nga maprograma nga lugar sa pagtipig sa datos (diin gisulat ang pagsumpo sa Intel BG);
  • Intel ME ra ang makabasa ug makaprograma niini.

Mao nga, aron mabutang ang pagsumpo alang sa teknolohiya sa Intel BG sa usa ka piho nga sistema, gibuhat sa vendor ang mosunud sa panahon sa produksiyon:

  1. Gamit ang Flash Image Tool utility (gikan sa Intel STK), nagmugna og firmware image nga adunay gihatag nga Intel BG configuration isip variables sulod sa Intel ME region (ang gitawag nga temporary mirror for FPFs);
  2. Gamit ang Flash Programming Tool (gikan sa Intel STK), isulat kini nga imahe sa SPI flash memory sa sistema ug gisira ang gitawag nga. manufacturing mode (sa niini nga kaso, ang katugbang nga sugo gipadala ngadto sa Intel ME).

Ingon usa ka sangputanan sa kini nga mga operasyon, itugyan sa Intel ME sa mga FPF ang gitakda nga mga kantidad gikan sa salamin alang sa mga FPF sa rehiyon sa ME, itakda ang mga pagtugot sa mga deskriptor sa flash sa SPI sa mga kantidad nga girekomenda sa Intel (gihulagway sa sinugdanan sa artikulo) ug paghimo usa ka sistema nga RESET.

Pagtuki sa Pagpatuman sa Intel Boot Guard

Aron ma-analisar ang pagpatuman niini nga teknolohiya sa usa ka piho nga pananglitan, among gisusi ang mosunod nga mga sistema alang sa mga pagsubay sa teknolohiya sa Intel BG:

sistema
Примечание

Gigabyte GA-H170-D3H
Skylake, adunay suporta

Gigabyte GA-Q170-D3H
Skylake, adunay suporta

Gigabyte GA-B150-HD3
Skylake, adunay suporta

MSI H170A Gaming Pro
Skylake, walay suporta

Lenovo ThinkPad 460
Skylake, suporta nga anaa, teknolohiya nakahimo

Lenovo Yoga 2 Pro
Haswell, walay suporta

Lenovo U330p
Haswell, walay suporta

Ang "Suporta" nagpasabot sa presensya sa Intel BG startup ACM module, ang mga manifests nga gihisgutan sa ibabaw ug ang katugbang nga code sa BIOS, i.e. implementasyon alang sa pagtuki.

Isip usa ka pananglitan, atong kuhaon ang na-download gikan sa opisina. imahe sa site sa vendor sa SPI flash memory alang sa Gigabyte GA-H170-D3H (bersyon F4).

Intel CPU boot ROM

Una sa tanan, atong hisgutan ang mahitungod sa mga aksyon sa processor kung ang teknolohiya sa Intel BG gipalihok.

Dili posible nga makit-an ang mga sample sa na-decrypted nga microcode, busa, kung giunsa ang mga aksyon nga gihulagway sa ubos gipatuman (sa microcode o sa hardware) usa ka bukas nga pangutana. Bisan pa niana, ang kamatuoran nga ang modernong mga processor sa Intel "makahimo" sa pagbuhat niini nga mga aksyon usa ka kamatuoran.

Human sa paggawas sa RESET nga estado, ang processor (kansang address space ang mga sulod sa flash memory na-mapa na) makit-an ang FIT (Firmware Interface Table). Ang pagpangita niini sayon, ang pointer niini gisulat sa adres nga FFFF FFC0h.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Niini nga pananglitan, kini nga adres naglangkob sa kantidad nga FFD6 9500h. Sa pagbalik sa kini nga adres, nakita sa processor ang FIT nga lamesa, ang sulud niini gibahin sa mga rekord. Ang unang entry mao ang ulohan sa mosunod nga istruktura:

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;
};

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Alang sa pipila ka wala mahibal-an nga hinungdan, ang checksum dili kanunay nga kalkulado sa kini nga mga lamesa (ang field gibiyaan nga null).

Ang nahabilin nga mga entry nagpunting sa lainlaing mga binary nga kinahanglan i-parse / ipatuman sa dili pa ipatuman ang BIOS, i.e. sa dili pa mobalhin sa legacy RESET vector (FFFF FFF0h). Ang istruktura sa matag ingon nga entry mao ang mosunod:

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

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang EntryType field nagpakita sa matang sa block nga gipunting niini nga entry. Nahibal-an namon ang pila ka klase:

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

Karon klaro nga ang usa sa mga entry nagpunting sa lokasyon sa Intel BG startup ACM binary. Ang istruktura sa header niini nga binary kasagaran alang sa mga module sa code nga gihimo sa Intel (ACMs, microcode updates, Intel ME code sections, ...).

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];
};

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang processor nagkarga niini nga binary sa iyang cache, nagpamatuod ug naglansad.

Intel BG nga pagsugod sa ACM

Isip resulta sa pag-analisa sa buhat niini nga ACM, nahimong tin-aw nga kini nagbuhat sa mosunod:

  • nakadawat gikan sa Intel ME ang Intel BG configuration nga gisulat sa chipset fuses (FPFs);
  • nakit-an ang KEYM ug IBBM nga nagpakita, nagpamatuod niini.

Aron makit-an kini nga mga pagpakita, gigamit usab sa ACM ang FIT nga lamesa, nga adunay duha ka klase sa mga entri aron itudlo kini nga mga istruktura (tan-awa ang FIT_ENTRY_TYPES sa ibabaw).

Atong tan-awon pag-ayo ang mga manifesto. Sa istruktura sa una nga pagpakita, nakita namon ang daghang dili klaro nga mga kanunay, usa ka hash sa publiko nga yawe gikan sa ikaduha nga pagpakita, ug usa ka publiko nga OEM Root Key nga gipirmahan ingon usa ka nested structure:

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];
};

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Aron mapamatud-an ang publiko nga yawe sa OEM Root Key, among nahinumduman nga ang SHA256 hash gikan sa mga fuse gigamit, nga sa pagkakaron nadawat na gikan sa Intel ME.

Mopadayon ta sa ikaduhang manifesto. Kini naglangkob sa tulo ka mga istruktura:

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

Ang una adunay pipila nga mga kanunay:

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
};

Ang ikaduha naglangkob sa SHA256 hash sa IBB ug ang gidaghanon sa mga deskriptor nga naghulagway sa mga sulod sa IBB (ie kung unsa ang hash gikan sa kalkulado):

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;
};

Ang mga deskriptor sa IBB nagsunod niini nga istruktura, usa-usa. Ang ilang sulod adunay mosunod nga pormat:

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

Yano ra: ang matag deskriptor naglangkob sa adres / gidak-on sa usa ka tipik sa IBB. Busa, ang paghugpong sa mga bloke nga gipunting niini nga mga deskriptor (sa han-ay sa mga deskriptor mismo) mao ang IBB. Ug, ingon nga usa ka lagda, ang IBB usa ka kombinasyon sa tanan nga mga module sa SEC ug PEI nga mga hugna.

Ang ikaduha nga manifest natapos sa usa ka istruktura nga adunay IBB public key (gipamatud-an sa SHA256 hash gikan sa unang manifest) ug ang pirma niini nga manifest:

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

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Busa, bisan sa wala pa magsugod ang UEFI BIOS execution, ang processor maglunsad sa ACM, nga magpamatuod sa pagkatinuod sa mga sulod sa mga seksyon nga adunay SEC ug PEI phase code. Sunod, ang processor mogawas sa ACM, molihok subay sa RESET vector, ug magsugod sa pagpatuman sa BIOS.

Ang PEI verified partition kinahanglang adunay module nga magsusi sa nahabilin nga BIOS (DXE code). Kini nga module gimugna na sa IBV (Independent BIOS Vendor) o sa system vendor mismo. Kay Ang mga sistema sa Lenovo ug Gigabyte ra ang among magamit ug adunay suporta sa Intel BG, atong tagdon ang code nga nakuha gikan sa kini nga mga sistema.

UEFI BIOS module LenovoVerifiedBootPei

Sa kaso sa Lenovo, kini nahimo nga LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} module, nga gimugna ni Lenovo.

Ang trabaho niini mao ang pagpangita (sa GUID) usa ka hash nga lamesa alang sa DXE ug pamatud-an ang DXE.

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 nga BootGuardPei

Sa kaso sa Gigabyte, nahimo kini nga BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} nga module, nga gihimo sa AMI, ug busa naa sa bisan unsang AMI BIOS nga adunay suporta sa Intel BG.

Ang algorithm sa operasyon niini medyo lahi, bisan pa, kini nahulog sa parehas:

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;
}

Ang hash table {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} nga gitan-aw niini adunay mosunod nga pormat:

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

Atong hisgotan sa makadiyot ang laing pagpatuman sa Intel Boot Guard, nga nakit-an sa mas bag-ong sistema base sa Intel SoC nga adunay Apollo Lake microarchitecture - ASRock J4205-IT.

Bisan kung kini nga bersyon magamit ra sa mga SoC (bag-ong mga sistema nga adunay microarchitecture nga processor sa Kaby Lake nagpadayon sa paggamit sa Intel Boot Guard 1.x), kini usa ka dako nga interes sa pagsuhid sa usa ka bag-ong kapilian sa arkitektura alang sa mga platform nga gibase sa mga Intel SoC, nga nakita nga makita. mga pagbag-o, pananglitan:

  • Ang mga rehiyon sa BIOS ug Intel ME (o hinoon ang Intel TXE, sumala sa terminolohiya sa Intel SoC) usa na ka rehiyon sa IFWI;
  • bisan kung ang Intel BG gipaandar sa plataporma, ang mga istruktura sama sa FIT, KEYM, IBBM wala makit-an sa flash memory;
  • dugang sa TXE ug ISH cores (x86), usa ka ikatulo nga kinauyokan (pag-usab ARC, sa dalan) gidugang sa chipset - PMC (Power Management Controller), nga nalangkit sa pagsiguro sa operability sa gahum subsystem ug performance monitoring.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang sulod sa bag-ong rehiyon sa IFWI usa ka set sa mosunod nga mga module:

Bias
ngalan
paghulagway

0000 2000 ka oras
SMIP
pipila ka configuration sa plataporma, nga gipirmahan sa vendor

0000 6000 ka oras
RBEP
Intel TXE firmware code seksyon, x86, gipirmahan sa Intel

0001 0000 ka oras
PMCP
seksyon sa firmware code Intel PMC, ARC, gipirmahan sa Intel

0002 0000 ka oras
FTPR
Intel TXE firmware code seksyon, x86, gipirmahan sa Intel

0007B000h
UCOD
Ang mga update sa microcode sa CPU nga gipirmahan sa Intel

0008 0000 ka oras
IBBP
UEFI BIOS, SEC/PEI nga mga hugna, x86, gipirmahan sa vendor

0021 8000 ka oras
ISHC
code nga seksyon sa Intel ISH firmware, x86, gipirmahan sa vendor

0025 8000 ka oras
NFTP
Intel TXE firmware code seksyon, x86, gipirmahan sa Intel

0036 1000 ka oras
IUNP
dili mailhan

0038 1000 ka oras
OBBP
UEFI BIOS, DXE nga hugna, x86, wala gipirmahan

Atol sa pag-analisar sa firmware sa TXE, nahimo nga klaro nga pagkahuman sa RESET, gipadayon sa TXE ang processor sa kini nga estado hangtod nga giandam niini ang sukaranan nga sulud sa address space alang sa CPU (FIT, ACM, RESET vector ...). Dugang pa, gibutang sa TXE kini nga datos sa SRAM niini, pagkahuman temporaryo kini nga naghatag sa processor sa pag-access didto ug "gipagawas" kini gikan sa RESET.

Sa pagbantay sa rootkits

Aw, karon magpadayon kita sa "init". Among nadiskobrehan kaniadto nga sa daghang mga sistema, ang SPI flash descriptors adunay mga permiso sa pag-access sa mga rehiyon sa SPI flash memory aron ang tanang tiggamit niini nga memorya makasulat ug makabasa sa bisan unsang rehiyon. Mga. walay paagi.

Human sa pagsusi sa MEinfo utility (gikan sa Intel STK), among nakita nga ang manufacturing mode niini nga mga sistema wala sirado, busa, ang mga chipset fuses (FPFs) gibiyaan sa usa ka dili matino nga estado. Oo, ang Intel BG dili ma-enable o dili ma-disable sa ingon nga mga kaso.

Naghisgot kami bahin sa mga mosunud nga sistema (mahitungod sa Intel BG ug kung unsa ang ihulagway sa ulahi sa artikulo, maghisgot kami bahin sa mga sistema nga adunay Haswell processor microarchitecture ug mas taas):

  • tanan nga mga produkto sa Gigabyte;
  • tanang produkto sa MSI;
  • 21 Lenovo laptop models ug 4 Lenovo server models.

Siyempre, among gitaho ang pagpangita sa kini nga mga tigbaligya, ingon man sa Intel.

Ang igong tubag gisundan lamang gikan sa Lenovokinsa miila sa problema ug nagpagawas ug patch.

Gigabyte Morag gidawat nila ang kasayuran bahin sa pagkahuyang, apan wala’y komento sa bisan unsang paagi.

Komunikasyon sa MSI hingpit nga nahunong sa among hangyo nga ipadala ang among publiko nga yawe sa PGP (aron ipadala sila usa ka naka-encrypt nga advisory sa seguridad). Gipahayag nila nga sila "usa ka tiggama sa hardware ug wala maghimo mga yawe sa PGP."

Apan labaw pa sa punto. Tungod kay ang mga piyus gibilin sa usa ka wala matino nga kahimtang, ang user (o tig-atake) mahimong magprograma niini sa iyang kaugalingon (ang labing lisud mao ang pangitaa ang Intel STK). Kini nagkinahanglan sa mosunod nga mga lakang.

1. Pag-boot sa Windows OS (sa kinatibuk-an, ang mga lakang nga gihulagway sa ubos mahimo usab nga buhaton gikan sa ilawom sa Linux, kung maghimo ka usa ka analogue sa Intel STK alang sa gusto nga OS). Gamit ang MEinfo utility, siguruha nga ang mga piyus niini nga sistema wala giprograma.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
2. Basaha ang sulod sa flash memory gamit ang Flash Programming Tool.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
3. Ablihi ang gibasa nga imahe gamit ang bisan unsang himan sa pag-edit sa UEFI BIOS, paghimo sa kinahanglan nga mga pagbag-o (ipatuman ang usa ka rootkit, pananglitan), paghimo / pag-edit sa kasamtangan nga KEYM ug IBBM nga mga istruktura sa ME nga rehiyon.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang publiko nga bahin sa RSA nga yawe gipasiugda sa litrato, ang hash nga iprograma sa mga piyus sa chipset kauban ang nahabilin nga pag-configure sa Intel BG.

4. Gamit ang Flash Image Tool, paghimo og bag-ong firmware image (pinaagi sa pag-set sa Intel BG configuration).

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
5. Pagsulat og bag-ong hulagway nga i-flash gamit ang Flash Programming Tool, pamatud-i gamit ang MEinfo nga ang ME nga rehiyon karon naglangkob sa Intel BG configuration.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
6. Gamita ang Flash Programming Tool aron isira ang manufacturing mode.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
7. Ang sistema mag-reboot, pagkahuman, gamit ang MEinfo, mahimo nimong mapamatud-an nga ang mga FPF naprogram na karon.

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Kini nga mga aksyon навсегда makahimo sa Intel BG niini nga sistema. Imposible nga i-undo ang aksyon, nga nagpasabut:

  • ang tag-iya lamang sa pribadong bahin sa root key (ie ang usa nga nakapahimo sa Intel BG) ang makahimo sa pag-update sa UEFI BIOS niini nga sistema;
  • kung imong ibalik ang orihinal nga firmware sa kini nga sistema, pananglitan, gamit ang usa ka programmer, dili kini ma-on (usa ka sangputanan sa palisiya sa pagpatuman kung adunay sayup sa pag-verify);
  • aron makuha ang ingon nga UEFI BIOS, kinahanglan nimo nga ilisan ang chipset sa mga na-program nga FPF nga adunay usa ka "limpyo" (i.e. resold ang chipset kung adunay ka access sa usa ka infrared soldering station sa presyo sa usa ka awto, o ilisan lang ang motherboard. ).

Aron masabtan kung unsa ang mahimo sa ingon nga rootkit, kinahanglan nimo nga susihon kung unsa ang nagpaposible nga ipatuman ang imong code sa usa ka palibot sa UEFI BIOS. Ingna, sa labing pribilihiyo nga paagi sa processor - SMM. Ang maong rootkit mahimong adunay mosunod nga mga kabtangan:

  • ipatuman nga susama sa OS (mahimo nimong i-configure ang pagproseso pinaagi sa pagmugna og usa ka SMI interrupt, nga ma-trigger sa usa ka timer);
  • adunay tanan nga mga bentaha nga naa sa SMM mode (bug-os nga pag-access sa sulud sa RAM ug mga kahinguhaan sa hardware, sekreto gikan sa OS);
  • Ang code sa rootkit mahimong ma-encrypt ug ma-decrypt kung gilansad sa SMM mode. Ang bisan unsang datos nga anaa lamang sa SMM mode mahimong gamiton isip encryption key. Pananglitan, usa ka hash gikan sa set sa mga adres sa SMRAM. Aron makuha kini nga yawe, kinahanglan kang mosaka sa SMM. Ug kini mahimo sa duha ka paagi. Pangitaa ang RCE sa SMM code ug pahimusli kini, o idugang ang imong kaugalingon nga SMM module sa BIOS, nga imposible, tungod kay gipalihok namon ang Boot Guard.

Busa, kini nga kahuyangan nagtugot sa tig-atake sa:

  • paghimo usa ka tinago, dili matangtang nga rootkit nga wala mahibal-an nga katuyoan sa sistema;
  • ipatuman ang imong code sa usa sa mga chipset core sulod sa Intel SoC, nga mao, sa Intel ISH (tan-awa pag-ayo ang hulagway).

Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Ang kasaligang boot ni Schrödinger. Intel Boot Guard
Bisan kung ang mga kapabilidad sa Intel ISH subsystem wala pa masusi, kini daw usa ka makapaikag nga vector sa pag-atake batok sa Intel ME.

kaplag

  1. Ang pagtuon naghatag usa ka teknikal nga paghulagway kung giunsa ang teknolohiya sa Intel Boot Guard nagtrabaho. Minus ang usa ka pares nga mga sekreto sa seguridad sa Intel pinaagi sa modelo nga dili makita.
  2. Gipresentar ang usa ka senaryo sa pag-atake nga nagtugot sa paghimo og dili matangtang nga rootkit sa sistema.
  3. Nakita namon nga ang mga modernong Intel processor makahimo sa pagpatuman sa daghang proprietary code bisan sa wala pa magsugod ang BIOS.
  4. Ang mga plataporma nga adunay Intel 64 nga arkitektura nahimong dili kaayo angay alang sa pagpadagan sa libre nga software: pag-verify sa hardware, usa ka pagtaas sa gidaghanon sa mga proprietary nga teknolohiya ug mga subsystem (tulo ka mga core sa SoC chipset: x86 ME, x86 ISH ug ARC PMC).

Mga pagpaminus

Ang mga vendor nga gituyo nga biyaan nga bukas ang mode sa paggama kinahanglan nga isira kini. Sa pagkakaron, gipiyong lang nila ang ilang mga mata ug gipakita kini sa bag-ong mga sistema sa Kaby Lake.

Ang mga tiggamit makahimo sa pag-disable sa Intel BG sa ilang mga sistema (nga apektado sa gihulagway nga kahuyang) pinaagi sa pagpadagan sa Flash Programming Tool nga adunay kapilian nga -closemnf. Una, kinahanglan nimong sigurohon (gamit ang MEinfo) nga ang pag-configure sa Intel BG sa ME nga rehiyon naghatag alang sa eksakto nga pagpalong niini nga teknolohiya pagkahuman sa pagprograma sa mga FPF.

Source: www.habr.com

Idugang sa usa ka comment