Schrödinger-in etibarlı çəkməsi. Intel Boot Guard

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Yenidən aşağı səviyyəyə enməyi və x86 uyğun kompüter platformalarının firmware təhlükəsizliyi haqqında danışmağı təklif edirik. Bu dəfə tədqiqatın əsas tərkib hissəsi Intel Boot Guard (Intel BIOS Guard ilə qarışdırılmamalıdır!) - kompüter sistemi satıcısının istehsal mərhələsində daimi olaraq aktivləşdirə və ya söndürə biləcəyi hardware tərəfindən dəstəklənən BIOS etibarlı yükləmə texnologiyasıdır. Tədqiqat reseptini artıq bilirik: tərs mühəndislik yolu ilə bu texnologiyanın tətbiqini incə şəkildə kəsin, onun arxitekturasını təsvir edin, sənədsiz detallarla doldurun, dadmaq və qarışdırmaq üçün hücum vektorları ilə mövsüm edin. İllərdir bir neçə satıcının istehsalında klonlaşdırılmış səhvin potensial təcavüzkarın sistemdə silinə bilməyən (hətta proqramçı tərəfindən də) gizli rootkit yaratmaq üçün bu texnologiyadan istifadə etməsinə necə imkan verdiyi haqqında hekayə ilə atəş əlavə edək.

Yeri gəlmişkən, məqalə konfransın “Rootkitlər üçün Mühafizə: Intel BootGuard” hesabatlarına əsaslanır. Zeronights 2016 və 29-cu görüş DefCon Rusiya (hər iki təqdimat burada).

Intel 64 arxitekturasına malik kompüter platforması üçün proqram təminatı

Başlamaq üçün suala cavab verək: Intel 64 arxitekturasına malik müasir kompüter platformasının proqram təminatı nədir? Əlbəttə ki, UEFI BIOS. Amma bu cavab dəqiq olmayacaq. Bu arxitekturanın masaüstü (noutbuk) versiyasını göstərən rəqəmə nəzər salaq.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Əsas linkdir:

  • Əsas nüvələrə əlavə olaraq daxili qrafik nüvəsinə (bütün modellərdə deyil) və yaddaş nəzarətçisinə (IMC, Integrated Memory Controller) malik olan prosessor (CPU, Mərkəzi Prosessor);
  • Çipset (PCH, Platform Controller Hub), periferik cihazlarla qarşılıqlı əlaqə və alt sistemləri idarə etmək üçün müxtəlif nəzarətçiləri ehtiva edir. Onların arasında proshivka (Intel ME mikroproqramı) olan bədnam Intel Management Engine (ME) var.

Noutbuklar, yuxarıda göstərilənlərə əlavə olaraq, güc alt sisteminin, sensor panelin, klaviaturanın, Fn düymələrinin (ekran parlaqlığı, səs səviyyəsi, klaviatura) işləməsinə cavabdeh olan inteqrasiya edilmiş nəzarətçi (ACPI EC, Advanced Control and Power Interface Embedded Controller) tələb edir. arxa işıq və s.). ) və s. Həm də onun öz proqram təminatı var.

Beləliklə, yuxarıda göstərilən proqram təminatının birləşməsi ümumi SPI flash yaddaşında saxlanılan kompüter platformasının (sistem proshivka) proqram təminatıdır. Bu yaddaşın istifadəçilərinin kiminsə yatdığı yerdə çaşqın olmaması üçün bu yaddaşın məzmunu aşağıdakı bölgələrə bölünür (şəkildə göstərildiyi kimi):

  • UEFI BIOS;
  • ACPI EC proshivka proqramı (Skylake prosessorunun mikroarxitekturası ilə ayrı bir bölgə meydana çıxdı (2015), lakin vəhşi vəziyyətdə biz hələ onun istifadəsi nümunələrini görməmişik, buna görə də quraşdırılmış nəzarətçi mikroproqramı hələ də UEFI BIOS-un bir hissəsidir);
  • Intel ME proqram təminatı;
  • daxili GbE (Gigabit Ethernet) şəbəkə adapterinin konfiqurasiyası (MAC ünvanı və s.);
  • flash deskriptorları - digər bölgələrə göstəriciləri, habelə onlara daxil olmaq üçün icazələri ehtiva edən flash yaddaşın əsas bölgəsi.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Bölgələrə girişin fərqləndirilməsi (müəyyən edilmiş icazələrə uyğun olaraq) SPI avtobus ustası - bu yaddaşa daxil olan çipsetdə quraşdırılmış SPI nəzarətçisi tərəfindən idarə olunur. İcazələr Intel tərəfindən tövsiyə edilən (təhlükəsizlik səbəbi ilə) dəyərlərə uyğunlaşdırılıbsa, SPI flaşının hər bir istifadəçisi yalnız öz bölgəsinə tam girişə (oxumaq/yazmaq) malikdir. Qalanları ya yalnız oxunur, ya da əlçatmazdır. Məlum fakt: bir çox sistemlərdə CPU UEFI BIOS və GbE-yə tam girişə malikdir, yalnız flash deskriptorlarına oxumaq imkanı var və Intel ME bölgəsinə ümumiyyətlə giriş yoxdur. Niyə hamısı deyil, çoxları? Tövsiyə olunanlar isteğe bağlıdır. Daha sonra məqalədə sizə məlumat verəcəyik.

Kompüter platformasının proqram təminatının modifikasiyadan qorunması mexanizmləri

Aydındır ki, kompüter platformasının proshivka proqramı potensial təcavüzkarın orada yer almasına (ƏS yeniləmələrindən / yenidən quraşdırmalarından sağ çıxmağa), kodlarını ən imtiyazlı rejimlərdə icra etməyə və s. imkan verəcək mümkün kompromislərdən qorunmalıdır. SPI flash yaddaş bölgələrinə girişi məhdudlaşdırmaq, əlbəttə ki, kifayət deyil. Buna görə də, proqram təminatını dəyişikliklərdən qorumaq üçün hər bir icra mühitinə xas olan müxtəlif mexanizmlərdən istifadə olunur.

Beləliklə, Intel ME mikroproqramı bütövlük və həqiqiliyə nəzarət üçün imzalanır və hər dəfə ME UMA yaddaşına yüklənəndə ME nəzarətçisi tərəfindən yoxlanılır. Bu yoxlama prosesi artıq bizim tərəfimizdən birində müzakirə edilmişdir məqalələrIntel ME alt sisteminə həsr edilmişdir.

Və ACPI EC mikroproqramı, bir qayda olaraq, yalnız bütövlük üçün yoxlanılır. Bununla belə, bu ikili UEFI BIOS-a daxil olduğuna görə, demək olar ki, həmişə UEFI BIOS-un istifadə etdiyi eyni qoruma mexanizmlərinə tabedir. Gəlin onlar haqqında danışaq.

Bu mexanizmləri iki kateqoriyaya bölmək olar.

UEFI BIOS bölgəsinə yazma mühafizəsi

  1. SPI flash yaddaşının məzmununun yazmağa qarşı qoruyucu keçid ilə fiziki qorunması;
  2. Çipsetin PRx registrlərindən istifadə edərək CPU ünvan məkanında UEFI BIOS regionunun proyeksiyasının qorunması;
  3. Çipset registrlərində BIOS_WE / BLE və SMM_BWP bitlərini təyin etməklə müvafiq SMI kəsilməsini yaratmaq və emal etməklə UEFI BIOS bölgəsinə yazmaq cəhdlərinin bloklanması;
  4. Bu mühafizənin daha təkmil versiyası Intel BIOS Guard (PFAT)-dır.

Bu mexanizmlərə əlavə olaraq, satıcılar öz təhlükəsizlik tədbirlərini inkişaf etdirə və həyata keçirə bilərlər (məsələn, UEFI BIOS yeniləmələri ilə kapsulların imzalanması).

Qeyd etmək vacibdir ki, konkret sistemdə (satıcıdan asılı olaraq) yuxarıda qeyd olunan mühafizə mexanizmlərinin hamısı tətbiq olunmaya bilər, onlar ümumiyyətlə tətbiq olunmaya bilər və ya həssas şəkildə həyata keçirilə bilər. Bu mexanizmlər və onların tətbiqi ilə bağlı vəziyyət haqqında daha çox oxuya bilərsiniz Bu məqalə. Maraqlananlar üçün UEFI BIOS təhlükəsizliyi ilə bağlı bütün məqalələr seriyasını oxumağı tövsiyə edirik CodeRush.

UEFI BIOS Doğrulama Doğrulaması

Etibarlı yükləmə texnologiyaları haqqında danışarkən ağla gələn ilk şey Secure Boot-dur. Bununla belə, arxitektura baxımından o, mikroproqramın özünü yox, UEFI BIOS-dan kənar komponentləri (sürücülər, yükləyicilər və s.) autentifikasiya etmək üçün nəzərdə tutulmuşdur.

Buna görə də, Bay Trail mikroarxitekturasına malik SoC-lərdə Intel (2012) yuxarıda qeyd olunan Secure Boot texnologiyası ilə heç bir əlaqəsi olmayan, dəyişdirilə bilməyən Secure Boot (Verified Boot) tətbiq etdi. Daha sonra (2013) bu mexanizm təkmilləşdirildi və Intel Boot Guard adı ilə Haswell mikroarxitekturasına malik masaüstü kompüterlər üçün buraxıldı.

Intel Boot Guard-ı təsvir etməzdən əvvəl gəlin Intel 64 arxitekturasındakı işləmə müddətlərinə nəzər salaq ki, bunlar birlikdə bu etibarlı yükləmə texnologiyası üçün etibarın kökləridir.

intel-cpu

Cap, prosessorun Intel 64 arxitekturasında əsas icra mühiti olduğunu göstərir.Niyə o, həm də etibarın köküdür? Belə çıxır ki, onu belə edən aşağıdakı elementlərə sahib olmaqdır:

  • Microcode ROM, mikrokodun saxlanması üçün uçucu olmayan, yenidən yazıla bilməyən yaddaşdır. Hesab olunur ki, mikrokod prosessorun təlimat sisteminin ən sadə təlimatlar üzərində həyata keçirilməsidir. Mikrokodda da olur səhvlər. Beləliklə, BIOS-da mikrokod yeniləmələri ilə ikili faylları tapa bilərsiniz (onlar yükləmə zamanı üst-üstə qoyulur, çünki ROM-un üzərinə yazıla bilməz). Bu ikili faylların məzmunu şifrələnir, bu da təhlili xeyli çətinləşdirir (buna görə də mikrokodun xüsusi məzmunu yalnız onu inkişaf etdirənlərə məlumdur) və bütövlüyü və həqiqiliyinə nəzarət etmək üçün imzalanır;
  • Mikrokod yeniləmələrinin məzmununu deşifrə etmək üçün AES açarı;
  • mikrokod yeniləmələrinin imzasını yoxlayan RSA açıq açarının hashı;
  • RSA açıq açar hashı, Intel tərəfindən hazırlanmış ACM (Authenticated Code Module) kod modullarının imzasını yoxlayır, CPU-nun BIOS başlamazdan əvvəl (salam mikrokod) və ya bəzi hadisələr baş verdikdə onun işləməsi zamanı işlədə bilər.

Intel ME

Bloqumuzdakı bu alt sistemə həsr edilmişdir две Məqalə. Xatırladaq ki, bu icra edilə bilən mühit çipsetdə quraşdırılmış mikrokontrollerə əsaslanır və sistemdə ən gizli və imtiyazlıdır.

Gizli olmasına baxmayaraq, Intel ME həm də etibarın köküdür, çünki o:

  • ME ROM - başlanğıc kodunu, həmçinin Intel ME mikroproqramının imzasını yoxlayan RSA açıq açarının SHA256 heşini ehtiva edən dəyişkən, yenidən yazıla bilməyən yaddaş (yeniləmə üsulu təqdim edilmir);
  • məxfi məlumatların saxlanması üçün AES açarı;
  • bəzi məlumatların, o cümlədən kompüter sisteminin satıcısı tərəfindən müəyyən edilmiş məlumatların daimi saxlanması üçün çipsetə inteqrasiya edilmiş qoruyucular dəstinə (FPFs, Field Programmable Sigortalar) giriş.

Intel Boot Guard 1.x

Kiçik imtina. Bu məqalədə istifadə etdiyimiz Intel Boot Guard texnologiyasının versiya nömrələri ixtiyaridir və daxili Intel sənədlərində istifadə olunan nömrələmə ilə heç bir əlaqəsi olmaya bilər. Bundan əlavə, burada verilmiş bu texnologiyanın tətbiqi ilə bağlı məlumat əks mühəndislik zamanı əldə edilmişdir və Intel Boot Guard spesifikasiyası ilə müqayisədə qeyri-dəqiqliklər ola bilər, hansı ki, heç vaxt dərc olunmayacaqdır.

Beləliklə, Intel Boot Guard (BG) hardware tərəfindən dəstəklənən UEFI BIOS autentifikasiya texnologiyasıdır. Kitabdakı kiçik təsvirinə əsasən [Platforma Quraşdırılmış Təhlükəsizlik Texnologiyası Açıqlandı, Fəsil Dürüstlüklə Yükləmə və ya Yükləməz], o, etibarlı yükləmə zənciri kimi işləyir. Və içindəki ilk əlaqə, RESET hadisəsi ilə işə salınan CPU daxilindəki yükləmə kodudur (mikrokod) (BIOS-da RESET vektoru ilə qarışdırılmamalıdır!). CPU SPI flash yaddaşında Intel tərəfindən hazırlanmış və imzalanmış kod modulunu (Intel BG startup ACM) tapır, onu öz keşinə yükləyir, yoxlayır (yuxarıda CPU-nun ACM imzasını yoxlayan açıq açar hashına malik olduğu artıq qeyd olunub) ) və başlayır.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard

Bu kod modulu UEFI BIOS-un kiçik başlanğıc hissəsinin - İlkin Yükləmə Blokunun (IBB) yoxlanmasına cavabdehdir, bu da öz növbəsində UEFI BIOS-un əsas hissəsini yoxlamaq üçün funksionallığı ehtiva edir. Beləliklə, Intel BG sizə OS-ni yükləməzdən əvvəl BIOS-un həqiqiliyini yoxlamağa imkan verir (bu, Secure Boot texnologiyasının nəzarəti altında həyata keçirilə bilər).

Intel BG texnologiyası iki iş rejimi təmin edir (və biri digərinə mane olmur, yəni sistemdə hər iki rejim aktivləşdirilə bilər və hər ikisi söndürülə bilər).

Ölçülmüş Çəkmə

Measured Boot (MB) rejimində hər bir yükləmə komponenti (CPU yükləmə ROM-dan başlayaraq) Etibarlı Platforma Modulunun (TPM) imkanlarından istifadə edərək növbəti komponenti "ölçür". Bilməyənlər üçün izah edim.

TPM-də PCR-lər (Platforma Konfiqurasiya Qeydləri) var, onlar heşinq əməliyyatının nəticəsini düstura uyğun olaraq qeyd edirlər:

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard

Bunlar. cari PCR dəyəri əvvəlkindən asılıdır və bu registrlər yalnız sistem RESET edildikdə sıfırlanır.

Beləliklə, MB rejimində, müəyyən bir zamanda, PCR-lər "ölçülmüş" kodun və ya məlumatın unikal (hesh əməliyyatının imkanları daxilində) identifikatorunu əks etdirir. PCR dəyərləri bəzi məlumatların şifrələnməsi (TPM_Seal) əməliyyatında istifadə edilə bilər. Bundan sonra, onların şifrəsinin açılması (TPM_Unseal) yalnız yükləmə nəticəsində PCR dəyərləri dəyişmədiyi təqdirdə mümkün olacaq (yəni, heç bir "ölçülmüş" komponent dəyişdirilməmişdir).

Doğrulanmış Boot

UEFI BIOS-u dəyişdirməyi sevənlər üçün ən qorxulu şey, hər bir yükləmə komponentinin növbətisinin bütövlüyünü və həqiqiliyini kriptoqrafik olaraq yoxladığı Verified Boot (VB) rejimidir. Doğrulama xətası olduqda (aşağıdakılardan biri) baş verir:

  • 1 dəqiqədən 30 dəqiqəyə qədər fasilə ilə bağlanma (istifadəçinin kompüterinin niyə açılmadığını başa düşməyə vaxtı var və mümkünsə BIOS-u bərpa etməyə çalışsın);
  • dərhal bağlanma (istifadəçinin anlamaq və üstəlik etmək üçün vaxtı olmaması üçün);
  • düz üzlə işin davam etdirilməsi (təhlükəsizliyə vaxtın olmadığı hal, çünki görüləsi daha vacib işlər var).

Fəaliyyət seçimi, kompüter platforması satıcısı tərəfindən xüsusi hazırlanmış saxlamada - çipset qoruyucularında (FPF) daimi olaraq qeyd olunan müəyyən edilmiş Intel BG konfiqurasiyasından (yəni, sözdə tətbiq siyasətindən) asılıdır. Bu məqam üzərində daha sonra daha ətraflı dayanacağıq.

Konfiqurasiyaya əlavə olaraq, satıcı iki RSA 2048 açarı yaradır və iki məlumat strukturu yaradır (şəkildə göstərilmişdir):

  1. Bu manifestin SVN-ni (Təhlükəsizlik Versiya Nömrəsi), növbəti manifestin açıq açarının SHA256 heşini, RSA açıq açarını (yəni, proqramın ictimai hissəsi) qoyan satıcı kök açarı manifesti (KEYM, OEM Kök Açar Manifesti). satıcı kök açarı) bu manifestin imzasını və imzanın özünü yoxlamaq üçün;
  2. Bu manifestin SVN-ni, IBB-nin SHA256 heşini, bu manifestin imzasını yoxlamaq üçün açıq açarı və imzanın özünü qoyan IBB Manifesti (IBBM, İlkin Boot Block Manifest).

OEM Kök Açarının SHA256 hashı Intel BG konfiqurasiyası kimi daimi olaraq çipset qoruyucularına (FPF) yazılır. Intel BG konfiqurasiyası bu texnologiyanın daxil edilməsini nəzərdə tutursa, bundan sonra bu sistem yalnız OEM Kök Açarının şəxsi hissəsinin sahibi BIOS-u yeniləyə bilər (yəni bu manifestləri yenidən hesablaya bilər), yəni. satıcı.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard

Şəkilə baxdığınız zaman belə uzun bir yoxlama zəncirinin zəruriliyinə dair şübhələr dərhal yaranır - bir manifestdən istifadə edə bilərdiniz. Niyə çətinləşdirir?

Əslində, Intel beləliklə satıcıya müxtəlif məhsul xətləri üçün müxtəlif IBB açarlarından və birindən kök kimi istifadə etmək imkanı verir. Əgər IBB açarının şəxsi hissəsi (ikinci manifestə işarə edir) sızarsa, insident yalnız bir məhsul xəttinə təsir edəcək və yalnız satıcı yeni cüt yaradana və növbəti BIOS yeniləməsində yenidən hesablanmış manifestləri işə salana qədər.

Ancaq kök açarı pozulubsa (ilk manifest imzalanır), onu əvəz etmək mümkün olmayacaq, ləğvetmə proseduru təmin edilmir. bu açarın ictimai hissəsinin hashı birdəfəlik FPF-lərə proqramlaşdırılmışdır.

Intel Boot Guard Konfiqurasiyası

İndi Intel BG konfiqurasiyasına və onun yaradılması prosesinə daha yaxından nəzər salaq. Intel Sistem Alət Dəstindən (STK) Flash Şəkil Alətinin GUI-də müvafiq nişana baxsanız, Intel BG konfiqurasiyasına satıcının kök açarının ictimai hissəsinin hashini, bir neçə qaranlıq elementi ehtiva etdiyini görəcəksiniz. dəyərlər və s. Intel BG profili.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard

Bu profilin quruluşu:

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

Ümumiyyətlə, Intel BG konfiqurasiyası çox çevik bir qurumdur. Məsələn, Force_Boot_Guard_ACM bayrağını nəzərdən keçirək. Təmizləndikdə, SPI flaşında BG başlanğıc ACM modulu tapılmazsa, heç bir etibarlı yükləmə baş verməyəcək. Etibarsız olacaq.

Yuxarıda yazdıq ki, VB rejimi üçün tətbiqetmə siyasəti elə konfiqurasiya oluna bilər ki, yoxlama uğursuz olarsa, yenidən etibarsız yükləmə baş verəcək.

Bu kimi işləri satıcıların öhdəsinə buraxın...

Köməkçi proqramın GUI-si aşağıdakı "hazır" profilləri təmin edir:

Otaq
Modu
Təsvir

0
No_FVME
Intel BG texnologiyası deaktiv edilib

1
VE
VB rejimi aktivdir, fasilə ilə bağlanır

2
VME
hər iki rejim aktivdir (VB və MB), fasilə ilə bağlanır

3
VM
hər iki rejim sistemi söndürmədən aktiv edilir

4
FVE
VB rejimi aktivdir, dərhal bağlanır

5
FVME
hər iki rejim aktivdir, dərhal bağlanır

Artıq qeyd edildiyi kimi, Intel BG konfiqurasiyası sistem satıcısı tərəfindən birdəfəlik çipset qoruyucularına (FPF) yazılmalıdır - çipsetin içərisində xaricdə proqramlaşdırıla bilən kiçik (təsdiqlənməmiş məlumatlara görə, cəmi 256 bayt) aparat məlumat yaddaşı. Intel-in istehsal müəssisələrinin (buna görə də Sahədə proqramlaşdırıla bilən qoruyucular).

Konfiqurasiyanı saxlamaq üçün əladır, çünki:

  • birdəfəlik proqramlaşdırıla bilən məlumat saxlama sahəsinə malikdir (yalnız Intel BG konfiqurasiyasının yazıldığı yerdə);
  • yalnız Intel ME onu oxuya və proqramlaşdıra bilər.

Beləliklə, müəyyən bir sistemdə Intel BG texnologiyası üçün konfiqurasiya qurmaq üçün istehsalçı istehsal zamanı aşağıdakıları edir:

  1. Flash Image Tool yardım proqramından (Intel STK-dan) istifadə edərək, Intel ME regionunda dəyişənlər kimi verilmiş Intel BG konfiqurasiyası ilə mikroproqram görüntüsü yaradır (FPF-lər üçün müvəqqəti güzgü);
  2. Flash Proqramlaşdırma Alətindən (Intel STK-dan) istifadə edərək, bu görüntüyü sistemin SPI flash yaddaşına yazır və sözdə bağlanır. istehsal rejimi (bu halda müvafiq əmr Intel ME-yə göndərilir).

Bu əməliyyatlar nəticəsində Intel ME FPF-lərə ME bölgəsindəki FPF-lər üçün güzgüdən müəyyən edilmiş dəyərləri öhdəsinə götürəcək, SPI flash deskriptorlarında icazələri Intel tərəfindən tövsiyə olunan dəyərlərə təyin edəcək (əvvəlində təsvir edilmişdir). məqalə) və sistemi RESET edin.

Intel Boot Guard Tətbiq Təhlili

Bu texnologiyanın tətbiqini konkret bir nümunədə təhlil etmək üçün Intel BG texnologiyasının izləri üçün aşağıdakı sistemləri yoxladıq:

Система
Qeyd

Gigabyte GA-H170-D3H
Skylake, dəstək var

Gigabyte GA-Q170-D3H
Skylake, dəstək var

Gigabyte GA-B150-HD3
Skylake, dəstək var

MSI H170A Gaming Pro
Skylake, dəstək yoxdur

Lenovo ThinkPad 460
Skylake, dəstək mövcuddur, texnologiya aktivdir

Lenovo Yoga 2 Pro
Haswell, dəstək yoxdur

Lenovo U330p
Haswell, dəstək yoxdur

"Dəstək" Intel BG başlanğıc ACM modulunun, yuxarıda qeyd olunan manifestlərin və BIOS-da müvafiq kodun olması deməkdir, yəni. təhlil üçün tətbiqlər.

Nümunə olaraq ofisdən endiriləni götürək. Gigabyte GA-H170-D3H (versiya F4) üçün SPI flash yaddaşının satıcı saytının təsviri.

Intel CPU açılış ROM

Əvvəlcə Intel BG texnologiyası işə salındıqda prosessorun hərəkətləri haqqında danışaq.

Şifrəsi açılmış mikrokodun nümunələrini tapmaq mümkün olmadı, buna görə də aşağıda təsvir edilən hərəkətlərin necə həyata keçirildiyi (mikrokodda və ya aparatda) açıq sualdır. Buna baxmayaraq, müasir Intel prosessorlarının bu hərəkətləri "yerinə yetirə bilməsi" faktdır.

RESET vəziyyətindən çıxdıqdan sonra prosessor (ünvan məkanında fləş yaddaşın məzmunu artıq xəritələnmişdir) FIT (Firmware Interface Cədvəli) tapır. Onu tapmaq asandır, ona göstərici FFFF FFC0h ünvanında yazılır.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Bu nümunədə bu ünvan FFD6 9500h dəyərini ehtiva edir. Bu ünvana müraciət edərək, prosessor məzmunu qeydlərə bölünmüş FIT cədvəlini görür. Birinci giriş aşağıdakı strukturun başlığıdır:

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

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Naməlum səbəblərdən yoxlama məbləği həmişə bu cədvəllərdə hesablanmır (sahə boş qalır).

Qalan girişlər BIOS icra edilməzdən əvvəl təhlil edilməli / icra edilməli olan müxtəlif ikili sənədlərə işarə edir, yəni. köhnə RESET vektoruna (FFFF FFF0h) keçməzdən əvvəl. Hər bir belə girişin strukturu aşağıdakı kimidir:

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

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
EntryType sahəsi bu girişin işarə etdiyi blokun növünü göstərir. Biz bir neçə növ bilirik:

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

İndi aydındır ki, girişlərdən biri Intel BG başlanğıc ACM binarının yerini göstərir. Bu binarın başlıq strukturu Intel tərəfindən hazırlanmış kod modulları üçün xarakterikdir (ACM-lər, mikrokod yeniləmələri, Intel ME kod bölmələri, ...).

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

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Prosessor bu ikili faylı öz keşinə yükləyir, yoxlayır və işə salır.

Intel BG başlanğıc ACM

Bu ACM-nin işinin təhlili nəticəsində məlum oldu ki, o, aşağıdakıları edir:

  • Intel ME-dən çipset qoruyucularına (FPF) yazılmış Intel BG konfiqurasiyasını alır;
  • KEYM və IBBM manifestlərini tapır, onları yoxlayır.

Bu manifestləri tapmaq üçün ACM bu strukturlara işarə etmək üçün iki növ girişə malik olan FIT cədvəlindən də istifadə edir (yuxarıda FIT_ENTRY_TYPES-ə baxın).

Gəlin manifestlərə daha yaxından nəzər salaq. Birinci manifestin strukturunda biz bir neçə qaranlıq sabitləri, ikinci manifestdən açıq açarın hashini və iç-içə struktur kimi imzalanmış ictimai OEM Kök Açarı görürük:

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

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
OEM Kök Açarının açıq açarını yoxlamaq üçün xatırlayırıq ki, qoruyuculardan SHA256 hash istifadə olunur, bu anda artıq Intel ME-dən alınmışdır.

Keçək ikinci manifestə. Üç strukturdan ibarətdir:

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

Birincisi bəzi sabitləri ehtiva edir:

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

İkincisi, IBB-nin SHA256 hashını və IBB-nin məzmununu təsvir edən deskriptorların sayını (yəni hashın nədən hesablandığını) ehtiva edir:

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 deskriptorları bir-birinin ardınca bu strukturu izləyir. Onların məzmunu aşağıdakı formata malikdir:

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

Çox sadədir: hər bir deskriptorda IBB parçasının ünvan/ölçüsü var. Beləliklə, bu deskriptorların işarə etdiyi blokların birləşməsi (deskriptorların özlərinin ardıcıllığı ilə) IBB-dir. Və, bir qayda olaraq, IBB SEC və PEI fazalarının bütün modullarının birləşməsidir.

İkinci manifest IBB açıq açarını (birinci manifestdən SHA256 hash ilə yoxlanılır) və bu manifestin imzasını ehtiva edən strukturla bitir:

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

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Beləliklə, UEFI BIOS icrasına başlamazdan əvvəl, prosessor SEC və PEI faza kodları ilə bölmələrin məzmununun həqiqiliyini yoxlayacaq ACM-i işə salacaq. Sonra prosessor ACM-dən çıxır, RESET vektoru boyunca hərəkət edir və BIOS-u icra etməyə başlayır.

PEI tərəfindən təsdiqlənmiş bölmədə BIOS-un qalan hissəsini (DXE kodu) yoxlayacaq modul olmalıdır. Bu modul artıq IBV (Müstəqil BIOS Vendor) və ya sistem satıcısı tərəfindən hazırlanır. Çünki Yalnız Lenovo və Gigabyte sistemləri bizim ixtiyarımızdadır və Intel BG dəstəyinə malikdir, gəlin bu sistemlərdən çıxarılan kodu nəzərdən keçirək.

UEFI BIOS modulu LenovoVerifiedBootPei

Lenovo vəziyyətində, Lenovo tərəfindən hazırlanmış LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} modulu olduğu ortaya çıxdı.

Onun işi (GUID tərəfindən) DXE üçün hash cədvəlinə baxmaq və DXE-ni yoxlamaqdır.

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 modulu BootGuardPei

Gigabyte vəziyyətində, AMI tərəfindən hazırlanmış və buna görə də Intel BG dəstəyi ilə istənilən AMI BIOS-da mövcud olan BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} modulu olduğu ortaya çıxdı.

Onun iş alqoritmi bir qədər fərqlidir, lakin eyni dərəcədə aşağı düşür:

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

Baxdığı {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} hash cədvəli aşağıdakı formata malikdir:

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 mikroarxitekturasına malik Intel SoC-yə əsaslanan daha yeni sistemdə - ASRock J4205-IT-də tapılan Intel Boot Guard-ın başqa bir tətbiqi haqqında qısaca danışaq.

Bu versiya yalnız SoC-lərdə istifadə olunsa da (Kaby Lake prosessoru mikroarxitekturasına malik yeni sistemlər Intel Boot Guard 1.x-dən istifadə etməyə davam edir), o, Intel SoC-lərə əsaslanan platformalar üçün yeni arxitektura variantını araşdırmaqda böyük maraq doğurur. dəyişikliklər, məsələn:

  • BIOS və Intel ME bölgələri (daha doğrusu, Intel SoC terminologiyasına görə Intel TXE) indi bir IFWI bölgəsidir;
  • platformada Intel BG işə salınsa da, FIT, KEYM, IBBM kimi strukturlar flash yaddaşda tapılmadı;
  • TXE və ISH nüvələrinə (x86) əlavə olaraq, çipsetə üçüncü nüvə (yenidən ARC) əlavə edildi - PMC (Güc İdarəetmə Nəzarəti), güc alt sisteminin işləməsini və performans monitorinqini təmin etmək üçün.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Yeni IFWI regionunun məzmunu aşağıdakı modullardan ibarətdir:

Qərəz
ad
Təsvir

0000 2000 saat
SMIP
satıcı tərəfindən imzalanmış bəzi platforma konfiqurasiyası

0000 6000 saat
RBEP
Intel tərəfindən imzalanmış Intel TXE mikroproqram kodu bölməsi, x86

0001 0000 saat
PMCP
firmware kodu bölməsi Intel PMC, ARC, Intel tərəfindən imzalanmışdır

0002 0000 saat
FTPR
Intel tərəfindən imzalanmış Intel TXE mikroproqram kodu bölməsi, x86

0007B000h
UCOD
Intel tərəfindən imzalanmış CPU mikrokodu yeniləmələri

0008 0000 saat
IBBP
UEFI BIOS, SEC/PEI mərhələləri, x86, satıcı imzalanıb

0021 8000 saat
ISHC
satıcı tərəfindən imzalanmış Intel ISH mikroproqramının kod bölməsi, x86

0025 8000 saat
NFTP
Intel tərəfindən imzalanmış Intel TXE mikroproqram kodu bölməsi, x86

0036 1000 saat
IUNP
bilinməyən

0038 1000 saat
OBBP
UEFI BIOS, DXE mərhələsi, x86, imzasız

TXE mikroproqramının təhlili zamanı məlum oldu ki, RESET-dən sonra TXE CPU üçün ünvan sahəsinin əsas məzmununu (FIT, ACM, RESET vektoru ...) hazırlayana qədər prosessoru bu vəziyyətdə saxlayır. Üstəlik, TXE bu məlumatları SRAM-a yerləşdirir, bundan sonra o, müvəqqəti olaraq prosessora girişi təmin edir və onu RESET-dən “buraxır”.

Rootkitlərin mühafizəsində

Yaxşı, indi "isti"yə keçək. Biz bir dəfə kəşf etdik ki, bir çox sistemlərdə SPI flash deskriptorlarının SPI flash yaddaşının bölgələrinə daxil olmaq icazəsi var ki, bu yaddaşın bütün istifadəçiləri istənilən bölgəni həm yaza, həm də oxuya bilsinlər. Bunlar. heç bir şəkildə.

MEinfo yardım proqramı ilə (Intel STK-dan) yoxladıqdan sonra bu sistemlərdə istehsal rejiminin bağlanmadığını gördük, buna görə də çipset qoruyucuları (FPF) qeyri-müəyyən vəziyyətdə qaldı. Bəli, Intel BG belə hallarda nə aktiv, nə də əlildir.

Söhbət aşağıdakı sistemlərdən gedir (Intel BG ilə bağlı və məqalədə daha sonra təsvir ediləcək, Haswell prosessorunun mikroarxitekturası və daha yüksək olan sistemlər haqqında danışacağıq):

  • bütün Gigabyte məhsulları;
  • bütün MSI məhsulları;
  • 21 Lenovo noutbuk modeli və 4 Lenovo server modeli.

Təbii ki, biz bu tədarükçülərə, eləcə də Intel-ə tapıntı barədə məlumat verdik.

Adekvat cavab yalnız izlədi Lenovoproblemi kim etiraf etdi və yamaq buraxdı.

Gigabyte Görünür, onlar zəiflik haqqında məlumatı qəbul ediblər, lakin heç bir şəkildə şərh etməyiblər.

ilə ünsiyyət MSI ictimai PGP açarımızı (onlara şifrələnmiş təhlükəsizlik məsləhəti göndərmək üçün) göndərmək istəyimizlə tamamilə dayandırıldı. Onlar bildirdilər ki, onlar “avadanlıq istehsalçısıdırlar və PGP açarları istehsal etmirlər”.

Ancaq daha çox nöqtəyə. Sigortalar qeyri-müəyyən vəziyyətdə qaldığından, istifadəçi (və ya təcavüzkar) onları özü proqramlaşdıra bilər (ən çətini Intel STK tapın). Bu, aşağıdakı addımları tələb edir.

1. Windows OS-yə yükləyin (ümumiyyətlə, aşağıda təsvir olunan addımlar Linux altında da edilə bilər, əgər istədiyiniz OS üçün Intel STK analoqunu hazırlasanız). MEinfo yardım proqramından istifadə edərək, bu sistemdəki qoruyucuların proqramlaşdırılmadığından əmin olun.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
2. Flash Proqramlaşdırma Alətindən istifadə edərək flash yaddaşın məzmununu oxuyun.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
3. İstənilən UEFI BIOS redaktə alətindən istifadə edərək oxunan şəkli açın, lazımi dəyişiklikləri edin (məsələn, rootkit tətbiq edin), ME bölgəsində mövcud KEYM və IBBM strukturlarını yaradın / redaktə edin.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Şəkildə RSA açarının ictimai hissəsi vurğulanıb, onun hashı Intel BG konfiqurasiyasının qalan hissəsi ilə birlikdə çipset qoruyucularına proqramlaşdırılacaq.

4. Flash Şəkil Alətindən istifadə edərək, yeni proqram təminatı şəklini yaradın (Intel BG konfiqurasiyasını təyin etməklə).

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
5. Flash Proqramlaşdırma Alətindən istifadə edərək flash etmək üçün yeni şəkil yazın, MEinfo-dan istifadə edərək ME bölgəsinin indi Intel BG konfiqurasiyasını ehtiva etdiyini yoxlayın.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
6. İstehsal rejimini bağlamaq üçün Flash Proqramlaşdırma Alətindən istifadə edin.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
7. Sistem yenidən işə düşəcək, bundan sonra MEinfo istifadə edərək, FPF-lərin indi proqramlaşdırıldığını yoxlaya bilərsiniz.

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Bu hərəkətlər əbədi bu sistemdə Intel BG-ni aktivləşdirin. Fəaliyyəti geri qaytarmaq mümkün olmayacaq, yəni:

  • yalnız kök açarın şəxsi hissəsinin sahibi (yəni Intel BG-ni aktivləşdirən) bu sistemdə UEFI BIOS-u yeniləyə biləcək;
  • orijinal proqram təminatını bu sistemə qaytarsanız, məsələn, bir proqramçı istifadə edərək, o, hətta açılmayacaq (yoxlama xətası baş verdikdə tətbiq siyasətinin nəticəsi);
  • belə bir UEFI BIOS-dan qurtulmaq üçün proqramlaşdırılmış FPF-lərlə çipsetini "təmiz" ilə əvəz etməlisiniz (yəni bir avtomobilin qiymətinə infraqırmızı lehimləmə stansiyasına çıxışınız varsa, çipsetini yenidən lehimləyin və ya sadəcə anakartı dəyişdirin. ).

Belə bir rootkitin nə edə biləcəyini başa düşmək üçün kodunuzu UEFI BIOS mühitində icra etməyə nəyin imkan verdiyini qiymətləndirməlisiniz. Deyək ki, prosessorun ən imtiyazlı rejimində - SMM. Belə bir rootkit aşağıdakı xüsusiyyətlərə malik ola bilər:

  • OS ilə paralel olaraq yerinə yetirilməlidir (bir taymer tərəfindən işə salınacaq bir SMI kəsilməsi yaradaraq emalını konfiqurasiya edə bilərsiniz);
  • SMM rejimində olmağın bütün üstünlüklərinə malik olmaq (RAM və aparat resurslarının məzmununa tam giriş, ƏS-dən məxfilik);
  • Rootkit kodu SMM rejimində işə salındıqda şifrələnə və deşifrə edilə bilər. Yalnız SMM rejimində mövcud olan istənilən məlumat şifrələmə açarı kimi istifadə edilə bilər. Məsələn, SMRAM-da ünvanlar dəstindən hash. Bu açarı əldə etmək üçün SMM-ə girməlisiniz. Və bu iki yolla edilə bilər. SMM kodunda RCE-ni tapın və ondan istifadə edin və ya öz SMM modulunuzu BIOS-a əlavə edin, çünki biz Boot Guard-ı aktiv etdik.

Beləliklə, bu zəiflik hücumçuya imkan verir:

  • sistemdə naməlum məqsədi olan gizli, çıxarılmayan rootkit yaratmaq;
  • kodunuzu Intel SoC daxilindəki çipset nüvələrindən birində, yəni Intel ISH-də icra edin (şəkilə daha yaxından baxın).

Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Schrödinger-in etibarlı çəkməsi. Intel Boot Guard
Intel ISH altsisteminin imkanları hələ tədqiq edilməsə də, Intel ME-yə qarşı maraqlı hücum vektoru kimi görünür.

Tapıntılar

  1. Tədqiqat Intel Boot Guard texnologiyasının necə işlədiyinin texniki təsvirini təqdim edib. Qaranlıq modeli vasitəsilə Intel-in təhlükəsizliyində bir neçə sirr.
  2. Sistemdə çıxarılmayan rootkit yaratmağa imkan verən hücum ssenarisi təqdim olunur.
  3. Biz gördük ki, müasir Intel prosessorları BIOS başlamazdan əvvəl bir çox mülkiyyət kodunu icra edə bilir.
  4. Intel 64 arxitekturasına malik platformalar pulsuz proqram təminatının işləməsi üçün getdikcə daha az uyğunlaşır: aparat yoxlanışı, artan sayda mülkiyyət texnologiyaları və alt sistemlər (SoC çipsetində üç nüvə: x86 ME, x86 ISH və ARC PMC).

Zəifləmələr

İstehsal rejimini qəsdən açıq qoyan satıcılar onu mütləq bağlamalıdırlar. Hələlik onlar yalnız gözlərini yumurlar və yeni Kaby Lake sistemləri bunu göstərir.

İstifadəçilər -closemnf seçimi ilə Flash Proqramlaşdırma Alətini işə salmaqla öz sistemlərində Intel BG-ni söndürə bilər (təsvir olunan zəiflikdən təsirlənir). Əvvəlcə (MEinfo istifadə edərək) əmin olmalısınız ki, ME bölgəsində Intel BG konfiqurasiyası FPF-lərdə proqramlaşdırmadan sonra bu texnologiyanı tam olaraq söndürməyi nəzərdə tutur.

Mənbə: www.habr.com

Добавить комментарий