Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Tunapendekeza kwenda chini hadi kiwango cha chini tena na kuzungumza juu ya usalama wa firmware kwa majukwaa ya kompyuta yanayolingana na x86. Wakati huu, kiungo kikuu cha utafiti ni Intel Boot Guard (isichanganyike na Intel BIOS Guard!) - teknolojia ya boot ya BIOS inayoungwa mkono na vifaa ambayo muuzaji wa mfumo wa kompyuta anaweza kuwezesha au kuzima kabisa katika hatua ya uzalishaji. Kweli, kichocheo cha utafiti tayari kinajulikana kwetu: kata nyembamba utekelezaji wa teknolojia hii kwa kutumia uhandisi wa nyuma, elezea usanifu wake, ukijaza kwa maelezo ambayo hayajaandikwa, uimimishe na vectors za mashambulizi ili kuonja na kuchanganya. Wacha tuongeze mafuta kwenye hadithi ya jinsi mdudu ambaye ameundwa kwa miaka mingi katika utengenezaji wa wachuuzi kadhaa huruhusu mvamizi anayeweza kutumia teknolojia hii kuunda kifurushi kilichofichwa kwenye mfumo ambacho hakiwezi kuondolewa (hata na kitengeneza programu).

Kwa njia, nakala hiyo inategemea ripoti "On Guard of Rootkits: Intel BootGuard" kutoka kwa mkutano huo. ZeroNights 2016 na mkutano wa 29 DefCon Urusi (mawasilisho yote mawili hapa).

Firmware kwa jukwaa la kompyuta na usanifu wa Intel 64

Kwanza, hebu tujibu swali: ni nini firmware ya jukwaa la kisasa la kompyuta na usanifu wa Intel 64? Bila shaka, UEFI BIOS. Lakini jibu kama hilo halitakuwa sahihi. Hebu tuangalie picha, ambayo inaonyesha toleo la desktop (laptop) ya usanifu huu.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Msingi ni kiungo:

  • Processor (CPU, Kitengo cha Usindikaji Kati), ambayo, pamoja na cores kuu, ina msingi wa graphics uliojengwa (sio katika mifano yote) na mtawala wa kumbukumbu (IMC, Kidhibiti cha Kumbukumbu kilichounganishwa);
  • Chipset (PCH, Hub ya Kidhibiti cha Mfumo), iliyo na vidhibiti mbalimbali vya kuingiliana na vifaa vya pembeni na kudhibiti mifumo midogo. Miongoni mwao ni Injini ya Usimamizi ya Intel inayojulikana (ME), ambayo pia ina firmware (firmware ya Intel ME).

Kompyuta za mkononi, pamoja na hapo juu, zinahitaji kidhibiti kilichojengwa ndani (ACPI EC, Udhibiti wa Juu na Kidhibiti Kinachopachikwa cha Kiolesura cha Nguvu), ambacho kinawajibika kwa uendeshaji wa mfumo mdogo wa nguvu, touchpad, kibodi, funguo za Fn (mwangaza wa skrini, sauti ya sauti. , backlight ya kibodi, n.k. ) na mambo mengine. Na pia ina firmware yake mwenyewe.

Kwa hiyo, jumla ya firmware hapo juu ni firmware ya jukwaa la kompyuta (firmware ya mfumo), ambayo imehifadhiwa kwenye kumbukumbu ya kawaida ya SPI flash. Ili watumiaji wa kumbukumbu hii wasichanganyikiwe kuhusu mahali ilipo, yaliyomo kwenye kumbukumbu hii imegawanywa katika mikoa ifuatayo (kama inavyoonekana kwenye takwimu):

  • UEFI BIOS;
  • Firmware ya ACPI EC (eneo tofauti lilionekana na usanifu wa processor ya Skylake (2015), lakini katika pori bado hatujaona mifano ya matumizi yake, kwa hivyo firmware ya mtawala aliyejengwa bado imejumuishwa kwenye UEFI BIOS) ;
  • Firmware ya Intel ME;
  • usanidi (anwani ya MAC, nk) ya adapta ya mtandao ya GbE (Gigabit Ethernet) iliyojengwa;
  • Vifafanuzi vya Flash ni eneo kuu la kumbukumbu ya flash ambayo ina viashiria vya maeneo mengine, pamoja na ruhusa ya kuzifikia.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Bwana wa basi la SPI, mtawala wa SPI aliyejengwa ndani ya chipset, ambayo kumbukumbu hii inafikiwa, inawajibika kwa kuweka mipaka ya ufikiaji wa mikoa (kulingana na ruhusa maalum). Ikiwa ruhusa zimewekwa kwa thamani zinazopendekezwa za Intel (kwa sababu za usalama), basi kila mtumiaji wa SPI flash ana ufikiaji kamili (kusoma/kuandika) kwa eneo lake pekee. Na zingine ni za kusoma tu au hazipatikani. Ukweli unaojulikana: kwenye mifumo mingi, CPU ina ufikiaji kamili wa UEFI BIOS na GbE, ufikiaji wa kusoma tu kwa maelezo ya flash, na hakuna ufikiaji wa eneo la Intel ME kabisa. Kwa nini kwa wengi, na sio kwa wote? Kinachopendekezwa hakihitajiki. Tutakuambia kwa undani zaidi baadaye katika makala.

Mbinu za kulinda mfumo dhibiti wa jukwaa la kompyuta dhidi ya urekebishaji

Kwa wazi, programu dhibiti ya jukwaa la kompyuta inapaswa kulindwa kutokana na maelewano yanayoweza kutokea, ambayo yangemruhusu mshambulizi anayeweza kupata nafasi ndani yake (kusasisha masasisho/usakinishaji upya wa OS), tekeleza msimbo wao kwa njia zilizobahatika zaidi, n.k. Na kuzuia ufikiaji wa maeneo ya kumbukumbu ya flash ya SPI ni, bila shaka, haitoshi. Kwa hiyo, ili kulinda firmware kutokana na marekebisho, taratibu mbalimbali maalum kwa kila mazingira ya uendeshaji hutumiwa.

Kwa hivyo, programu dhibiti ya Intel ME imetiwa saini ili kudhibiti uadilifu na uhalisi, na inakaguliwa na kidhibiti cha ME kila wakati inapopakiwa kwenye kumbukumbu ya ME UMA. Mchakato huu wa uthibitishaji tayari umejadiliwa na sisi katika mojawapo ya makala, iliyowekwa kwa mfumo mdogo wa Intel ME.

Na firmware ya ACPI EC, kama sheria, inakaguliwa tu kwa uadilifu. Walakini, kwa sababu ya ukweli kwamba binary hii imejumuishwa kwenye UEFI BIOS, karibu kila wakati iko chini ya njia sawa za ulinzi ambazo UEFI BIOS hutumia. Hebu tuzungumze juu yao.

Taratibu hizi zinaweza kugawanywa katika makundi mawili.

Andika ulinzi katika eneo la UEFI BIOS

  1. Ulinzi wa kimwili wa yaliyomo kwenye kumbukumbu ya SPI flash na jumper ya kuandika-protect;
  2. Kulinda makadirio ya eneo la UEFI BIOS katika nafasi ya anwani ya CPU kwa kutumia rejista za chipset za PRx;
  3. Kuzuia majaribio ya kuandika kwa eneo la UEFI BIOS kwa kuzalisha na kusindika usumbufu wa SMI unaofanana kwa kuweka bits za BIOS_WE/BLE na SMM_BWP kwenye rejista za chipset;
  4. Toleo la juu zaidi la ulinzi huu ni Intel BIOS Guard (PFAT).

Mbali na taratibu hizi, wachuuzi wanaweza kuendeleza na kutekeleza hatua zao za usalama (kwa mfano, kusaini vidonge na sasisho za UEFI BIOS).

Ni muhimu kutambua kwamba kwenye mfumo maalum (kulingana na muuzaji), sio njia zote za ulinzi zilizo hapo juu zinaweza kutumika, haziwezi kutumiwa kabisa, au zinaweza kutekelezwa kwa namna ya mazingira magumu. Unaweza kusoma zaidi juu ya mifumo hii na hali na utekelezaji wao ndani Makala hii. Kwa wale wanaopenda, tunapendekeza usome mfululizo mzima wa makala juu ya usalama wa UEFI BIOS kutoka CodeRush.

Uthibitishaji wa UEFI BIOS

Tunapozungumza juu ya teknolojia za boot zinazoaminika, jambo la kwanza linalokuja akilini ni Boot Salama. Hata hivyo, kwa usanifu imeundwa ili kuthibitisha uhalisi wa vipengele vya nje vya UEFI BIOS (madereva, bootloaders, nk), na sio firmware yenyewe.

Kwa hiyo, Intel, katika SoCs iliyo na usanifu mdogo wa Bay Trail (2012), ilitekeleza Boot Secure ya maunzi isiyozimwa (Verified Boot), ambayo haina uhusiano wowote na teknolojia iliyotajwa hapo juu ya Secure Boot. Baadaye (2013), utaratibu huu uliboreshwa na kutolewa chini ya jina Intel Boot Guard kwa desktops na Haswell microarchitecture.

Kabla ya kuelezea Intel Boot Guard, hebu tuangalie mazingira ya utekelezaji katika usanifu wa Intel 64, ambayo, pamoja, ni mizizi ya uaminifu kwa teknolojia hii ya boot inayoaminika.

Intel CPU

Cap inapendekeza kwamba processor ni mazingira kuu ya utekelezaji katika usanifu wa Intel 64. Kwa nini ni mzizi wa uaminifu? Inabadilika kuwa kinachomfanya kuwa hivyo ni milki ya vitu vifuatavyo:

  • Microcode ROM ni kumbukumbu isiyo tete, isiyoweza kuandikwa upya kwa ajili ya kuhifadhi msimbo mdogo. Inaaminika kuwa microcode ni utekelezaji wa mfumo wa amri ya processor kwa kutumia maelekezo rahisi zaidi. Hufanyika katika microcode pia mende. Kwa hiyo katika BIOS unaweza kupata binaries na sasisho za microcode (zilizofunikwa wakati wa boot, kwani ROM haiwezi kuandikwa). Yaliyomo kwenye hizi mbili zimesimbwa, ambayo inachanganya sana uchambuzi (kwa hiyo, maudhui maalum ya microcode yanajulikana tu kwa wale wanaoiendeleza), na kutiwa saini ili kudhibiti uadilifu na uhalisi;
  • Ufunguo wa AES kwa kusimbua yaliyomo kwenye sasisho za microcode;
  • heshi ya ufunguo wa umma wa RSA unaotumika kuthibitisha saini ya masasisho ya msimbo mdogo;
  • Hashi ya ufunguo wa umma wa RSA, ambayo inathibitisha saini ya moduli za kanuni za Intel-developed ACM (Iliyothibitishwa Kanuni ya Moduli), ambayo CPU inaweza kuzindua kabla ya utekelezaji wa BIOS (hello microcode) au wakati wa uendeshaji wake, wakati matukio fulani hutokea.

Intel MIMI

Blogu yetu ilijitolea kwa mfumo huu mdogo mbili nakala. Hebu tukumbuke kwamba mazingira haya ya kutekelezwa yanategemea microcontroller iliyojengwa ndani ya chipset na ni siri zaidi na upendeleo katika mfumo.

Licha ya usiri wake, Intel ME pia ni mzizi wa uaminifu kwa sababu ina:

  • ME ROM - kumbukumbu isiyo na tete, isiyoweza kuandikwa upya (hakuna njia ya sasisho iliyotolewa) iliyo na msimbo wa kuanza, pamoja na SHA256 hash ya ufunguo wa umma wa RSA, ambayo inathibitisha saini ya firmware ya Intel ME;
  • Ufunguo wa AES wa kuhifadhi habari za siri;
  • ufikiaji wa seti ya fusi (FPFs, Fusi Zinazoweza Kupangwa za Sehemu) zilizounganishwa kwenye chipset kwa hifadhi ya kudumu ya baadhi ya taarifa, ikijumuisha ile iliyobainishwa na mchuuzi wa mfumo wa kompyuta.

Intel Boot Guard 1.x

Kanusho ndogo. Nambari za toleo la teknolojia ya Intel Boot Guard tunazotumia katika makala haya ni za kiholela na zinaweza kuwa hazina uhusiano wowote na nambari zinazotumiwa katika hati za ndani za Intel. Kwa kuongeza, taarifa iliyotolewa hapa kuhusu utekelezaji wa teknolojia hii ilipatikana wakati wa uhandisi wa reverse, na inaweza kuwa na usahihi ikilinganishwa na vipimo vya Intel Boot Guard, ambayo haiwezekani kuchapishwa.

Kwa hivyo, Intel Boot Guard (BG) ni teknolojia ya uthibitishaji ya UEFI BIOS inayoungwa mkono na vifaa. Kwa kuzingatia maelezo yake mafupi katika kitabu [Teknolojia ya Usalama Iliyopachikwa kwenye Mfumo Imefichuliwa, sura ya Boot with Integrity, au Not Boot], kinafanya kazi kama msururu wa kuwasha unaoaminika. Na kiungo cha kwanza ndani yake ni msimbo wa boot (microcode) ndani ya CPU, ambayo husababishwa na tukio la RESET (si kuchanganyikiwa na vector RESET katika BIOS!). CPU hupata moduli ya msimbo iliyotengenezwa na kusainiwa na Intel (Intel BG startup ACM) kwenye kumbukumbu ya SPI flash, inapakia kwenye kashe yake, inathibitisha (tayari ilibainishwa hapo juu kuwa CPU ina heshi ya ufunguo wa umma unaothibitisha ACM. saini) na kuanza.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard

Moduli hii ya msimbo ni wajibu wa kuthibitisha sehemu ndogo ya kuanzia ya UEFI BIOS - Kizuizi cha awali cha Boot (IBB), ambacho, kwa upande wake, kina utendaji wa kuthibitisha sehemu kuu ya UEFI BIOS. Kwa hivyo, Intel BG inakuwezesha kuthibitisha uhalisi wa BIOS kabla ya kupakia OS (ambayo inaweza kufanywa chini ya usimamizi wa teknolojia ya Usalama wa Boot).

Teknolojia ya Intel BG hutoa njia mbili za uendeshaji (na moja haiingilii na nyingine, i.e. njia zote mbili zinaweza kuwezeshwa kwenye mfumo, au zote mbili zinaweza kuzimwa).

Kipimo cha Boot

Katika hali ya Kianzio Kilichopimwa (MB), kila sehemu ya kuwasha (kuanzia na ROM ya boot ya CPU) "hupima" inayofuata kwa kutumia uwezo wa TPM (Moduli ya Mfumo wa Kuaminika). Kwa wale ambao hawajui, wacha niwafafanulie.

TPM ina PCR (Rejesta za Usanidi wa Jukwaa), ambayo matokeo ya operesheni ya hashing huandikwa kulingana na fomula:

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard

Wale. thamani ya sasa ya PCR inategemea moja uliopita, na rejista hizi zinawekwa upya tu wakati mfumo UMEWEKWA UPYA.

Kwa hivyo, katika hali ya MB, wakati fulani, PCR huonyesha kitambulisho cha kipekee (ndani ya uwezo wa operesheni ya hashing) cha msimbo au data "iliyopimwa." Thamani za PCR zinaweza kutumika katika baadhi ya operesheni ya usimbaji fiche wa data (TPM_Seal). Baada ya hayo, usimbuaji wao (TPM_Unseal) utawezekana tu ikiwa maadili ya PCR hayakubadilika kama matokeo ya upakiaji (yaani, hakuna sehemu moja "iliyopimwa" iliyorekebishwa).

Boot iliyohakikishwa

Jambo baya zaidi kwa wale ambao wanapenda kurekebisha UEFI BIOS ni hali ya Boot Iliyothibitishwa (VB), ambayo kila sehemu ya boot inathibitisha kwa siri uadilifu na uhalisi wa ijayo. Na ikitokea hitilafu ya uthibitishaji, (mojawapo) hutokea:

  • kuzima kwa muda kutoka dakika 1 hadi dakika 30 (ili mtumiaji awe na wakati wa kuelewa kwa nini kompyuta yake haina boot, na, ikiwa inawezekana, anajaribu kurejesha BIOS);
  • kuzima mara moja (ili mtumiaji asiwe na wakati wa kuelewa, chini sana kufanya, chochote);
  • kuendelea kufanya kazi kwa kujieleza kwa utulivu (kesi hiyo wakati hakuna wakati wa usalama, kwa sababu kuna mambo muhimu zaidi ya kufanya).

Uchaguzi wa hatua inategemea usanidi maalum wa Intel BG (yaani, juu ya sera inayojulikana ya utekelezaji), ambayo imerekodiwa kabisa na muuzaji wa jukwaa la kompyuta katika hifadhi maalum iliyoundwa - fuse za chipset (FPFs). Tutakaa juu ya hatua hii kwa undani zaidi baadaye.

Mbali na usanidi, muuzaji hutoa funguo mbili za RSA 2048 na huunda miundo miwili ya data (iliyoonyeshwa kwenye takwimu):

  1. Faili ya maelezo ya ufunguo wa mzizi wa muuzaji (KEYM, Manifest ya Ufunguo wa Mizizi ya OEM), ambayo ina SVN (Nambari ya Toleo la Usalama) ya ilani hii, heshi SHA256 ya ufunguo wa umma wa ilani inayofuata, ufunguo wa umma wa RSA (yaani, sehemu ya umma ya hati miliki ya umma ya RSA). ufunguo wa mzizi wa muuzaji) ili kuthibitisha saini ya manifesto hii na sahihi yenyewe;
  2. IBB Manifest (IBBM, Manifest ya Kizuizi cha Kianzi cha Awali), ambayo ina SVN ya ilani hii, heshi ya SHA256 ya IBB, ufunguo wa umma wa kuthibitisha saini ya manifesto hii na sahihi yenyewe.

Heshi ya SHA256 ya kitufe cha umma cha Ufunguo wa Mizizi ya OEM imerekodiwa kabisa katika fuse za chipset (FPFs), kama vile usanidi wa Intel BG. Ikiwa usanidi wa Intel BG hutoa kuingizwa kwa teknolojia hii, basi tangu sasa tu mmiliki wa sehemu ya kibinafsi ya Ufunguo wa Mizizi ya OEM anaweza kusasisha BIOS kwenye mfumo huu (yaani, kuwa na uwezo wa kuhesabu upya maonyesho haya), i.e. mchuuzi.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard

Wakati wa kutazama picha, mashaka huibuka mara moja juu ya hitaji la mlolongo mrefu wa uthibitishaji - wangeweza kutumia faili moja ya maelezo. Kwa nini mambo magumu?

Kwa kweli, Intel kwa hivyo humpa muuzaji fursa ya kutumia funguo tofauti za IBB kwa mistari tofauti ya bidhaa zake na moja kama ufunguo wa mizizi. Iwapo sehemu ya siri ya ufunguo wa IBB (ambayo faili ya maelezo ya pili imetiwa sahihi) itavuja, tukio litaathiri laini moja tu ya bidhaa na hadi tu mchuuzi atengeneze jozi mpya na kujumuisha maonyesho yaliyokokotwa upya katika sasisho linalofuata la BIOS.

Lakini ikiwa ufunguo wa mzizi (ambao faili ya maelezo ya kwanza imetiwa saini) umeingiliwa, haitawezekana kuubadilisha; hakuna utaratibu wa kubatilisha uliotolewa. heshi ya sehemu ya umma ya ufunguo huu imewekwa katika FPF mara moja na kwa wote.

Usanidi wa Intel Boot Guard

Sasa hebu tuangalie kwa karibu usanidi wa Intel BG na mchakato wa kuunda. Ukiangalia kichupo kinacholingana kwenye GUI ya matumizi ya Flash Image Tool kutoka kwa Intel System Tool Kit (STK), utagundua kuwa usanidi wa Intel BG unajumuisha heshi ya sehemu ya umma ya ufunguo wa mzizi wa muuzaji, michache ya maadili yasiyoeleweka, nk. Wasifu wa Intel BG.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard

Muundo wa wasifu huu:

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

Kwa ujumla, usanidi wa Intel BG ni chombo kinachobadilika sana. Fikiria, kwa mfano, bendera ya Force_Boot_Guard_ACM. Inapoondolewa, ikiwa moduli ya ACM ya kuanzisha BG kwenye flash ya SPI haipatikani, hakuna boot inayoaminika itatokea. Hataaminika.

Tayari tuliandika hapo juu kwamba sera ya utekelezaji ya modi ya VB inaweza kusanidiwa ili ikiwa kuna hitilafu ya uthibitishaji, upakuaji usioaminika utatokea.

Acha vitu kama hivyo kwa hiari ya wauzaji ...

Huduma ya GUI hutoa profaili zifuatazo "zilizotengenezwa tayari":

No
Njia
Description

0
Hapana_FVME
Teknolojia ya Intel BG imezimwa

1
VE
Hali ya VB imewashwa, kuzimwa kwa muda

2
VME
njia zote mbili zimewezeshwa (VB na MB), zima kwa kuisha

3
VM
njia zote mbili zimewezeshwa, bila kuzima mfumo

4
FVE
Hali ya VB imewashwa, kuzima mara moja

5
FVME
njia zote mbili zimewezeshwa, kuzima mara moja

Kama ilivyoelezwa tayari, usanidi wa Intel BG lazima uandikwe mara moja na kwa wote na muuzaji wa mfumo kwenye fuse za chipset (FPFs) - ndogo (kulingana na habari isiyothibitishwa, ni ka 256 tu) uhifadhi wa vifaa vya habari ndani ya chipset, ambayo inaweza kupangwa. nje ya vifaa vya uzalishaji vya Intel (ndiyo sababu haswa Uga Unaoweza Kupangwa Fusi).

Ni nzuri kwa kuhifadhi usanidi kwa sababu:

  • ina eneo la wakati mmoja linaloweza kupangwa kwa ajili ya kuhifadhi data (haswa mahali ambapo usanidi wa Intel BG umeandikwa);
  • Intel ME pekee ndiye anayeweza kuisoma na kuipanga.

Kwa hivyo, ili kuweka usanidi wa teknolojia ya Intel BG kwenye mfumo maalum, muuzaji hufanya yafuatayo wakati wa uzalishaji:

  1. Kwa kutumia matumizi ya Flash Image Tool (kutoka Intel STK), huunda picha ya firmware na usanidi uliopewa wa Intel BG kwa namna ya vigezo ndani ya eneo la Intel ME (kinachojulikana kioo cha muda kwa FPFs);
  2. Kutumia matumizi ya Flash Programming Tool (kutoka Intel STK), inaandika picha hii kwenye kumbukumbu ya mfumo wa SPI na kufunga kinachojulikana. hali ya utengenezaji (katika kesi hii, amri inayolingana inatumwa kwa Intel ME).

Kama matokeo ya shughuli hizi, Intel ME itatoa maadili maalum kutoka kwa kioo kwa FPFs katika mkoa wa ME hadi FPFs, kuweka maazimio katika maelezo ya SPI flash kwa maadili yaliyopendekezwa na Intel (ilivyoelezwa mwanzoni mwa makala) na ufanye UPYA mfumo.

Uchambuzi wa utekelezaji wa Intel Boot Guard

Ili kuchanganua utekelezaji wa teknolojia hii kwa kutumia mfano maalum, tuliangalia mifumo ifuatayo kwa athari za teknolojia ya Intel BG:

System
Kumbuka

Gigabyte GA-H170-D3H
Skylake, kuna msaada

Gigabyte GA-Q170-D3H
Skylake, kuna msaada

Gigabyte GA-B150-HD3
Skylake, kuna msaada

MSI H170A Gaming Pro
Skylake, hakuna msaada

Lenovo ThinkPad 460
Skylake, inayoungwa mkono, teknolojia imewezeshwa

Lenovo Yoga 2 Pro
Haswell, hakuna msaada

Lenovo U330p
Haswell, hakuna msaada

Kwa "msaada" tunamaanisha uwepo wa moduli ya ACM ya kuanza kwa Intel BG, maonyesho yaliyotajwa hapo juu na msimbo unaofanana katika BIOS, i.e. utekelezaji kwa uchambuzi.

Kwa mfano, hebu tuchukue ile iliyopakuliwa kutoka ofisini. picha ya tovuti ya muuzaji ya kumbukumbu ya flash ya SPI ya Gigabyte GA-H170-D3H (toleo la F4).

Intel CPU boot ROM

Kwanza kabisa, hebu tuzungumze juu ya vitendo vya processor ikiwa teknolojia ya Intel BG imewezeshwa.

Haikuwezekana kupata sampuli za msimbo mdogo uliosimbwa, kwa hivyo jinsi vitendo vilivyoelezewa hapa chini vinatekelezwa (katika msimbo mdogo au maunzi) ni swali wazi. Hata hivyo, ni ukweli kwamba wasindikaji wa kisasa wa Intel "wanaweza" kufanya vitendo hivi.

Baada ya kuondoka kwa hali ya RESET, processor (yaliyomo kwenye kumbukumbu ya flash tayari yamepangwa kwenye nafasi ya anwani) hupata meza ya FIT (Firmware Interface Table). Ni rahisi kupata; kielekezi chake kimeandikwa kwa anwani FFFF FFC0h.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Katika mfano unaozingatiwa, thamani FFD6 9500h iko kwenye anwani hii. Kwa kupata anwani hii, processor inaona meza ya FIT, yaliyomo ambayo imegawanywa katika rekodi. Ingizo la kwanza ni kichwa cha muundo ufuatao:

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

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Kwa sababu isiyojulikana, cheki haihesabiwi kila wakati kwenye jedwali hizi (uwanja umesalia sifuri).

Maingizo yaliyobaki yanaelekeza kwenye binaries mbalimbali zinazohitaji kuchanganuliwa/kutekelezwa kabla ya BIOS kutekelezwa, i.e. kabla ya kubadili kwa vekta ya urithi WEKA UPYA (FFFF FFF0h). Muundo wa kila kiingilio kama hiki ni kama ifuatavyo.

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

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Sehemu ya EntryType inakuambia aina ya kuzuia ingizo hili. Tunajua aina kadhaa:

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

Sasa ni dhahiri kuwa moja ya maingizo yanaelekeza mahali pa kuanza kwa binary ya Intel BG ya ACM. Muundo wa kichwa cha binary hii ni kawaida kwa moduli za msimbo zilizotengenezwa na Intel (ACMs, sasisho za microcode, sehemu za kanuni za 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];
};

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Kichakataji hupakia binary hii kwenye kashe yake, huithibitisha na kuiendesha.

Intel BG kuanzisha ACM

Kama matokeo ya kuchambua kazi ya ACM hii, ilibainika kuwa inafanya yafuatayo:

  • inapokea usanidi wa Intel BG kutoka kwa Intel ME, iliyoandikwa kwenye fuse za chipset (FPFs);
  • hupata KEYM na IBBM inazidhihirisha na kuzithibitisha.

Ili kupata maonyesho haya, ACM pia hutumia jedwali la FIT, ambalo lina aina mbili za ingizo ili kuonyesha data ya muundo (angalia FIT_ENTRY_TYPES hapo juu).

Hebu tuangalie kwa makini manifesto. Katika muundo wa faili ya maelezo ya kwanza, tunaona viambishi kadhaa visivyojulikana, heshi ya ufunguo wa umma kutoka faili ya pili ya maelezo, na Ufunguo wa Umma wa OEM Root uliotiwa saini kama muundo uliowekwa:

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

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Ili kuthibitisha ufunguo wa umma wa Ufunguo wa Mizizi ya OEM, tunakumbuka kwamba tunatumia heshi ya SHA256 ya fuse, ambayo kwa wakati huu tayari imepokelewa kutoka kwa Intel ME.

Tuendelee na ilani ya pili. Inajumuisha miundo mitatu:

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

Ya kwanza ina baadhi ya mara kwa mara:

typedef struct ACBP
{
	char           Tag[8];          // ‘__ACBP__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 1
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned short : 16;            // x & F0h = 0
	unsigned short : 16;            // 0 < x <= 400h
};

Ya pili ina heshi SHA256 ya IBB na idadi ya vifafanuzi vinavyoelezea yaliyomo kwenye IBB (yaani, kile ambacho heshi imekokotolewa):

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

Vifafanuzi vya IBB hufuata muundo huu, moja baada ya nyingine. Yaliyomo yana muundo ufuatao:

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

Ni rahisi: kila kielezi kina anwani/ukubwa wa sehemu ya IBB. Kwa hivyo, muunganisho wa vizuizi vilivyoonyeshwa na wafafanuzi hawa (kwa mpangilio wa vifafanuzi wenyewe) ni IBB. Na, kama sheria, IBB ni mkusanyiko wa moduli zote za awamu za SEC na PEI.

Faili ya maelezo ya pili inakamilishwa na muundo ulio na ufunguo wa umma wa IBB (uliothibitishwa na heshi SHA256 kutoka faili ya maelezo ya kwanza) na sahihi ya faili hii ya maelezo:

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

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Kwa hiyo, hata kabla ya UEFI BIOS kuanza kutekeleza, processor itazindua ACM, ambayo itathibitisha uhalisi wa yaliyomo ya sehemu na msimbo wa awamu ya SEC na PEI. Ifuatayo, processor hutoka kwa ACM, hufuata vector ya RESET na huanza kutekeleza BIOS.

Sehemu iliyothibitishwa ya PEI lazima iwe na moduli ambayo itaangalia BIOS iliyobaki (msimbo wa DXE). Moduli hii tayari inatengenezwa na IBV (Mchuuzi Huru wa BIOS) au mchuuzi wa mfumo yenyewe. Kwa sababu Mifumo ya Lenovo na Gigabyte pekee ndiyo iliyokuwa na uwezo wetu na ilikuwa na usaidizi wa Intel BG; hebu tuangalie msimbo uliotolewa kutoka kwa mifumo hii.

UEFI BIOS moduli LenovoVerifiedBootPei

Kwa upande wa Lenovo, iligeuka kuwa moduli ya LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}, iliyotengenezwa na Lenovo.

Kazi yake ni kutafuta (kwa GUID) jedwali la hashi la DXE na kuthibitisha 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 moduli BootGuardPei

Kwa upande wa Gigabyte, iligeuka kuwa moduli ya BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}, iliyotengenezwa na AMI, kwa hiyo, iko katika BIOS yoyote ya AMI na msaada wa Intel BG.

Algorithm yake ya kufanya kazi ni tofauti, hata hivyo, inakua kwa kitu kimoja:

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

Jedwali la hashi {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} inalotafuta lina umbizo lifuatalo:

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

Wacha tuzungumze kwa ufupi juu ya utekelezaji mwingine wa Intel Boot Guard, ambayo ilipatikana katika mfumo mpya zaidi kulingana na Intel SoC na usanifu mdogo wa Apollo Lake - ASRock J4205-IT.

Ingawa toleo hili litatumika tu katika SoCs (mifumo mipya iliyo na usanifu mdogo wa kichakataji cha Kaby Lake inaendelea kutumia Intel Boot Guard 1.x), inavutia sana kusoma chaguo mpya la usanifu wa majukwaa ya Intel SoC, ambayo yameona mabadiliko makubwa. kwa mfano:

  • mikoa ya BIOS na Intel ME (au tuseme Intel TXE, kulingana na istilahi ya Intel SoC) sasa ni eneo moja la IFWI;
  • ingawa Intel BG iliwezeshwa kwenye jukwaa, miundo kama vile FIT, KEYM, IBBM haikupatikana kwenye kumbukumbu ya flash;
  • pamoja na TXE na ISH cores (x86), msingi wa tatu uliongezwa kwenye chipset (ARC tena, kwa njia) - PMC (Mdhibiti wa Usimamizi wa Nguvu), unaohusishwa na kuhakikisha utendakazi wa mfumo mdogo wa nguvu na ufuatiliaji wa utendaji.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Yaliyomo katika eneo jipya la IFWI ni seti ya moduli zifuatazo:

Imeshatolewa
jina
Description

0000h 2000h
SMIP
usanidi fulani wa jukwaa, uliotiwa saini na muuzaji

0000h 6000h
RBEP
Sehemu ya msimbo wa programu dhibiti ya Intel TXE, x86, iliyosainiwa na Intel

0001h 0000h
PMCP
Sehemu ya msimbo wa programu dhibiti ya Intel PMC, ARC, ilitia saini Intel

0002h 0000h
FTPR
Sehemu ya msimbo wa programu dhibiti ya Intel TXE, x86, iliyosainiwa na Intel

0007 B000h
UCOD
masasisho ya microcode kwa CPU, yaliyotiwa saini na Intel

0008h 0000h
IBBP
UEFI BIOS, awamu za SEC/PEI, x86, iliyosainiwa na muuzaji

0021h 8000h
ISHC
Sehemu ya msimbo wa firmware ya Intel ISH, x86, iliyotiwa saini na muuzaji

0025h 8000h
NFTP
Sehemu ya msimbo wa programu dhibiti ya Intel TXE, x86, iliyosainiwa na Intel

0036h 1000h
IUNP
haijulikani

0038h 1000h
OBBP
UEFI BIOS, awamu ya DXE, x86, haijatiwa saini

Wakati wa uchambuzi wa firmware ya TXE, ikawa dhahiri kwamba baada ya RESET, TXE inaweka processor katika hali hii mpaka iandae yaliyomo ya msingi ya nafasi ya anwani kwa CPU (FIT, ACM, RESET vector ...). Zaidi ya hayo, TXE inaweka data hii katika SRAM yake, baada ya hapo inatoa ufikiaji wa processor hapo kwa muda na "kuitoa" kutoka kwa RESET.

Jihadharini na rootkits

Kweli, sasa wacha tuendelee kwenye vitu vya "moto". Tuligundua mara moja kuwa kwenye mifumo mingi, vifafanuzi vya flash vya SPI vina ruhusa ya kufikia maeneo ya kumbukumbu ya flash ya SPI ili watumiaji wote wa kumbukumbu hii waweze kuandika na kusoma eneo lolote. Wale. Hapana.

Baada ya kuangalia na shirika la MEinfo (kutoka kwa Intel STK), tuliona kuwa hali ya utengenezaji kwenye mifumo hii haijafungwa, kwa hiyo, fuse za chipset (FPFs) zimesalia katika hali isiyojulikana. Ndiyo, Intel BG haijawashwa wala kuzimwa katika hali kama hizi.

Tunazungumza juu ya mifumo ifuatayo (kuhusu Intel BG na kile kitakachoelezewa baadaye katika kifungu hicho, tutazungumza juu ya mifumo iliyo na usanifu wa processor ya Haswell na ya juu zaidi):

  • bidhaa zote za Gigabyte;
  • bidhaa zote za MSI;
  • Mifano 21 za kompyuta za mkononi za Lenovo na mifano 4 ya seva za Lenovo.

Bila shaka, tuliripoti ugunduzi huo kwa wachuuzi hawa, na pia kwa Intel.

Mwitikio wa kutosha ulitoka tu Lenovoambaye alitambua tatizo na iliyotolewa kiraka.

gigabyte Walionekana kukubali taarifa kuhusu kuathirika, lakini hawakutoa maoni kwa njia yoyote.

Mawasiliano na MSI imekwama kabisa kwa ombi letu la kutuma ufunguo wako wa umma wa PGP (kuwatumia ushauri wa usalama katika fomu iliyosimbwa). Walisema kuwa "ni watengenezaji wa maunzi na hawazalishi funguo za PGP."

Lakini tufike kwenye uhakika. Kwa kuwa fuse zimeachwa katika hali isiyojulikana, mtumiaji (au mshambuliaji) anaweza kuzipanga kwa kujitegemea (jambo gumu zaidi ni Pata Intel STK) Ili kufanya hivyo, unahitaji kukamilisha hatua zifuatazo.

1. Boot kwenye Windows OS (kwa ujumla, vitendo vilivyoelezwa hapa chini vinaweza pia kufanywa chini ya Linux, ikiwa utatengeneza analog ya Intel STK kwa OS inayotaka). Kwa kutumia matumizi ya MEinfo, hakikisha kuwa fuse hazijawekwa kwenye mfumo huu.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
2. Soma yaliyomo kwenye kumbukumbu ya flash kwa kutumia Flash Programming Tool.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
3. Fungua picha iliyosomwa kwa kutumia zana yoyote ya uhariri ya UEFI BIOS, fanya mabadiliko yanayohitajika (tanguliza rootkit, kwa mfano), unda / uhariri miundo iliyopo ya KEYM na IBBM katika eneo la ME.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Picha inaangazia sehemu ya umma ya ufunguo wa RSA, heshi ambayo itawekwa kwenye fuse za chipset pamoja na usanidi mwingine wa Intel BG.

4. Kwa kutumia Flash Image Tool, jenga picha mpya ya firmware (kwa kuweka usanidi wa Intel BG).

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
5. Andika picha mpya ili kuangaza kumbukumbu kwa kutumia Flash Programming Tool, na uthibitishe kwa kutumia MEinfo kwamba eneo la ME sasa lina usanidi wa Intel BG.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
6. Tumia Flash Programming Tool ili kufunga hali ya utengenezaji.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
7. Mfumo utaanza upya, na baada ya hapo unaweza kutumia MEinfo ili kuthibitisha kuwa FPFs sasa zimeratibiwa.

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Vitendo hivi milele wezesha Intel BG kwenye mfumo huu. Kitendo hakiwezi kutenduliwa, ambayo inamaanisha:

  • Mmiliki tu wa sehemu ya kibinafsi ya ufunguo wa mizizi (yaani, yule aliyewezesha Intel BG) ataweza kusasisha UEFI BIOS kwenye mfumo huu;
  • ukirudisha firmware asili kwenye mfumo huu, kwa mfano, kwa kutumia programu, haitawashwa (matokeo ya sera ya utekelezaji ikiwa kuna hitilafu ya uthibitishaji);
  • Ili kuondoa UEFI BIOS kama hiyo, unahitaji kubadilisha chipset na FPF zilizopangwa na "safi" (yaani, tengeneza tena chipset ikiwa unaweza kupata kituo cha kutengenezea cha infrared bei ya gari, au tu ubadilishe ubao wa mama. )

Ili kuelewa ni nini rootkit kama hiyo inaweza kufanya, unahitaji kutathmini ni nini hufanya iwezekanavyo kutekeleza nambari yako katika mazingira ya UEFI BIOS. Hebu sema, katika hali ya upendeleo zaidi ya processor - SMM. Rootkit kama hiyo inaweza kuwa na mali zifuatazo:

  • kutekelezwa kwa sambamba na OS (unaweza kusanidi usindikaji ili kuzalisha usumbufu wa SMI, ambao utasababishwa na timer);
  • kuwa na faida zote za kuwa katika hali ya SMM (upatikanaji kamili wa yaliyomo ya RAM na rasilimali za vifaa, usiri kutoka kwa OS);
  • Msimbo wa programu wa rootkit unaweza kusimbwa na kusimbwa wakati unapozinduliwa katika hali ya SMM. Data yoyote inayopatikana katika hali ya SMM pekee inaweza kutumika kama ufunguo wa usimbaji fiche. Kwa mfano, heshi kutoka kwa seti ya anwani katika SMRAM. Ili kupata ufunguo huu, utahitaji kuingia kwenye SMM. Na hii inaweza kufanyika kwa njia mbili. Tafuta RCE katika msimbo wa SMM na uitumie, au ongeza moduli yako mwenyewe ya SMM kwenye BIOS, ambayo haiwezekani kwa kuwa tumewasha Kilinzi cha Boot.

Kwa hivyo, mazingira magumu haya huruhusu mshambuliaji:

  • unda mizizi iliyofichwa, isiyoweza kufutwa ya kusudi lisilojulikana katika mfumo;
  • toa nambari yako kwenye moja ya alama za chipset ndani ya Intel SoC, ambayo ni, kwenye Intel ISH (angalia picha kwa uangalifu).

Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Upakuaji Unaoaminika wa Schrödinger. Intel Boot Guard
Ingawa uwezo wa mfumo mdogo wa Intel ISH bado haujagunduliwa, inaonekana kuwa vekta ya kushambulia ya Intel ME.

Matokeo

  1. Utafiti huo ulifanya iwezekanavyo kupata maelezo ya kiufundi ya uendeshaji wa teknolojia ya Intel Boot Guard. Ondoa siri kadhaa katika usalama wa Intel kupitia modeli isiyojulikana.
  2. Hali ya mashambulizi imewasilishwa ambayo inakuruhusu kuunda rootkit isiyoweza kusakinishwa kwenye mfumo.
  3. Tuliona kwamba wasindikaji wa kisasa wa Intel wana uwezo wa kutekeleza nambari nyingi za umiliki hata kabla ya BIOS kuanza kufanya kazi.
  4. Majukwaa yenye usanifu wa Intel 64 yanazidi kupungua na kutofaa kwa ajili ya uendeshaji wa programu zisizolipishwa: uthibitishaji wa maunzi, idadi inayoongezeka ya teknolojia za umiliki na mifumo ndogo (cores tatu katika chipset ya SoC: x86 ME, x86 ISH na ARC PMC).

Upungufu

Wachuuzi ambao kwa makusudi huacha hali ya utengenezaji wazi wanapaswa kuwa na uhakika wa kuifunga. Hadi sasa, macho yao tu yamefungwa, na mifumo mpya ya Ziwa ya Kaby inaonyesha hili.

Watumiaji wanaweza kuzima Intel BG kwenye mifumo yao (ambayo inaweza kuathiriwa na mazingira magumu yaliyoelezwa) kwa kuendesha Zana ya Kupanga Flash kwa kigezo cha -closemnf. Kwanza, unapaswa kuhakikisha (kwa kutumia MEinfo) kwamba usanidi wa Intel BG katika eneo la ME hutoa kwa ajili ya kuzima teknolojia hii baada ya kupanga programu katika FPF.

Chanzo: mapenzi.com

Kuongeza maoni