Unduh Dipercanten Schrödinger. Intel boot hansip

Unduh Dipercanten Schrödinger. Intel boot hansip
Urang ngajukeun turun ka tingkat low deui ngobrol ngeunaan kaamanan firmware pikeun platform komputer x86-cocog. Waktos ieu, bahan utama pangajaran nyaéta Intel Boot Guard (teu aya patalina sareng Intel BIOS Guard!) - Téknologi boot BIOS anu dirojong ku hardware anu tiasa ngaktifkeun atanapi nganonaktipkeun sistem komputer permanén dina tahap produksi. Muhun, resep panalungtikan geus wawuh ka urang: thinly nyiksikan palaksanaan téhnologi ieu ngagunakeun rékayasa sabalikna, ngajelaskeun arsitéktur na, ngeusian eta kalawan rinci undocumented, usum eta kalawan vektor serangan secukupnya sarta nyampur. Hayu urang tambahkeun suluh kana carita kumaha bug nu geus diklon salila sababaraha taun dina produksi sababaraha ngical paralatan ngamungkinkeun hiji lawan poténsi ngagunakeun téhnologi ieu nyieun rootkit disumputkeun dina sistem nu teu bisa dihapus (malah kalawan programmer a).

Ku jalan kitu, tulisan dumasar kana laporan "Dina Guard of Rootkits: Intel BootGuard" tina konperénsi éta. ZeroNights 2016 jeung rapat ka-29 DefCon Rusia (duanana presentasi di dieu).

Firmware pikeun platform komputer sareng arsitéktur Intel 64

Kahiji, hayu urang ngajawab patarosan: naon firmware platform komputer modern kalawan arsitektur Intel 64? Tangtosna, UEFI BIOS. Tapi jawaban sapertos kitu moal akurat. Hayu urang tingali dina gambar, nu nembongkeun versi desktop (laptop) arsitektur ieu.

Unduh Dipercanten Schrödinger. Intel boot hansip
Dasarna nyaéta tautan:

  • Processor (CPU, Unit Processing Tengah), nu, sajaba cores utama, ngabogaan diwangun-di inti grafik (teu dina sakabéh model) sarta controller memori (IMC, Integrated Mémori controller);
  • Chipset (PCH, Platform Controller Hub), ngandung rupa-rupa Controllers pikeun berinteraksi sareng alat periferal sareng ngatur subsistem. Diantarana nyaéta Intel Management Engine (ME), anu ogé ngagaduhan firmware (firmware Intel ME).

Laptop, salian di luhur, merlukeun hiji diwangun-di controller (ACPI EC, Advanced Control na Power Interface Embedded Controller), nu jawab operasi subsistem kakuatan, touchpad, keyboard, kenop Fn (kacaangan layar, volume sora. , lampu tukang keyboard, jsb) jeung hal séjén. Sarta eta oge boga firmware sorangan.

Janten, totalitas firmware di luhur nyaéta firmware platform komputer (firmware sistem), anu disimpen dina mémori flash SPI umum. Sangkan pamaké memori ieu teu bingung ngeunaan dimana eta, eusi memori ieu dibagi kana wewengkon di handap ieu (sakumaha ditémbongkeun dina gambar):

  • UEFI mios;
  • Firmware ACPI EC (wewengkon anu misah muncul sareng microarchitecture prosesor Skylake (2015), tapi di alam liar kami henteu acan ningali conto pamakeanna, janten firmware tina controller anu diwangun masih kalebet dina UEFI BIOS) ;
  • firmware Intel ME;
  • konfigurasi (alamat MAC, jeung sajabana) tina diwangun-di GbE (Gigabit Ethernet) adaptor jaringan;
  • Flash Descriptors mangrupakeun wewengkon utama memori flash nu ngandung pointers ka wewengkon séjén, kitu ogé idin pikeun ngakses aranjeunna.

Unduh Dipercanten Schrödinger. Intel boot hansip
Master beus SPI, hiji SPI controller diwangun kana chipset nu, ngaliwatan memori ieu diakses, tanggung jawab ngawatesan aksés ka wewengkon (luyu jeung idin dieusian). Upami idin disetel ka nilai anu disarankeun Intel (kanggo alesan kaamanan), maka unggal pangguna flash SPI gaduh aksés pinuh (baca/tulis) ka daérahna wungkul. Jeung sésana téh boh dibaca wungkul atanapi inaccessible. Kanyataan anu dipikanyaho: dina seueur sistem, CPU gaduh aksés pinuh kana UEFI BIOS sareng GbE, baca aksés ngan ukur pikeun deskriptor flash, sareng henteu aya aksés ka wilayah Intel ME. Naha dina seueur, sareng henteu sadayana? Naon anu disarankeun henteu diperyogikeun. Kami bakal nyarios langkung rinci engké dina tulisan.

Mékanisme pikeun ngajagaan firmware platform komputer tina modifikasi

