Boota pêbawer a Schrödinger. Intel Boot Guard

Boota pêbawer a Schrödinger. Intel Boot Guard
Em pêşniyar dikin ku em dîsa dakevin astek nizm û li ser ewlehiya firmware ji bo platformên komputerê yên bi x86-hevaheng biaxivin. Vê carê, hêmana sereke ya lêkolînê Intel Boot Guard e (ku bi Intel BIOS Guard re neyê tevlihev kirin!) - teknolojiyek pêbawer a pêbawer a BIOS-ê ya ku firoşkarê pergala komputerê dikare di qonaxa hilberînê de bi domdarî çalak bike an neçalak bike. Welê, reçeteya lêkolînê jixwe ji me re nas e: bicîhkirina vê teknolojiyê bi karanîna endezyariya berevajî veqetîne, mîmariya wê vebêje, wê bi hûrguliyên nebelge tije bike, bi vektorên êrîşê re bi tam û tevlihev bike. Werin em sotemeniyê li çîrokê zêde bikin ka çawa xeletiyek ku bi salan di hilberîna çend firoşkaran de tê klonkirin rê dide êrîşkarek potansiyel ku vê teknolojiyê bikar bîne da ku di pergalê de rootkitek veşartî ku neyê jêbirin (tevî bernamenûsek jî) biafirîne.

Bi awayê, gotar li ser bingeha raporên "On Guard of Rootkits: Intel BootGuard" ji konferansê ye. ZeroNights 2016 û civîna 29 DefCon Rûsya (herdu pêşkêşî vir).

Firmware ji bo platformek komputerê bi mîmariya Intel 64

Pêşîn, ka em bersiva pirsê bidin: firmware platformek komputerek nûjen bi mîmariya Intel 64 çi ye? Bê guman, UEFI BIOS. Lê bersiveke wiha wê ne rast be. Ka em li wêneyê binêrin, ku guhertoya sermaseyê (laptop) ya vê mîmariyê nîşan dide.

Boota pêbawer a Schrödinger. Intel Boot Guard
Bingeh girêdan e:

  • Prosesor (CPU, Yekîneya Pêvajoya Navendî), ku ji bilî navikên sereke, xwedan bingehek grafîkî ya çêkirî ye (ne di hemî modelan de) û kontrolkerek bîranînê (IMC, Kontrolkera Bîra Yekgirtî);
  • Chipset (PCH, Platforma Kontrolker Hub), ku ji bo danûstandina bi cîhazên derdorê re û birêvebirina bine-pergalan ve kontrolkerên cihêreng vedihewîne. Di nav wan de Motora Rêvebiriya Intel (ME) ya navdar heye, ku di heman demê de firmware (Intel ME firmware) jî heye.

Laptop, ji bilî yên li jor, pêdivî bi kontrolkerek çêkirî (ACPI EC, Kontrola Pêşkeftî û Kontrolkera Navbera Hêzê ya Embedded), ku ji xebata binepergala hêzê, touchpad, klavyeyê, bişkokên Fn (ronahiya ekranê, dengê deng) berpirsiyar e. , ronahiya paşîn a klavyeyê, hwd.) û tiştên din. Û ew jî firmware xwe heye.

Ji ber vê yekê, tevahî firmware-ya jorîn firmware ya platforma komputerê ye (firmware pergalê), ku li ser bîranînek flash SPI-ya hevpar tê hilanîn. Ji bo ku bikarhênerên vê bîranînê li ku derê ye tevlihev nebin, naveroka vê bîranînê li herêmên jêrîn têne dabeş kirin (wek ku di wêneyê de tê xuyang kirin):

  • UEFI BIOS;
  • Firmware ACPI EC (herêmek veqetandî bi mîkroarchitectural processor Skylake (2015) re xuya bû, lê di nav çolê de me hîn nimûneyên karanîna wê nedîtiye, ji ber vê yekê firmware ya kontrolkerê çêkirî hîn jî di nav UEFI BIOS-ê de ye) ;
  • Firmware Intel ME;
  • veavakirina (navnîşana MAC, hwd.) ya adapterê torê ya GbE (Gigabit Ethernet) ya çêkirî;
  • Descriptors Flash devera sereke ya bîra flashê ye ku nîşangirên herêmên din, û her weha destûrên gihîştina wan vedihewîne.

Boota pêbawer a Schrödinger. Intel Boot Guard
Serwerê otobusê SPI, kontrolkerek SPI-yê ku di nav chipset de hatî çêkirin, ku bi navgîniya vê bîranînê tê gihîştin, berpirsiyar e ku gihandina herêman (li gorî destûrên diyarkirî) veqetîne. Ger destûr li ser nirxên pêşniyarkirî yên Intel (ji ber sedemên ewlehiyê) hatine danîn, wê hingê her bikarhênerek flash SPI tenê gihîştina (xwendin/nivîsandin) bi herêma xwe heye. Û yên mayî yan tenê-xwendin an jî negihîştin in. Rastiyek naskirî: li ser gelek pergalan, CPU bi tevahî gihîştina UEFI BIOS û GbE heye, tenê gihandina ravekerên flash-ê dixwîne, û çu carî gihîştina herêma Intel ME tune. Çima li ser gelekan, û ne li ser hemûyan? Ya ku tê pêşniyar kirin ne hewce ye. Em ê paşê di gotarê de bêtir agahdarî ji we re vebêjin.

Mekanîzmayên ji bo parastina firmware platforma komputerê ji guhertinê

Eşkere ye, firmware ya platformek komputerê divê ji lihevkirina muhtemel were parastin, ku dê bihêle ku êrîşkarek potansiyel di wê de cîh bigire (ji nûvekirinên OS-ê / ji nû ve sazkirinê sax bimîne), koda xwe di modên herî îmtiyaz de bicîh bike, hwd. Û sînordarkirina gihîştina herêmên bîra flash SPI, bê guman, ne bes e. Ji ber vê yekê, ji bo parastina firmware ji guhertinan, mekanîzmayên cihêreng ên taybetî ji bo her hawîrdora xebitandinê têne bikar anîn.

Bi vî rengî, firmware Intel ME ji bo kontrolkirina yekrêzî û rastîniyê tête îmze kirin, û her gava ku ew di bîra ME UMA de tê barkirin ji hêla kontrolkerê ME ve tê kontrol kirin. Ev pêvajoya verastkirinê jixwe di yek ji wan de ji hêla me ve hatî nîqaş kirin gotarên, ji jêrpergala Intel ME re hatî veqetandin.

Û firmware ACPI EC, wekî qaîdeyek, tenê ji bo yekrêziyê tê kontrol kirin. Lêbelê, ji ber ku ev binar di UEFI BIOS-ê de ye, hema hema her gav di bin heman mekanîzmayên parastinê de ye ku UEFI BIOS bikar tîne. Werin em qala wan bikin.

Ev mekanîzma dikarin li du kategoriyan bêne dabeş kirin.

Li herêma UEFI BIOS parastinê binivîse

  1. Parastina fizîkî ya naveroka bîra flash SPI bi jumperek parastinê ya nivîsandinê;
  2. Parastina pêşnûmeya herêma UEFI BIOS-ê ya li cîhê navnîşana CPU-yê bi karanîna tomarên chipset PRx;
  3. Astengkirina hewildanên nivîsandina li herêma UEFI BIOS-ê bi hilberandin û pêvajokirina qutbûna SMI-ya têkildar bi danîna bitên BIOS_WE/BLE û SMM_BWP di qeydên chipset de;
  4. Guhertoyek pêşkeftî ya vê parastinê Intel BIOS Guard (PFAT) ye.

Ji bilî van mekanîzmayan, firoşkar dikarin tedbîrên xwe yên ewlehiyê pêşve bibin û bicîh bînin (mînak, îmzekirina kapsulan bi nûvekirinên UEFI BIOS).

Girîng e ku were zanîn ku li ser pergalek taybetî (li gorî firoşkerê ve girêdayî), dibe ku ne hemî mekanîzmayên parastinê yên li jor werin sepandin, dibe ku ew qet neyên sepandin, an jî dibe ku ew bi rengek xeternak werin bicîh kirin. Hûn dikarin li ser van mekanîzmayan û rewşa pêkanîna wan bêtir bixwînin vê gotara. Ji bo kesên eleqedar, em pêşniyar dikin ku hûn tevahî rêzika gotaran li ser ewlehiya UEFI BIOS ji bixwînin CodeRush.

Nasnameya UEFI BIOS

Dema ku em li ser teknolojiyên pêbawer ên pêbawer diaxivin, yekem tiştê ku tê bîra Secure Boot e. Lêbelê, ji hêla mîmarî ve ew ji bo verastkirina rastiya pêkhateyên derveyî UEFI BIOS (ajokar, bootloader, hwd.) hatî çêkirin, û ne firmware bixwe.

Ji ber vê yekê, Intel, di SoC-ên bi mîkroarchitecture Bay Trail (2012), hardware-ya ne-seqetkirî Secure Boot (Verified Boot) pêk anî, ku tiştek hevpar bi teknolojiya Secure Boot-a jorîn re tune. Dûv re (2013), ev mekanîzma hate baştir kirin û bi navê Intel Boot Guard ji bo sermaseyên bi mîkroarchitectural Haswell hate berdan.

Berî danasîna Intel Boot Guard, ka em li hawîrdorên darvekirinê yên di mîmariya Intel 64 de binihêrin, ku bi hev re, kokên pêbaweriyê ji bo vê teknolojiya pêbawer a pêbawer in.

Intel CPU

Cap pêşniyar dike ku pêvajo di mîmariya Intel 64 de hawîrdora darvekirinê ye Çima ew bingeha pêbaweriyê ye? Derket holê ku ya ku wî weha dike, xwedîbûna hêmanên jêrîn e:

  • Microcode ROM ji bo hilanîna mîkrokodê ​​bîranînek ne-hilweşîn, ne-venivîsandî ye. Tê bawer kirin ku mîkrokod pêkanîna pergala fermana pêvajoyê bi karanîna rêwerzên herî hêsan e. Di mîkrokodê ​​de jî çêdibe bugs. Ji ber vê yekê di BIOS-ê de hûn dikarin binaryên bi nûvekirinên mîkrokodê ​​bibînin (di dema bootkirinê de têne sernav kirin, ji ber ku ROM nikare were nivîsandin). Naveroka van binaryan têne şîfrekirin, ku ev yek analîzê pir tevlihev dike (ji ber vê yekê, naveroka taybetî ya mîkrokodê ​​tenê ji kesên ku wê pêşdixin tê zanîn), û ji bo kontrolkirina yekrêzî û rastîniyê hatî îmze kirin;
  • Mifteya AES ji bo deşîfrekirina naveroka nûvekirinên mîkrokodê;
  • hasha mifteya giştî ya RSA ya ku ji bo verastkirina îmzeya nûvekirina mîkrokodê ​​tê bikar anîn;
  • Haşa mifteya giştî ya RSA, ku îmzeya modulên kodê yên ACM (Modula Koda Naskirî) ya pêşkeftî ya Intel verast dike, ku CPU dikare berî pêkanîna BIOS-ê (silav mîkrokod) an jî di dema xebata xwe de, gava ku hin bûyer diqewimin dest pê bike.

Intel ME

Bloga me ji bo vê binpergalê hate veqetandin du gotar. Werin em bînin bîra xwe ku ev hawîrdora darvekirî li ser mîkrokontrolkerek ku di nav chipset de hatî çêkirin ve hatî çêkirin û di pergalê de ya herî veşartî û jêhatî ye.

Tevî nepeniya xwe, Intel ME jî bingehek pêbaweriyê ye ji ber ku ew heye:

  • ME ROM - bîra ne-hilweşîn, ne-nivîsbar (tu rêbazek nûvekirinê nayê peyda kirin) ku koda destpêkê, û her weha hash SHA256 ya mifteya giştî ya RSA-yê heye, ku îmzeya firmware Intel ME verast dike;
  • Mifteya AES ji bo hilanîna agahdariya veşartî;
  • gihîştina komek sîgorteyan (FPF, Fuzeyên Bernamekirî yên Zeviyê) yên ku di chipsetê de hatine yek kirin ji bo hilanîna domdar a hin agahdariyan, tevî yên ku ji hêla firoşkarê pergala komputerê ve hatî destnîşan kirin.

Intel Boot Guard 1.x

Daxuyaniyek piçûk. Jimarên guhertoya teknolojiya Intel Boot Guard ku em di vê gotarê de bikar tînin kêfî ne û dibe ku ti têkiliya wan bi jimareya ku di belgeyên hundurîn ên Intel-ê de hatî bikar anîn re tune be. Wekî din, agahdariya ku li vir di derheqê pêkanîna vê teknolojiyê de hatî peyda kirin di dema endezyariya berevajî de hate wergirtin, û dibe ku li gorî taybetmendiya Intel Boot Guard, ku ne gengaz e ku carî were weşandin, nerastiyan hebe.

Ji ber vê yekê, Intel Boot Guard (BG) teknolojiyek verastkirina rastkirina UEFI BIOS-ê ya hardware ye. Li gorî danasîna wê ya kurt a di pirtûkê de [Platforma Teknolojiya Ewlekariya Bicihkirî Revealed, beşa Boot with Integrity, an Not Boot], ew wekî zincîrek pêbawer a pêbawer dixebite. Û yekem girêdana tê de koda bootê (mîkrokod) di hundurê CPU-yê de ye, ku ji hêla bûyera RESET ve tê dest pê kirin (ku bi vektora RESET a di BIOS-ê de neyê tevlihev kirin!). CPU modulek kodê ya ku ji hêla Intel (Intel BG startup ACM) ve hatî çêkirin û îmzekirî li ser bîra flash SPI-yê peyda dike, wê di cache-ya xwe de bar dike, verast dike (ji jor ve hate destnîşan kirin ku CPU xwedan kilîta gelemperî ye ku ACM-ê verast dike. îmzekirin) û dest pê dike.

Boota pêbawer a Schrödinger. Intel Boot Guard

Ev modula kodê ji bo verastkirina beşek destpêkê ya piçûk a UEFI BIOS - Block Boot Destpêk (IBB) berpirsiyar e, ku di encamê de, fonksiyonek ji bo verastkirina beşa sereke ya UEFI BIOS-ê vedigire. Bi vî rengî, Intel BG dihêle hûn berî barkirina OS-ê rastiya BIOS-ê verast bikin (ku dikare di bin çavdêriya teknolojiya Secure Boot de were kirin).

Teknolojiya Intel BG du awayên xebitandinê peyda dike (û yek bi ya din re destwerdanê nake, ango her du awayan dikarin li ser pergalê werin çalak kirin, an jî her du jî bêne asteng kirin).

Measured Boot

Di moda Measured Boot (MB) de, her pêkhateyek boot (bi ROM-ya bootê ya CPU-yê dest pê dike) ya din bi karanîna kapasîteyên TPM (Modula Platforma pêbawer) "pîvana" dike. Ji bo kesên ku nizanin, bila ez şirove bikim.

TPM xwedan PCR (Qeydên Vesazkirina Platformê) ye, ku tê de encama operasyona heşkirinê li gorî formula tê nivîsandin:

Boota pêbawer a Schrödinger. Intel Boot Guard

Ewan. nirxa PCR ya heyî bi ya berê ve girêdayî ye, û ev tomar tenê dema ku pergal RESET be ji nû ve têne vegerandin.

Ji ber vê yekê, di moda MB de, di demek demkî de, PCR nasnameyek yekta (di nav kapasîteyên operasyona heşkirinê de) kod an daneya ku "pîvan" bû nîşan dide. Nirxên PCR dikarin di hin operasyona şîfrekirina daneyê (TPM_Seal) de werin bikar anîn. Piştî vê yekê, deşîfrekirina wan (TPM_Unseal) tenê heke nirxên PCR-ê di encama barkirinê de neguherin (ango, yek hêmanek "pîvankirî" nehatiye guheztin) dê gengaz be).

Boot Verified

