Шредингердің сенімді туфлиі. Intel Boot Guard

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

Айтпақшы, мақала конференциядағы «Руткиттерді қорғау туралы: Intel BootGuard» баяндамаларына негізделген. Нөл түндер 2016 және 29-шы кездесу DefCon Ресей (екі презентация осында).

Intel 64 архитектурасы бар компьютерлік платформаға арналған микробағдарлама

Алдымен, сұраққа жауап берейік: Intel 64 архитектурасы бар заманауи компьютерлік платформаның микробағдарламасы қандай? Әрине, UEFI BIOS. Бірақ бұл жауап нақты болмайды. Осы архитектураның жұмыс үстелі (ноутбук) нұсқасын көрсететін суретті қарастырайық.

Шредингердің сенімді туфлиі. Intel Boot Guard
Негізі сілтеме болып табылады:

  • Процессор (CPU, Central Processing Unit), онда негізгі ядролардан басқа, кірістірілген графикалық ядро ​​(барлық үлгілерде емес) және жад контроллері (IMC, Integrated Memory Controller) бар;
  • Перифериялық құрылғылармен әрекеттесу және ішкі жүйелерді басқару үшін әртүрлі контроллерлерден тұратын чипсет (PCH, Platform Controller Hub). Олардың арасында атышулы Intel Management Engine (ME) бар, оның микробағдарламасы да бар (Intel ME микробағдарламасы).

Ноутбуктер, жоғарыда айтылғандарға қосымша, қуат ішкі жүйесінің, сенсорлық тақтаның, пернетақтаның, Fn пернелерінің (экран жарықтығы, дыбыс деңгейі, пернетақта) жұмысына жауап беретін біріктірілген контроллерді (ACPI EC, Advanced Control and Power Interface Embedded Controller) қажет етеді. артқы жарық және т.б.). ) және т.б. Оның да өзінің микробағдарламасы бар.

Сонымен, жоғарыда аталған микробағдарламаның комбинациясы жалпы SPI флэш-жадында сақталатын компьютерлік платформаның микробағдарламасы (жүйелік микробағдарлама) болып табылады. Бұл жадты пайдаланушылар біреу жатқан жерде шатастырмау үшін бұл жадтың мазмұны келесі аймақтарға бөлінген (суретте көрсетілгендей):

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

Шредингердің сенімді туфлиі. Intel Boot Guard
Аймақтарға қол жеткізуді саралауды (көрсетілген рұқсаттарға сәйкес) SPI шинасының шебері - чипсетке енгізілген SPI контроллері өңдейді, ол арқылы осы жадыға қол жеткізуге болады. Егер рұқсаттар Intel ұсынған мәндерге (қауіпсіздік мақсатында) орнатылса, SPI жарқылының әрбір пайдаланушысы тек өз аймағына толық қол жеткізе алады (оқу/жазу). Қалғандары тек оқуға арналған немесе қол жетімсіз. Белгілі факт: көптеген жүйелерде процессордың UEFI BIOS және GbE жүйесіне толық рұқсаты бар, тек флэш-дескрипторларды оқуға рұқсаты бар және Intel ME аймағына мүлде қол жеткізе алмайды. Неліктен барлығы емес, көп? Ұсынылатын нәрсе міндетті емес. Біз сізге кейінірек мақалада айтып береміз.

Компьютерлік платформаның микробағдарламасын модификациядан қорғау механизмдері

Әлбетте, компьютерлік платформаның микробағдарламасы ықтимал ымырадан қорғалуы керек, бұл әлеуетті шабуылдаушыға оның орнында тұруға (ОС жаңартуларынан/қайта орнатудан аман қалуға), олардың кодын ең артықшылықты режимдерде орындауға және т.б. Және 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 технологиясына еш қатысы жоқ аппараттық ауыстырылмайтын Secure Boot (Verified Boot) енгізді. Кейінірек (2013) бұл механизм жетілдірілді және Intel Boot Guard деген атпен Haswell микроархитектурасы бар жұмыс үстелдері үшін шығарылды.

Intel Boot Guard сипаттамасын бермес бұрын, Intel 64 архитектурасындағы орындау орталарын қарастырайық, олар біріктірілгенде осы сенімді жүктеу технологиясына сенімнің тамыры болып табылады.

Intel процессоры

Қақпақ процессорды Intel 64 архитектурасының негізгі орындау ортасы деп болжайды.Неліктен ол сенімнің негізі болып табылады? Оны келесі элементтердің иеленуі жасайды екен:

  • Microcode 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 аутентификация технологиясы. [Platforma Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot] кітабындағы оның шағын сипаттамасына қарағанда, ол сенімді жүктеу тізбегі ретінде жұмыс істейді. Ал ондағы бірінші сілтеме - RESET оқиғасы арқылы іске қосылатын орталық процессордың ішіндегі жүктеу коды (микрокод) (BIOS жүйесіндегі RESET векторымен шатастырмау керек!). Орталық процессор SPI флэш-жадында Intel әзірлеген және қол қойған код модулін (Intel BG іске қосу ACM) табады, оны кэшке жүктейді, оны тексереді (жоғарыда CPU-да ACM қолтаңбасын тексеретін ашық кілт хэші бар екені атап өтілген болатын. ) және басталады.

Шредингердің сенімді туфлиі. Intel Boot Guard

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

Intel BG технологиясы екі жұмыс режимін қамтамасыз етеді (және біреуі екіншісіне кедергі жасамайды, яғни екі режимді де жүйеде қосуға болады және екеуін де өшіруге болады).

Өлшенген жүктеу

Measured Boot (MB) режимінде әрбір жүктеу құрамдас бөлігі (CPU жүктеу ROM-дан бастап) сенімді платформа модулінің (TPM) мүмкіндіктерін пайдаланып келесісін «өлшейді». Білмейтіндер үшін түсіндірейін.

TPM-де мына формула бойынша хэштеу операциясының нәтижесін жазатын ПТР (платформа конфигурация регистрлері) бар:

Шредингердің сенімді туфлиі. Intel Boot Guard

Анау. ағымдағы ПТР мәні алдыңғыға байланысты және бұл регистрлер жүйе RESET болған кезде ғана қалпына келтіріледі.

Осылайша, МБ режимінде белгілі бір уақытта ПТР «өлшенген» кодтың немесе деректердің бірегей (хэш операциясының мүмкіндіктері шегінде) идентификаторын көрсетеді. ПТР мәндерін кейбір деректерді шифрлауда (TPM_Seal) пайдалануға болады. Осыдан кейін олардың шифрын шешу (TPM_Unseal) ПТР мәндері жүктеу нәтижесінде өзгермеген жағдайда ғана мүмкін болады (яғни, бірде-бір «өлшенген» компонент өзгертілмеген).

Расталған жүктеу

UEFI BIOS-ты өзгертуді ұнататындар үшін ең қорқынышты нәрсе - бұл әр жүктеу компоненті келесінің тұтастығы мен түпнұсқалығын криптографиялық түрде тексеретін Verified Boot (VB) режимі. Ал тексеру қатесі болған жағдайда (төмендегілердің бірі) орын алады:

  • 1 минуттан 30 минутқа дейін күту уақытымен өшіру (пайдаланушы компьютерінің неліктен жүктелмейтінін түсінуге және мүмкіндігінше BIOS-ты қалпына келтіруге тырысуы үшін);
  • дереу өшіру (пайдаланушының түсінуге және оның үстіне істеуге уақыты болмас үшін);
  • тік бетпен жұмысты жалғастыру (қауіпсіздікке уақыт болмаған жағдайда, өйткені маңыздырақ істер бар).

Әрекетті таңдау компьютер платформасының жеткізушісі арнайы әзірленген жадта - чипсет сақтандырғыштарында (FPF) тұрақты түрде жазылатын көрсетілген Intel BG конфигурациясына (дәлірек айтқанда, мәжбүрлеу саясаты деп аталатын) байланысты. Бұл мәселеге кейінірек толығырақ тоқталамыз.

Конфигурацияға қосымша, жеткізуші екі RSA 2048 кілтін жасайды және екі деректер құрылымын жасайды (суретте көрсетілген):

  1. Осы манифесттің SVN (Қауіпсіздік нұсқасының нөмірі), келесі манифесттің ашық кілтінің SHA256 хэшін, RSA ашық кілтін (яғни. жеткізуші түбірлік кілті) осы манифесттің қолын және қолтаңбаның өзін тексеру үшін;
  2. Осы манифесттің SVN кодын, IBB SHA256 хэшін, осы манифесттің қолтаңбасын тексеруге арналған ашық кілтті және қолтаңбаның өзін орналастыратын IBB манифесті (IBBM, Initial Boot Block Manifest).

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

Шредингердің сенімді туфлиі. Intel Boot Guard

Суретке қараған кезде, мұндай ұзақ тексеру тізбегінің қажеттілігі туралы күмән бірден пайда болады - сіз бір манифестті қолдана аласыз. Неліктен қиындатады?

Шын мәнінде, Intel осылайша жеткізушіге әртүрлі өнім желілері үшін әртүрлі IBB кілттерін және біреуін түбір ретінде пайдалану мүмкіндігін береді. Егер IBB кілтінің жеке бөлігі (екінші манифестке белгі береді) ағып кетсе, оқиға тек бір өнім желісіне ғана әсер етеді және жеткізуші жаңа жұп жасап, келесі BIOS жаңартуында қайта есептелген манифесттерді қосқанша ғана.

Бірақ егер түбірлік кілт бұзылса (бірінші манифестке қол қойылған), оны ауыстыру мүмкін болмайды, кері қайтарып алу процедурасы қамтамасыз етілмейді. осы кілттің жалпы бөлігінің хэші FPF-ге біржола бағдарламаланады.

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

Енді Intel BG конфигурациясын және оны жасау процесін егжей-тегжейлі қарастырайық. Егер сіз Intel System Tool Kit (STK) Flash Image құралының графикалық интерфейсіндегі сәйкес қойындысын қарасаңыз, 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 режимінің орындау саясатын тексеру сәтсіз аяқталса, қайтадан сенімсіз жүктеу орын алатындай конфигурациялауға болатынын жазғанбыз.

Мұндай нәрселерді сатушыларға қалдырыңыз ...

Утилитаның графикалық интерфейсі келесі «дайын» ​​профильдерді ұсынады:

Бөлме
Режим
сипаттамасы

0
Жоқ_FVME
Intel BG технологиясы өшірілген

1
VE
VB режимі қосылды, күту уақыты бойынша өшіру

2
VME
екі режим де қосылды (VB және MB), күту уақыты бойынша өшіру

3
VM
екі режим де жүйені өшірмей қосылады

4
FVE
VB режимі қосылды, дереу өшіру

5
FVME
екі режим де қосылды, дереу өшіру

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

Бұл конфигурацияны сақтау үшін тамаша, себебі:

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

Осылайша, Intel BG технологиясының конфигурациясын белгілі бір жүйеде орнату үшін өндіруші өндіру кезінде келесі әрекеттерді орындайды:

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

Осы әрекеттердің нәтижесінде Intel ME ME аймағындағы FPF айнасынан берілген мәндерді FPF-ге міндеттейді, 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 ThinkPad 460
Skylake, қолдау қолжетімді, технология қосылған

Lenovo Yoga 2 Pro
Хасвелл, қолдау жоқ

Lenovo U330p
Хасвелл, қолдау жоқ

«Қолдау» Intel BG іске қосу ACM модулінің, жоғарыда аталған манифесттердің және BIOS жүйесіндегі сәйкес кодтың болуын білдіреді, яғни. талдауға арналған енгізулер.

Мысал ретінде кеңседен жүктелгенін алайық. Gigabyte GA-H170-D3H (F4 нұсқасы) үшін SPI флэш-жадының сатушы сайтының суреті.

Intel CPU жүктеу ROM

Ең алдымен, Intel BG технологиясы қосылған болса, процессордың әрекеттері туралы сөйлесейік.

Шифры шешілген микрокод үлгілерін табу мүмкін болмады, сондықтан төменде сипатталған әрекеттер қалай орындалатыны (микрокодта немесе аппараттық құралда) ашық мәселе. Дегенмен, қазіргі заманғы Intel процессорлары бұл әрекеттерді «орындай алатыны» факт.

RESET күйінен шыққаннан кейін процессор (мекенжай кеңістігінде флэш-жадтың мазмұны әлдеқашан салыстырылған) FIT (микробағдарлама интерфейсінің кестесі) табады. Оны табу оңай, оған көрсеткіш 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 әзірлеген код модульдеріне тән (ACM, микрокод жаңартулары, 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 ME жүйесінен чипсет сақтандырғыштарына (FPF) жазылған Intel BG конфигурациясын алады;
  • KEYM және IBBM манифесттерін табады, оларды тексереді.

Бұл манифесттерді табу үшін ACM сонымен қатар осы құрылымдарға нұсқайтын жазбалардың екі түрі бар FIT кестесін пайдаланады (жоғарыдағы FIT_ENTRY_TYPES бөлімін қараңыз).

Манифесттерді толығырақ қарастырайық. Бірінші манифест құрылымында біз бірнеше түсініксіз тұрақтыларды, екінші манифесттен ашық кілттің хэшін және кірістірілген құрылым ретінде қол қойылған жалпы OEM түбір кілтін көреміз:

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 түбірлік кілтінің ашық кілтін тексеру үшін сақтандырғыштардан 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 SoC терминологиясына сәйкес Intel TXE) енді бір IFWI аймағы;
  • платформада Intel BG қосылғанымен, флеш жадта FIT, KEYM, IBBM сияқты құрылымдар табылмады;
  • TXE және ISH өзектеріне (x86) қосымша, үшінші ядро ​​(қайтадан ARC, айтпақшы) чипсетке қосылды - PMC (қуатты басқару контроллері), қуат ішкі жүйесінің жұмыс істеуін қамтамасыз етумен және өнімділікті бақылаумен байланысты.

Шредингердің сенімді туфлиі. Intel Boot Guard
Жаңа IFWI аймағының мазмұны келесі модульдердің жиынтығы болып табылады:

Офсет
Аты
сипаттамасы

0000 2000h
SMIP
сатушы қол қойған кейбір платформа конфигурациясы

0000 6000h
RBEP
Intel TXE микробағдарлама коды бөлімі, x86, Intel қол қойған

0001 0000h
PMCP
микробағдарлама коды бөлімі Intel PMC, ARC, Intel қол қойған

0002 0000h
FTPR
Intel TXE микробағдарлама коды бөлімі, x86, Intel қол қойған

0007B000h
UCOD
Intel қол қойған CPU микрокоды жаңартулары

0008 0000h
IBBP
UEFI BIOS, SEC/PEI фазалары, x86, жеткізуші қол қойды

0021 8000h
ISHC
Intel ISH микробағдарламасының код бөлімі, x86, жеткізуші қол қойған

0025 8000h
NFTP
Intel TXE микробағдарлама коды бөлімі, x86, Intel қол қойған

0036 1000h
IUNP
белгісіз

0038 1000h
OBBP
UEFI BIOS, DXE фазасы, x86, қолтаңбасы жоқ

TXE микробағдарламасын талдау барысында RESET-тен кейін TXE процессорды орталық процессорға адрестік кеңістіктің негізгі мазмұнын дайындағанға дейін (FIT, ACM, RESET векторы ...) осы күйде сақтайтыны белгілі болды. Сонымен қатар, TXE бұл деректерді SRAM-ге орналастырады, содан кейін ол уақытша процессорға қол жеткізуді қамтамасыз етеді және оны RESET-тен «босатады».

Руткиттерді қорғауда

Ал, енді «ыстыққа» көшейік. Біз бір кездері көптеген жүйелерде SPI флэш дескрипторларының SPI флэш жады аймақтарына кіру рұқсаттары бар екенін анықтадық, осылайша осы жадтың барлық пайдаланушылары кез келген аймақты жаза және оқи алады. Анау. мүмкін емес.

MEinfo утилитасымен (Intel STK-дан) тексергеннен кейін біз бұл жүйелердегі өндіріс режимі жабылмағанын көрдік, сондықтан чипсет сақтандырғыштары (FPF) анықталмаған күйде қалды. Иә, мұндай жағдайларда Intel BG қосылмайды немесе өшірілмейді.

Біз келесі жүйелер туралы айтып отырмыз (Intel BG туралы және мақалада кейінірек не сипатталатын болады, біз Haswell процессорының микроархитектурасы және одан жоғары жүйелер туралы айтатын боламыз):

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

Әрине, біз табылғанды ​​осы жеткізушілерге, сондай-ақ Intel компаниясына хабарладық.

Адекватты жауап тек келесіден алынды Lenovoмәселені кім мойындады және патч шығарды.

Гигабайт Олар осалдық туралы ақпаратты қабылдаған сияқты, бірақ ешқандай түсініктеме бермеді.

-мен байланыс MSI біздің жалпы PGP кілтін (оларға шифрланған қауіпсіздік кеңесін жіберу үшін) жіберу сұрауымыз бойынша толығымен тоқтап қалды. Олар «аппараттық құрал өндірушісі және PGP кілттерін шығармайды» деп мәлімдеді.

Бірақ көбірек. Сақтандырғыштар анықталмаған күйде қалдырылғандықтан, пайдаланушы (немесе шабуылдаушы) оларды өзі бағдарламалай алады (ең қиыны Intel STK табыңыз). Бұл келесі қадамдарды қажет етеді.

1. Windows операциялық жүйесінде жүктеу (жалпы, төменде сипатталған қадамдарды қажет ОЖ үшін Intel STK аналогын жасасаңыз, Linux жүйесінен де орындауға болады). 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 кескін құралын пайдаланып, жаңа микробағдарлама кескінін жасаңыз (Intel BG конфигурациясын орнату арқылы).

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

Шредингердің сенімді туфлиі. Intel Boot Guard
6. Өндіріс режимін жабу үшін Flash бағдарламалау құралын пайдаланыңыз.

Шредингердің сенімді туфлиі. Intel Boot Guard
7. Жүйе қайта жүктеледі, содан кейін MEinfo арқылы FPF файлдарының енді бағдарламаланғанын тексеруге болады.

Шредингердің сенімді туфлиі. Intel Boot Guard
Бұл әрекеттер мәңгі осы жүйеде Intel BG қосыңыз. Әрекетті болдырмау мүмкін болмайды, яғни:

  • тек түбірлік кілттің жеке бөлігінің иесі (яғни, Intel BG қосқан адам) осы жүйедегі UEFI BIOS-ты жаңарта алады;
  • егер сіз бастапқы микробағдарламаны осы жүйеге қайтарсаңыз, мысалы, бағдарламашыны пайдаланып, ол тіпті қосылмайды (тексеру қатесі болған жағдайда орындау саясатының салдары);
  • мұндай UEFI BIOS-тан құтылу үшін бағдарламаланған FPF чипсеттерін «таза» чипсетпен ауыстыру керек (яғни, егер сізде инфрақызыл дәнекерлеу станциясына автокөлік бағасымен кіру мүмкіндігі болса, чипсетті қайта дәнекерлеу немесе жай ғана аналық платаны ауыстыру керек. ).

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

  • ОЖ-мен параллель орындалады (таймер іске қосылатын SMI үзуін жасау арқылы өңдеуді конфигурациялауға болады);
  • SMM режимінде болудың барлық артықшылықтары бар (ЖЖҚ ​​мазмұнына және аппараттық ресурстарға толық қол жеткізу, ОЖ құпиялылығы);
  • Руткит кодын 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 қызметін өшіре алады (оларға сипатталған осалдық әсер етеді). Алдымен, ME аймағындағы Intel BG конфигурациясы FPF-де бағдарламалаудан кейін бұл технологияны дәл өшіруді қамтамасыз ететініне (MEinfo көмегімен) көз жеткізуіңіз керек.

Ақпарат көзі: www.habr.com

пікір қалдыру