Jelas, firmware tina platform komputer kudu ditangtayungan tina kamungkinan kompromi, anu bakal ngidinan panyerang poténsial pikeun meunangkeun foothold di dinya (salamet OS apdet / reinstallations), ngajalankeun kode maranéhanana dina modeu paling istimewa, jsb. Sareng ngawatesan aksés ka daérah mémori flash SPI, tangtosna, henteu cekap. Ku alatan éta, pikeun nangtayungan firmware tina modifikasi, rupa-rupa mékanisme husus pikeun tiap lingkungan operasi dipaké.

Ku kituna, firmware Intel ME ditandatanganan pikeun ngadalikeun integritas jeung kaaslian, sarta dipariksa ku ME controller unggal waktos eta dimuat kana mémori ME UMA. Proses verifikasi ieu parantos dibahas ku urang di salah sahiji artikel, dedicated ka subsistem Intel ME.

Jeung firmware ACPI EC, sakumaha aturan, dipariksa ngan pikeun integritas. Nanging, kusabab kanyataan yén binér ieu kalebet kana UEFI BIOS, éta ampir sok tunduk kana mékanisme panyalindungan anu sami anu dianggo ku UEFI BIOS. Hayu urang ngobrol ngeunaan aranjeunna.

Mékanisme ieu bisa dibagi jadi dua kategori.

Tulis panyalindungan dina wewengkon UEFI BIOS

  1. Perlindungan fisik eusi mémori lampu kilat SPI kalayan jumper panyalindungan-tulis;
  2. Ngajagi proyéksi daérah UEFI BIOS dina rohangan alamat CPU nganggo registers chipset PRx;
  3. Bloking usaha nulis ka wewengkon mios UEFI ku ngahasilkeun jeung ngolah SMI pakait ngaganggu ku netepkeun BIOS_WE / BLE na SMM_BWP bit dina registers chipset;
  4. Versi anu langkung maju tina panyalindungan ieu nyaéta Intel BIOS Guard (PFAT).

Salian mékanisme ieu, padagang tiasa ngembangkeun sareng ngalaksanakeun ukuran kaamanan sorangan (contona, nandatanganan kapsul sareng apdet UEFI BIOS).

Penting pikeun dicatet yén dina sistem anu khusus (gumantung kana anu ngajual), henteu sadayana mékanisme panyalindungan di luhur tiasa diterapkeun, aranjeunna henteu tiasa diterapkeun pisan, atanapi tiasa dilaksanakeun dina cara anu rentan. Anjeun tiasa maca langkung seueur ngeunaan mékanisme ieu sareng kaayaan sareng palaksanaanna di artikel ieu. Pikeun maranéhanana kabetot, kami nyarankeun yén anjeun maca sakabéh runtuyan artikel ngeunaan kaamanan UEFI mios ti CodeRush.

auténtikasi UEFI BIOS

Nalika urang ngobrol ngeunaan téknologi boot anu dipercaya, hal anu mimiti dipikiran nyaéta Boot Aman. Nanging, sacara arsitéktur dirancang pikeun pariksa kaaslian komponén éksternal kana UEFI BIOS (supir, bootloader, jsb), sanés firmware sorangan.

Ku alatan éta, Intel, dina SoCs kalawan Bay Trail microarchitecture (2012), ngalaksanakeun hiji hardware non-ditumpurkeun Secure Boot (Booting Diverifikasi), nu boga nanaon di umum jeung téhnologi Boot Aman disebutkeun di luhur. Engké (2013), mékanisme ieu ningkat jeung dirilis dina ngaran Intel Boot Guard pikeun desktops kalawan Haswell microarchitecture.

Sateuacan ngajelaskeun Intel Boot Guard, hayu urang tingali lingkungan palaksanaan dina arsitektur Intel 64, anu, dina kombinasi, mangrupikeun akar kapercayaan pikeun téknologi boot anu dipercaya ieu.

Intel CPU

Cap nunjukkeun yén prosésor nyaéta lingkungan palaksanaan utama dina arsitektur Intel 64. Naha éta akar kapercayaan? Tétéla yén anu ngajadikeun anjeunna sapertos kitu nyaéta ayana unsur-unsur ieu:

  • Microcode ROM mangrupakeun non-volatile, memori non-rewritable pikeun nyimpen microcode. Hal ieu dipercaya yén microcode nyaéta palaksanaan sistem paréntah processor ngagunakeun parentah pangbasajanna. Kajadian dina microcode ogé bug. Janten dina mios anjeun tiasa mendakan binér sareng apdet microcode (ditindih nalika boot, sabab ROM henteu tiasa ditindih). Eusi binér ieu énkripsi, nu greatly complicates analisis (ku kituna, eusi spésifik microcode nu ngan dipikawanoh pikeun maranéhanana anu ngamekarkeun eta), sarta ditandatanganan pikeun ngadalikeun integritas jeung kaaslian;
  • konci AES pikeun ngadekrip eusi apdet microcode;
  • hash tina konci publik RSA dipaké pikeun pariksa tanda tangan apdet microcode;
  • Hash konci publik RSA, anu ngaverifikasi tanda tangan modul kode ACM (Modul Kode Dioténtikasi) anu dikembangkeun Intel, anu tiasa diluncurkeun CPU sateuacan palaksanaan BIOS (halo microcode) atanapi nalika operasina, nalika aya kajadian anu tangtu.

Intel ME

Blog kami dikhususkeun pikeun subsistem ieu dua tulisan. Hayu urang ngelingan yén lingkungan laksana ieu dumasar kana hiji mikrokontroler diwangun kana chipset jeung nu paling disumputkeun na hak husus dina sistem.

Sanaos rusiahna, Intel ME ogé mangrupikeun akar kapercayaan sabab gaduh:

  • ME ROM - non-volatile, memori non-rewritable (euweuh métode update disadiakeun) ngandung kode mimiti, kitu ogé SHA256 hash tina RSA konci publik, nu verifies tanda tangan tina firmware Intel ME;
  • konci AES pikeun nyimpen informasi rusiah;
  • aksés ka sakumpulan fuses (FPFs, Field Programmable Fuses) terpadu kana chipset pikeun neundeun permanén sababaraha émbaran, kaasup nu dieusian ku ngajual sistem komputer.

Intel boot hansip 1.x

Bantahan leutik. Nomer versi téknologi Intel Boot Guard anu kami anggo dina tulisan ieu sawenang-wenang sareng henteu aya hubunganana sareng panomeran anu dianggo dina dokuméntasi internal Intel. Sajaba ti éta, informasi disadiakeun dieu ngeunaan palaksanaan téhnologi ieu dicandak salila rékayasa sabalikna, sarta mungkin ngandung akurat dibandingkeun spésifikasi pikeun Intel boot hansip, nu saperti teu mirip kantos diterbitkeun.

Janten, Intel Boot Guard (BG) mangrupikeun téknologi verifikasi auténtikasi UEFI BIOS anu didukung hardware. Ditilik ku pedaran pondokna dina buku [Platform Embedded Security Technology Revealed, bab Boot with Integrity, or Not Boot], éta tiasa dianggo salaku ranté boot anu dipercaya. Jeung link munggaran di dinya teh kode boot (microcode) jero CPU, nu dipicu ku acara RESET (teu aya patalina jeung véktor RESET dina mios ka!). CPU mendakan modul kode anu dikembangkeun sareng ditandatanganan ku Intel (ACM ngamimitian Intel BG) dina mémori lampu kilat SPI, ngamuat kana cache-na, pariksa (anu parantos dicatet di luhur yén CPU ngagaduhan hash tina konci umum anu ngaverifikasi ACM. tanda tangan) sareng dimimitian.

Unduh Dipercanten Schrödinger. Intel boot hansip

Modul kode ieu tanggung jawab pikeun pariksa bagian awal leutik tina UEFI BIOS - Initial Boot Block (IBB), anu, kahareupna ngandung fungsionalitas pikeun pariksa bagian utama UEFI BIOS. Ku kituna, Intel BG ngidinan Anjeun pikeun pariksa kaaslian mios saméméh muka OS (anu bisa dipigawé dina pangawasan téhnologi Boot Aman).

Téknologi Intel BG nyayogikeun dua modeu operasi (sareng hiji henteu ngaganggu anu sanés, nyaéta duanana modeu tiasa diaktipkeun dina sistem, atanapi duanana tiasa ditumpurkeun).

Diukur Boot

Dina mode Measured Boot (MB), unggal komponén boot (dimimitian ku CPU boot ROM) "ngukur" salajengna ngagunakeun kamampuan TPM (Modul Platform Terpercaya). Pikeun anu henteu terang, hayu atuh ngajelaskeun.

TPM ngagaduhan PCR (Platform Configuration Registers), dimana hasil operasi hashing ditulis dumasar kana rumus:

Unduh Dipercanten Schrödinger. Intel boot hansip

Jelema. nilai PCR ayeuna gumantung kana saméméhna, sarta registers ieu reset ngan lamun sistem RESET.

Janten, dina modeu MB, dina sababaraha waktos, PCR ngagambarkeun unik (dina kamampuan operasi hashing) tina kode atanapi data anu "diukur." Nilai PCR tiasa dianggo dina sababaraha operasi enkripsi data (TPM_Seal). Sanggeus ieu, dekripsi maranéhanana (TPM_Unseal) bakal mungkin ngan lamun nilai PCR teu robah salaku hasil loading (ie, teu hiji komponén "diukur" dirobah).

Boot Diverifikasi

Hal anu paling parah pikeun anu resep ngarobih UEFI BIOS nyaéta mode Verified Boot (VB), dimana unggal komponén boot sacara cryptographically marios integritas sareng kaaslian anu salajengna. Sareng upami aya kasalahan verifikasi, (salah sahiji) kajadian:

  • shutdown ku timeout ti 1 menit nepi ka 30 menit (supaya pamaké boga waktu pikeun ngarti naha komputer na teu boot, sarta, upami mungkin, nyoba mulangkeun mios ka);
  • shutdown saharita (supaya pamaké teu boga waktu pikeun ngarti, teuing kirang ngalakukeun, nanaon);
  • neraskeun damel kalayan ekspresi anu tenang (éta bisi teu aya waktos pikeun kaamanan, sabab aya hal anu langkung penting pikeun dilakukeun).

Pilihan tindakan gumantung kana konfigurasi Intel BG anu ditangtukeun (nyaéta, dina anu disebut kawijakan penegak), anu permanén dirékam ku padagang platform komputer dina panyimpenan anu dirarancang khusus - fuses chipset (FPFs). Urang bakal ngobrol ngeunaan titik ieu dina leuwih jéntré engké.

Salian konfigurasi, padagang ngahasilkeun dua konci RSA 2048 sareng nyiptakeun dua struktur data (ditémbongkeun dina gambar):

  1. Manifes konci root vendor (KEYM, OEM Root Key Manifest), anu ngandung SVN (Nomer Vérsi Kaamanan) tina manifesto ieu, hash SHA256 tina konci umum tina manifesto salajengna, konci publik RSA (nyaéta bagian umum tina konci root vendor) pikeun pariksa tanda tangan tina manifesto ieu sareng tanda tangan sorangan;
  2. IBB Manifest (IBBM, Initial Boot Block Manifest), anu ngandung SVN tina manifesto ieu, SHA256 hash of IBB, konci umum pikeun verifikasi tanda tangan tina manifesto ieu sareng tanda tangan sorangan.

Hash SHA256 tina konci umum OEM Root Key dirékam permanén dina sekering chipset (FPF), sapertos konfigurasi Intel BG. Upami konfigurasi Intel BG nyayogikeun téknologi ieu, maka ti ayeuna ngan ukur anu gaduh bagian pribadi OEM Root Key tiasa ngamutahirkeun mios dina sistem ieu (nyaéta, tiasa ngitung deui manifests ieu), nyaéta. padagang.

Unduh Dipercanten Schrödinger. Intel boot hansip

Nalika ningali gambarna, mamang langsung timbul ngeunaan kabutuhan ranté verifikasi anu panjang - aranjeunna tiasa nganggo hiji manifest. Naha ngahesekeun hal?

Nyatana, Intel masihan kasempetan ka vendor pikeun ngagunakeun konci IBB anu béda pikeun garis produk anu béda sareng hiji salaku konci akar. Upami bagian pribadi tina konci IBB (kalayan manifes kadua ditandatanganan) bocor, kajadian éta ngan ukur mangaruhan hiji garis produk sareng ngan dugi ka anu ngajual ngahasilkeun pasangan énggal sareng kalebet manifes anu diitung deui dina pembaruan BIOS salajengna.

Tapi upami konci akar (kalayan manifes munggaran ditandatanganan) dikompromi, éta moal mungkin pikeun ngagentosna; teu aya prosedur panyabutan anu disayogikeun. Hash sahiji bagian publik konci ieu diprogram kana FPF sakali tur pikeun sakabéh.

Konfigurasi Intel boot hansip

Ayeuna hayu urang tingali langkung caket kana konfigurasi Intel BG sareng prosés nyiptakeunana. Upami anjeun ningali tab anu saluyu dina GUI utilitas Flash Image Tool ti Intel System Tool Kit (STK), anjeun bakal perhatikeun yén konfigurasi Intel BG kalebet hash tina bagian umum tina konci root vendor, sababaraha nilai teu jelas, jsb. Propil Intel BG.

Unduh Dipercanten Schrödinger. Intel boot hansip

Struktur profil ieu:

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

Sacara umum, konfigurasi Intel BG mangrupikeun éntitas anu fleksibel. Pertimbangkeun, contona, bandéra Force_Boot_Guard_ACM. Nalika eta dihapus, lamun BG ngamimitian modul ACM on flash SPI teu kapanggih, moal boot dipercaya lumangsung. Manehna bakal untrusted.

Kami parantos nyerat di luhur yén kabijakan penegak pikeun mode VB tiasa dikonpigurasi supados upami aya kasalahan verifikasi, undeuran anu teu dipercaya bakal lumangsung.

Ninggalkeun hal-hal sapertos kawijaksanaan para padagang ...

Utilitas GUI nyayogikeun propil "siap-siap" ieu:

jumlah
Modeu
gambaran

0
No_FVME
téhnologi Intel BG ditumpurkeun

1
VE
modeu VB diaktipkeun, shutdown ku seep

2
VME
duanana mode diaktipkeun (VB jeung MB), shutdown ku seep

3
VM
duanana mode diaktipkeun, tanpa mareuman sistem

4
FVE
modeu VB diaktipkeun, shutdown saharita

5
FVME
duanana mode diaktipkeun, shutdown saharita

Sakumaha anu parantos disebatkeun, konfigurasi Intel BG kedah ditulis sakali sareng salamina ku padagang sistem kana sekering chipset (FPFs) - a leutik (nurutkeun inpormasi anu teu diverifikasi, ngan ukur 256 bait) neundeun hardware inpormasi di jero chipset, anu tiasa diprogram. di luar fasilitas produksi Intel (éta naha persis Médan Programmable Sekering).

Éta hadé pikeun nyimpen konfigurasi sabab:

  • boga wewengkon hiji-waktos-programmable pikeun nyimpen data (persis dimana konfigurasi Intel BG ditulis);
  • Ngan Intel ME nu bisa maca jeung program eta.

Janten, pikeun nyetél konfigurasi téknologi Intel BG dina sistem khusus, anu ngajual ngalakukeun ieu nalika produksi:

  1. Nganggo utilitas Flash Image Tool (tina Intel STK), nyiptakeun gambar firmware kalayan konfigurasi Intel BG anu dipasihkeun dina bentuk variabel dina wilayah Intel ME (nu disebut eunteung samentara pikeun FPF);
  2. Ngagunakeun utilitas Flash Programming Tool (tina Intel STK), nyerat gambar ieu kana mémori flash SPI sistem sareng nutup anu disebut. modeu manufaktur (dina hal ieu, paréntah pakait dikirim ka Intel ME).

Salaku hasil tina operasi ieu, Intel ME bakal ngalakukeun nilai-nilai anu ditangtukeun tina eunteung pikeun FPF di daérah ME ka FPF, nyetél résolusi dina deskriptor lampu kilat SPI kana nilai anu disarankeun ku Intel (dijelaskeun dina awal artikel) sareng ngalaksanakeun RESET sistem.

Analisis palaksanaan Intel boot hansip

Pikeun nganalisis palaksanaan téknologi ieu nganggo conto khusus, kami pariksa sistem di handap ieu pikeun ngambah téknologi Intel BG:

sistim
nyarios

Gigabyte GA-H170-D3H
Skylake, aya dukungan

Gigabyte GA-Q170-D3H
Skylake, aya dukungan

Gigabyte GA-B150-HD3
Skylake, aya dukungan

MSI H170A kaulinan Pro
Skylake, euweuh rojongan

Lenovo ThinkPad 460
Skylake, didukung, téknologi diaktipkeun

Lenovo Yoga 2 Pro
Haswell, teu aya dukungan

Lenovo U330p
Haswell, teu aya dukungan

Ku "rojongan" kami hartosna ayana modul ACM ngamimitian Intel BG, manifests disebutkeun di luhur jeung kode pakait dina mios, i.e. palaksanaan pikeun analisis.

Salaku conto, hayu urang nyandak hiji diundeur ti kantor. gambar ramatloka ngajual memori flash SPI pikeun Gigabyte GA-H170-D3H (versi F4).

Intel CPU boot ROM

Anu mimiti, hayu urang ngobrol ngeunaan lampah prosésor lamun téhnologi Intel BG diaktipkeun.

Teu mungkin pikeun mendakan conto mikrokode anu didekripsi, janten kumaha tindakan anu dijelaskeun di handap ieu dilaksanakeun (dina mikrokode atanapi hardware) mangrupikeun patarosan anu kabuka. Nanging, kanyataan yén prosesor Intel modern "tiasa" ngalakukeun tindakan ieu.

Saatos kaluar tina kaayaan RESET, prosésor (eusi mémori flash parantos dipetakeun kana rohangan alamat) mendakan tabel FIT (Firmware Interface Table). Ieu gampang pikeun manggihan; pointer ka dinya ditulis dina alamat FFFF FFC0h.

Unduh Dipercanten Schrödinger. Intel boot hansip
Dina conto anu ditalungtik, nilai FFD6 9500h aya di alamat ieu. Ku ngaksés alamat ieu, prosesor ningali tabel FIT, anu eusina dibagi kana rékaman. Éntri kahiji nyaéta lulugu tina struktur ieu:

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

Unduh Dipercanten Schrödinger. Intel boot hansip
Kanggo sababaraha alesan nu teu dipikanyaho, checksum teu salawasna diitung dina tabel ieu (sawah ditinggalkeun nol).

Sésana éntri nunjuk kana rupa-rupa binari anu kedah diparse/dieksekusi sateuacan BIOS dieksekusi, nyaéta. sateuacan ngalih ka vektor RESET warisan (FFFF FFF0h). Struktur unggal éntri sapertos kieu:

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

Unduh Dipercanten Schrödinger. Intel boot hansip
Widang EntryType ngabejaan Anjeun tipe blok entri ieu nunjuk ka. Urang terang sababaraha jinis:

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

Ayeuna écés yén salah sahiji éntri nunjuk ka lokasi binér ACM ngamimitian Intel BG. Struktur lulugu binér ieu has pikeun modul kode dikembangkeun ku Intel (ACMs, apdet microcode, bagian kode 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];
};

Unduh Dipercanten Schrödinger. Intel boot hansip
Prosesor ngamuat binér ieu kana cache na, pariksa sareng ngajalankeunana.

Intel BG ngamimitian ACM

Salaku hasil analisa karya ACM ieu, janten jelas yén éta ngalakukeun di handap:

  • narima konfigurasi Intel BG ti Intel ME, ditulis kana fuses chipset (FPFs);
  • manggihan KEYM na IBBM manifests na verifies aranjeunna.

Pikeun manggihan manifests ieu, ACM ogé ngagunakeun tabel FIT, nu boga dua jenis éntri pikeun nunjukkeun data struktur (tingali FIT_ENTRY_TYPES luhur).

Hayu urang nempo leuwih deukeut manifestos. Dina struktur manifes kahiji, urang ningali sababaraha konstanta anu teu jelas, hash tina konci umum tina manifes kadua, sareng OEM Root Key umum ditandatanganan salaku struktur nested:

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

Unduh Dipercanten Schrödinger. Intel boot hansip
Pikeun pariksa konci umum OEM Root Key, urang émut yén kami nganggo sekering SHA256 hash, anu dina waktos ieu parantos nampi ti Intel ME.

Hayu urang ngaléngkah ka manifesto kadua. Ieu diwangun ku tilu struktur:

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

Anu kahiji ngandung sababaraha konstanta:

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

Anu kadua ngandung hash SHA256 tina IBB sareng jumlah deskriptor anu ngajelaskeun eusi IBB (nyaéta, tina naon hash diitung):

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

Deskriptor IBB nuturkeun struktur ieu, hiji-hiji. Eusina ngagaduhan format ieu:

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

Ieu basajan: unggal deskriptor ngandung alamat / ukuran chunk IBB. Ku kituna, concatenation tina blok nunjuk ku deskriptor ieu (dina urutan deskriptor sorangan) nyaéta IBB. Sareng, sakumaha aturan, IBB mangrupikeun kumpulan sadaya modul fase SEC sareng PEI.

Manifes kadua réngsé ku struktur anu ngandung konci umum IBB (diverifikasi ku hash SHA256 tina manifest munggaran) sareng tanda tangan tina manifest ieu:

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

Unduh Dipercanten Schrödinger. Intel boot hansip
Janten, bahkan sateuacan UEFI BIOS mimiti ngajalankeun, prosésor bakal ngaluncurkeun ACM, anu bakal pariksa kaaslian eusi bagian sareng kode fase SEC sareng PEI. Salajengna, prosésor kaluar tina ACM, nuturkeun vektor RESET sareng ngamimitian ngaéksekusi mios.

Partisi PEI anu diverifikasi kedah ngandung modul anu bakal mariksa sesa BIOS (kode DXE). Modul ieu parantos dikembangkeun ku IBV (Independent BIOS Vendor) atanapi vendor sistem sorangan. Sabab Ngan ukur sistem Lenovo sareng Gigabyte anu aya dina pembuangan urang sareng gaduh dukungan Intel BG; hayu urang tingali kode anu sasari tina sistem ieu.

modul UEFI mios LenovoVerifiedBootPei

Dina kasus Lenovo, tétéla éta modul LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}, dikembangkeun ku Lenovo.

Tugasna nyaéta milarian (ku GUID) tabel hash pikeun DXE sareng pariksa DXE.

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

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

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

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

UEFI BIOS modul BootGuardPei

Dina kasus Gigabyte, tétéla éta modul BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}, dikembangkeun ku AMI, ku kituna, hadir dina sagala AMI BIOS kalayan rojongan Intel BG.

Algoritma operasina rada béda, tapi éta sami-sami:

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

Tabel hash {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} anu dipilarian ngagaduhan format ieu:

typedef HASH_TABLE DXE_DESCRIPTORS[];

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

Intel boot hansip 2.x

Hayu urang sakeudeung ngobrol ngeunaan palaksanaan sejen tina Intel Boot Guard, nu kapanggih dina sistem anyar dumasar kana Intel SoC kalawan Apollo Lake microarchitecture - ASRock J4205-IT.

Sanajan versi ieu ngan bakal dipaké dina SoCs (sistem anyar kalawan Kaby Lake processor microarchitecture terus ngagunakeun Intel Boot Guard 1.x), éta dipikaresep hébat dina diajar pilihan arsitéktur anyar pikeun platform Intel SoC, nu geus katempo parobahan signifikan. contona:

  • wewengkon mios jeung Intel ME (atawa rada Intel TXE, nurutkeun terminologi pikeun Intel SoC) ayeuna hiji wewengkon IFWI;
  • sanajan Intel BG diaktipkeun dina platform, struktur kayaning FIT, KEYM, IBBM teu kapanggih dina mémori flash;
  • sajaba TXE na ISH cores (x86), a inti katilu ieu ditambahkeun kana chipset (ARC deui, saliwatan) - PMC (Power Manajemén controller), pakait sareng mastikeun operability tina subsistem kakuatan sarta ngawaskeun kinerja.

Unduh Dipercanten Schrödinger. Intel boot hansip
Eusi wilayah IFWI anyar nyaéta sakumpulan modul ieu:

Bias
nami
gambaran

0000 2000h
SMIP
konfigurasi platform tangtu, ditandatanganan ku ngajual

0000 6000h
RBEP
Intel TXE bagian kode firmware, x86, ditandatanganan Intel

0001 0000h
PMCP
Intel PMC bagian kode firmware, ARC, ditandatanganan Intel

0002 0000h
FTPR
Intel TXE bagian kode firmware, x86, ditandatanganan Intel

0007 B000h
UCOD
apdet microcode pikeun CPU, ditandatanganan ku Intel

0008 0000h
IBBP
UEFI BIOS, fase SEC / PEI, x86, ditandatanganan ku anu ngajual

0021 8000h
ISHC
Bagian kode firmware Intel ISH, x86, ditandatanganan ku ngajual

0025 8000h
NFTP
Intel TXE bagian kode firmware, x86, ditandatanganan Intel

0036 1000h
IUNP
teu kanyahoan

0038 1000h
OBBP
UEFI mios, fase DXE, x86, unsigned

Salila analisa firmware TXE, janten écés yén saatos RESET, TXE ngajaga prosesor dina kaayaan ieu dugi ka nyiapkeun eusi dasar rohangan alamat pikeun CPU (FIT, ACM, RESET vektor ...). Leuwih ti éta, TXE nempatkeun data ieu dina SRAM na, sanggeus éta samentara méré aksés processor aya na "ngaleupaskeun" tina RESET.

Dina hansip ngalawan rootkits

Muhun, ayeuna hayu urang ngaléngkah ka "panas" barang. Kami sakali mendakan yén dina seueur sistem, deskriptor lampu kilat SPI ngandung idin pikeun ngaksés daérah mémori lampu kilat SPI supados sadaya pangguna mémori ieu tiasa nyerat sareng maca daérah mana waé. Jelema. ah maenya.

Saatos mariksa sareng utilitas MEinfo (tina Intel STK), kami ningali yén modeu manufaktur dina sistem ieu henteu ditutup, janten, sekering chipset (FPFs) ditinggalkeun dina kaayaan anu teu jelas. Leres, Intel BG henteu dihurungkeun atanapi dipareuman dina kasus sapertos kitu.

Urang ngobrol ngeunaan sistem di handap ieu (nu ngeunaan Intel BG jeung naon anu bakal dijelaskeun engké dina artikel, urang bakal ngobrol ngeunaan sistem jeung microarchitecture processor Haswell tur luhur):

  • kabéh produk Gigabyte;
  • sadaya produk MSI;
  • 21 model laptop Lenovo jeung 4 model server Lenovo.

Tangtosna, kami ngalaporkeun penemuan éta ka padagang ieu, ogé ka Intel.

Hiji réaksi nyukupan datang ngan ti Lenovoanu dipikawanoh masalah na dileupaskeun patch a.

Gigabyte Aranjeunna sigana nampi inpormasi ngeunaan kerentanan, tapi henteu masihan koméntar ku cara naon waé.

Komunikasi sareng MSI sagemblengna stalled on pamundut urang pikeun ngirim konci PGP publik anjeun (pikeun ngirim aranjeunna piwuruk kaamanan dina formulir énkripsi). Aranjeunna nyatakeun yén aranjeunna "produsén hardware sareng henteu ngahasilkeun konci PGP."

Tapi hayu urang angkat ka titik. Kusabab sekering ditinggalkeun dina kaayaan anu henteu ditangtukeun, pangguna (atanapi panyerang) tiasa ngaprogramna sacara mandiri (hal anu paling hese nyaéta manggihan Intel STK). Jang ngalampahkeun ieu, anjeun kudu ngalengkepan léngkah di handap ieu.

1. Boot kana Windows OS (sacara umum, tindakan anu dijelaskeun di handap ogé tiasa dilakukeun dina Linux, upami anjeun ngembangkeun analog Intel STK pikeun OS anu dipikahoyong). Ngagunakeun utilitas MEinfo, pastikeun yén sekering teu diprogram dina sistem ieu.

Unduh Dipercanten Schrödinger. Intel boot hansip
2. Baca eusi mémori flash maké Flash Programming Tool.

Unduh Dipercanten Schrödinger. Intel boot hansip
3. Buka gambar baca nganggo alat éditan UEFI BIOS, jieun perobahan anu diperyogikeun (ngawanohkeun rootkit, contona), jieun / édit struktur KEYM sareng IBBM anu aya di daérah ME.

Unduh Dipercanten Schrödinger. Intel boot hansip
Unduh Dipercanten Schrödinger. Intel boot hansip
Gambar nyorot bagian umum tina konci RSA, anu hash bakal diprogram kana sekering chipset sareng sesa konfigurasi Intel BG.

4. Ngagunakeun Flash Image Tool, ngawangun gambar firmware anyar (ku netepkeun konfigurasi Intel BG).

Unduh Dipercanten Schrödinger. Intel boot hansip
5. Nulis gambar anyar pikeun flash memori ngagunakeun Flash Programming Alat, sarta pariksa maké MEinfo yén wewengkon ME ayeuna ngandung konfigurasi Intel BG.

Unduh Dipercanten Schrödinger. Intel boot hansip
6. Pake Flash Programming Tool pikeun nutup mode manufaktur.

Unduh Dipercanten Schrödinger. Intel boot hansip
7. Sistem bakal reboot, saatos éta anjeun tiasa nganggo MEinfo pikeun pariksa yén FPF ayeuna diprogram.

Unduh Dipercanten Schrödinger. Intel boot hansip
lampah ieu salilana ngaktipkeun Intel BG dina sistem ieu. Peta teu tiasa dibolaykeun, anu hartosna:

  • Ngan nu boga bagian pribadi tina konci root (i.e., hiji anu ngaktipkeun Intel BG) bakal tiasa ngamutahirkeun UEFI mios dina sistem ieu;
  • lamun balik firmware aslina mun sistem ieu, contona, ngagunakeun programmer a, malah moal ngahurungkeun (konsékuansi tina kawijakan penegak bisi kasalahan verifikasi);
  • Pikeun ngaleungitkeun mios UEFI sapertos kitu, anjeun kedah ngagentos chipset sareng FPF anu diprogram ku "bersih" (nyaéta, pasang deui chipset upami anjeun gaduh aksés ka stasiun pematerian infra red dina harga mobil, atanapi ngan saukur ngagentos motherboard. ).

Pikeun ngartos naon anu tiasa dilakukeun ku rootkit, anjeun kedah ngira-ngira naon anu ngamungkinkeun pikeun ngaéksekusi kode anjeun dina lingkungan UEFI BIOS. Hayu urang nyebutkeun, dina modeu processor paling istiméwa - SMM. Rootkit sapertos kitu tiasa gaduh sipat ieu:

  • dieksekusi sajajar jeung OS (anjeun bisa ngonpigurasikeun processing keur ngahasilkeun hiji ngaganggu SMI, nu bakal dipicu ku timer a);
  • gaduh sadayana kaunggulan dina modeu SMM (aksés pinuh kana eusi RAM sareng sumber hardware, rasiah tina OS);
  • Kode program rootkit tiasa énkripsi sareng dekripsi nalika diluncurkeun dina modeu SMM. Sakur data anu ngan aya dina modeu SMM tiasa dianggo salaku konci énkripsi. Contona, hiji hash tina sakumpulan alamat di SMRAM. Pikeun kéngingkeun konci ieu, anjeun kedah lebet kana SMM. Sareng ieu tiasa dilakukeun ku dua cara. Manggihan RCE dina kode SMM sarta mangpaatkeun eta, atawa tambahkeun modul SMM sorangan mun mios ka, nu teu mungkin saprak urang diaktipkeun boot hansip.

Ku kituna, kerentanan ieu ngamungkinkeun panyerang pikeun:

  • nyieun disumputkeun, rootkit undeletetable tujuan kanyahoan dina sistem;
  • ngaéksekusi kode anjeun dina salah sahiji inti chipset jero Intel SoC, nyaéta, dina Intel ISH (nyandak ati-ati dina gambar).

Unduh Dipercanten Schrödinger. Intel boot hansip
Unduh Dipercanten Schrödinger. Intel boot hansip
Sanaos kamampuan subsistem Intel ISH henteu acan digali, sigana mangrupikeun vektor serangan anu pikaresepeun pikeun Intel ME.

papanggihan

  1. Panalitian ngamungkinkeun pikeun kéngingkeun pedaran téknis ngeunaan operasi téknologi Intel Boot Guard. Minus sababaraha rusiah dina kaamanan Intel ngaliwatan modél obscurity.
  2. Skenario serangan dibere nu ngidinan Anjeun pikeun nyieun hiji rootkit uninstallable dina sistem.
  3. Kami ningali yén prosesor Intel modéren sanggup ngalaksanakeun seueur kode proprietary bahkan sateuacan BIOS mimiti jalan.
  4. Platform sareng arsitéktur Intel 64 janten kirang cocog pikeun ngajalankeun parangkat lunak gratis: verifikasi hardware, paningkatan téknologi proprietary sareng subsistem (tilu inti dina chipset SoC: x86 ME, x86 ISH sareng ARC PMC).

Mitigasi

Vendor anu ngahaja ninggalkeun mode manufaktur kabuka kedah pastikeun nutup éta. Sajauh ieu, ngan ukur panonna ditutup, sareng sistem Kaby Lake énggal nunjukkeun ieu.

Pamaké tiasa nganonaktipkeun Intel BG dina sistemna (anu rentan kana kerentanan anu dijelaskeun) ku ngajalankeun Flash Programming Tool sareng parameter -closemnf. Kahiji, anjeun kudu mastikeun (ngagunakeun MEinfo) yén konfigurasi Intel BG di wewengkon ME nyadiakeun pikeun mareuman téhnologi ieu sanggeus program di FPFs.

sumber: www.habr.com

Tambahkeun komentar