Ya herî xirab ji bo kesên ku dixwazin UEFI BIOS-ê biguhezînin moda Verified Boot (VB) ye, ku tê de her pêkhateyek boot bi krîptografî yekbûn û rastiya ya din verast dike. Û di bûyera xeletiyek verastkirinê de, (yek ji) dibe:

  • ji 1 hûrdemê heya 30 hûrdeman girtina ji hêla demjimêr ve (da ku bikarhêner wext hebe ku fêm bike ka çima komputera wî boot nake, û, heke gengaz be, hewl dide ku BIOS-ê sererast bike);
  • girtina tavilê (da ku bikarhêner wextê xwe nebîne ku tiştek fam bike, pir hindiktir tiştek bike);
  • berdewamkirina xebatê bi vegotinek aram (ew rewşa ku wextê ewlehiyê tune, ji ber ku tiştên girîngtir hene ku bêne kirin).

Hilbijartina çalakiyê bi veavakirina Intel BG-ya diyarkirî ve girêdayî ye (bi navî, bi navê polîtîkaya bicîhkirinê), ya ku ji hêla firoşkarê platforma komputerê ve bi domdarî di hilanînek taybetî ya sêwirandî de tête tomar kirin - sîgorteyên chipset (FPF). Em ê paşê bi berfirehî li ser vê mijarê rawestin.

Ji bilî veavakirinê, firoşkar du bişkokên RSA 2048 çêdike û du strukturên daneyê diafirîne (di wêneyê de têne xuyang kirin):

  1. Manîfestoya sereke ya firoşkar (KEYM, OEM Root Manifest), ku SVN (Nimreya Guhertoya Ewlekariyê) ya vê manîfestoyê dihewîne, SHA256-ya mifteya giştî ya manîfestoya din, mifteya giştî ya RSA (ango beşa giştî ya mifteya root ya vendor) ji bo verastkirina îmzeya vê manîfestoyê û îmzeyê bixwe;
  2. Manîfesta IBB (IBBM, Manîfesta Bloka Bootê ya Destpêkê), ku SVN-ya vê manîfestoyê, hasha SHA256 ya IBB-ê, mifteya giştî ya ji bo verastkirina îmzeya vê manîfestoyê û îmzeya xwe vedihewîne.

Hash SHA256 ya mifteya giştî ya OEM Root Key bi domdarî di sîgorteyên chipset (FPFs) de tê tomar kirin, mîna veavakirina Intel BG. Ger veavakirina Intel BG tevlêbûna vê teknolojiyê peyda dike, wê hingê ji nuha û pê ve tenê xwediyê beşa taybet a OEM Root Key dikare BIOS-ê li ser vê pergalê nûve bike (ango, bikaribe van diyardeyan ji nû ve hesab bike), yanî. firotkar.

Boota pêbawer a Schrödinger. Intel Boot Guard

Dema ku li wêneyê dinêre, guman tavilê di derheqê hewcedariya zincîreyek verastkirina wusa dirêj de çêdibin - wan dikaribû yek eşkere bikar bînin. Çima tiştan tevlihev dikin?

Bi rastî, Intel bi vî rengî firsendê dide firoşkarê ku ji bo rêzikên cûda yên hilberên xwe bişkojkên cûda yên IBB bikar bîne û yek jî wekî mifteya root bikar bîne. Ger beşa taybetî ya mifteya IBB (bi ku manîfestoya duyemîn tê îmzekirin) derbikeve, bûyer dê bandorê li yek rêzek hilberê bike û tenê heya ku firoşkar cotek nû çêbike û di nûvekirina BIOS-ê ya paşîn de manîfestoyên ji nû ve hesapkirî vehewîne.

Lê heke mifteya bingehîn (ku manîfestoya yekem pê tê îmzekirin) têkeve, dê nekare ku ew were guheztin, prosedurek betalkirinê nayê peyda kirin. hasha beşa giştî ya vê mifteyê carekê û ji bo her tiştî di FPF de tê bernamekirin.

Veavakirina Intel Boot Guard

Naha werin em ji nêz ve li veavakirina Intel BG û pêvajoya çêkirina wê binêrin. Ger hûn li tabloya têkildar a di GUI-ya amûra Flash Image Tool-ê ya Amûra Amûra Intel-ê (STK) de binerin, hûn ê bibînin ku veavakirina Intel BG-ê perçeyek giştî ya mifteya bingehîn ya firoşkarê, çend nirxên ne diyar û hwd. Profîla Intel BG.

Boota pêbawer a Schrödinger. Intel Boot Guard

Struktura vê profîlê:

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

Bi gelemperî, veavakirina Intel BG saziyek pir maqûl e. Mînakî, ala Force_Boot_Guard_ACM bifikirin. Dema ku ew were rakirin, heke modula ACM-ya destpêka BG-ê ya li ser flasha SPI-yê neyê dîtin, dê bootek pêbawer çênebe. Ew ê bêbawer be.

Me berê li jor nivîsand ku polîtîkaya bicîhkirinê ji bo moda VB dikare were mîheng kirin da ku heke xeletiyek verastkirinê hebe, dakêşandinek nebawer dê çêbibe.

Tiştên wiha li ber çavê firoşkaran bihêlin...

Karûbarên GUI profîlên "amade" yên jêrîn peyda dike:

Hejmar
Mode
description

0
No_FVME
Teknolojiya Intel BG neçalak bû

1
VE
Moda VB-ê çalak e, ji hêla wextê ve tê girtin

2
VME
her du mod jî çalak in (VB û MB), ji hêla demê ve têne girtin

3
VM
her du mod jî çalak in, bêyî ku pergalê qut bikin

4
FVE
Moda VB çalak kirin, tavilê girtina

5
FVME
her du awayên çalak kirin, tavilê girtina

Wekî ku berê hatî behs kirin, veavakirina Intel BG divê carekê û her dem ji hêla firoşkerê pergalê ve di nav sîgorteyên chipset (FPF) de were nivîsandin - hilberek piçûk (li gorî agahdariya nerastkirî, tenê 256 bytes) hilanîna agahdariya di hundurê chipset de, ku dikare were bernamekirin. li derveyî avahiyên hilberîna Intel (ji ber vê yekê tam Qada Programmable Sîgorte).

Ew ji bo hilanîna veavakirinê pir girîng e ji ber ku:

  • ji bo hilanîna daneyan deverek yekcar-bernamekirî heye (tam cihê ku veavakirina Intel BG tê nivîsandin);
  • Tenê Intel ME dikare wê bixwîne û bername bike.

Ji ber vê yekê, ji bo ku veavakirina teknolojiya Intel BG li ser pergalek taybetî were danîn, firoşkar di dema hilberînê de jêrîn dike:

  1. Bi karanîna amûra Flash Image Tool (ji Intel STK), ew wêneyek firmware bi veavakirina Intel BG-ya diyarkirî di forma guhêrbaran de di nav devera Intel ME-yê de (bi navê neynika demkî ji bo FPF-an) diafirîne;
  2. Bi karanîna amûra Flash Programming Tool (ji Intel STK), ew vê wêneyê li bîra flash SPI-ya pergalê dinivîse û bi navê xwe digire. moda çêkirinê (di vê rewşê de, fermana têkildar ji Intel ME re tê şandin).

Di encama van operasyonan de, Intel ME dê nirxên diyarkirî ji neynikê ji bo FPF-yên li herêma ME-yê bigihîne FPF-an, biryarên di ravekerên flash SPI-yê de li gorî nirxên ku ji hêla Intel ve têne pêşniyar kirin (di destpêka 2-ê de hatî destnîşan kirin) destnîşan dike. gotar) û RESETek pergalê pêk bînin.

Analîza pêkanîna Intel Boot Guard

Ji bo ku em pêkanîna vê teknolojiyê bi mînakek taybetî analîz bikin, me pergalên jêrîn ji bo şopên teknolojiya Intel BG kontrol kir:

sîstem
bingotin

Gigabyte GA-H170-D3H
Skylake, piştgirî heye

Gigabyte GA-Q170-D3H
Skylake, piştgirî heye

Gigabyte GA-B150-HD3
Skylake, piştgirî heye

MSI H170A Gaming Pro
Skylake, piştgirî tune

Lenovo ThinkPad 460
Skylake, piştgirî, teknolojî çalak kirin

Lenovo Yoga 2 Pro
Haswell, piştgirî tune

Lenovo U330p
Haswell, piştgirî tune

Bi "piştgiriyê" mebesta me hebûna modula ACM ya destpêkirina Intel BG, diyardeyên ku li jor hatine destnîşan kirin û koda têkildar a di BIOS-ê de, ango. pêkanîna ji bo analîzê.

Wek mînak, em ê ku ji nivîsgehê dakêşandî bistînin. Wêneyê malpera firoşkar a bîra flash SPI-yê ji bo Gigabyte GA-H170-D3H (guhertoya F4).

Intel CPU boot ROM

Berî her tiştî, bila em li ser kiryarên pêvajoyê biaxivin ger teknolojiya Intel BG çalak be.

Ne mimkun bû ku nimûneyên mîkrokodê ​​deşîfrekirî bibînin, ji ber vê yekê kiryarên ku li jêr têne diyar kirin (di mîkrokod an jî hardware de) pirsek vekirî ye. Lêbelê, rastiyek e ku pêvajoyên nûjen ên Intel "dikarin" van çalakiyan bikin.

Piştî ku ji rewşa RESET derdikeve, pêvajo (naveroka bîra flashê jixwe di cîhê navnîşanê de hatî nexşandin) tabloya FIT (Tabloya Navbera Firmware) dibîne. Ew hêsan e ku nîşana wê li navnîşana FFFF FFC0h hatiye nivîsandin.

Boota pêbawer a Schrödinger. Intel Boot Guard
Di mînaka li ber çavan de, nirxa FFD6 9500h li vê navnîşanê ye. Bi gihîştina vê navnîşanê, pêvajoker tabloya FIT-ê, ku naveroka wê li tomaran têne dabeş kirin, dibîne. Ketina yekem sernavê strukturê jêrîn e:

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

Boota pêbawer a Schrödinger. Intel Boot Guard
Ji ber hin sedemên nenas, jimareya kontrolê her gav di van tabloyan de nayê hesibandin (zev sifir tê hiştin).

Navnîşanên mayî îşaret bi binareyên cihêreng ên ku divê berî ku BIOS were darve kirin bêne pars kirin/darve kirin, yanî. berî guheztina vektora mîrateya RESET (FFFF FFF0h). Struktura her navnîşek weha wiha ye:

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

Boota pêbawer a Schrödinger. Intel Boot Guard
Qada EntryType ji we re celebê bloka ku ev têketin nîşan dide vedibêje. Em çend celeban dizanin:

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

Naha diyar e ku yek ji navnîşan li cîhê Intel BG-ya destpêka ACM binary destnîşan dike. Struktura sernavê ya vê binaryê ji bo modulên kodê yên ku ji hêla Intel ve hatine pêşve xistin tîpîk e (ACM, nûvekirinên mîkrokodê, beşên koda Intel ME, ...).

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

