Шредингердин ишенимдүү бут кийими. Intel Boot Guard

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Биз кайрадан төмөн деңгээлге түшүп, x86 шайкеш компьютер платформалары үчүн микропрограмманын коопсуздугу жөнүндө сүйлөшүүнү сунуштайбыз. Бул жолу изилдөөнүн негизги ингредиенти Intel Boot Guard (Intel BIOS Guard менен чаташтырбоо керек!) - компьютер тутумунун сатуучусу өндүрүш баскычында биротоло иштетип же өчүрө турган аппараттык камсыздоо тарабынан колдоого алынган ишенимдүү BIOS жүктөө технологиясы. Изилдөөнүн рецепти бизге мурунтан эле тааныш: тескери инженерияны колдонуу менен бул технологияны ишке ашырууну ичке кесиңиз, анын архитектурасын сүрөттөп, аны документсиз деталдар менен толтуруңуз, даамын татып, аралаштырыңыз. Келгиле, бир нече сатуучулардын өндүрүшүндө жылдар бою клондолуп калган ката потенциалдуу чабуулчуга бул технологияны системада жашырылган руткиттерди түзүү үчүн колдонууга мүмкүндүк бергени жөнүндөгү окуяга май кошолу.

Баса, макала конференциянын “Rootkits Guard: Intel BootGuard” баяндамаларына негизделген. ZeroNights 2016 жана 29-чу заседание DefCon Россия (экөө тең презентациялар бул жерде).

Intel 64 архитектурасы менен компьютер платформасы үчүн микропрограмма

Биринчиден, суроого жооп берели: Intel 64 архитектурасы менен заманбап компьютер платформасынын микропрограммасы кандай? Албетте, UEFI BIOS. Бирок мындай жооп так болбойт. Келгиле, бул архитектуранын рабочий (ноутбук) версиясын көрсөткөн сүрөттү карап көрөлү.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
негизи шилтеме болуп саналат:

  • Процессор (CPU, Борбордук иштетүү бирдиги), анда негизги өзөктөрдөн тышкары, орнотулган графикалык өзөгү бар (бардык моделдерде эмес) жана эстутум контроллери (IMC, Integrated Memory Controller);
  • Чипсет (PCH, Platform Controller Hub), перифериялык түзүлүштөр менен иштешүү жана подсистемаларды башкаруу үчүн ар кандай контроллерлорду камтыган. Алардын арасында белгилүү Intel Management Engine (ME) бар, анын микропрограммасы да бар (Intel ME микропрограммасы).

Ноутбуктар, жогоруда айтылгандардан тышкары, орнотулган контроллерди (ACPI EC, Advanced Control жана Power Interface Embedded Controller) талап кылат, ал кубат подсистемасынын, сенсордук панелдин, клавиатуранын, Fn баскычтарынын (экран жарыктыгы, үн көлөмү) иштеши үчүн жооптуу. , клавиатуранын жарыгы ж.б. ) жана башка нерселер. Жана ошондой эле өзүнүн микропрограммасы бар.

Ошентип, жогоруда аталган микропрограмманын жалпы SPI флеш эс тутумунда сакталган компьютер платформасынын микропрограммасы (системанын микропрограммасы) болуп саналат. Бул эстутумдун колдонуучулары анын кайда экенин түшүнбөй калбашы үчүн, бул эстутумдун мазмуну төмөнкү аймактарга бөлүнөт (сүрөттө көрсөтүлгөндөй):

  • UEFI BIOS;
  • ACPI EC микропрограммасы (Skylake процессорунун микроархитектурасы менен өзүнчө аймак пайда болгон (2015), бирок жапайы шартта биз аны колдонуунун мисалдарын көрө элекпиз, андыктан орнотулган контроллердин микропрограммасы дагы эле UEFI BIOS'та камтылган) ;
  • Intel ME микропрограммасы;
  • орнотулган GbE (Gigabit Ethernet) тармак адаптеринин конфигурациясы (MAC дареги ж.б.);
  • Flash дескрипторлору башка аймактарга көрсөткүчтөрдү, ошондой эле аларга жетүү үчүн уруксаттарды камтыган флеш эс тутумдун негизги аймагы.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
SPI автобус мастери, чипсетке орнотулган SPI контроллери, ал аркылуу бул эстутумга кирүүгө болот, аймактарга кирүүнү чектөө үчүн жооптуу (көрсөтүлгөн уруксаттарга ылайык). Эгер уруксаттар Intel сунуштаган (коопсуздук үчүн) маанилерине коюлса, анда ар бир SPI флеш колдонуучусу өз аймагына гана толук кире алат (окуу/жазуу). Ал эми калгандары окуу үчүн гана же жеткиликсиз. Белгилүү факт: көптөгөн системаларда CPU UEFI BIOS жана GbEге толук мүмкүнчүлүккө ээ, флэш-дескрипторлорго гана окуу мүмкүнчүлүгү бар жана Intel ME аймагына таптакыр кирүү мүмкүнчүлүгү жок. Эмне үчүн бардыгында эмес, көбүндө? Сунушталган нерсе талап кылынбайт. Макалада кененирээк айтып беребиз.

Компьютер платформасынын микропрограммасын өзгөртүүдөн коргоо механизмдери

Албетте, компьютердик платформанын микропрограммасы мүмкүн болуучу компромисстерден корголушу керек, бул потенциалдуу чабуулчуга ага таянууга (OS жаңыртууларынан/кайра орнотуулардан аман калууга), алардын кодун эң артыкчылыктуу режимдерде аткарууга ж.б. Жана SPI флэш эстутум аймактарына кирүүнү чектөө, албетте, жетишсиз. Ошондуктан, микропрограмманы өзгөртүүлөрдөн коргоо үчүн ар бир иштөө чөйрөсүнө мүнөздүү ар кандай механизмдер колдонулат.

Ошентип, Intel ME микропрограммасы бүтүндүгүн жана аныктыгын көзөмөлдөө үчүн кол коюлган жана ал ME UMA эс тутумуна жүктөлгөн сайын ME контроллери тарабынан текшерилет. Бул текшерүү процесси буга чейин биз тарабынан биринде талкууланган макалалар, Intel ME кичи тутумуна арналган.

Ал эми ACPI EC микропрограммасы, эреже катары, бүтүндүк үчүн гана текшерилет. Бирок, бул бинардык UEFI BIOS камтылгандыктан, ал дээрлик дайыма UEFI BIOS колдонгон коргоо механизмдерине баш ийет. Келгиле, алар жөнүндө сүйлөшөлү.

Бул механизмдерди эки категорияга бөлүүгө болот.

UEFI BIOS аймагында коргоо жазуу

  1. SPI флэш-эстутумунун мазмунун жазуудан коргоочу секиргич менен физикалык коргоо;
  2. PRx чипсет регистрлерин колдонуу менен CPU дарек мейкиндигинде UEFI BIOS аймагынын проекциясын коргоо;
  3. Чипсет регистрлериндеги BIOS_WE/BLE жана SMM_BWP биттерин орнотуу менен тиешелүү SMI үзгүлтүккө учуратуу жана иштетүү аркылуу UEFI BIOS аймагына жазуу аракеттерин бөгөттөө;
  4. Бул коргоонун бир кыйла өркүндөтүлгөн версиясы - Intel BIOS Guard (PFAT).

Бул механизмдерден тышкары, сатуучулар өздөрүнүн коопсуздук чараларын иштеп чыгып, ишке ашыра алышат (мисалы, UEFI BIOS жаңыртуулары менен капсулаларга кол коюу).

Белгилүү бир системада (сатуучуга жараша) жогоруда аталган коргоо механизмдеринин бардыгы колдонулбашы мүмкүн, алар такыр колдонулбашы мүмкүн же алар аялуу түрдө ишке ашырылышы мүмкүн экендигин белгилей кетүү маанилүү. Сиз бул механизмдер жана аларды ишке ашыруунун абалы жөнүндө көбүрөөк окуй аласыз бул макалада. Кызыккандар үчүн UEFI BIOS коопсуздугу боюнча макалалардын толук сериясын окууну сунуштайбыз CodeRush.

UEFI BIOS аутентификациясы

Ишенимдүү жүктөө технологиялары жөнүндө сөз кылганда, биринчи оюбузга Secure Boot келет. Бирок, архитектуралык жактан ал микропрограмманын өзү эмес, UEFI BIOS сырткы компоненттеринин (айдоочулар, жүктөөчүлөр ж.б.) аныктыгын текшерүү үчүн иштелип чыккан.

Ошондуктан, Intel, Bay Trail микроархитектурасы бар SoCтерде (2012) аппараттык камсыздоону өчүрүлгөн Secure Boot (Verified Boot) ишке ашырды, анын жогоруда айтылган Secure Boot технологиясы менен эч кандай жалпылыгы жок. Кийинчерээк (2013) бул механизм өркүндөтүлүп, Хасвелл микроархитектурасы бар десктоптор үчүн Intel Boot Guard деген ат менен чыгарылган.

Intel Boot Guard'ты сүрөттөөдөн мурун, Intel 64 архитектурасындагы аткаруу чөйрөлөрүн карап көрөлү, бул ишенимдүү жүктөө технологиясы үчүн ишенимдин тамыры болуп саналат.

intel-cpu

Капчыгы процессор Intel 64 архитектурасынын негизги аткаруу чөйрөсү экенин көрсөтүп турат, эмне үчүн ал ишенимдин тамыры болуп саналат? Көрсө, аны мындай кылган нерсе төмөнкү элементтерге ээ экени:

  • Микрокод ROM – бул микрокодду сактоо үчүн туруктуу, кайра жазылбаган эс тутум. Микрокод – бул эң жөнөкөй инструкцияларды колдонуу менен процессордун командалык системасын ишке ашыруу деп эсептелет. Микрокоддо да болот мүчүлүштүктөр. Ошентип, BIOS'та микрокод жаңыртуулары бар бинардык файлдарды таба аласыз (жүктөө учурунда капталган, анткени ROMду кайра жазуу мүмкүн эмес). Бул бинардык файлдардын мазмуну шифрленген, бул анализди абдан татаалдантат (ошондуктан микрокоддун конкреттүү мазмуну аны иштеп чыккандарга гана белгилүү), бүтүндүгүн жана аныктыгын көзөмөлдөө үчүн кол коюлган;
  • микрокод жаңыртууларынын мазмунун чечмелөө үчүн AES ачкычы;
  • микрокод жаңыртууларынын кол тамгасын текшерүү үчүн колдонулган RSA ачык ачкычынын хэштери;
  • RSA ачык ачкыч хэштери, Intel тарабынан иштелип чыккан ACM (Authenticated Code Module) код модулдарынын кол тамгасын текшерет, CPU BIOS аткарылганга чейин (саламатсызбы микрокод) же анын иштеши учурунда, белгилүү бир окуялар болгон учурда ишке киргизе алат.

Intel ME

Биздин блог ушул подсистемага арналган две макалалар. Эске салсак, бул аткарылуучу чөйрө чипсеттин ичине орнотулган микроконтроллерге негизделген жана системада эң жашыруун жана артыкчылыктуу болуп саналат.

Жашыруундугуна карабастан, Intel ME да ишенимдин тамыры болуп саналат, анткени ал:

  • ME ROM - старт кодун, ошондой эле Intel ME микропрограммасынын кол тамгасын текшерген RSA ачык ачкычынын SHA256 хэштерин камтыган туруксуз, кайра жазылбаган эстутум (жаңыртуу ыкмасы каралган эмес);
  • жашыруун маалыматты сактоо үчүн AES ачкычы;
  • кээ бир маалыматты, анын ичинде компьютер тутумунун сатуучусу белгилеген маалыматты туруктуу сактоо үчүн чипсетке интеграцияланган сактагычтардын (FPFs, Field Programmable Fuses) топтомуна жетүү.

Intel Boot Guard 1.x

Кичинекей баш тартуу. Бул макалада биз колдонгон Intel Boot Guard технологиясы версиясынын номерлери ыктыярдуу жана Intelдин ички документтеринде колдонулган номерлөө менен эч кандай байланышы жок болушу мүмкүн. Кошумчалай кетсек, бул технологияны ишке ашыруу жөнүндө бул жерде берилген маалымат тескери инженерия учурунда алынган жана Intel Boot Guard спецификациясына салыштырмалуу так эместиктерди камтышы мүмкүн, ал эч качан жарыяланышы күмөн.

Ошентип, Intel Boot Guard (BG) аппараттык камсыздоо менен колдоого алынган UEFI BIOS аутентификациясын текшерүү технологиясы. Китептеги анын кыскача сүрөттөмөсү боюнча [Платформага орнотулган коопсуздук технологиясы ачылды, бүтүндүк менен жүктөө же жүктөө эмес] бөлүмү, ал ишенимдүү жүктөө чынжырчасы катары иштейт. Ал эми андагы биринчи шилтеме CPU ичиндеги жүктөө коду (микрокод), ал RESET окуясы менен ишке ашат (BIOSтагы RESET вектору менен чаташтырбоо керек!). CPU SPI флеш эс тутумунда Intel (Intel BG стартап ACM) тарабынан иштелип чыккан жана кол коюлган код модулун табат, аны кэшине жүктөйт, текшерет (жогоруда CPUда ACMди ырастаган ачык ачкычтын хэштери бар экени белгиленген. кол) жана башталат.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard

Бул код модулу UEFI BIOS'тун кичинекей баштапкы бөлүгүн - Баштапкы жүктөө блогун (IBB) текшерүү үчүн жооптуу, ал өз кезегинде UEFI BIOS'тун негизги бөлүгүн текшерүү үчүн функцияларды камтыйт. Ошентип, Intel BG ОСти жүктөөдөн мурун BIOSтун аныктыгын текшерүүгө мүмкүндүк берет (бул Secure Boot технологиясынын көзөмөлү астында аткарылышы мүмкүн).

Intel BG технологиясы эки иштөө режимин камсыз кылат (жана бири экинчисине тоскоолдук кылбайт, б.а. эки режим тең системада иштетилиши мүмкүн, же экөө тең өчүрүлүшү мүмкүн).

Ченилген жүктөө

Measured Boot (МБ) режиминде, ар бир жүктөө компоненти (CPU жүктөө ROMунан баштап) TPM (Ишенимдүү платформа модулу) мүмкүнчүлүктөрүн колдонуу менен кийинкисин "ченейт". Билбегендерге түшүндүрүп берейин.

TPMде PCR (платформа конфигурациясынын регистрлери) бар, аларга хэширлөө операциясынын натыйжасы формула боюнча жазылат:

Шредингердин ишенимдүү бут кийими. Intel Boot Guard

Ошол. учурдагы ПТР мааниси мурункусунан көз каранды жана бул регистрлер система RESET болгондо гана баштапкы абалга келтирилет.

Ошентип, МБ режиминде, кайсы бир убакта, ПЦР "өлчөнгөн" коддун же маалыматтардын уникалдуу (хэширлөө операциясынын мүмкүнчүлүктөрүндө) идентификаторун чагылдырат. ПТР маанилери кээ бир маалыматтарды шифрлөөдө (TPM_Seal) колдонулушу мүмкүн. Андан кийин, аларды чечмелөө (TPM_Unseal) жүктөөнүн натыйжасында ПТР маанилери өзгөрбөсө гана мүмкүн болот (б.а., бир дагы "ченөө" компоненти өзгөртүлгөн эмес).

Текшерилген жүктөө

UEFI BIOSту өзгөртүүнү жакшы көргөндөр үчүн эң жаман нерсе - бул Verified Boot (VB) режими, мында ар бир жүктөө компоненти кийинкисинин бүтүндүгүн жана аныктыгын криптографиялык түрдө текшерет. Жана текшерүү катасы болгон учурда, (бирөөсү) болот:

  • 1 мүнөттөн 30 мүнөткө чейин таймаут менен өчүрүү (колдонуучунун компьютери эмне үчүн жүктөлбөй жатканын түшүнүүгө убактысы бар жана мүмкүн болсо, BIOSту калыбына келтирүүгө аракет кылат);
  • токтоосуз өчүрүү (колдонуучу түшүнүүгө убактысы жок, андан да азыраак, эч нерсе кылбашы үчүн);
  • токтоо сөз менен иштөөнү улантуу (коопсуздук үчүн убакыт жок болгондо, анткени андан да маанилүүрөөк иштер бар).

Иш-аракетти тандоо Intel BG конфигурациясынан (тактап айтканда, аткаруу саясаты деп аталган) көз каранды, ал компьютер платформасынын сатуучусу тарабынан атайын иштелип чыккан сактагычта - чипсет сактагычтарда (FPFs) биротоло жазылып турат. Бул маселеге кийинчерээк кененирээк токтолобуз.

Конфигурациядан тышкары, сатуучу эки RSA 2048 ачкычын жаратат жана эки маалымат структурасын түзөт (сүрөттө көрсөтүлгөн):

  1. Сатуучунун түпкү ачкыч манифести (KEYM, OEM Root Key Manifest), анда бул манифесттин SVN (Коопсуздук версиясынын номери), кийинки манифесттин ачык ачкычынын SHA256 хэши, RSA ачык ачкычы (б.а. сатуучунун түпкү ачкычы) бул манифесттин кол тамгасын жана колдун өзүн текшерүү үчүн;
  2. IBB манифести (IBBM, Initial Boot Block Manifest), анда бул манифесттин SVN, IBB SHA256 хэш, бул манифесттин кол тамгасын жана кол тамганын өзүн текшерүү үчүн ачык ачкыч бар.

OEM Root Key коомдук ачкычынын SHA256 хэши Intel BG конфигурациясындай эле чипсеттин сактагычтарында (FPF) биротоло жазылат. Эгерде Intel BG конфигурациясы бул технологияны камтууну камсыз кылса, анда мындан ары OEM Root Keyтин жеке бөлүгүнүн ээси гана бул системадагы BIOSту жаңылай алат (б.а., бул манифесттерди кайра эсептей алат), б.а. сатуучу.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard

Сүрөттү карап жатканда, мындай узун текшерүү чынжырынын зарылдыгы жөнүндө дароо эле шектенүүлөр пайда болот - алар бир манифестти колдонушу мүмкүн. Эмне үчүн нерселерди татаалдаштырат?

Чынында, Intel Ошентип, сатуучуга анын продуктуларынын ар кандай линиялары үчүн ар кандай IBB ачкычтарын жана бирин түпкү ачкыч катары колдонуу мүмкүнчүлүгүн берет. Эгерде IBB ачкычынын купуя бөлүгү (экинчи манифестке кол коюлган) агып кетсе, инцидент бир гана продукт линиясына таасир этет жана сатуучу жаңы жупту жаратмайынча жана кайра эсептелген манифесттерди кийинки BIOS жаңыртуусунда камтымайынча.

Бирок түпкү ачкыч (биринчи манифестке кол коюлган) бузулуп калса, аны алмаштыруу мүмкүн болбой калат, жокко чыгаруу процедурасы каралган эмес; бул ачкычтын жалпы бөлүгүнүн хэши биротоло FPFге программаланган.

Intel Boot Guard конфигурациясы

Эми Intel BG конфигурациясын жана аны түзүү процессин кененирээк карап чыгалы. Эгер сиз Intel System Tool Kit (STK) Flash Image Tool утилитасынын GUIдеги тиешелүү өтмөктү карасаңыз, Intel BG конфигурациясында сатуучунун түпкү ачкычынын жалпыга ачык бөлүгүнүн хэши камтылганын байкайсыз, бир нече түшүнүксүз баалуулуктар ж.б. Intel BG профили.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard

Бул профилдин түзүмү:

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

Жалпысынан алганда, Intel BG конфигурациясы абдан ийкемдүү нерсе. Мисалы, Force_Boot_Guard_ACM желегин карап көрөлү. Ал алынып салынганда, SPI жарыгындагы BG стартап ACM модулу табылбаса, ишенимдүү жүктөө болбойт. Ал ишенимсиз болот.

Биз жогоруда VB режими үчүн аткаруу саясатын конфигурациялоого болот деп жазганбыз, эгерде текшерүү катасы болсо, ишенимсиз жүктөө пайда болот.

Мындай нерселерди сатуучулардын эркине калтырыңыз...

GUI утилитасы төмөнкү "даяр" профилдерди камсыз кылат:

сан
режим
баяндоо

0
No_FVME
Intel BG технологиясы өчүрүлгөн

1
VE
VB режими иштетилди, таймаут менен өчүрүү

2
VME
эки режим иштетилген (VB жана МБ), таймаут менен өчүрүү

3
VM
эки режимдер системаны өчүрбөстөн иштетилген

4
FVE
VB режими иштетилген, дароо өчүрүү

5
FVME
эки режимдери иштетилген, дароо өчүрүү

Жогоруда айтылгандай, Intel BG конфигурациясы системанын сатуучусу тарабынан чипсеттин сактагычтарына (FPFs) биротоло жазылышы керек - чипсеттин ичиндеги маалыматтын кичинекей (текшерилбеген маалымат боюнча, болгону 256 байт) аппараттык сактагычы, аны программалоого болот. Intel өндүрүштүк жайларынан тышкары (ошондуктан так Талаа программалануучу Сақтандыргычтар).

Бул конфигурацияны сактоо үчүн эң сонун, анткени:

  • маалыматтарды сактоо үчүн бир жолку программалануучу аймак бар (так Intel BG конфигурациясы жазылган жерде);
  • Аны Intel ME гана окуп, программалай алат.

Ошентип, белгилүү бир системада Intel BG технологиясы үчүн конфигурацияны орнотуу үчүн, сатуучу өндүрүш учурунда төмөнкүлөрдү кылат:

  1. Flash Image Tool утилитасын колдонуу менен (Intel STK), ал Intel ME аймагындагы өзгөрмөлөр түрүндө берилген Intel BG конфигурациясы менен микропрограмманын сүрөтүн түзөт (FPF үчүн убактылуу күзгү деп аталган);
  2. Flash программалоо куралын (Intel STKден) колдонуп, бул сүрөттү системанын SPI флеш эс тутумуна жазат жана аталган нерсени жабат. өндүрүш режими (бул учурда, тиешелүү команда Intel MEге жөнөтүлөт).

Бул операциялардын натыйжасында, Intel ME ME чөлкөмүндөгү FPF үчүн күзгүдөн FPFs үчүн көрсөтүлгөн маанилерди аткарат, SPI флэш дескрипторлорунун токтомдорун Intel тарабынан сунушталган маанилерге (башында сүрөттөлгөн) орнотот. макала) жана системаны RESET аткарыңыз.

Intel Boot Guard ишке ашыруунун анализи

Бул технологияны конкреттүү мисал аркылуу ишке ашырууну талдоо үчүн, биз Intel BG технологиясынын издери үчүн төмөнкү системаларды текшердик:

система
пикир

Гигабайт GA-H170-D3H
Skylake, колдоо бар

Гигабайт GA-Q170-D3H
Skylake, колдоо бар

Гигабайт GA-B150-HD3
Skylake, колдоо бар

MSI H170A Gaming Pro
Skylake, колдоо жок

Lenovo Буш 460
Skylake, колдоого алынган, технология иштетилген

Lenovo Йога Pro 2
Haswell, колдоо жок

Lenovo U330p
Haswell, колдоо жок

"Колдоо" дегенде биз Intel BG стартап ACM модулунун, жогоруда айтылган манифесттердин жана BIOSдогу тиешелүү коддун, б.а. талдоо үчүн ишке ашыруу.

Мисал катары кеңседен жүктөлгөндү алалы. Gigabyte GA-H170-D3H үчүн SPI флеш эс тутумунун сатуучу веб-сайтынын сүрөтү (F4 версиясы).

Intel CPU жүктөө ROM

Биринчиден, Intel BG технологиясы иштетилген болсо, процессордун аракеттери жөнүндө сүйлөшөлү.

Шифрленген микрокоддун үлгүлөрүн табуу мүмкүн болгон жок, андыктан төмөндө сүрөттөлгөн аракеттер кандайча аткарылат (микрокоддо же аппараттык камсыздоодо) ачык суроо. Бирок, заманбап Intel процессорлору бул иш-аракеттерди "иштей алат" деген чындык.

RESET абалынан чыккандан кийин процессор (флеш-эстин мазмуну мурунтан эле дарек мейкиндигине түшүрүлгөн) FIT (Firmware Interface Table) таблицасын табат. Аны табуу оңой, көрсөткүч FFFF FFC0h дарегинде жазылган.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Каралып жаткан мисалда FFD6 9500h мааниси ушул даректе жайгашкан. Бул дарекке жетүү менен процессор FIT таблицасын көрөт, анын мазмуну жазууларга бөлүнгөн. Биринчи жазуу төмөнкү структуранын аталышы болуп саналат:

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

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Белгисиз себептерден улам бул таблицаларда контролдук сумма дайыма эле эсептелбейт (талаада нөл калтырылган).

Калган жазуулар BIOS аткарылганга чейин талданышы/аткарылышы керек болгон ар кандай бинардык файлдарды көрсөтөт, б.а. эски RESET векторуна (FFFF FFF0h) өтүүдөн мурун. Мындай жазуулардын ар биринин структурасы төмөнкүдөй:

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

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
EntryType талаасы сизге бул жазуу көрсөткөн блоктун түрүн айтып берет. Биз бир нече түрлөрүн билебиз:

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

Эми жазуулардын бири Intel BG стартап ACM бинардык жайгашкан жерин көрсөтүп турганы айдан ачык. Бул экиликтин баш структурасы Intel тарабынан иштелип чыккан код модулдары үчүн мүнөздүү (ACMs, микрокод жаңыртуулары, 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];
};

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Процессор бул бинардык файлды кэшине жүктөйт, аны текшерет жана иштетет.

Intel BG стартап ACM

Бул АКМдин ишин талдоонун натыйжасында ал төмөндөгүлөрдү аткара тургандыгы белгилүү болду:

  • Intel BG конфигурациясын Intel MEден алат, чипсеттик сактагычтарга (FPFs) жазылган;
  • KEYM жана IBBM табат жана аларды текшерет.

Бул манифесттерди табуу үчүн, ACM түзүм маалыматтарын көрсөтүү үчүн эки киргизүү түрү бар FIT таблицасын да колдонот (жогоруда FIT_ENTRY_TYPES караңыз).

Келгиле, манифесттерди кененирээк карап чыгалы. Биринчи манифесттин түзүмүндө биз бир нече бүдөмүк константаларды, экинчи манифесттен ачык ачкычтын хэштерин жана уяланган структура катары кол коюлган ачык OEM Root Keyсин көрөбүз:

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

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
OEM Root Key коомдук ачкычын текшерүү үчүн, биз SHA256 сактагычтардын хэштерин колдонгонубузду эсибизге салабыз, ал учурда Intel MEден алынган.

Экинчи манифестке өтөбүз. Ал үч структурадан турат:

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

Биринчиси кээ бир туруктууларды камтыйт:

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

Экинчисинде IBBдин SHA256 хэши жана IBBтин мазмунун сүрөттөгөн дескрипторлордун саны (б.а., хэш эмнеден эсептелет):

typedef struct IBBS
{
	char           Tag[8];            // ‘__IBBS__’
	unsigned char  : 8;               // 10h
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // x <= 0Fh
	unsigned long  : 32;              // x & FFFFFFF8h = 0
	unsigned long  Unknown[20];
	unsigned short : 16;              // 0Bh
	unsigned short : 16;              // 20h == hash size ?
	unsigned char  IbbHash[32];       // SHA256 of an IBB
	unsigned char  NumIbbDescriptors;
};

IBB дескрипторлору бул структураны биринин артынан бири аткарышат. Алардын мазмуну төмөнкү форматка ээ:

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

Бул жөнөкөй: ар бир дескриптор IBB бөлүгүнүн дарегин/өлчөмүн камтыйт. Ошентип, бул дескрипторлор көрсөткөн блоктордун бириктирилиши (дескрипторлордун өз тартиби боюнча) IBB болуп саналат. Ал эми, эреже катары, IBB SEC жана PEI фазаларынын бардык модулдарынын жыйындысы болуп саналат.

Экинчи манифест IBB ачык ачкычын (биринчи манифесттен SHA256 хэш менен текшерилген) жана бул манифесттин колтамгасын камтыган түзүм менен толукталат:

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

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Ошентип, UEFI BIOS ишке ашырыла электе эле, процессор ACMди ишке киргизет, ал бөлүмдөрдүн мазмунунун SEC жана PEI фазалык коду менен аныктыгын текшерет. Андан кийин процессор ACMден чыгып, RESET векторун ээрчип, BIOSту аткара баштайт.

Текшерилген PEI бөлүгү BIOSтун калган бөлүгүн (DXE коду) текшере турган модулду камтышы керек. Бул модул мурунтан эле IBV (Independent BIOS Vendor) же системанын сатуучусу тарабынан иштелип чыккан. Анткени Бир гана Lenovo жана Gigabyte системалары биздин карамагыбызда болгон жана Intel BG колдоосуна ээ болгон, келгиле, бул системалардан алынган кодду карап көрөлү.

UEFI BIOS модулу LenovoVerifiedBootPei

Lenovo учурда, ал Lenovo тарабынан иштелип чыккан LenovoVerifiedBootPei модулу {B9F2AC77-54C7-4075-B42E-C36325A9468D} болуп чыкты.

Анын милдети (GUID боюнча) DXE үчүн хэш таблицасын издөө жана 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 модулу BootGuardPei

Gigabyte учурда, бул AMI тарабынан иштелип чыккан BootGuardPei модулу {B41956E1-7CA2-42DB-9562-168389F0F066} болуп чыкты, ошондуктан Intel BG колдоосу менен каалаган AMI BIOSдо бар.

Анын иштөө алгоритми бир аз башкача, бирок, ал бир эле нерсеге чейин төмөндөйт:

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

Ал издеп жаткан {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} хэш таблицасы төмөнкү форматка ээ:

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

Келгиле, Apollo Lake микроархитектурасы менен Intel SoC негизинде жаңы системада табылган Intel Boot Guard дагы бир ишке ашыруу жөнүндө кыскача сүйлөшөлү - ASRock J4205-IT.

Бул версия SoCтерде гана колдонулса да (Kaby Lake процессорунун микроархитектурасы бар жаңы системалар Intel Boot Guard 1.x колдонууну улантууда), ал олуттуу өзгөрүүлөрдү көргөн Intel SoC платформалары үчүн жаңы архитектуралык вариантты изилдөөгө чоң кызыгууну жаратат. мисалы :

  • BIOS жана Intel ME аймактары (же тагыраак айтканда, Intel TXE, Intel SoC үчүн терминология боюнча) азыр бир IFWI аймагы болуп саналат;
  • платформада Intel BG иштетилгени менен, FIT, KEYM, IBBM сыяктуу структуралар флеш эстутумда табылган эмес;
  • TXE жана ISH өзөктөрүнөн (x86) тышкары, чипсетке үчүнчү өзөк кошулган (Баса, ARC дагы) - PMC (Power Management Controller), кубаттуулук подсистемасынын иштешин жана өндүрүмдүүлүккө мониторинг жүргүзүү менен байланышкан.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Жаңы IFWI аймагынын мазмуну төмөнкү модулдардын жыйындысы болуп саналат:

Bias
ысым
баяндоо

0000 2000ч
SMIP
сатуучу тарабынан кол коюлган белгилүү бир платформа конфигурациясы

0000 6000ч
RBEP
Intel TXE микропрограммасынын коду бөлүмү, x86, кол коюлган Intel

0001 0000ч
PMCP
Intel PMC микропрограмма коду бөлүмү, ARC, Intel кол койгон

0002 0000ч
FTPR
Intel TXE микропрограммасынын коду бөлүмү, x86, кол коюлган Intel

0007 B000h
UCOD
CPU үчүн микрокод жаңыртуулары, Intel кол койгон

0008 0000ч
IBBP
UEFI BIOS, SEC/PEI фазалары, x86, сатуучу кол койгон

0021 8000ч
ISHC
Intel ISH микропрограммасынын коду бөлүмү, x86, сатуучу кол койгон

0025 8000ч
NFTP
Intel TXE микропрограммасынын коду бөлүмү, x86, кол коюлган Intel

0036 1000ч
IUNP
белгисиз

0038 1000ч
OBBP
UEFI BIOS, DXE фазасы, x86, кол коюлбаган

TXE микропрограммасын талдоо учурунда, RESET болгондон кийин, TXE процессорду CPU үчүн дарек мейкиндигинин негизги мазмунун (FIT, ACM, RESET вектору ...) даярдамайынча ушул абалда сактаары айкын болду. Мындан тышкары, TXE бул маалыматты өзүнүн SRAM-га жайгаштырат, андан кийин ал убактылуу процессорго ал жакка кирүү мүмкүнчүлүгүн берет жана аны RESETтен "чыгарат".

Руткиттерден сак болуңуз

Эми "ысык" нерселерге өтөбүз. Көптөгөн системаларда SPI флэш дескрипторлору SPI флэш эс тутумунун аймактарына кирүүгө уруксаттарды камтыгандыктан, бул эстутумдун бардык колдонуучулары каалаган аймакты жазып жана окуй алышарын бир жолу байкадык. Ошол. эч качан.

MEinfo утилитасын (Intel STKден) текшергенден кийин, биз бул системалардагы өндүрүш режими жабык эмес экенин көрдүк, ошондуктан чипсеттик сактагычтар (FPFs) аныкталбаган абалда калган. Ооба, Intel BG мындай учурларда күйгүзүлбөйт да, өчүрүлбөйт.

Биз төмөндөгү системалар жөнүндө сөз болуп жатат (Intel BG жана макалада кийинчерээк сүрөттөлөт, биз Haswell процессорунун микроархитектурасы жана андан жогору болгон системалар жөнүндө сүйлөшөбүз):

  • бардык Gigabyte өнүмдөрү;
  • бардык MSI өнүмдөрү;
  • Lenovo ноутбуктарынын 21 модели жана Lenovo серверлеринин 4 модели.

Албетте, биз ачылышты бул сатуучуларга, ошондой эле Intelге билдирдик.

Бир гана адекваттуу реакция келди Lenovoпроблеманы ким тааныды жана патч чыгарды.

гигабайт Алар алсыздык тууралуу маалыматты кабыл алгандай болду, бирок эч кандай комментарий беришкен жок.

менен байланыш MSI жалпы PGP ачкычыңызды жөнөтүү өтүнүчүбүз боюнча (аларга шифрленген түрдө коопсуздук кеңешин жөнөтүү үчүн) толугу менен токтоп калды. Алар "жабдык өндүрүүчүсү жана PGP ачкычтарын чыгарышпайт" деп билдиришти.

Бирок кепке келели. Сактагычтар такталбаган абалда калгандыктан, колдонуучу (же чабуулчу) аларды өз алдынча программалай алат (эң кыйыны - бул Intel STK табуу). Бул үчүн, төмөнкү кадамдарды аткаруу керек.

1. ОСке жүктөө Windows (жалпысынан алганда, төмөндө сүрөттөлгөн аракеттерди астынан жасоого болот Linux(Эгер сиз каалаган ОС үчүн Intel STK аналогун иштеп чыксаңыз). MEinfo утилитасын колдонуп, бул системадагы сактагычтар программаланбаганын текшериңиз.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
2. Flash программалоо куралын колдонуп, флэш эстутумдун мазмунун окуңуз.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
3. Окулган сүрөттү каалаган UEFI BIOS түзөтүү куралы менен ачыңыз, керектүү өзгөртүүлөрдү киргизиңиз (мисалы, руткиттерди киргизиңиз), ME аймагындагы KEYM жана IBBM структураларын түзүңүз/түзүңүз.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Сүрөт RSA ачкычынын жалпыга ачык бөлүгүн баса белгилейт, анын хэштери Intel BG конфигурациясынын калган бөлүгү менен бирге чипсеттин сактагычтарына программаланат.

4. Flash Image куралын колдонуп, жаңы микропрограмманын сүрөтүн түзүңүз (Intel BG конфигурациясын орнотуу менен).

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
5. Flash программалоо куралын колдонуп флеш эстутумга жаңы сүрөт жазыңыз, ME аймагында азыр Intel BG конфигурациясын камтыганын MEinfo аркылуу текшериңиз.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
6. Өндүрүш режимин жабуу үчүн Flash программалоо куралын колдонуңуз.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
7. Система кайра жүктөлөт, андан кийин FPFтер азыр программаланганын текшерүү үчүн MEinfo колдонсоңуз болот.

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Бул аракеттер дайыма бул системада Intel BG иштетүү. Аракетти артка кайтаруу мүмкүн эмес, башкача айтканда:

  • Бул системадагы UEFI BIOSту түпкү ачкычтын купуя бөлүгүнүн ээси гана (б.а. Intel BG иштеткен адам) жаңылай алат;
  • эгерде сиз түпнуска микропрограмманы бул системага кайтарып берсеңиз, мисалы, программистти колдонуп, ал күйбөйт (текшерүү катасы болгон учурда аткаруу саясатынын натыйжасы);
  • мындай UEFI BIOSдон кутулуу үчүн, программаланган FPF менен чипсетти "таза" менен алмаштыруу керек (б.а., эгерде сиз инфракызыл ширетүү станциясына кире алсаңыз, чипсетти машинанын баасы менен кайра солгуңуз же жөн гана энелик платаны алмаштырыңыз. ).

Мындай руткит эмне кыла аларын түшүнүү үчүн, сиз кодуңузду UEFI BIOS чөйрөсүндө аткарууга эмне мүмкүнчүлүк берерин баалашыңыз керек. Айталы, эң артыкчылыктуу процессор режиминде - SMM. Мындай руткит төмөнкү касиеттерге ээ болушу мүмкүн:

  • ОС менен параллелдүү аткарылган (сиз SMI үзгүлтүккө учуратуу үчүн иштетүүнү конфигурациялай аласыз, ал таймер тарабынан иштетилет);
  • SMM режиминде болуунун бардык артыкчылыктарына ээ (RAM жана аппараттык ресурстардын мазмунуна толук жетүү, ОСтен жашыруундук);
  • Руткиттин программалык коду SMM режиминде ишке киргизилгенде шифрленген жана чечмелениши мүмкүн. SMM режиминде гана жеткиликтүү болгон бардык маалыматтар шифрлөө ачкычы катары колдонулушу мүмкүн. Мисалы, SMRAMдагы даректер жыйындысынан хэш. Бул ачкычты алуу үчүн SMMге кирүү керек. Жана бул эки жол менен жасалышы мүмкүн. SMM кодунан RCEди таап, аны иштетиңиз же BIOS'ка өзүңүздүн SMM модулуңузду кошуңуз, биз Boot Guard иштетилгенден бери бул мүмкүн эмес.

Ошентип, бул алсыздык чабуулчуга төмөнкүлөргө мүмкүндүк берет:

  • системада белгисиз максаттагы жашыруун, өчүрүлгүс руткиттерди түзүү;
  • кодуңузду Intel SoC ичиндеги чипсет өзөктөрүнүн биринде, тактап айтканда, Intel ISHте аткарыңыз (сүрөттү кылдаттык менен караңыз).

Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Шредингердин ишенимдүү бут кийими. Intel Boot Guard
Intel ISH подсистемасынын мүмкүнчүлүктөрү изилдене элек болсо да, ал Intel ME үчүн кызыктуу чабуул вектору болуп көрүнөт.

табылгалары

  1. Изилдөө Intel Boot Guard технологиясынын иштешинин техникалык сыпаттамасын алууга мүмкүндүк берди. Белгисиздик модели аркылуу Intelдин коопсуздугунун бир нече сырлары.
  2. Системада орнотулбай турган руткиттерди түзүүгө мүмкүндүк берген чабуул сценарийи сунушталат.
  3. Биз заманбап Intel процессорлору BIOS иштей баштаганга чейин эле көптөгөн проприетардык коддорду аткарууга жөндөмдүү экенин көрдүк.
  4. Intel 64 архитектурасы бар платформалар бекер программалык камсыздоону иштетүү үчүн азыраак ылайыктуу болуп баратат: аппараттык текшерүү, проприетардык технологиялардын жана подсистемалардын саны көбөйүүдө (SoC чипсетиндеги үч өзөк: x86 ME, x86 ISH жана ARC PMC).

Жумшартуу

Өндүрүш режимин атайылап ачык калтырган сатуучулар аны жабууну унутпашы керек. Азырынча алардын көздөрү гана жабык жана Каби-Көлдүн жаңы системалары муну көрсөтүп турат.

Колдонуучулар -closemnf параметри менен Flash программалоо куралын иштетип, өз тутумдарында Intel BGди өчүрө алышат (сүрөттөлгөн алсыздыкка дуушар болушат). Биринчиден, сиз (MEinfo аркылуу) ME аймагындагы Intel BG конфигурациясында бул технологияны FPFтерде программалоодон кийин өчүрүү каралганына ынанышыңыз керек.

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster