Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
TĂ« ofrojmĂ« pĂ«rsĂ«ri tĂ« zbritim nĂ« nivelin e thellĂ« dhe tĂ« diskutojmĂ« pĂ«r sigurinĂ« e firmware-ve tĂ« platformave kompjuterike qĂ« janĂ« tĂ« pĂ«rputhshme me x86. KĂ«tĂ« herĂ«, pĂ«rbĂ«rĂ«si kryesor i hulumtimit Ă«shtĂ« Intel Boot Guard (mos e ngatĂ«rroni me Intel BIOS Guard!) – njĂ« teknologji e mbĂ«shtetur nga hardueri pĂ«r ngarkesĂ«n e besueshme tĂ« BIOS-it, e cila mund tĂ« aktivizohet ose çaktivizohet pĂ«rherĂ« nga prodhuesi i sistemit kompjuterik nĂ« fazĂ«n e prodhimit. E, siç e dimĂ«, receta pĂ«r hulumtimin Ă«shtĂ« e njohur: tĂ« mijmĂ« ndryshe implementimin e kĂ«saj teknologjie me anĂ« tĂ« inxhinierisĂ« sĂ« reverse, tĂ« pĂ«rshkruajmĂ« arkitekturĂ«n e saj, ta mbushim me detaje tĂ« padokumentuara, ta shoqĂ«rojmĂ« me vektorĂ« sulmesh dhe ta pĂ«rziejmĂ«. Do tĂ« shtojmĂ« zjarr me njĂ« tregim pĂ«r mĂ«nyrĂ«n se si njĂ« gabim i prodhimit tĂ« disa prodhuesve, i klonuar pĂ«r vite me radhĂ«, i lejon njĂ« sulmuesi tĂ« potencialshĂ«m tĂ« pĂ«rdorĂ« kĂ«tĂ« teknologji pĂ«r tĂ« krijuar njĂ« rootkit tĂ« fshehtĂ« (edhe nga programuesi) nĂ« sistem.

Për më tepër, baza e artikullit është raportet "Nën mbrojtjen e rootkit-eve: Intel BootGuard" nga konferenca ZeroNights 2016 dhe takimi i 29-të DefCon Russia (të dyja prezantimet këtu).

Firmware i platformës kompjuterike me arkitekturën Intel 64

Për të filluar, le të përgjigjemi në pyetjen: çfarë është firmware i një platforme moderne kompjuterike me arkitekturën Intel 64? Sigurisht, UEFI BIOS. Por një përgjigje e tillë do të ishte e pasaktë. Le të shohim në diagramin ku është paraqitur varianti desktop (ose laptop) i kësaj arkitekture.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Baza është një lidhje:

  • Procesor (CPU, NjĂ«sia Qendrore e PĂ«rpunimit), e cila, pĂ«rveç çerdheve kryesore, ka brenda njĂ« njĂ«si grafike (jo nĂ« tĂ« gjitha modelet) dhe njĂ« kontrollues memorie tĂ« integruar (IMC, Integrated Memory Controller);
  • Çipseti (PCH, Platform Controller Hub), qĂ« pĂ«rmban kontrollues tĂ« ndryshĂ«m pĂ«r ndĂ«rveprimin me pajisjet periferike dhe menaxhimin e nĂ«n-sistemeve. NdĂ«r ta ndodhet edhe Intel Management Engine (ME), e cila ka gjithashtu firmware (firmware Intel ME).

Laptopët, përveç gjitha elementeve të sipërpërmendura, parashikojnë një kontrollues të integruar (ACPI EC, Advanced Control and Power Interface Embedded Controller), i cili është përgjegjës për funksionimin e nën-sistemit të energjisë, touchpad-it, tastierës, tasteve Fn (ndriçimi i ekranit, volumi i zërit, ndriçimi i tastierës etj.) dhe të tjera. Edhe ai ka firmware të vet.

Pra, përmbledhja e firmware-ve të përmendura është firmware e platformës kompjuterike (system firmware), e cila ruhet në memorie të përbashkët SPI flash. Për t'i ndihmuar përdoruesit e kësaj memorie të mos ngatërrohen se çfarë është çfarë, përmbajtja e kësaj memorie është e ndarë në rajone të ndryshme (siç është treguar në diagram):

  • UEFI BIOS;
  • firmware e ACPI EC (njĂ« rajon i veçantĂ« u shfaq pĂ«r herĂ« tĂ« parĂ« me mikroarkitekturĂ«n e procesorĂ«ve Skylake (viti 2015), por nĂ« praktikĂ« nuk kemi parĂ« shembuj tĂ« pĂ«rdorimit tĂ« tij, kĂ«shtu qĂ« firmware i kontrolluesit tĂ« integruar vazhdon tĂ« jetĂ« pjesĂ« e UEFI BIOS);
  • firmware e Intel ME;
  • konfigurimi (MAC-adresa etj.) i adaptorit tĂ« rrjetit tĂ« integruar GbE (Gigabit Ethernet);
  • pĂ«rshkrimet flash (Flash Descriptors) – rajoni kryesor i memorjes flash qĂ« pĂ«rmban tregues pĂ«r rajone tĂ« tjera, si dhe lejet pĂ«r akses nĂ« to.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Kufizimi i aksesit nĂ« rajone (nĂ« pĂ«rputhje me lejet e vendosura) realizohet nga mjeshtri i busit SPI – kontrolluesi SPI i integruar nĂ« çipset, pĂ«rmes tĂ« cilit kryhet qasja nĂ« kĂ«tĂ« memorie. NĂ«se lejet janĂ« vendosur nĂ« vlerat e rekomanduara nga Intel (pĂ«r arsye sigurie), atĂ«herĂ« çdo pĂ«rdorues i memorjes SPI flash ka qasje tĂ« plotĂ« (lexim/shkrim) vetĂ«m nĂ« rajonin e tij. Rajonet e tjera – janĂ« ose tĂ« aksesueshme vetĂ«m pĂ«r lexim, ose janĂ« tĂ« paaksesueshme. NjĂ« fakt i njohur: nĂ« shumĂ« sisteme, CPU ka qasje tĂ« plotĂ« nĂ« UEFI BIOS dhe GbE, qasje e leximit vetĂ«m nĂ« pĂ«rshkrimet flash, ndĂ«rsa pĂ«r rajonin Intel ME nuk ka qasje fare. Pse nĂ« shumĂ«, e jo nĂ« tĂ« gjitha? Ajo qĂ« rekomandohet, nuk Ă«shtĂ« e detyrueshme. MĂ« shumĂ« do tĂ« tregojmĂ« nĂ« artikullin nĂ« vijim.

Mekanizmat e mbrojtjes së firmware-it të platformës kompjuterike nga modifikimi

ËshtĂ« e qartĂ« se firmware i platformĂ«s kompjuterike duhet tĂ« mbrohet nga komprometimi i mundshĂ«m, i cili do tĂ« lejonte njĂ« sulmues tĂ« mundshĂ«m tĂ« vendoset nĂ« tĂ« (pĂ«r tĂ« pĂ«rjetuar pĂ«rditĂ«simet/rinstalimet e OS-sĂ«), tĂ« ekzekutojĂ« kodin e tij nĂ« mĂ«nyrat mĂ« privilegjuese etj. Dhe ndarjet e aksesit nĂ« rajone tĂ« memorjes SPI, sigurisht, nuk janĂ« tĂ« mjaftueshme. Prandaj, pĂ«r tĂ« mbrojtur firmware nga modifikimet, pĂ«rdoren mekanizma tĂ« ndryshĂ«m, tĂ« cilat janĂ« specifike pĂ«r çdo ambient ekzekutimi.

Kështu, firmware e Intel ME është nënshkruar për të kontrolluar integritetin dhe autenticitetin, dhe kontrollohet nga kontrolluesi ME gjatë çdo ngarkese të saj në memorjen ME UMA. Ky proces verifikimi është shqyrtuar më parë në një nga artikujsh, të kushtuar nën-sistemit Intel ME.

Firmware ACPI EC, në rregull, verifikohet kryesisht për integritet. Megjithatë, për shkak se ky binar është i inkorporuar në UEFI BIOS, ai zakonisht nënkupton të njëjtat mekanizma mbrojtës që përdor UEFI BIOS. Le të flasim për ta.

Këta mekanizma mund të ndahen në dy kategori.

Mbrojtja e shkruar në rajonin UEFI BIOS

  1. Mbrojtja fizike e përmbajtjes së memorjes SPI flash me një jumper të mbrojtjes nga shkrimi;
  2. Mbrojtja e projektionit të rajonit UEFI BIOS në hapësirën adresuese të CPU-së me ndihmën e regjistrave PRx të çipit;
  3. Bllokimi i përpjekjeve për të shkruar në rajonin UEFI BIOS përmes gjenerimit dhe përpunimit të një ndërprerje SMI duke vendosur bitët BIOS_WE/BLE dhe SMM_BWP në regjistrat e çipit;
  4. Një variant më i avancuar i tillë mbrojtjeje është Intel BIOS Guard (PFAT).

Përveç këtyre mekanizmave, furnizuesit mund të zhvillojnë dhe aplikojnë masa të tjera të sigurisë (për shembull, nënshkrimi i kapsulave me përditësime UEFI BIOS).

ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se nĂ« njĂ« sistem tĂ« caktuar (varet nga furnizuesi) mund tĂ« mos zbatohen tĂ« gjitha mekanizmat e pĂ«rmendur mĂ« sipĂ«r, mund tĂ« mos pĂ«rdoren fare, ose mund tĂ« kenĂ« implementimin qĂ« ndaj Ă«shtĂ« i dobĂ«t. MĂ« shumĂ« rreth kĂ«tyre mekanizmave dhe situatĂ«s me implementimin e tyre mund tĂ« lexoni nĂ« kĂ«tĂ« artikull. PĂ«r ata qĂ« janĂ« tĂ« interesuar, rekomandojmĂ« tĂ« shikoni tĂ« gjithĂ« ciklin e artikujve mbi sigurinĂ« UEFI BIOS nga CodeRush.

Verifikimi i autentikitetit UEFI BIOS

Kur flasim për teknologjitë e ngarkesës të besueshme, e para që vjen në mend është Secure Boot. Megjithatë, në mënyrë arkitektonike, ai është menduar për të verifikuar autentikitetin e komponentëve jashtë UEFI BIOS (drejtues, ngarkues etj.), dhe jo për firmware-në e vet.

Prandaj, kompania Intel në SoC-të me arkitekturën mikro të Bay Trail (viti 2012) implementoi një Secure Boot të papërshtatshëm që nuk mund të fiket (Verified Boot), i cili nuk ka lidhje me teknologjinë Secure Boot të përmendur më parë. Më vonë (në vitin 2013) ky mekanizëm u përmirësua dhe nën emrin Intel Boot Guard u lëshua për desktop-et me mikroarkitekturën Haswell.

Para se të përshkruajmë Intel Boot Guard, le të kuptojmë mjediset e ekzekutimit në arkitekturën Intel 64, të cilat bashkërisht janë rrënjët e besueshmërisë për këtë teknologji të ngarkesës të besueshme.

Intel CPU

Kapiteni tregon se procesori është mjedisi kryesor i ekzekutimit në arkitekturën Intel 64. Pse është ai rrënja e besueshmërisë? Duket se kjo e bën atë posedimi i elementeve të mëposhtme:

  • Microcode ROM – njĂ« memorie jo e ndjeshme ndaj energjisĂ«, e pakopjuar pĂ«r ruajtjen e mikrocode. Mendohet se mikrocode Ă«shtĂ« implementimi i sistemit tĂ« komandave tĂ« procesorit nĂ« instruksione mĂ« tĂ« thjeshta. NĂ« mikrocode gjithashtu ndodhin gabime. KĂ«shtu, nĂ« BIOS mund tĂ« gjeni binarĂ« me pĂ«rditĂ«sime tĂ« mikrocode (tĂ« ngulitura gjatĂ« ngarkesĂ«s, pasi ROM nuk mund tĂ« pĂ«rditĂ«sohet). PĂ«rmbajtja e kĂ«tyre binarĂ«ve Ă«shtĂ« e enkriptuar, gjĂ« qĂ« e komplikon ndjeshĂ«m analizĂ«n (prandaj, pĂ«rmbajtja specifike e mikrocode Ă«shtĂ« e njohur vetĂ«m atyre qĂ« e zhvillojnĂ« atĂ«), dhe Ă«shtĂ« nĂ«nshkruar pĂ«r tĂ« kontrolluar integritetin dhe autentikitetin;
  • ÇelĂ«si AES pĂ«r dekriptimin e pĂ«rmbajtjes sĂ« pĂ«rditĂ«simeve tĂ« mikrocode;
  • hash publik pĂ«r çelĂ«sin RSA, me tĂ« cilin verifikohet nĂ«nshkrimi i pĂ«rditĂ«simeve tĂ« mikrocode;
  • hash publik pĂ«r çelĂ«sin RSA, me tĂ« cilin verifikohet nĂ«nshkrimi i moduleve tĂ« kodeve tĂ« kufizuara tĂ« prodhuara nga Intel (Authenticated Code Module), tĂ« cilat CPU mund t'i ekzekutojĂ« para se tĂ« fillojĂ« ekzekutimin e BIOS (pĂ«rshĂ«ndetje mikrocode) ose gjatĂ« funksionimit tĂ« tij, nĂ« rast tĂ« disa ngjarjeve.

Intel ME

Kjo nën-sistem e ka marrë vëmendjen tonë në blogun tonë që ka qenë e dedikuar deri në dy artikullit. Le të kujtojmë se ky mjedis ekzekutimi është i bazuar në një mikro-kontroller të integruar në çipset dhe është më i fshehti dhe më i privilegjuar në sistem.

Pavarësisht fshehtësisë, Intel ME gjithashtu është rrënja e besueshmërisë, pasi ka:

  • ME ROM – njĂ« memorie jo e ndjeshme ndaj energjisĂ«, e pakopjuar (nuk ka mĂ«nyrĂ« pĂ«r pĂ«rditĂ«sim), qĂ« pĂ«rmban kodin fillestar, si dhe hash-in SHA256 tĂ« çelĂ«sit publik RSA, me tĂ« cilin verifikohet nĂ«nshkrimi i firmware-it Intel ME;
  • ÇelĂ«si AES pĂ«r ruajtjen e informacionit sekret;
  • qasje nĂ« setin e integruar tĂ« fuse-ve (FPFs, Field Programmable Fuses) pĂ«r ruajtjen pĂ«rhershme tĂ« disa informacionit, pĂ«rfshirĂ« informacionin e dhĂ«na nga furnizuesi i sistemit kompjuterik.

Intel Boot Guard 1.x

Një përjashtim i vogël. Numrat e versioneve të teknologjisë Intel Boot Guard, të cilëve ne i referohemi në këtë artikull, janë të kushtëzuar dhe mund të mos kenë lidhje me numërimin që përdoret në dokumentacionin e brendshëm të kompanisë Intel. Për më tepër, informacionet e përmendura këtu për implementimin e kësaj teknologjie janë marrë gjatë rivotimit dhe mund të përmbajnë pasaktësi në krahasim me specifikimet për Intel Boot Guard, të cilat ndoshta nuk do të publikohen ndonjëherë.

Pra ndaj, Intel Boot Guard (BG) është një teknologji e mbështetur në harduer për verifikimin e autenticitetit të UEFI BIOS. Sipas përshkrimit të saj të shkurtër në librin [Platform Embedded Security Technology Revealed, kapitulli Boot with Integrity, or Not Boot], funksionon si një zinxhir besimi gjatë ngarkimit. Dëni i parë në këtë zinxhir është kodi ngarkues (mikrokodi) brenda CPU, i cili aktivizohet në ngjarjen RESET (mos e ngatërroni me vektorët RESET në BIOS!). CPU gjen një modul kodi të zhvilluar dhe të nënshkruar nga Intel në flash memorien SPI, e ngarkon në cache, e verifikon (siç u përmend më sipër, CPU ka një hash të çelësit publik, me të cilin verifikohet nënshkrimi i ACM) dhe e aktivizon.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard

Ky modul kodi është përgjegjës për verifikimin e një pjese të vogël fillestare të UEFI BIOS - Initial Boot Block (IBB), e cila, nga ana e saj, përmban funksionalitet për verifikimin e pjesës kryesore të UEFI BIOS. Kështu, Intel BG siguron autenticitetin e BIOS para ngarkimit të OS (e cila mund të funksionojë nën mbikëqyrjen e teknologjisë Secure Boot).

Teknologjia Intel BG parashikon dy mënyra funksionimi (meqë njëra nuk pengon tjetrën, domethënë, të dyja mund të jenë aktive në sistem, ose të dyja mund të jenë të fikura).

Measured Boot

Në modin Measured Boot (MB) çdo komponent ngarkimi (duke filluar nga CPU boot ROM) "mas" tjetrin, duke përdorur mundësitë e TPM (Trusted Platform Module). Për ata që nuk e dinë, le të shpjegohet.

TPM ka PCR (Platform Configuration Registers), në të cilat shkruhet rezultati i operacionit të hashingut sipas formulës:

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard

Pra, vlera aktuale e PCR varet nga e kaluar, duke u resetuar vetëm në rast të një RESET-i të sistemit.

Kështu, në modin MB në një moment të caktuar, PCR-të reflektojnë një identifikues unik (brenda mundësive të operacionit të hashingut) të kodit ose të dhënave që janë "matuar". Vlerat e PCR mund të përdoren në operacionin e enkriptimit të disa të dhënave (TPM_Seal). Pas kësaj, dekodimi i tyre (TPM_Unseal) do të jetë i mundur vetëm nëse vlerat e PCR gjatë ngarkimit nuk kanë ndryshuar (domethënë, asnjë "komponent i matshëm" nuk është modifikuar).

Verified Boot

Më e frikshmja për ata që duan të modifikojnë UEFI BIOS është moda Verified Boot (VB), në të cilin çdo komponent ngarkimi verifikon në mënyrë kriptografike integritetin dhe autenticitetin e tjetrit. Në rast të një gabimi verifikimi, ndodhin (një nga):

  • shkĂ«putja me njĂ« kohĂ«zgjatje nga 1 deri nĂ« 30 minuta (nĂ« mĂ«nyrĂ« qĂ« pĂ«rdoruesi tĂ« ketĂ« kohĂ« pĂ«r tĂ« kuptuar arsyen pse kompjuteri i tij nuk ngarkohet dhe, nĂ«se ka mundĂ«si, tĂ« pĂ«rpiqet tĂ« rikuperojĂ« BIOS-in);
  • shkĂ«putje e menjĂ«hershme (nĂ« mĂ«nyrĂ« qĂ« pĂ«rdoruesi tĂ« mos kuptojĂ« asgjĂ« dhe, sidomos, tĂ« mos mund tĂ« bĂ«jĂ« asgjĂ«);
  • vazhduar operimi me njĂ« pamje tĂ« qetĂ« (rasti kur nuk ka kohĂ« pĂ«r siguri, sepse ka punĂ« mĂ« tĂ« rĂ«ndĂ«sishme).

Zgjedhja e veprimit varet nga konfigurimi i dhënë të Intel BG (pra, nga politika e zbatimit e njohur si enforcement policy), e cila shkruhet përhershëm në një depo të veçantë - fuse të çipset (FPF). Do të ndalemi më shumë mbi këtë pikë më vonë.

Përveç konfigurimit, ofruesi gjeneron dy çelësa RSA 2048 dhe krijon dy struktura të dhënash (të ilustruara në figurë):

  1. Manifesti i çelësit kryesor të ofruesit (KEYM, OEM Root Key Manifest), në të cilin vendos SVN (Security Version Number) të këtij manifesti, SHA256 hashin e çelësit publik të manifestit tjetër, çelësi publik RSA (pra, pjesa publike e çelësit kryesor të ofruesit) për verifikimin e nënshkrimit të këtij manifesti dhe nënshkrimin e tij të vetë;
  2. Manifesti IBB (IBBM, Initial Boot Block Manifest), në të cilin vendos SVN të këtij manifesti, SHA256 hashin e IBB, çelësin publik për verifikimin e nënshkrimit të këtij manifesti dhe nënshkrimin e tij të vetë.

SHA256 hash i çelësit publik OEM Root Key shkruhet përhershëm në fuse të çipset (FPF), ashtu si dhe konfigurimi i Intel BG. Nëse konfigurimi i Intel BG parashikon aktivizimin e kësaj teknologjie, atëherë që nga ajo çast në këtë sistem, për të përditësuar BIOS (domethënë, për të pasur mundësinë për të riaftësuar këto manifeste) mund të jetë vetëm poseduesi i pjesës private të OEM Root Key, domethënë ofruesi.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard

Duke shikuar figurën, menjëherë lindin dyshime mbi nevojën për një zinxhir verifikimi kaq të gjatë - mund të përdorej vetëm një manifest. Pse të komplikohet?

Në të vërtetë, kompania Intel në këtë mënyrë i jep ofruesit mundësinë të përdorë çelësa të ndryshëm IBB për linja të ndryshme të produkteve të saj dhe një - si çelësi kryesor. Nëse del në pah pjesa private e çelësit IBB (me të cilin nënshkruhet manifesti i dytë), incidenti do të përfshijë vetëm një linjë produktesh dhe vetëm deri në momentin kur ofruesi të krijojë një çift të ri dhe të përfshijë manifeste të rinj në përditësimin e ardhshëm të BIOS.

Porosja nëse çelësi rrënjë (me të cilin nënshkruhet manifesti i parë) do të kompromentohet, nuk do të jetë e mundur ta zëvendësosh atë; procedurat e revokimit nuk janë parashikuar, sepse hashes e pjesës publike të këtij çelësi programohet në FPF-a një herë dhe përgjithmonë.

Konfigurimi i Intel Boot Guard

Tani le të flasim më hollësisht për konfigurimin e Intel BG dhe procesin e krijimit të tij. Nëse shikoni në skedën përkatëse në GUI të veglës Flash Image Tool nga paketa Intel System Tool Kit (STK), mund të vëreni se konfigurimi i Intel BG përmban hashes e pjesës publike të çelësit rrënjë të prodhuesit, një çift vlerash të panjohura dhe profilin e quajtur Intel BG.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard

Struktura e këtij profili:

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 – mos bĂ«j asgjĂ«
                                              // 01b – fikje me kohĂ« tĂ« kufizuar
                                              // 11b – fikje e menjĂ«hershme
	unsigned long : 26;
};

Në fakt, konfigurimi i Intel BG është një entitet shumë fleksibël. Le të shqyrtojmë, për shembull, flamurin Force_Boot_Guard_ACM. Kur ai është i hequr, në rast se moduli BG startup ACM në memorien SPI flash nuk gjendet, nuk do të ketë ngarkesë të besueshme. Do të ketë ngarkesë të pabesueshme.

Siç përmendëm më lart, politika e zbatimit për modin VB mund të konfigurohet në një mënyrë që, në rast të një gabimi në verifikim, do të ndodhte përsëri një ngarkesë e pabesueshme.

Të lihen të tilla gjëra në discretion të prodhuesve...

GUI i veglës parashikon profilin e mëposhtëm të "gatshëm":

Numri
ReĆŸimi
Përshkrimi

0
No_FVME
teknologjia Intel BG është e çaktivizuar

1
VE
modaliteti VB është i aktivizuar, fikje me kohë të kufizuar

2
VME
të dy modalitetet (VB dhe MB) janë të aktivizuara, fikje me kohë të kufizuar

3
VM
të dy modalitetet janë të aktivizuara, pa fikje të sistemit

4
FVE
modaliteti VB është i aktivizuar, fikje e menjëhershme

5
FVME
të dy modalitetet janë të aktivizuara, fikje e menjëhershme

Siç u tha mĂ« parĂ«, konfigurimi i Intel BG duhet tĂ« regjistrohet njĂ« herĂ« e pĂ«rgjithmonĂ« nga prodhuesi i sistemit nĂ« fuse-t e çipit (FPF-a) – njĂ« magazinĂ« informacioni ndihmĂ«se (sipas tĂ« dhĂ«nave tĂ« pa verifikuara, vetĂ«m 256 byte) brenda çipit, e cila mund tĂ« programohet jashtĂ« kapaciteteve prodhuese tĂ« kompanisĂ« Intel (pĂ«r kĂ«tĂ« arsye, saktĂ«sisht Field Programmable Fuses).

Ajo është e përshtatshme për ruajtjen e konfigurimit, për shkak se:

  • ka njĂ« zonĂ« one-time-programmable pĂ«r ruajtjen e tĂ« dhĂ«nave (pikĂ«risht atje, ku regjistrohet konfigurimi i Intel BG);
  • kompletim dhe programim mund tĂ« bĂ«het vetĂ«m nga Intel ME.

Pra, për të vendosur konfigurimin për teknologjinë Intel BG në një sistem të caktuar, prodhuesi gjatë prodhimit bën sa vijon:

  1. Me ndihmën e veglës Flash Image Tool (nga Intel STK) krijon një pamje të firmware me konfigurimin e caktuar të Intel BG në formën e variablave brenda rajonit të Intel ME (një "pasqyrë temporale për FPF-a");
  2. Me ndihmën e veglës Flash Programming Tool (nga Intel STK) regjistron këtë pamje në memorien SPI flash të sistemit dhe mbyll "modalitetin e prodhimit" (në këtë moment, dërgohet komanda përkatëse në Intel ME).

Si rezultat i këtyre operacioneve, Intel ME do të angazhojë vlerat e caktuara nga pasqyrat për FPF-a në rajonin ME, do të vendosë lejet në deshifrat SPI flash në vlerat e rekomanduara nga kompania Intel (të përshkruara në fillim të artikullit) dhe do të ushtrojë RESET të sistemit.

Analiza e implementimit të Intel Boot Guard

Me qëllim të analizës së implementimit të kësaj teknologjie në një shembull të caktuar, ne kontrolluam sistemet e mëposhtme përgjatë ndonjë shenje të teknologjisë Intel BG:

Sistemi
Shënim

Gigabyte GA-H170-D3H
Skylake, ka mbështetje

Gigabyte GA-Q170-D3H
Skylake, ka mbështetje

Gigabyte GA-B150-HD3
Skylake, ka mbështetje

MSI H170A Gaming Pro
Skylake, nuk ka mbështetje

Lenovo ThinkPad 460
Skylake, ka mbështetje, teknologjia është e aktivizuar

Lenovo Yoga 2 Pro
Haswell, nuk ka mbështetje

Lenovo U330p
Haswell, nuk ka mbështetje

Me "mbështetje" kuptohet pranimi i modulit Intel BG startup ACM, manifesteve të përmendura më lart dhe kodin përkatës në BIOS, dmth. implementimi për analizë.

Si një shembull, le të përdorim një imazh të shkarkuar nga faqja zyrtare e prodhuesit për Gigabyte GA-H170-D3H (versioni F4).

Intel CPU boot ROM

Së pari, le të flasim për veprimet e procesorit në rast se teknologjia Intel BG është e aktivizuar.

Nuk u gjetën mostra të dekriptuara të mikrokodit, prandaj mënyra se si veprimet e përshkruara më poshtë realizohen (në mikrokod ose në mënyrë harduerike) është një pyetje e hapur. Megjithatë, fakti që procesorët modernë Intel "janë në gjendje" të kryejnë këto veprime është një fakt.

Pas daljes nga gjendja RESET, procesori (në hapësirën e adresave të cilit tashmë është mapuar përmbajtja e memorjes flash) gjen tabelën FIT (Firmware Interface Table). Të gjejë atë është e lehtë, pika e saj e referencës është regjistruar në adresën FFFF FFC0h.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Në shembullin në fjalë, në këtë adresë ndodhet vlera FFD6 9500h. Duke hyrë në këtë adresë, procesori sheh tabelën FIT, përmbajtja e së cilës është e ndarë në regjistra. Regjistri i parë është një titull i strukturës së mëposhtme:

typedef struct FIT_HEADER
{
	char           Tag[8];     // ‘_FIT_   ’
	unsigned long  NumEntries; // duke përfshirë regjistrin e titullit të FIT
	unsigned short Version;    // 1.0
	unsigned char  EntryType;  // 0
	unsigned char  Checksum;
};

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Për një arsye të panjohur, checksum nuk është gjithmonë e kalkuluar në këto tabela (fushat janë lënë me zero).

Të dhënat e tjera tregojnë mbi binarë të ndryshëm, të cilët duhet të parse/ekzekutohen para ekzekutimit të BIOS, domethënë, përpara kalimit në vektorin RESET të trashëguar (FFFF FFF0h). Struktura e çdo regjistri të tillë është si më poshtë:

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

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Fusha EntryType tregon tipin e bllokut që tregojnë këto të dhëna. Ne njohim disa lloje:

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

Tani është evidente se një nga regjistrat i referohet vendndodhjes së binarit Intel BG startup ACM. Struktura e titullit të këtij binari është tipike për modulat e kodit të zhvilluara nga Intel (ACM, përditësime mikro kod dhe seksione të kodit Intel ME, 
).

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

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Procesori e ngarkon këtë binar në cache, e verifikon dhe e ekzekuton.

Intel BG startup ACM

Si rezultat i analizës së funksionimit të këtij ACM, është bërë e qartë se ai bën të siguiente:

  • merr konfigurimin Intel BG nga Intel ME, e regjistruar nĂ« fusible tĂ« chipset-it (FPF);
  • gjen manifestet KEYM dhe IBBM, i verifikon ato.

Për të gjetur këto manifeƥtmeter, ACM gjithashtu përdor tabelën FIT, ku janë dedikuar dy lloje regjistrash për të treguar të dhënat e strukturës (shih FIT_ENTRY_TYPES më sipër).

Të kthehemi pak më në detaje tek manifestet. Në strukturën e manifestit të parë shohim disa konstantë të panjohura, një hash të çelësit publik nga manifesti i dytë dhe çelësi publik OEM Root Key me një nënshkrim në formën e një strukture të brendshme:

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 == madhësia e hash-it?
	unsigned char  IbbmKeyHash[32]; // SHA256 i një çelësi publik IBBM
	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];
};

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Për të vërtetuar çelësin publik OEM Root Key, le të kujtojmë se përdoret hash SHA256 nga fusible, që në këtë moment tashmë është marrë nga Intel ME.

Le të kalojmë te manifesti i dytë. Ai përbëhet nga tre struktura:

typedef struct IBB_MANIFEST
{
	ACBP Acbp;         // Politikat e ngarkesës
	IBBS Ibbs;         // Përshkrimi IBB
	IBB_DESCRIPTORS[];
	PMSG Pmsg;         // Nënshkrimi IBBM
};

NĂ« tĂ« parĂ«n – disa konstantĂ«:

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

Në të dytën, ndodhet SHA256 hash i IBB dhe numri i deskriptoreve që përshkruajnë përmbajtjen e IBB (dmth. ajo nga e cila llogaritet hash-i):

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 == madhësia e hash-it ?
	unsigned char  IbbHash[32];       // SHA256 i IBB
	unsigned char  NumIbbDescriptors;
};

Deskriptorët IBB ndjekin këtë strukturë, njëri pas tjetrit. Përmbajtja e tyre ka formatin e mëposhtëm:

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

E gjithë kjo është e thjeshtë: çdo deskriptor përmban adresën/madhe të një pjese të IBB. Kështu, bashkimi i blloqeve që tregojnë këta deskriptorë (në rendin e vendndodhjes së deskriptorëve vetë) është IBB. Dhe, në përgjithësi, IBB është një grumbullim i të gjitha moduleve të fazave SEC dhe PEI.

Manifesti i dytë përfundon me një strukturë që përmban çelësin publik IBB (i verifikuar nga hash SHA256 nga manifesti i parë) dhe nënshkrimin e këtij manifesti:

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

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Pra, para se të fillojë ekzekutimi i UEFI BIOS, procesori do të aktivizojë ACM, i cili do të kontrollojë autenticitetin e përmbajtjes së seksioneve me kod të fazave SEC dhe PEI. Më pas, procesori del nga ACM, kalon në vektorin RESET dhe fillon të ekzekutojë BIOS.

Seksi PEI i verifikuar duhet të përmbajë një modul që do të verifikojë pjesën tjetër të BIOS (kodin DXE). Ky modul zhvillohet nga IBV (Independent BIOS Vendor) ose vetë prodhuesi i sistemit. Duke qenë se të gjitha sistemet që kishim në dispozicion dhe që mbështesnin Intel BG ishin vetëm Lenovo dhe Gigabyte, le të shqyrtojmë kodin e nxjerrë pikërisht nga këto sisteme.

Moduli UEFI BIOS LenovoVerifiedBootPei

NĂ« rastin e Lenovo, kjo ishte moduli LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}, i zhvilluar nga kompania Lenovo.

Puna e tij është të gjejë (për GUID) tabelën e hash për DXE dhe të verifikojë DXE.

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

Tabela e hash {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ka formatin e mëposhtëm:

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

Moduli UEFI BIOS BootGuardPei

Në rastin e Gigabyte, ky ishte moduli BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}, i zhvilluar nga AMI, ndaj është i pranishëm në çdo BIOS AMI që mbështet Intel BG.

Algoritmi i tij është disi ndryshe, megjithatë, ai përfshin të njëjtin proces:

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

Tabela e hash {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} që ai kërkon ka formatin e mëposhtëm:

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

PĂ«r tĂ« folur shkurtimisht pĂ«r njĂ« implementim tjetĂ«r tĂ« Intel Boot Guard, qĂ« u gjet nĂ« njĂ« sistem mĂ« tĂ« ri tĂ« bazuar nĂ« Intel SoC me mikromarrĂ«dhĂ«nien Apollo Lake — ASRock J4205-IT.

Megjithëse kjo version do të aplikohet vetëm në SoC, sistemet e reja me mikromarrëdhënien Kaby Lake vazhdojnë të përdorin Intel Boot Guard 1.x, ajo paraqet interes të madh në studimin e një varianti të ri të arkitekturës për platforma të Intel SoC, ku ndodhi një ndryshim i ndjeshëm, për shembull:

  • regjionet BIOS dhe Intel ME (nĂ« fakt Intel TXE, sipas terminologjisĂ« pĂ«r Intel SoC) tani janĂ« njĂ« regjion i vetĂ«m IFWI;
  • pavarĂ«sisht qĂ« nĂ« platformĂ« ishte aktivizuar Intel BG, strukturne si FIT, KEYM, IBBM nuk u gjetĂ«n nĂ« memorjen flash;
  • pĂ«rveç TXE dhe bĂ«rthamave ISH (x86), nĂ« çipset u shtua njĂ« bĂ«rthamĂ« e tretĂ« (sĂ«rish ARC, pĂ«r mĂ« tepĂ«r) - PMC (Kontrolluesi i Menaxhimit tĂ« EnergjisĂ«), i lidhur me sigurimin e funksionimit tĂ« nĂ«nstrukturĂ«s sĂ« furnizimit me energji dhe monitorimin e performancĂ«s.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Përmbajtja e re e regjionit IFWI përbëhet nga një grup modula të mëposhtëm:

Offset
Emri
Përshkrimi

0000 2000h
SMIP
një konfigurim platforme, e nënshkruar nga furnizuesi

0000 6000h
RBEP
seksioni i kodit të firmware Intel TXE, x86, e nënshkruar nga Intel

0001 0000h
PMCP
seksioni i kodit të firmware Intel PMC, ARC, e nënshkruar nga Intel

0002 0000h
FTPR
seksioni i kodit të firmware Intel TXE, x86, e nënshkruar nga Intel

0007 B000h
UCOD
përditësimet e mikrocode për CPU, e nënshkruar nga Intel

0008 0000h
IBBP
UEFI BIOS, fazat SEC/PEI, x86, e nënshkruar nga furnizuesi

0021 8000h
ISHC
seksioni i kodit të firmware Intel ISH, x86, e nënshkruar nga furnizuesi

0025 8000h
NFTP
seksioni i kodit të firmware Intel TXE, x86, e nënshkruar nga Intel

0036 1000h
IUNP
e panjohur

0038 1000h
OBBP
UEFI BIOS, faza DXE, x86, nuk është e nënshkruar

GjatĂ« analizĂ«s sĂ« firmware TXE, u bĂ« e qartĂ« se pas RESET-it TXE e mban procesorin nĂ« kĂ«tĂ« gjendje derisa tĂ« pĂ«rgatisĂ« pĂ«rmbajtjen bazĂ« tĂ« hapĂ«sirĂ«s adresuese pĂ«r CPU (FIT, ACM, RESET-vektori 
). MĂ« tej, TXE vendos kĂ«to tĂ« dhĂ«na nĂ« SRAM-in e tij, mĂ« pas i jep pĂ«rkohĂ«sisht procesorit akses atje dhe “e liçon” atĂ« nga RESET-i.

Në mbrojtje të rootkit-ave

Tani kalojmĂ« nĂ« “problem”. NjĂ«herĂ«, zbuluam se nĂ« shumĂ« sisteme, nĂ« deshkrimet e flash SPI ishin tĂ« regjistruara lejet pĂ«r akses nĂ« regjionet e memorjes flash SPI, nĂ« atĂ« mĂ«nyrĂ« qĂ« tĂ« gjithĂ« pĂ«rdoruesit e kĂ«saj memorjeje mund tĂ« shkruajnĂ« dhe tĂ« lexojnĂ« çdo regjion. DomethĂ«nĂ«, ashtu si asnjĂ«.

Pas kontrollit me ndihmën e veglës MEinfo (nga Intel STK), ne pamë se moda e prodhimit në këto sisteme nuk ishte mbyllur, ndaj fuzet e çipset (FPF-të) ishin lënë në një gjendje të papërcaktuar. Po, Intel BG në këto raste as nuk është aktivizuar e as nuk është çaktivizuar.

Këtu flasim për sistemet e mëposhtme (për sa i përket Intel BG dhe për atë që do të pasohet në artikull, do të flasim për sistemet me mikromarrëdhënie Haswell dhe më sipër):

  • tĂ« gjitha produktet Gigabyte;
  • tĂ« gjitha produktet MSI;
  • 21 modele laptopĂ«sh Lenovo dhe 4 modele serverĂ«sh Lenovo.

Sigurisht, ne i raportuam këtë gjetje këtyre furnizuesve, si dhe kompanisë Intel.

Një reagim i arsyeshëm erdhi vetëm nga Lenovo, të cilët e pranuan problemin dhe ndërsa lëshuan një patch.

Gigabyte si duket e pranuan informacionin mbi këtë dobësi, por nuk e komentuan atë.

Komunikimi me MSI u ndal plotĂ«sisht mbi kĂ«rkesĂ«n tonĂ« pĂ«r tĂ« dĂ«rguar çelĂ«sin e tyre tĂ« hapur PGP (pĂ«r tĂ« dĂ«rguar ujdhen e sigurisĂ« nĂ« formĂ« tĂ« koduar). Ata deklaruan se “janĂ« prodhues tĂ« pajisjeve dhe nuk prodhojnĂ« çelĂ«si PGP”.

Por tani pĂ«r realitetin. Duke qenĂ« se fuzet janĂ« lĂ«nĂ« nĂ« njĂ« gjendje tĂ« papĂ«rcaktuar, pĂ«rdoruesi (ose njĂ« sulmues) mund t’i programojĂ« ato vetĂ« (mĂ« e vĂ«shtira Ă«shtĂ« tĂ« gjejĂ« Intel STK). PĂ«r kĂ«tĂ« kĂ«rkohen hapat e mĂ«poshtĂ«m.

1. Të ngarkohet në sistemin operativ Windows (në përgjithësi, veprimet që do të përshkruhen më poshtë mund të bëhen dhe nga Linux, nëse zhvillohet një analog i Intel STK për sistemin e nevojshëm). Duke përdorur veglën MEinfo, të sigurohesh se fuzet në këtë sistem nuk janë programuar.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
2. Të lexosh përmbajtjen e memorjes flash me anë të Veglës së Programimit të Flash.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
3. Hapni imazhin e lexuar me ndihmën e çdo mjeti për redaktimin e UEFI BIOS, bëni ndryshimet e nevojshme (si për shembull, implementoni një rootkit), krijoni/rregulloni strukturat ekzistuese KEYM dhe IBBM në rajonin ME.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Në imazh është theksuar pjesa publike e çelësit RSA, hash-i i të cilit do të programohet në fusht e chipset-it së bashku me konfigurimin tjetër të Intel BG.

4. Me ndihmën e Flash Image Tool krijoni një imazh të ri të firmware (duke vendosur konfigurimin e Intel BG).

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
5. Shkruani imazhin e ri në memorie me ndihmën e Flash Programming Tool, sigurohuni me MEinfo se rajoni ME tani përmban konfigurimin e Intel BG.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
6. Me ndihmën e Flash Programming Tool mbyllni modin e prodhimit.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
7. Sistemi do të ri-ngrihet, pas së cilës me ndihmën e MEinfo mund të kontrolloni se FPF-të tani janë programuar.

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Këto veprime përherë do të aktivizojnë Intel BG në këtë sistem. Anulimi i veprimit nuk do të jetë i mundur, që do të thotë:

  • pĂ«r tĂ« pĂ«rditĂ«suar UEFI BIOS nĂ« kĂ«tĂ« sistem do tĂ« mundet vetĂ«m mbajtĂ«si i pjesĂ«s private tĂ« çelĂ«sit rrĂ«njĂ« (dmth, ai qĂ« aktivizoi Intel BG);
  • nĂ«se kthehet firmware origjinale nĂ« kĂ«tĂ« sistem, pĂ«r shembull, me ndihmĂ«n e njĂ« programatori, ai madje nuk do tĂ« ndizet (pasojĂ« e politikĂ«s sĂ« forcimit nĂ« rast tĂ« gabimit tĂ« verifikimit);
  • pĂ«r tĂ« hequr njĂ« tĂ« tillĂ« UEFI BIOS, duhet tĂ« zĂ«vendĂ«sohet chipset me FPF-tĂ« e programuar me njĂ« "tĂ« pastĂ«r" (dmth, tĂ« ripajisni chipset-in, nĂ«se keni qasje nĂ« njĂ« stacion tĂ« saldimit infra tĂ« kuqe me çmim si njĂ« makinĂ«, ose thjesht zĂ«vendĂ«soni pllakĂ«n e emulimit).

PĂ«r tĂ« kuptuar se çfarĂ« mund tĂ« bĂ«jĂ« njĂ« rootkit i tillĂ«, Ă«shtĂ« e nevojshme tĂ« vlerĂ«sohet se çfarĂ« mundĂ«son ekzekutimin e kodit tĂ« tij nĂ« mjedisin e UEFI BIOS. PĂ«r shembull, nĂ« modin mĂ« tĂ« privilegjuar tĂ« procesorit – SMM. NjĂ« rootkit i tillĂ« mund tĂ« ketĂ« kĂ«to pronĂ«si:

  • tĂ« ekzekutohet paralelisht me OS-nĂ« (mund tĂ« konfigurohet pĂ«r tĂ« shkaktuar njĂ« ndĂ«rprerje SMI, e cila do tĂ« aktivizohet nga njĂ« kronometĂ«r);
  • tĂ« ketĂ« tĂ« gjitha pĂ«rfitimet e qĂ«ndrimit nĂ« modin SMM (qasje tĂ« plotĂ« nĂ« pĂ«rmbajtjen e memories dhe burimeve fizike, fshehtĂ«sia nga OS);
  • kode programore tĂ« rootkit-it mund tĂ« jetĂ« nĂ« formĂ« tĂ« enkriptuar dhe tĂ« dekriptohet gjatĂ« ekzekutimit nĂ« modin SMM. Si çelĂ«s pĂ«r enkriptimin mund tĂ« pĂ«rdoren çdo tĂ« dhĂ«na qĂ« janĂ« tĂ« disponueshme vetĂ«m nĂ« modin SMM. PĂ«r shembull, hash-i i njĂ« grupi adresash nĂ« SMRAM. PĂ«r tĂ« marrĂ« kĂ«tĂ« çelĂ«s, do tĂ« jetĂ« e nevojshme tĂ« hyni nĂ« SMM. Dhe kjo mund tĂ« bĂ«het nĂ« dy mĂ«nyra. Gjeni RCE nĂ« kodin SMM dhe shfrytĂ«zoni, ose shtoni modulin tuaj SMM nĂ« BIOS, gjĂ« e cila Ă«shtĂ« e pamundur, pasi ne aktivizuam Boot Guard.

Pra, kjo dobësi i mundëson sulmuesit:

  • tĂ« krijojĂ« nĂ« sistem njĂ« rootkit tĂ« fshehur, tĂ« papĂ«rdorshĂ«m me qĂ«llim tĂ« panjohur;
  • tĂ« ekzekutojĂ« kodin e tij nĂ« njĂ« nga bĂ«rthamat e chipset-it brenda Intel SoC, pĂ«rkatĂ«sisht, nĂ« Intel ISH (shikoni imazhin me kujdes).

Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Ngarkimi i besueshëm i Schrödingerit. Intel Boot Guard
Megjithëse mundësitë e nënndërfaqes Intel ISH ende nuk janë studiuar, ajo paraqet një vektor të interesant për sulm ndaj Intel ME.

Përfundimet

  1. Hulumtimi mundi të marrë një përshkrim teknik të mënyrës së punës së teknologjisë Intel Boot Guard. Një disavantazh i disa mistereve në modelin e sigurisë së Intel-it përmes obscurity.
  2. Mund të paraqitet një skenar sulmi, i cili mund të krijojë një rootkit të papërdorshëm në sistem.
  3. Përfundimisht, ne pamë se procesorët modernë Intel janë në gjendje të ekzekutojnë shumë kod proprietar përpara fillimit të punës së BIOS.
  4. Platformat me arkitekturë Intel 64 po bëhen gjithnjë e më pak të përshtatshme për të ekzekutuar softuer të lirë: verifikimi i harduerit, numri në rritje i teknologjive dhe nënndërfaqeve proprietare (tri bërthama në chipset-in SoC: x86 ME, x86 ISH dhe ARC PMC).

Mitigations

Dhe nëqoftë se ofruesit që në mënyrë të qëllimshme e mbajnë të hapur modin e prodhimit, duhet ta mbyllin atë patjetër. Deri tani, ata vetëm i mbyllin sytë dhe sistemet e reja Kaby Lake e tregojnë këtë.

Përdoruesit mund të çaktivizojnë vetë Intel BG në sistemet e tyre (të cilat janë të ndjeshme ndaj dobësisë përshkruar), duke nisur utilitarin Flash Programming Tool me parametrin -closemnf. Përpara, duhet të sigurohen (me ndihmën e MEinfo), se konfigurimi i Intel BG në rajonin ME parashikon pikërisht çaktivizimin e kësaj teknologjie pas programimit në FPF-të.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster