Å rÄdingera uzticamais zÄbaks. Intel sÄknÄÅ”anas aizsargs
MÄs ierosinÄm vÄlreiz nolaisties lÄ«dz zemajam lÄ«menim un runÄt par programmaparatÅ«ras x86 saderÄ«gu datoru platformu droŔību. Å oreiz pÄtÄ«juma galvenÄ sastÄvdaļa ir Intel Boot Guard (nejaukt ar Intel BIOS Guard!) ā ar aparatÅ«ru atbalstÄ«ta BIOS uzticama sÄknÄÅ”anas tehnoloÄ£ija, ko datorsistÄmu pÄrdevÄjs var pastÄvÄ«gi ieslÄgt vai izslÄgt ražoÅ”anas stadijÄ. Nu, mÄs jau zinÄm pÄtÄ«juma recepti: smalki sagrieziet Ŕīs tehnoloÄ£ijas ievieÅ”anu, izmantojot reverso inženieriju, aprakstiet tÄs arhitektÅ«ru, piepildot to ar nedokumentÄtÄm detaļÄm, papildiniet to ar uzbrukuma vektoriem pÄc garÅ”as un sajauciet to. PapildinÄsim uguni ar stÄstu par to, kÄ gadiem ilgi klonÄta kļūda vairÄku pÄrdevÄju ražoÅ”anÄ Ä¼auj potenciÄlajam uzbrucÄjam izmantot Å”o tehnoloÄ£iju, lai izveidotu slÄptu sakÅu komplektu, kuru nevar noÅemt (pat programmÄtÄjs) sistÄmÄ.
Starp citu, raksts ir balstÄ«ts uz konferences ziÅojumiem āOn Guard for Rootkits: Intel BootGuardā. ZeroNights 2016 un 29. sanÄksme DefCon Krievija (abas prezentÄcijas Å”eit).
Programmaparatūra datora platformai ar Intel 64 arhitektūru
SÄkumÄ atbildÄsim uz jautÄjumu: kÄda ir modernas datora platformas programmaparatÅ«ra ar Intel 64 arhitektÅ«ru? Protams, UEFI BIOS. Bet Ŕī atbilde nebÅ«s precÄ«za. ApskatÄ«sim attÄlu, kurÄ parÄdÄ«ta Ŕīs arhitektÅ«ras darbvirsmas (klÄpjdatora) versija.
Pamats ir saite:
Procesors (CPU, Central Processing Unit), kuram papildus galvenajiem kodoliem ir iebÅ«vÄts grafiskais kodols (ne visos modeļos) un atmiÅas kontrolleris (IMC, Integrated Memory Controller);
Chipset (PCH, Platform Controller Hub), kas satur dažÄdus kontrolierus mijiedarbÄ«bai ar perifÄrijas ierÄ«cÄm un apakÅ”sistÄmu pÄrvaldÄ«bai. Starp tiem ir bÄdÄ«gi slavenais Intel Management Engine (ME), kuram ir arÄ« programmaparatÅ«ra (Intel ME programmaparatÅ«ra).
KlÄpjdatoriem papildus iepriekÅ”minÄtajam ir nepiecieÅ”ams integrÄts kontrolieris (ACPI EC, Advanced Control and Power Interface Embedded Controller), kas ir atbildÄ«gs par baroÅ”anas apakÅ”sistÄmas darbÄ«bu, skÄrienpaliktnis, tastatÅ«ra, Fn taustiÅi (ekrÄna spilgtums, skaÅas skaļums, tastatÅ«ra fona apgaismojums utt.). ) un vairÄk. Un viÅam ir arÄ« sava programmaparatÅ«ra.
TÄtad iepriekÅ” minÄtÄs programmaparatÅ«ras kombinÄcija ir datora platformas programmaparatÅ«ra (sistÄmas programmaparatÅ«ra), kas tiek saglabÄta kopÄjÄ SPI zibatmiÅÄ. Lai Ŕīs atmiÅas lietotÄji neapjuktu, kur kÄds guļ, Ŕīs atmiÅas saturs ir sadalÄ«ts Å”Ädos reÄ£ionos (kÄ parÄdÄ«ts attÄlÄ):
UEFI BIOS;
ACPI EC programmaparatÅ«ra (ar Skylake procesora mikroarhitektÅ«ru (2015) parÄdÄ«jÄs atseviŔķs reÄ£ions, taÄu mÄs vÄl neesam redzÄjuÅ”i tÄs izmantoÅ”anas piemÄrus, tÄpÄc iegultÄ kontrollera programmaparatÅ«ra joprojÄm ir daļa no UEFI BIOS);
zibatmiÅas deskriptori - galvenais zibatmiÅas reÄ£ions, kurÄ ir norÄdes uz citiem reÄ£ioniem, kÄ arÄ« atļaujas tiem piekļūt.
Ar piekļuves diferencÄÅ”anu reÄ£ioniem (saskaÅÄ ar norÄdÄ«tajÄm atļaujÄm) veic SPI kopnes galvenais - mikroshÄmojumÄ iebÅ«vÄtais SPI kontrolleris, caur kuru tiek piekļūta Å”ai atmiÅai. Ja atļaujas ir iestatÄ«tas uz Intel ieteiktajÄm vÄrtÄ«bÄm (droŔības apsvÄrumu dÄļ), katram SPI zibatmiÅas lietotÄjam ir pilna piekļuve (lasÄ«Å”anas/rakstÄ«Å”anas) tikai savam reÄ£ionam. PÄrÄjie ir vai nu tikai lasÄmi, vai nav pieejami. ZinÄms fakts: daudzÄs sistÄmÄs centrÄlajam procesoram ir pilna piekļuve UEFI BIOS un GbE, lasÄ«Å”anas piekļuve tikai zibatmiÅas deskriptoriem un vispÄr nav piekļuves Intel ME reÄ£ionam. KÄpÄc daudzi un ne visi? Ieteicamais nav obligÄts. MÄs jums pastÄstÄ«sim vairÄk vÄlÄk rakstÄ.
MehÄnismi datora platformas programmaparatÅ«ras aizsardzÄ«bai pret modifikÄcijÄm
AcÄ«mredzot datora platformas programmaparatÅ«ra ir jÄaizsargÄ no iespÄjamiem kompromisiem, kas ļautu potenciÄlajam uzbrucÄjam tajÄ nostiprinÄties (izdzÄ«vot OS atjauninÄjumus/pÄrinstalÄÅ”anu), izpildÄ«t savu kodu priviliÄ£ÄtÄkajos režīmos utt. Un ar piekļuves ierobežoÅ”anu SPI zibatmiÅas reÄ£ioniem, protams, nepietiek. TÄpÄc, lai aizsargÄtu programmaparatÅ«ru no modifikÄcijÄm, tiek izmantoti dažÄdi katrai izpildes videi raksturÄ«gi mehÄnismi.
TÄtad Intel ME programmaparatÅ«ra ir parakstÄ«ta integritÄtes un autentiskuma kontrolei, un ME kontrolleris to pÄrbauda katru reizi, kad tÄ tiek ielÄdÄta ME UMA atmiÅÄ. MÄs jau esam apsprieduÅ”i Å”o verifikÄcijas procesu vienÄ no rakstiveltÄ«ta Intel ME apakÅ”sistÄmai.
Un ACPI EC programmaparatÅ«ra, kÄ likums, tiek pÄrbaudÄ«ta tikai pÄc integritÄtes. TomÄr, Åemot vÄrÄ to, ka Å”is binÄrs ir iekļauts UEFI BIOS, uz to gandrÄ«z vienmÄr attiecas tie paÅ”i aizsardzÄ«bas mehÄnismi, kurus izmanto UEFI BIOS. ParunÄsim par tiem.
Å os mehÄnismus var iedalÄ«t divÄs kategorijÄs.
RakstÄ«Å”anas aizsardzÄ«ba UEFI BIOS reÄ£ionÄ
SPI zibatmiÅas satura fiziskÄ aizsardzÄ«ba ar rakstÄ«Å”anas aizsardzÄ«bas džemperi;
UEFI BIOS reÄ£iona projekcijas aizsardzÄ«ba CPU adreÅ”u telpÄ, izmantojot mikroshÄmojuma PRx reÄ£istrus;
BloÄ·Ät mÄÄ£inÄjumus rakstÄ«t uz UEFI BIOS reÄ£ionu, Ä£enerÄjot un apstrÄdÄjot atbilstoÅ”o SMI pÄrtraukumu, iestatot BIOS_WE / BLE un SMM_BWP bitus mikroshÄmojumu reÄ£istros;
Uzlabota Ŕīs aizsardzības versija ir Intel BIOS Guard (PFAT).
Papildus Å”iem mehÄnismiem pÄrdevÄji var izstrÄdÄt un ieviest savus droŔības pasÄkumus (piemÄram, parakstot kapsulas ar UEFI BIOS atjauninÄjumiem).
Ir svarÄ«gi atzÄ«mÄt, ka konkrÄtai sistÄmai (atkarÄ«bÄ no pÄrdevÄja) visi iepriekÅ” minÄtie aizsardzÄ«bas mehÄnismi var nebÅ«t piemÄroti, tie var netikt piemÄroti vispÄr vai arÄ« tie var tikt ieviesti neaizsargÄtÄ veidÄ. VairÄk par Å”iem mehÄnismiem un situÄciju ar to ievieÅ”anu varat lasÄ«t Å is raksts. Tiem, kurus interesÄ, iesakÄm izlasÄ«t visu rakstu sÄriju par UEFI BIOS droŔību no CodeRush.
UEFI BIOS autentifikÄcijas pÄrbaude
Kad mÄs runÄjam par uzticamÄm sÄknÄÅ”anas tehnoloÄ£ijÄm, pirmais, kas nÄk prÄtÄ, ir droÅ”Ä sÄknÄÅ”ana. TomÄr arhitektoniski tas ir paredzÄts, lai autentificÄtu komponentus Ärpus UEFI BIOS (draiveri, ielÄdÄji utt.), nevis paÅ”u programmaparatÅ«ru.
TÄpÄc Intel SoC ar Bay Trail mikroarhitektÅ«ru (2012) ieviesa aparatÅ«ras nepÄrslÄdzamu Secure Boot (Verified Boot), kam nav nekÄda sakara ar iepriekÅ” minÄto Secure Boot tehnoloÄ£iju. VÄlÄk (2013. gadÄ) Å”is mehÄnisms tika uzlabots un ar nosaukumu Intel Boot Guard tika izlaists galddatoriem ar Haswell mikroarhitektÅ«ru.
Pirms Intel Boot Guard apraksta, apskatÄ«sim izpildes vides Intel 64 arhitektÅ«rÄ, kas kopÄ ir Ŕīs uzticamÄs sÄknÄÅ”anas tehnoloÄ£ijas uzticÄ«bas saknes.
Intel CPU
Cap liek domÄt, ka procesors ir galvenÄ izpildes vide Intel 64 arhitektÅ«rÄ. KÄpÄc tas ir arÄ« uzticÄ«bas sakne? IzrÄdÄs, ka tas ir Å”Ädu elementu Ä«paÅ”ums:
Mikrokoda ROM ir nepastÄvÄ«ga, nepÄrrakstÄma atmiÅa mikrokoda glabÄÅ”anai. Tiek uzskatÄ«ts, ka mikrokods ir procesora instrukciju sistÄmas ievieÅ”ana pÄc vienkÄrÅ”ÄkajÄm instrukcijÄm. Tas notiek arÄ« mikrokodÄ bugs. TÄtad BIOS var atrast binÄros failus ar mikrokoda atjauninÄjumiem (tie tiek uzlikti sÄknÄÅ”anas laikÄ, jo ROM nevar pÄrrakstÄ«t). Å o binÄro failu saturs ir Å”ifrÄts, kas ievÄrojami apgrÅ«tina analÄ«zi (tÄpÄc konkrÄtais mikrokoda saturs ir zinÄms tikai tiem, kas to izstrÄdÄ), un parakstÄ«ts, lai kontrolÄtu integritÄti un autentiskumu;
RSA publiskÄs atslÄgas hash, kas pÄrbauda mikrokoda atjauninÄjumu parakstu;
RSA publiskÄs atslÄgas hash, kas pÄrbauda Intel izstrÄdÄto ACM (Authenticated Code Module) koda moduļu parakstu, ko CPU var palaist pirms BIOS palaiÅ”anas (sveiki mikrokods) vai tÄs darbÄ«bas laikÄ, kad notiek kÄdi notikumi.
Intel ME
Å Ä« mÅ«su emuÄra apakÅ”sistÄma bija veltÄ«ta Š“Š²ŠµRaksts. AtgÄdiniet, ka Ŕī izpildÄmÄ vide ir balstÄ«ta uz mikrokontrolleri, kas iebÅ«vÄts mikroshÄmojumÄ, un tÄ ir visslÄptÄkÄ un priviliÄ£ÄtÄkÄ sistÄmÄ.
Neskatoties uz slepenību, Intel ME ir arī uzticības sakne, jo tai ir:
ME ROM - nepastÄvÄ«ga, nepÄrrakstÄma atmiÅa (nav paredzÄta atjauninÄÅ”anas metode), kas satur sÄkuma kodu, kÄ arÄ« RSA publiskÄs atslÄgas SHA256 hash, kas pÄrbauda Intel ME programmaparatÅ«ras parakstu;
piekļuve mikroshÄmojumÄ integrÄtam droÅ”inÄtÄju komplektam (FPF, Field Programmable Fuse), lai pastÄvÄ«gi saglabÄtu noteiktu informÄciju, tostarp informÄciju, ko norÄdÄ«jis datorsistÄmas piegÄdÄtÄjs.
Intel Boot Guard 1.x
Neliela atruna. Intel Boot Guard tehnoloÄ£ijas versiju numuri, ko mÄs izmantojam Å”ajÄ rakstÄ, ir patvaļīgi, un tiem var nebÅ«t nekÄda sakara ar Intel iekÅ”ÄjÄ dokumentÄcijÄ izmantoto numerÄciju. TurklÄt Å”eit sniegtÄ informÄcija par Ŕīs tehnoloÄ£ijas ievieÅ”anu tika iegÅ«ta reversÄs inženierijas laikÄ, un tajÄ var bÅ«t neprecizitÄtes salÄ«dzinÄjumÄ ar Intel Boot Guard specifikÄciju, kas, visticamÄk, netiks publicÄta.
TÄtad Intel Boot Guard (BG) ir aparatÅ«ras atbalstÄ«ta UEFI BIOS autentifikÄcijas tehnoloÄ£ija. Spriežot pÄc tÄ nelielÄ apraksta grÄmatÄ [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot], tÄ darbojas kÄ uzticama sÄknÄÅ”anas Ä·Äde. Un pirmÄ saite tajÄ ir sÄknÄÅ”anas kods (mikrokods) CPU iekÅ”pusÄ, ko aktivizÄ RESET notikums (nejaukt ar RESET vektoru BIOS!). CentrÄlais procesors atrod SPI zibatmiÅÄ Intel izstrÄdÄto un parakstÄ«tu koda moduli (Intel BG startup ACM), ielÄdÄ to keÅ”atmiÅÄ, pÄrbauda (jau tika minÄts iepriekÅ”, ka centrÄlajam procesoram ir publiskÄs atslÄgas hash, kas pÄrbauda ACM parakstu. ) un sÄkas.
Å is koda modulis ir atbildÄ«gs par nelielas UEFI BIOS sÄkuma daļas - Initial Boot Block (IBB) - pÄrbaudi, kas savukÄrt satur funkcionalitÄti UEFI BIOS galvenÄs daļas pÄrbaudei. TÄdÄjÄdi Intel BG ļauj pÄrbaudÄ«t BIOS autentiskumu pirms OS sÄknÄÅ”anas (ko var veikt Secure Boot tehnoloÄ£ijas uzraudzÄ«bÄ).
Intel BG tehnoloÄ£ija nodroÅ”ina divus darbÄ«bas režīmus (un viens netraucÄ otram, t.i., sistÄmÄ var iespÄjot abus režīmus un atspÄjot abus).
IzmÄrÄ«ts Boot
RežīmÄ Measured Boot (MB) katrs sÄknÄÅ”anas komponents (sÄkot ar CPU sÄknÄÅ”anas ROM) "mÄra" nÄkamo, izmantojot uzticamÄs platformas moduļa (TPM) iespÄjas. Tiem, kas nezina, paskaidrojiet.
TPM ir PCR (platformas konfigurÄcijas reÄ£istri), kas reÄ£istrÄ jaukÅ”anas operÄcijas rezultÄtu pÄc formulas:
Tie. paÅ”reizÄjÄ PCR vÄrtÄ«ba ir atkarÄ«ga no iepriekÅ”ÄjÄs, un Å”ie reÄ£istri tiek atiestatÄ«ti tikai tad, kad sistÄma ir RESET.
TÄdÄjÄdi MB režīmÄ kÄdÄ brÄ«dÄ« PCR atspoguļo unikÄlu (jaukÅ”anas operÄcijas iespÄju robežÄs) koda vai datu identifikatoru, kas tika "izmÄrÄ«ts". PCR vÄrtÄ«bas var izmantot dažu datu Å”ifrÄÅ”anai (TPM_Seal). PÄc tam to atÅ”ifrÄÅ”ana (TPM_Unseal) bÅ«s iespÄjama tikai tad, ja PCR vÄrtÄ«bas nav mainÄ«juÅ”Äs ielÄdes rezultÄtÄ (t.i., nav mainÄ«ts neviens āizmÄrÄ«taisā komponents).
VerifiedBoot
VisbÄ«stamÄkais tiem, kam patÄ«k modificÄt UEFI BIOS, ir Verified Boot (VB) režīms, kurÄ katrs sÄknÄÅ”anas komponents kriptogrÄfiski pÄrbauda nÄkamÄs integritÄti un autentiskumu. Un verifikÄcijas kļūdas gadÄ«jumÄ notiek (viena no Ŕīm darbÄ«bÄm):
izslÄgÅ”ana ar taimautu no 1 minÅ«tes lÄ«dz 30 minÅ«tÄm (lai lietotÄjam bÅ«tu laiks saprast, kÄpÄc viÅa dators netiek sÄknÄts, un, ja iespÄjams, mÄÄ£inÄtu atjaunot BIOS);
tÅ«lÄ«tÄja izslÄgÅ”ana (lai lietotÄjam nebÅ«tu laika saprast un turklÄt darÄ«t);
darba turpinÄÅ”ana ar taisnu seju (gadÄ«jums, kad nav laika droŔībai, jo ir svarÄ«gÄkas lietas, ko darÄ«t).
DarbÄ«bas izvÄle ir atkarÄ«ga no norÄdÄ«tÄs Intel BG konfigurÄcijas (proti, no tÄ sauktÄs izpildes politikas), ko datora platformas pÄrdevÄjs pastÄvÄ«gi reÄ£istrÄ Ä«paÅ”i izveidotÄ krÄtuvÄ - mikroshÄmu droÅ”inÄtÄji (FPF). SÄ«kÄk par Å”o punktu pakavÄsimies vÄlÄk.
Papildus konfigurÄcijai piegÄdÄtÄjs Ä£enerÄ divas RSA 2048 atslÄgas un izveido divas datu struktÅ«ras (parÄdÄ«tas attÄlÄ):
OEM saknes atslÄgas SHA256 jaucÄjkods tiek pastÄvÄ«gi ierakstÄ«ts mikroshÄmojuma droÅ”inÄtÄjiem (FPF), tÄpat kÄ Intel BG konfigurÄcija. Ja Intel BG konfigurÄcija paredz Ŕīs tehnoloÄ£ijas iekļauÅ”anu, tad turpmÄk Å”ajÄ sistÄmÄ BIOS var atjauninÄt (t.i. var pÄrrÄÄ·inÄt Å”os manifestus) tikai OEM Root Key privÄtÄs daļas Ä«paÅ”nieks, t.i. pÄrdevÄjs.
Apskatot attÄlu, uzreiz rodas Å”aubas par tik garas verifikÄcijas Ä·Ädes nepiecieÅ”amÄ«bu - varÄjÄt izmantot vienu manifestu. KÄpÄc sarežģīt?
Faktiski Intel tÄdÄjÄdi nodroÅ”ina pÄrdevÄjam iespÄju izmantot dažÄdas IBB atslÄgas dažÄdÄm produktu lÄ«nijÄm un vienu kÄ sakni. Ja tiek nopludinÄta IBB atslÄgas privÄtÄ daļa (kas paraksta otro manifestu), incidents ietekmÄs tikai vienu produktu lÄ«niju un tikai lÄ«dz brÄ«dim, kad piegÄdÄtÄjs Ä£enerÄs jaunu pÄri un iespÄjos pÄrrÄÄ·inÄtos manifestus nÄkamajÄ BIOS atjauninÄjumÄ.
Bet, ja saknes atslÄga ir apdraudÄta (ar kuru ir parakstÄ«ts pirmais manifests), to nevarÄs aizstÄt, atsaukÅ”anas procedÅ«ra netiek nodroÅ”inÄta. Ŕīs atslÄgas publiskÄs daļas hash ir vienreiz un uz visiem laikiem ieprogrammÄts FPF.
Intel Boot Guard konfigurÄcija
Tagad apskatÄ«sim tuvÄk Intel BG konfigurÄciju un tÄs izveides procesu. Ja skatÄties uz atbilstoÅ”o cilni Flash attÄla rÄ«ka GUI no Intel System Tool Kit (STK), jÅ«s pamanÄ«sit, ka Intel BG konfigurÄcijÄ ir iekļauts pÄrdevÄja saknes atslÄgas publiskÄs daļas jaukums, kas ir daži neskaidri. vÄrtÄ«bas utt. Intel BG profils.
Šī profila struktūra:
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;
};
KopumÄ Intel BG konfigurÄcija ir ļoti elastÄ«ga vienÄ«ba. Apsveriet, piemÄram, karodziÅu Force_Boot_Guard_ACM. Kad tas ir notÄ«rÄ«ts, ja BG startÄÅ”anas ACM modulis SPI zibatmiÅÄ netiek atrasts, uzticama sÄknÄÅ”ana nenotiks. Tas bÅ«s neuzticams.
MÄs jau rakstÄ«jÄm iepriekÅ”, ka VB režīma izpildes politiku var konfigurÄt tÄ, ka, ja verifikÄcija neizdodas, atkal notiks neuzticama lejupielÄde.
5
FVME
abi režīmi iespÄjoti, tÅ«lÄ«tÄja izslÄgÅ”ana
KÄ jau minÄts, Intel BG konfigurÄcija sistÄmas pÄrdevÄjam vienreiz un uz visiem laikiem jÄieraksta mikroshÄmojuma droÅ”inÄtÄjus (FPF) - nelielÄ (pÄc nepÄrbaudÄ«tÄs informÄcijas tikai 256 baiti) aparatÅ«ras informÄcijas krÄtuvÄ mikroshÄmojuma iekÅ”pusÄ, ko var programmÄt ÄrpusÄ. Intel ražoÅ”anas iekÄrtÄm (tÄpÄc ProgrammÄjams lauks droÅ”inÄtÄji).
Tas ir lieliski piemÄrots konfigurÄcijas glabÄÅ”anai, jo:
ir vienreiz programmÄjama datu uzglabÄÅ”anas zona (tieÅ”i tur, kur ir rakstÄ«ta Intel BG konfigurÄcija);
to var lasÄ«t un programmÄt tikai Intel ME.
TÄtad, lai iestatÄ«tu Intel BG tehnoloÄ£ijas konfigurÄciju noteiktÄ sistÄmÄ, pÄrdevÄjs ražoÅ”anas laikÄ veic Å”Ädas darbÄ«bas:
Izmantojot Flash Image Tool (no Intel STK), izveido programmaparatÅ«ras attÄlu ar noteiktu Intel BG konfigurÄciju kÄ mainÄ«gos Intel ME reÄ£ionÄ (tÄ sauktais pagaidu spogulis FPF);
Izmantojot Flash programmÄÅ”anas rÄ«ku (no Intel STK), ieraksta Å”o attÄlu sistÄmas SPI zibatmiÅÄ un aizver t.s. ražoÅ”anas režīms (Å”ajÄ gadÄ«jumÄ atbilstoÅ”Ä komanda tiek nosÅ«tÄ«ta Intel ME).
Å o darbÄ«bu rezultÄtÄ Intel ME izmantos FPF norÄdÄ«tÄs vÄrtÄ«bas no spoguļa FPFs ME reÄ£ionÄ, iestatÄ«s atļaujas SPI zibspuldzes deskriptoros uz Intel ieteiktajÄm vÄrtÄ«bÄm (aprakstÄ«tas rakstu) un veiciet sistÄmas RESET.
Intel Boot Guard ievieŔanas analīze
Lai analizÄtu Ŕīs tehnoloÄ£ijas ievieÅ”anu konkrÄtÄ piemÄrÄ, mÄs pÄrbaudÄ«jÄm Å”Ädas sistÄmas, lai noteiktu Intel BG tehnoloÄ£ijas pÄdas:
SistÄma
Piezīme
Gigabyte GA-H170-D3H
Skylake, ir atbalsts
Gigabyte GA-Q170-D3H
Skylake, ir atbalsts
Gigabyte GA-B150-HD3
Skylake, ir atbalsts
MSI H170A Gaming Pro
Skyleiks, bez atbalsta
Lenovo ThinkPad 460
Skylake, pieejams atbalsts, iespÄjota tehnoloÄ£ija
Lenovo Joga 2 Pro
Hasvels, bez atbalsta
Lenovo U330p
Hasvels, bez atbalsta
"Atbalsts" nozÄ«mÄ Intel BG starta ACM moduļa, iepriekÅ” minÄto manifestu un atbilstoÅ”Ä koda klÄtbÅ«tni BIOS, t.i. ievieÅ”anas analÄ«zei.
Vispirms parunÄsim par procesora darbÄ«bÄm, ja ir iespÄjota Intel BG tehnoloÄ£ija.
AtÅ”ifrÄtÄ mikrokoda paraugus atrast neizdevÄs, tÄpÄc tas, kÄ tÄlÄk aprakstÄ«tÄs darbÄ«bas tiek realizÄtas (mikrokodÄ vai aparatÅ«rÄ), ir atklÄts jautÄjums. TomÄr fakts, ka mÅ«sdienu Intel procesori "var" veikt Ŕīs darbÄ«bas, ir fakts.
PÄc izieÅ”anas no RESET stÄvokļa procesors (kura adreÅ”u telpÄ jau ir kartÄts zibatmiÅas saturs) atrod FIT (Firmware Interface Table). Atrast to ir viegli, rÄdÄ«tÄjs uz to ir rakstÄ«ts adresÄ FFFF FFC0h.
Å ajÄ piemÄrÄ Å”Ä« adrese satur vÄrtÄ«bu FFD6 9500h. PievÄrÅ”oties Å”ai adresei, procesors redz FIT tabulu, kuras saturs ir sadalÄ«ts ierakstos. Pirmais ieraksts ir Å”Ädas struktÅ«ras virsraksts:
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;
};
NezinÄma iemesla dÄļ Å”ajÄs tabulÄs ne vienmÄr tiek aprÄÄ·inÄta kontrolsumma (lauks ir atstÄts tukÅ”s).
AtlikuÅ”ie ieraksti norÄda uz dažÄdiem binÄrajiem failiem, kas ir jÄparsÄ/jÄizpilda pirms BIOS izpildes, t.i. pirms pÄrslÄgÅ”anÄs uz mantoto RESET vektoru (FFFF FFF0h). Katra Å”Äda ieraksta struktÅ«ra ir Å”Äda:
typedef struct FIT_ENTRY
{
unsigned long BaseAddress;
unsigned long : 32;
unsigned long Size;
unsigned short Version; // 1.0
unsigned char EntryType;
unsigned char Checksum;
};
Lauks EntryType norÄda bloka veidu, uz kuru norÄda Å”is ieraksts. MÄs zinÄm vairÄkus veidus:
Tagad ir acÄ«mredzams, ka viens no ierakstiem norÄda uz Intel BG startÄÅ”anas ACM binÄrÄ atraÅ”anÄs vietu. Å Ä« binÄra galvenes struktÅ«ra ir raksturÄ«ga Intel izstrÄdÄtajiem koda moduļiem (ACM, mikrokoda atjauninÄjumi, Intel ME koda sadaļas, ...).
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];
};
Procesors ielÄdÄ Å”o binÄro failu savÄ keÅ”atmiÅÄ, pÄrbauda un palaiž.
Intel BG startÄÅ”anas ACM
Å Ä«s ACM darba analÄ«zes rezultÄtÄ kļuva skaidrs, ka tas rÄ«kojas Å”Ädi:
saÅem no Intel ME Intel BG konfigurÄciju, kas ierakstÄ«ta mikroshÄmojuma droÅ”inÄtÄjiem (FPF);
atrod KEYM un IBBM manifestus, pÄrbauda tos.
Lai atrastu Å”os manifestus, ACM izmanto arÄ« FIT tabulu, kurÄ ir divu veidu ieraksti, kas norÄda uz Ŕīm struktÅ«rÄm (skatiet iepriekÅ” FIT_ENTRY_TYPES).
Lai pÄrbaudÄ«tu OEM saknes atslÄgas publisko atslÄgu, atgÄdinÄm, ka tiek izmantots SHA256 jaucÄjkods no droÅ”inÄtÄjiem, kas Å”obrÄ«d jau ir saÅemts no Intel ME.
PÄriesim pie otrÄ manifesta. Tas sastÄv no trim struktÅ«rÄm:
OtrajÄ ir ietverts IBB SHA256 jaucÄjkods un deskriptoru skaits, kas apraksta IBB saturu (t.i., no kÄ tiek aprÄÄ·inÄts jaukums):
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;
};
IBB deskriptori seko Å”ai struktÅ«rai viens pÄc otra. To saturam ir Å”Äds formÄts:
typedef struct IBB_DESCRIPTOR
{
unsigned long : 32;
unsigned long BaseAddress;
unsigned long Size;
};
Tas ir vienkÄrÅ”i: katrs deskriptors satur IBB gabala adresi/izmÄru. TÄdÄjÄdi bloku savienoÅ”ana, uz kuru norÄda Å”ie deskriptori (paÅ”u deskriptoru secÄ«bÄ), ir IBB. Un, kÄ likums, IBB ir visu SEC un PEI fÄžu moduļu kombinÄcija.
Otrais manifests beidzas ar struktÅ«ru, kurÄ ir ietverta IBB publiskÄ atslÄga (pÄrbaudÄ«ta ar SHA256 jaucÄjkodu no pirmÄ manifesta) un Ŕī manifesta paraksts:
TÄtad, pat pirms UEFI BIOS izpildes sÄkuma procesors palaidÄ«s ACM, kas pÄrbaudÄ«s sadaļu satura autentiskumu ar SEC un PEI fÄzes kodu. PÄc tam procesors iziet no ACM, pÄrvietojas pa RESET vektoru un sÄk izpildÄ«t BIOS.
PEI pÄrbaudÄ«tajÄ nodalÄ«jumÄ ir jÄbÅ«t modulim, kas pÄrbaudÄ«s pÄrÄjo BIOS (DXE kodu). Å o moduli jau izstrÄdÄ IBV (Independent BIOS Vendor) vai pats sistÄmas piegÄdÄtÄjs. Jo MÅ«su rÄ«cÄ«bÄ izrÄdÄ«jÄs tikai Lenovo un Gigabyte sistÄmas un ar Intel BG atbalstu, Åemsim vÄrÄ no Ŕīm sistÄmÄm izvilkto kodu.
UEFI BIOS modulis LenovoVerifiedBootPei
Lenovo gadÄ«jumÄ izrÄdÄ«jÄs, ka tas ir Lenovo izstrÄdÄtais LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} modulis.
TÄs uzdevums ir uzmeklÄt (pÄc GUID) DXE jaucÄjtabulu un pÄrbaudÄ«t DXE.
if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
if (!FindHashTable())
return EFI_NOT_FOUND;
if (!VerifyDxe())
return EFI_SECURITY_VIOLATION;
}
typedef struct DXE_DESCRIPTOR
{
unsigned char BlockHash[32]; // SHA256
unsigned long Offset;
unsigned long Size;
};
UEFI BIOS modulis BootGuardPei
Gigabyte gadÄ«jumÄ izrÄdÄ«jÄs, ka tas ir BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} modulis, ko izstrÄdÄjis AMI, un tÄpÄc tas ir pieejams jebkurÄ AMI BIOS ar Intel BG atbalstu.
TÄs darbÄ«bas algoritms ir nedaudz atŔķirÄ«gs, taÄu tas ir vienÄds:
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;
}
Jauktabulai {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ir Å”Äds formÄts:
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
ÄŖsi parunÄsim par citu Intel Boot Guard ievieÅ”anu, kas tika atrasta jaunÄkÄ sistÄmÄ, kuras pamatÄ ir Intel SoC ar Apollo Lake mikroarhitektÅ«ru ā ASRock J4205-IT.
Lai gan Ŕī versija tiks izmantota tikai SoC (jaunÄs sistÄmas ar Kaby Lake procesora mikroarhitektÅ«ru turpina izmantot Intel Boot Guard 1.x), tÄ ir ļoti interesanta, lai izpÄtÄ«tu jaunu arhitektÅ«ras iespÄju platformÄm, kuru pamatÄ ir Intel SoC un kas ir redzams taustÄms. izmaiÅas, piemÄram:
BIOS un Intel ME reÄ£ioni (vai drÄ«zÄk Intel TXE, saskaÅÄ ar Intel SoC terminoloÄ£iju) tagad ir viens IFWI reÄ£ions;
lai gan platformÄ bija iespÄjots Intel BG, tÄdas struktÅ«ras kÄ FIT, KEYM, IBBM zibatmiÅÄ netika atrastas;
papildus TXE un ISH kodoliem (x86) mikroshÄmojumam tika pievienots treÅ”ais kodols (starp citu, atkal ARC) - PMC (Power Management Controller), kas saistÄ«ts ar energoapgÄdes apakÅ”sistÄmas darbÄ«bas nodroÅ”inÄÅ”anu un veiktspÄjas uzraudzÄ«bu.
JaunÄ IFWI reÄ£iona saturs ir Å”Ädu moduļu kopa:
Offset
VÄrds
Apraksts
0000 2000 stundas
SMIP
kÄda platformas konfigurÄcija, ko parakstÄ«jis pÄrdevÄjs
0038 1000 stundas
OBBP
UEFI BIOS, DXE fÄze, x86, neparakstÄ«ts
TXE programmaparatÅ«ras analÄ«zes laikÄ kļuva skaidrs, ka pÄc RESET TXE uztur procesoru Å”ajÄ stÄvoklÄ«, lÄ«dz tas sagatavo CPU adreÅ”u telpas pamata saturu (FIT, ACM, RESET vektors ...). TurklÄt TXE ievieto Å”os datus savÄ SRAM, pÄc tam uz laiku nodroÅ”ina procesoram tur piekļuvi un āatbrÄ«voā to no RESET.
Uzmanību no rootkit
Nu, tagad pÄriesim pie "karstÄ". MÄs reiz atklÄjÄm, ka daudzÄs sistÄmÄs SPI zibatmiÅas deskriptoriem ir atļaujas piekļūt SPI zibatmiÅas reÄ£ioniem, lai visi Ŕīs atmiÅas lietotÄji varÄtu gan rakstÄ«t, gan lasÄ«t jebkuru reÄ£ionu. Tie. nevar bÅ«t.
PÄc pÄrbaudes ar utilÄ«tu MEinfo (no Intel STK), mÄs redzÄjÄm, ka Å”ajÄs sistÄmÄs ražoÅ”anas režīms nebija slÄgts, tÄpÄc mikroshÄmu droÅ”inÄtÄji (FPF) tika atstÄti nenoteiktÄ stÄvoklÄ«. JÄ, Å”Ädos gadÄ«jumos Intel BG nav ne iespÄjots, ne atspÄjots.
MÄs runÄjam par Å”ÄdÄm sistÄmÄm (attiecÄ«bÄ uz Intel BG un to, kas tiks aprakstÄ«ts vÄlÄk rakstÄ, mÄs runÄsim par sistÄmÄm ar Haswell procesora mikroarhitektÅ«ru un augstÄku):
visi Gigabyte produkti;
visi MSI produkti;
21 Lenovo klÄpjdatoru modeļi un 4 Lenovo serveru modeļi.
Protams, mÄs ziÅojÄm par atradumu Å”iem pÄrdevÄjiem, kÄ arÄ« Intel.
AdekvÄta atbilde sekoja tikai no LenovokurÅ” atzina problÄmu un izlaida plÄksteri.
Gigabyte Å Ä·iet, ka viÅi pieÅÄma informÄciju par ievainojamÄ«bu, taÄu nekÄdus komentÄrus nesniedza.
SaziÅa ar MSI pilnÄ«bÄ apstÄjÄs pÄc mÅ«su pieprasÄ«juma nosÅ«tÄ«t mÅ«su publisko PGP atslÄgu (lai nosÅ«tÄ«tu viÅiem Å”ifrÄtu droŔības ieteikumu). ViÅi paziÅoja, ka viÅi "ir aparatÅ«ras ražotÄji un neražo PGP atslÄgas".
Bet vairÄk par lietu. TÄ kÄ droÅ”inÄtÄji ir atstÄti nenoteiktÄ stÄvoklÄ«, lietotÄjs (vai uzbrucÄjs) var tos ieprogrammÄt pats (visgrÅ«tÄkais ir atrodiet Intel STK). Tam nepiecieÅ”amas Å”Ädas darbÄ«bas.
1. SÄknÄjiet operÄtÄjsistÄmÄ Windows OS (vispÄrÄ«gi tÄlÄk aprakstÄ«tÄs darbÄ«bas var veikt arÄ« no Linux, ja vÄlamajai operÄtÄjsistÄmai izstrÄdÄjat Intel STK analogu). Izmantojot MEinfo utilÄ«tu, pÄrliecinieties, vai Ŕīs sistÄmas droÅ”inÄtÄji nav ieprogrammÄti.
2. Lasiet zibatmiÅas saturu, izmantojot Flash programmÄÅ”anas rÄ«ku.
3. Atveriet lasÄ«to attÄlu, izmantojot jebkuru UEFI BIOS rediÄ£ÄÅ”anas rÄ«ku, veiciet nepiecieÅ”amÄs izmaiÅas (ieviesiet, piemÄram, rootkit), izveidojiet / rediÄ£Äjiet esoÅ”Äs KEYM un IBBM struktÅ«ras ME reÄ£ionÄ.
AttÄlÄ ir izcelta RSA atslÄgas publiskÄ daļa, kuras hash tiks ieprogrammÄts mikroshÄmojuma droÅ”inÄtos kopÄ ar pÄrÄjo Intel BG konfigurÄciju.
4. Izmantojot Flash Image Tool, izveidojiet jaunu programmaparatÅ«ras attÄlu (iestatot Intel BG konfigurÄciju).
5. Uzrakstiet jaunu attÄlu zibspuldzei, izmantojot Flash programmÄÅ”anas rÄ«ku, pÄrbaudiet, izmantojot MEinfo, vai ME reÄ£ionÄ tagad ir Intel BG konfigurÄcija.
6. Izmantojiet Flash programmÄÅ”anas rÄ«ku, lai aizvÄrtu ražoÅ”anas režīmu.
7. SistÄma tiks atsÄknÄta, un pÄc tam, izmantojot MEinfo, varat pÄrbaudÄ«t, vai FPF tagad ir ieprogrammÄti.
Å Ä«s darbÄ«bas uz visiem laikiem iespÄjot Intel BG Å”ajÄ sistÄmÄ. DarbÄ«bu nevarÄs atsaukt, kas nozÄ«mÄ:
tikai saknes atslÄgas privÄtÄs daļas Ä«paÅ”nieks (t.i., tas, kurÅ” iespÄjoja Intel BG) varÄs atjauninÄt UEFI BIOS Å”ajÄ sistÄmÄ;
ja atgriežat Å”ai sistÄmai oriÄ£inÄlo programmaparatÅ«ru, piemÄram, izmantojot programmÄtÄju, tÄ pat neieslÄdzas (pÄrbaudes kļūdas gadÄ«jumÄ tas ir izpildes politikas sekas);
Lai atbrÄ«votos no Å”Ädas UEFI BIOS, mikroshÄmojums ir jÄaizstÄj ar ieprogrammÄtiem FPF ar ātÄ«ruā (t.i., pÄrlodÄjiet mikroshÄmu, ja ir pieejama infrasarkanÄ lodÄÅ”anas stacija par automaŔīnas cenu, vai vienkÄrÅ”i nomainiet mÄtesplati. ).
Lai saprastu, ko var darÄ«t Å”Äds rootkit, jums ir jÄizvÄrtÄ, kas ļauj izpildÄ«t jÅ«su kodu UEFI BIOS vidÄ. Teiksim, procesora priviliÄ£ÄtÄkajÄ režīmÄ - SMM. Å Ädam rootkit var bÅ«t Å”Ädas Ä«paŔības:
jÄizpilda paralÄli OS (apstrÄdi var konfigurÄt, Ä£enerÄjot SMI pÄrtraukumu, ko aktivizÄs taimeris);
ir visas SMM režīma priekŔrocības (pilna piekļuve RAM saturam un aparatūras resursiem, slepenība no OS);
Rootkit kodu var Å”ifrÄt un atÅ”ifrÄt, kad tas tiek palaists SMM režīmÄ. Jebkurus datus, kas pieejami tikai SMM režīmÄ, var izmantot kÄ Å”ifrÄÅ”anas atslÄgu. PiemÄram, jaucÄjkods no adreÅ”u kopas SMRAM. Lai iegÅ«tu Å”o atslÄgu, jums bÅ«s jÄiekļūst SMM. Un to var izdarÄ«t divos veidos. Atrodiet RCE SMM kodÄ un izmantojiet to vai pievienojiet savu SMM moduli BIOS, kas nav iespÄjams, jo esam iespÄjojuÅ”i Boot Guard.
izveidot sistÄmÄ slÄptu, nenoÅemamu rootkit ar nezinÄmu mÄrÄ·i;
izpildiet savu kodu vienÄ no mikroshÄmojuma kodoliem Intel SoC iekÅ”ienÄ, proti, Intel ISH (skatiet attÄlu tuvÄk).
Lai gan Intel ISH apakÅ”sistÄmas iespÄjas vÄl nav izpÄtÄ«tas, Ŕķiet, ka tas ir interesants uzbrukuma vektors pret Intel ME.
Atzinumi
PÄtÄ«jumÄ tika sniegts tehnisks apraksts par to, kÄ darbojas Intel Boot Guard tehnoloÄ£ija. MÄ«nus pÄris Intel droŔības noslÄpumu, izmantojot neskaidrÄ«bas modeli.
Tiek parÄdÄ«ts uzbrukuma scenÄrijs, kas ļauj sistÄmÄ izveidot nenoÅemamu rootkit.
MÄs esam redzÄjuÅ”i, ka mÅ«sdienu Intel procesori spÄj izpildÄ«t daudz patentÄta koda pat pirms BIOS palaiÅ”anas.
Platformas ar Intel 64 arhitektÅ«ru kļūst arvien mazÄk piemÄrotas bezmaksas programmatÅ«ras darbinÄÅ”anai: aparatÅ«ras pÄrbaude, arvien vairÄk patentÄtu tehnoloÄ£iju un apakÅ”sistÄmu (trÄ«s kodoli SoC mikroshÄmojumÄ: x86 ME, x86 ISH un ARC PMC).
Atvieglojumi
PÄrdevÄjiem, kuri apzinÄti atstÄj atvÄrtu ražoÅ”anas režīmu, tas noteikti ir jÄaizver. PagaidÄm viÅi tikai aizver acis, un jaunÄs Kaby Lake sistÄmas to parÄda.
LietotÄji var atspÄjot Intel BG savÄs sistÄmÄs (kuras ietekmÄ aprakstÄ«tÄ ievainojamÄ«ba), palaižot Flash programmÄÅ”anas rÄ«ku ar opciju -closemnf. PirmkÄrt, jums jÄpÄrliecinÄs (izmantojot MEinfo), vai Intel BG konfigurÄcija ME reÄ£ionÄ nodroÅ”ina precÄ«zu Ŕīs tehnoloÄ£ijas izslÄgÅ”anu pÄc programmÄÅ”anas FPF.