Boota pêbawer a Schrödinger. Intel Boot Guard
Prosesor vê binaryê di cacheya xwe de bar dike, wê piştrast dike û dimeşîne.

Intel BG destpêka ACM

Di encama analîzkirina xebata vê ACM de, eşkere bû ku ew jêrîn dike:

  • konfigurasyona Intel BG ji Intel ME, ku di sîgorteyên chipset (FPF) de hatî nivîsandin, distîne;
  • KEYM û IBBM diyar dike û wan piştrast dike.

Ji bo dîtina van diyardeyan, ACM di heman demê de tabloya FIT-ê jî bikar tîne, ku du celeb têketinê hene da ku daneyên strukturê destnîşan bike (li jor FIT_ENTRY_TYPES binêre).

Werin em ji nêz ve li manîfestoyan binêrin. Di strukturê manîfestoya yekem de, em çend domdarên nezelal dibînin, haşek mifteya giştî ya ji manîfestoya duyemîn, û Kilîta Root a giştî ya OEM wekî avahiyek hêlîn hatiye îmzekirin:

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

Boota pêbawer a Schrödinger. Intel Boot Guard
Ji bo verastkirina mifteya giştî ya OEM Root Key, em bi bîr tînin ku em sîgorteya hash SHA256 bikar tînin, ku di vê nuqteyê de berê ji Intel ME hatî wergirtin.

Em derbasî manîfestoya duyemîn bibin. Ew ji sê avahiyan pêk tê:

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

Ya yekem hin domdar dihewîne:

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

Ya duyemîn hash SHA256 ya IBB û hejmara ravekerên ku naveroka IBB-ê vedibêje vedihewîne (ango, haş ji çi tê hesibandin):

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

Daxuyanên IBB-ê li dû hev, yek li dû hev, vê avahiyê dişopînin. Naveroka wan bi forma jêrîn heye:

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

Ew hêsan e: her raveker navnîşan / mezinahiya perçeya IBB-ê dihewîne. Bi vî rengî, lihevhatina blokên ku ji hêla van diyarkeran ve têne destnîşan kirin (bi rêza ravekeran bixwe) IBB ye. Û, wekî qaîdeyek, IBB berhevoka hemî modulên qonaxên SEC û PEI ye.

Manîfestoya duyemîn bi avahiyek ku mifteya giştî ya IBB-ê vedihewîne (ji hêla manîfestoya yekem ve ji hêla hash SHA256 ve hatî verast kirin) û îmzeya vê manîfestoyê temam dibe:

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

Boota pêbawer a Schrödinger. Intel Boot Guard
Ji ber vê yekê, tewra berî ku UEFI BIOS dest bi darvekirinê bike, pêvajo dê ACM dest pê bike, ku dê rastiya naveroka beşan bi koda qonaxa SEC û PEI verast bike. Dûv re, pêvajo ji ACM-ê derdikeve, vektora RESET dişopîne û dest bi pêkanîna BIOS-ê dike.

Pêdivî ye ku dabeşa PEI-ya pejirandî modulek hebe ku dê mayîna BIOS (koda DXE) kontrol bike. Ev modul jixwe ji hêla IBV (Fotirorê BIOS-a Serbixwe) an firoşkarê pergalê bixwe ve hatî pêşve xistin. Bo Tenê pergalên Lenovo û Gigabyte di destê me de bûn û piştgiriya Intel BG hebû, em li koda ku ji van pergalan hatine derxistin binêrin.

Modula UEFI BIOS LenovoVerifiedBootPei

Di doza Lenovo de, derket holê ku modula LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} e, ku ji hêla Lenovo ve hatî pêşve xistin.

Karê wê ev e ku (ji hêla GUID) ve tabloya hash-ê ji bo DXE-yê bigere û DXE-yê verast bike.

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

Modula UEFI BIOS BootGuardPei

Di doza Gigabyte de, derket holê ku modula BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} e, ku ji hêla AMI ve hatî pêşve xistin, ji ber vê yekê, di her AMI BIOS-ê de bi piştgiriya Intel BG re heye.

Algorîtmaya xebitandina wê hinekî cûda ye, lêbelê, ew bi heman tiştî re vedigire:

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

Tabloya haş {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ya ku lê lê digere, forma jêrîn heye:

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

Ka em bi kurtî li ser pêkanînek din a Intel Boot Guard-ê biaxivin, ku di pergalek nû de li ser bingeha Intel SoC-ya mîkroarchitectural Apollo Lake hate dîtin - ASRock J4205-IT.

Her çend ev guherto dê tenê di SoC-an de were bikar anîn (pergalên nû yên bi mîkroarchitektura pêvajoyê ya Kaby Lake berdewam dikin ku Intel Boot Guard 1.x bikar bînin), ew ji bo lêkolîna vebijarka mîmariya nû ya ji bo platformên Intel SoC, ku guhertinên girîng dîtine, balkêş e. bo nimûne :

  • herêmên BIOS û Intel ME (an jî Intel TXE, li gorî termînolojiya Intel SoC) naha herêmek IFWI ne;
  • tevî ku Intel BG li ser platformê hate çalak kirin, strukturên wekî FIT, KEYM, IBBM di bîra flash de nehatin dîtin;
  • ji bilî navokên TXE û ISH (x86), navek sêyemîn li chipset hate zêdekirin (bi awayê, dîsa ARC) - PMC (Kontrolkerê Rêvebiriya Hêzê), ku bi misogerkirina xebitandina binepergala hêzê û çavdêriya performansê ve girêdayî ye.

Boota pêbawer a Schrödinger. Intel Boot Guard
Naveroka herêma nû ya IFWI komek modulên jêrîn e:

Bias
nav
description

0000 2000h
SMIP
konfigurasyonek platformê ya diyarkirî, ku ji hêla firoşker ve hatî îmze kirin

0000 6000h
RBEP
Beşa koda firmware ya Intel TXE, x86, Intel îmzekirî ye

0001 0000h
PMCP
Beşa koda firmware ya Intel PMC, ARC, Intel îmzekirî ye

0002 0000h
FTPR
Beşa koda firmware ya Intel TXE, x86, Intel îmzekirî ye

0007 B000h
UCOD
Nûvekirinên mîkrokodê ​​ji bo CPU, ku ji hêla Intel ve hatî îmze kirin

0008 0000h
IBBP
UEFI BIOS, qonaxên SEC / PEI, x86, ji hêla firoşker ve hatî îmze kirin

0021 8000h
ISHC
Beşa koda firmware ya Intel ISH, x86, ji hêla firoşker ve hatî îmze kirin

0025 8000h
NFTP
Beşa koda firmware ya Intel TXE, x86, Intel îmzekirî ye

0036 1000h
IUNP
nenas e

0038 1000h
OBBP
UEFI BIOS, qonaxa DXE, x86, bê îmze

Di dema analîzkirina firmware TXE de, eşkere bû ku piştî RESETek, TXE pêvajoyê di vê rewşê de digire heya ku ew naveroka bingehîn a cîhê navnîşanê ji bo CPU (FIT, ACM, vektora RESET ...) amade dike. Digel vê yekê, TXE van daneyan di SRAM-a xwe de bi cih dike, piştî ku ew bi demkî gihandina pêvajoyê dide wir û wê ji RESET "berdide".

Li hember rootkitan hişyar bimînin

Belê, naha em biçin ser tiştên "germ". Me carekê dît ku li ser gelek pergalan, ravekerên flash SPI destûr hene ku bigihîjin herêmên bîra flash SPI da ku hemî bikarhênerên vê bîranînê dikarin her deverê binivîsin û bixwînin. Ewan. qet nabe.

Piştî kontrolkirina bi kargêriya MEinfo (ji Intel STK), me dît ku moda çêkirinê ya li ser van pergalan ne girtî ye, ji ber vê yekê, sîgorteyên chipset (FPF) di rewşek nediyar de têne hiştin. Erê, Intel BG di rewşên weha de ne tê girtin û ne jî tê girtin.

Em li ser pergalên jêrîn dipeyivin (di derbarê Intel BG de û ya ku dê paşê di gotarê de were vegotin, em ê li ser pergalên bi mîkroarchitectural processor Haswell û bilindtir biaxivin):

  • hemî hilberên Gigabyte;
  • hemî hilberên MSI;
  • 21 modelên laptopên Lenovo û 4 modelên serverên Lenovo.

Bê guman, me vedîtin ji van firoşkaran re, û hem jî ji Intel re ragihand.

Reaksîyonek têr tenê ji holê hat Lenovokê pirsgirêk nas kir û pişkek berdan.

Gigabyte Wusa dixuye ku wan agahdariya di derbarê qelsiyê de qebûl dikin, lê bi ti awayî şîrove nekirin.

Têkilî bi MSI bi tevahî li ser daxwaza me rawestiyaye ku em mifteya PGP-ya weya giştî bişînin (ji bo ku ji wan re şêwirmendiyek ewlehiyê bi rengek şîfrekirî bişînin). Wan diyar kir ku ew "çêkerek hardware ne û bişkokên PGP-ê çê nakin."

Lê em werin ser xalê. Ji ber ku sîgorte di rewşek nediyar de têne hiştin, bikarhêner (an êrîşkar) dikare wan serbixwe bername bike (tiştê herî dijwar ev e Intel STK bibînin). Ji bo vê yekê, hûn hewce ne ku gavên jêrîn temam bikin.

1. Boot bike nav OS-ê Windows (bi gelemperî, çalakiyên ku li jêr hatine vegotin dikarin ji jêr werin kirin) Linux(Heke hûn ji bo pergala xebitandinê ya xwestî analogek Intel STK pêşve bibin). Bi karanîna amûra MEinfo, piştrast bikin ku fîzyeyên li ser vê pergalê nehatine bernamekirin.

Boota pêbawer a Schrödinger. Intel Boot Guard
2. Bi karanîna Amûra Bernamekirinê ya Flash-ê naveroka flash-ê bixwînin.

Boota pêbawer a Schrödinger. Intel Boot Guard
3. Wêneyê xwendinê bi karanîna her amûrek guherandinê ya UEFI BIOS vekin, guheztinên pêwîst bikin (mînakek rootkit destnîşan bikin), li herêma ME strukturên KEYM û IBBM yên heyî biafirînin/biguherînin.

Boota pêbawer a Schrödinger. Intel Boot Guard
Boota pêbawer a Schrödinger. Intel Boot Guard
Wêne beşa giştî ya mifteya RSA-yê ronî dike, ku haşa wê li gel mîhengên mayî yên Intel BG-ê di nav sîgorteyên chipset de were bernamekirin.

4. Bi karanîna Amûra Wêne ya Flash-ê, wêneyek firmware-ya nû ava bikin (bi danîna veavakirina Intel BG).

Boota pêbawer a Schrödinger. Intel Boot Guard
5. Bi karanîna Amûra Bernamekirinê ya Flash re wêneyek nû li bîra flashê binivîsin, bi karanîna MEinfo verast bikin ku herêma ME naha veavakirina Intel BG-ê heye.

Boota pêbawer a Schrödinger. Intel Boot Guard
6. Amûra Bernamekirinê ya Flash-ê bikar bînin da ku moda çêkirinê bigire.

Boota pêbawer a Schrödinger. Intel Boot Guard
7. Pergal dê ji nû ve dest pê bike, piştî ku hûn dikarin MEinfo bikar bînin da ku verast bikin ku FPF nuha bernamekirî ne.

Boota pêbawer a Schrödinger. Intel Boot Guard
Van çalakiyan her dem Intel BG li ser vê pergalê çalak bike. Çalakî nayê betal kirin, ku tê vê wateyê:

  • Tenê xwediyê beşa taybetî ya mifteya root (ango, yê ku Intel BG çalak kiriye) dê bikaribe li ser vê pergalê UEFI BIOS-ê nûve bike;
  • heke hûn firmware-ya orîjînal li vê pergalê vegerînin, mînakî, bernamesazek ​​bikar bînin, ew ê tewra venebe (encamek polîtîkaya bicîhkirinê di rewşek xeletiyek verastkirinê de);
  • ji bo ku hûn ji BIOSek UEFI-ya wusa xilas bibin, hûn hewce ne ku chipset bi FPF-yên bernamekirî bi ya "paqij" veguherînin (ango, heke hûn gihîştina qereqolek firoştina infrared bihayê gerîdeyê, an jî bi tenê pêveka dayikê biguhezînin. ).

Ji bo ku hûn fêm bikin ka rootkitek wusa dikare çi bike, hûn hewce ne ku binirxînin ka çi gengaz dike ku hûn koda xwe di hawîrdora UEFI BIOS de bicîh bikin. Ka em bibêjin, di moda pêvajoyê ya herî îmtiyaz de - SMM. Dibe ku rootkitek wusa xwediyê taybetmendiyên jêrîn be:

  • bi OS-ê re paralel têne darve kirin (hûn dikarin pêvajoyê mîheng bikin da ku qutbûnek SMI-yê çêbike, ku dê ji hêla demjimêrk ve were rêve kirin);
  • xwedan hemî avantajên ku di moda SMM de ne (gihîştina tevahî naveroka RAM û çavkaniyên hardware, nepeniya ji OS-ê);
  • Dema ku di moda SMM-ê de were destpêkirin koda bernameyê ya rootkit dikare were şîfrekirin û deşîfrekirin. Her daneya ku tenê di moda SMM de heye dikare wekî mifteya şîfrekirinê were bikar anîn. Mînakî, haşek ji komek navnîşanên di SMRAM de. Ji bo ku hûn vê mifteyê bistînin, hûn ê hewce bikin ku têkevin SMM. Û ev dikare bi du awayan were kirin. RCE di koda SMM-ê de bibînin û wê îstîsmar bikin, an jî modula SMM-ya xwe li BIOS-ê zêde bikin, ku ji ber ku me Boot Guard çalak kir ne gengaz e.

Ji ber vê yekê, ev qelsî dihêle ku êrîşkar:

  • di pergalê de rootkitek veşartî, nehilberî ya armanca nenas biafirînin;
  • koda xwe li ser yek ji navikên chipset ên di hundurê Intel SoC-ê de, ango, li ser Intel ISH-ê bicîh bikin (bi baldarî li wêneyê mêze bikin).

Boota pêbawer a Schrödinger. Intel Boot Guard
Boota pêbawer a Schrödinger. Intel Boot Guard
Her çend kapasîteyên jêrpergala Intel ISH hêj nehatine vekolîn, ew ji bo Intel ME vektorek êrişek balkêş xuya dike.

vebiguherin

  1. Lêkolînê gengaz kir ku meriv şiroveyek teknîkî ya xebata teknolojiya Intel Boot Guard bistîne. Di ewlehiya Intel-ê de bi modela nezelaliyê re çend nehênî kêm bikin.
  2. Senaryoyek êrîşê tê pêşkêş kirin ku dihêle hûn di pergalê de rootkitek nesazkirî biafirînin.
  3. Me dît ku pêvajoyên Intel-ê yên nûjen dikarin berî ku BIOS dest bi xebitandinê bike jî gelek kodên xwedan darvekirinê ne.
  4. Platformên bi mîmariya Intel 64 ji bo xebitandina nermalava belaş her ku diçe kêmtir guncan dibin: verastkirina hardware, hejmareke zêde ya teknolojiyên xwedan û bine pergalên xwedan (sê core di chipset SoC de: x86 ME, x86 ISH û ARC PMC).

Kêmkirinan

Firoşyarên ku bi mebest moda hilberînê vekirî dihêlin divê bê guman wê bigirin. Heya nuha, tenê çavên wan girtî ne, û pergalên nû yên Kaby Lake vê yekê nîşan didin.

Bikarhêner dikarin Intel BG-ê li ser pergalên xwe neçalak bikin (yên ku ji qelsiya diyarkirî re têkildar in) bi xebitandina Amûra Bernamekirinê ya Flash-ê bi parametreya -closemnf. Pêşîn, divê hûn pê ewle bin (bi karanîna MEinfo) ku veavakirina Intel BG ya li herêma ME ji bo qutkirina vê teknolojiyê piştî bernamekirinê li FPF peyda dike.

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster