ืื ื ืืฆืืขืื ืืจืืช ืฉืื ืืจืื ืื ืืืื ืืืืืจ ืขื ืืืืืื ืฉื ืคืืืคืืจืืืช ืืืฉื ืชืืืืืช ืงืืฉืื x86. ืืคืขื, ืืืจืืื ืืขืืงืจื ืฉื ืืืืงืจ ืืื Intel Boot Guard (ืื ืืืชืืืื ืขื Intel BIOS Guard!) - ืืื ืืืืืืืช ืืชืืื ืืืืื ื ืฉื BIOS ืื ืชืืืช ืืืืืจื ืฉืกืคืง ืืขืจืืช ืืืฉืืื ืืืื ืืืคืขืื ืื ืืืืืช ืืฆืืืชืืช ืืฉืื ืืืืฆืืจ. ืืืื, ืื ืื ื ืืืจ ืืืืจืื ืืช ืืชืืื ืืืืงืจ: ืืชืื ืืง ืืช ืืืืฉืื ืฉื ืืืื ืืืืืื ืืื ืขื ืืื ืื ืืกื ืืืืืจ, ืชืืจื ืืช ืืืจืืืืงืืืจื ืฉืื, ืืืืืื ืืืชื ืืคืจืืื ืื ืืชืืขืืื, ืืชืืืื ืืืชื ืืืงืืืจื ืชืงืืคื ืืคื ืืืขื ืืืขืจืืืื ืืืชื. ืืืื ื ืืกืืฃ ืืฉ ืขื ืกืืคืืจ ืขื ืืื ืืื ืืฉืืื ืืืืฆืืจ ืฉื ืืกืคืจ ืกืคืงืื ืืืฉื ืฉื ืื ืืืคืฉืจ ืืชืืงืฃ ืคืืื ืฆืืืื ืืืฉืชืืฉ ืืืื ืืืืืื ืืื ืืื ืืืฆืืจ rootkit ืืืกืชืจ ืฉืื ื ืืชื ืืืกืืจ (ืืคืืื ืขื ืืื ืืชืื ืช) ืืืขืจืืช.
ืืื, ืืืชืื ืืืืกืกืช ืขื ืืืืืืืื "On Guard for Rootkits: Intel BootGuard" ืืืื ืก
ืงืืฉืื ืืคืืืคืืจืืช ืืืฉื ืขื ืืจืืืืงืืืจืช Intel 64
ืจืืฉืืช, ืืืื ื ืขื ื ืขื ืืฉืืื: ืืื ืืงืืฉืื ืฉื ืคืืืคืืจืืช ืืืฉื ืืืืจื ืืช ืขื ืืจืืืืงืืืจืช Intel 64? ืืืืื, UEFI BIOS. ืืื ืชืฉืืื ืื ืื ืชืืื ืืืืืงืช. ืืืื ื ืกืชืื ืขื ืืืืืจ, ืืืฆืืื ืืช ืืจืกืช ืฉืืืื ืืขืืืื (ืืืืฉื ืื ืืื) ืฉื ืืจืืืืงืืืจื ืื.
ืืืกืืก ืืื ืืงืืฉืืจ:
- ืืขืื (CPU, Central Processing Unit), ืืฉืจ ืื ืืกืฃ ืืืืืืช ืืจืืฉืืืช, ืืฉ ืื ืืืื ืืจืคืืช ืืืื ืืช (ืื ืืื ืืืืืื) ืืืงืจ ืืืืจืื (IMC, Integrated Memory Controller);
- ืขืจืืช ืฉืืืื (PCH, Platform Controller Hub), ืืืืืื ืืงืจืื ืฉืื ืื ืืืื ืืจืืงืฆืื ืขื ืืชืงื ืื ืืืงืคืืื ืื ืืืื ืชืชื ืืขืจืืืช. ืืื ืืื ื ืืชื ืืืฆืื ืืช Intel Management Engine (ME) ืืืืืข ืืฉืืฆื, ืฉืืฉ ืื ืื ืงืืฉืื (ืงืืฉืื ืฉื Intel ME).
ืืืฉืืื ื ืืืืื, ืื ืืกืฃ ืืืืืจ ืืขืื, ืืืจืฉืื ืืงืจ ืืฉืืื (ACPI EC, Advanced Control and Power Interface Embedded Controller), ืฉืืืจืื ืขื ืชืคืขืื ืชืช-ืืขืจืืช ืืืฉืื, ืืฉืื ืืืืข, ืืืงืืืช, ืืงืฉื Fn (ืืืืจืืช ืืืกื, ืขืืฆืืช ืืงืื, ืืงืืืช ืชืืืจื ืืืืจืืช ืืื'). ) ืืขืื. ืืืฉ ืื ืื ืงืืฉืื ืืฉืื.
ืื, ืืฉืืืื ืฉื ืืงืืฉืื ืืขืื ืืื ืืงืืฉืื ืฉื ืคืืืคืืจืืช ืืืืฉื (ืงืืฉืืช ืืืขืจืืช), ืืฉืจ ืืืืืกื ืช ืืืืืจืื ืคืืืฉ SPI ื ืคืืฅ. ืืื ืฉืืฉืชืืฉื ืืืืืจืื ืืื ืื ืืชืืืืื ืืืคื ืืืฉืื ืฉืืื, ืืชืืื ืฉื ืืืืืจืื ืืื ืืืืืง ืืืืืจืื ืืืืื (ืืคื ืฉืืืฆื ืืืืืจ):
- UEFI BIOS;
- ืงืืฉืืช ACPI EC (ืืืืจ ื ืคืจื ืืืคืืข ืขื ืืืืงืจื-ืืจืืืืงืืืจื ืฉื ืืขืื Skylake (2015), ืืื ืืืืข ืขืืืื ืื ืจืืื ื ืืืืืืืช ืืฉืืืืฉ ืื, ืืืื ืงืืฉืืช ืืืงืจ ืืืืืืข ืืื ืขืืืื ืืืง ืื-UEFI BIOS);
- ืงืืฉืืช Intel ME;
- ืชืฆืืจื (ืืชืืืช MAC ืืื') ืฉื ืืชืื ืืจืฉืช GbE (Gigabit Ethernet) ืืืืื ื;
- ืืชืืจื flash - ืืืืืจ ืืจืืฉื ืฉื ืืืืจืื ืืคืืืฉ, ืืืืื ืืฆืืืขืื ืืืืืจืื ืืืจืื, ืืื ืื ืืจืฉืืืช ืืืฉื ืืืืื.
ืืืืื ืืืืฉื ืืืืืจืื (ืืืชืื ืืืจืฉืืืช ืฉืฆืืื ื) ืืืืคื ืขื ืืื ืื ืื ืืืืืืืืก SPI - ืืงืจ ื-SPI ืืืืื ื ืืขืจืืช ืืฉืืืื, ืฉืืจืื ื ืืืฉืื ืืืืืจืื ืื. ืื ืืืจืฉืืืช ืืืืืจืืช ืืขืจืืื ืืืืืืฆืื (ืืกืืืืช ืืืืื) ืขื ืืื ืืื ืื, ืื ืืื ืืฉืชืืฉ ืืคืืืฉ SPI ืืฉ ืืืฉื ืืืื (ืงืจืืื/ืืชืืื) ืจืง ืืืืืจ ืฉืื. ืืฉืืจ ืื ืืงืจืืื ืืืื ืื ืืืชื ื ืืืฉืื. ืขืืืื ืืืืขื: ืืืขืจืืืช ืจืืืช, ื-CPU ืืฉ ืืืฉื ืืืื ื-UEFI BIOS ื-GbE, ืืืฉืช ืงืจืืื ืจืง ืืชืืืืจื ืคืืืฉ, ืืืื ืืืฉื ืืืืืจ Intel ME ืืื. ืืื ืจืืื ืืื ืืืื? ืื ืฉืืืืืฅ ืืื ืืืคืฆืืื ืื. ื ืกืคืจ ืืื ืืืชืจ ืืืืฉื ืืืืืจ.
ืื ืื ืื ืื ืืืื ื ืขื ืืงืืฉืื ืฉื ืคืืืคืืจืืช ืืืฉื ืืคื ื ืฉืื ืืืื
ืื ืืกืชื, ืืงืืฉืื ืฉื ืคืืืคืืจืืช ืืืฉื ืฆืจืืื ืืืืืช ืืืื ืช ืืคื ื ืคืฉืจื ืืคืฉืจืืช, ืฉืชืืคืฉืจ ืืชืืงืฃ ืคืืื ืฆืืืื ืืืฉืื ืื ืืจืืกืช ืจืื (ืืฉืจืื ืขืืืื ื ืืขืจืืช ืืคืขืื / ืืชืงื ืืช ืืืืฉ), ืืืฆืข ืืช ืืงืื ืฉืื ืืืฆืืื ืืืืขืืคืื ืืืืชืจ ืืื'. ืืชืืืื ืืืฉื ืืืืืจื ืืืืจืื ืคืืืฉ SPI, ืืืืื, ืืื ื ืืกืคืืง. ืืื, ื ืขืฉื ืฉืืืืฉ ืืื ืื ืื ืื ืฉืื ืื ืกืคืฆืืคืืื ืืื ืกืืืืช ืืืฆืืข ืืื ืืืื ืขื ืืงืืฉืื ืืคื ื ืฉืื ืืืื.
ืืื, ืืงืืฉืื ืฉื Intel ME ืืชืืื ืขืืืจ ืืงืจืช ืฉืืืืช ืืืืชื ืืืืช, ืื ืืืงืช ืขื ืืื ืืงืจ ME ืืื ืคืขื ืฉืืื ื ืืขื ืช ืืืืืจืื ME UMA. ืชืืืื ืืืืืืช ืืื ืืืจ ื ืืื ืขื ืืืื ื ืืืื ืื-
ืืงืืฉืืช ACPI EC, ืืืื, ื ืืืงืช ืจืง ืขืืืจ ืชืงืื ืืช. ืขื ืืืช, ืืฉื ืืขืืืื ืฉืืืื ืืจื ืืื ืืืื ื-UEFI BIOS, ืืื ืืคืืฃ ืืืขื ืชืืื ืืืืชื ืื ืื ืื ื ืืื ื ืฉืืื ืืฉืชืืฉ ื-UEFI BIOS. ืืืื ื ืืืจ ืขืืืื.
ื ืืชื ืืืืง ืื ืื ืื ืื ืืื ืืฉืชื ืงืืืืจืืืช.
ืืื ืช ืืชืืื ืืืืืจ UEFI BIOS
- ืืื ื ืคืืืืช ืขื ืืชืืื ืฉื ืืืืจืื ืืคืืืฉ SPI ืขื ืืืฉืจ ืืืื ื ืขื ืืชืืื;
- ืืื ื ืขื ืืงืจื ื ืฉื ืืืืจ ื-UEFI BIOS ืืืจืื ืืืชืืืืช ืฉื ืืืขืื ืืืืฆืขืืช ืืืืจื PRx ืฉื ืขืจืืช ืืฉืืืื;
- ืืกืืืช ื ืืกืืื ืืช ืืชืืื ืืืืืจ UEFI BIOS ืขื ืืื ืืฆืืจื ืืขืืืื ืฉื ืืคืกืงืช SMI ืืืชืืืื ืขื ืืื ืืืืจืช ืกืืืืืช BIOS_WE / BLE ื-SMM_BWP ืืืืืจื ืขืจืืช ืืฉืืืื;
- ืืจืกื ืืชืงืืืช ืืืชืจ ืฉื ืืื ื ืื ืืื Intel BIOS Guard (PFAT).
ืื ืืกืฃ ืืื ืื ืื ืื ืืื, ืืกืคืงืื ืืืืืื ืืคืชื ืืืืืฉื ืืืฆืขื ืืืืื ืืฉืืื (ืืืืืื, ืืชืืื ืขื ืงืคืกืืืืช ืขื ืขืืืื ื UEFI BIOS).
ืืฉืื ืืฆืืื ืื ืขื ืืขืจืืช ืกืคืฆืืคืืช (ืชืืื ืืกืคืง), ืืืชืื ืฉืื ืื ืื ืื ืื ื ืืืื ื ืื "ื ืืืืฉืืื, ืืืชืื ืฉืื ืื ืืืืฉืืื ืืื ืื ืฉืื ืืืืฉืืื ืืฆืืจื ืคืืืขื. ืชืืื ืืงืจืื ืขืื ืขื ืื ืื ืื ืื ืืื ืืขื ืืืฆื ืขื ืืืฉืืื ื
ืืืืืช UEFI BIOS ืืืืืช
ืืฉืื ืื ื ืืืืจืื ืขื ืืื ืืืืืืืช ืืชืืื ืืืืื ืืช, ืืืืจ ืืจืืฉืื ืฉืขืืื ืขื ืืืขืช ืืื ืืชืืื ืืืืืื. ืขื ืืืช, ืืืืื ื ืืจืืืืงืืื ืืช, ืืื ื ืืขื ืืืืช ืจืืืืื ืืืฆืื ืืื ื-UEFI BIOS (ืื ืืื ืืชืงื ืื, ืืขืืืกืื ืืื'), ืืื ืืช ืืงืืฉืื ืขืฆืื.
ืืื, ืืื ืื ื-SoCs ืขื ืืืงืจื-ืืจืืืืงืืืจืช Bay Trail (2012) ืืืืืขื ืืชืืื ืืืืืื ืฉืืื ื ื ืืชื ืืืืืคื ืืืืืจื (ืืชืืื ืืืืืช), ืฉืืื ืื ืฉืื ืงืฉืจ ืืืื ืืืืืืืช ืืืชืืื ืืืืืืื ืื "ื. ืืืืืจ ืืืชืจ (2013), ืื ืื ืื ืื ืฉืืคืจ, ืืชืืช ืืฉื Intel Boot Guard, ืฉืืืจืจ ืืืืฉืืื ืฉืืืื ืืื ืขื ืืืืงืจื-ืืจืืืืงืืืจื ืฉื Haswell.
ืืคื ื ืฉื ืชืืจ ืืช Intel Boot Guard, ืืืื ื ืกืชืื ืขื ืืื ื ืจืืฆื ืืืจืืืืงืืืจืช Intel 64, ืืฉืจ, ืืฉืืืื, ืื ืฉืืจืฉื ืืืืื ืฉื ืืื ืืืืืืืช ืืืชืืื ืืืืืื ื ืืื.
ืืขืื ืืื ืื
Cap ืืฆืืข ืฉืืืขืื ืืื ืกืืืืช ืืืืฆืืข ืืขืืงืจืืช ืืืจืืืืงืืืจืช Intel 64. ืืืืข ืืื ืื ืฉืืจืฉ ืืืืื? ืืกืชืืจ ืฉืืืืงืช ืืืจืืืืื ืืืืื ืืื ืื ืฉืืืจืืช ืืื:
- Microcode ROM ืืื ืืืืจืื ืื ื ืืืฃ ืืื ื ืืชื ืืืชืืื ืืืืกืื ืืืงืจืืงืื. ืืื ืืืืื ืื ืืืงืจืืงืื ืืื ืืืืฉืื ืฉื ืืขืจืืช ืืืจืืืช ืืืขืื ืขื ืืืืจืืืช ืืคืฉืืืืช ืืืืชืจ. ืงืืจื ืื ืืืืงืจืืงืื
ืืืืื . ืื ื-BIOS ืืชื ืืืื ืืืฆืื ืงืืฆืื ืืื ืืจืืื ืขื ืขืืืื ื ืืืงืจืืงืื (ืื ืืื ืืื ืขื ืืื ืืืื ืืืชืืื, ืื ืื ื ืืชื ืืืืืืฃ ืืช ื-ROM). ืืชืืื ืฉื ืงืืฆืื ืืื ืืจืืื ืืื ืืืฆืคื, ืื ืฉืืกืื ืืืื ืืช ืื ืืชืื (ืืื, ืืชืืื ืืกืคืฆืืคื ืฉื ืืืืงืจืืงืื ืืืืข ืจืง ืืื ืฉืืคืชื ืืืชื), ืื ืืชื ืืื ืืฉืืื ืขื ืืฉืืืืช ืืืืืชื ืืืืช; - ืืคืชื AES ืืคืขื ืื ืืชืืื ืฉื ืขืืืื ื ืืืงืจืืงืื;
- hash ืฉื ืืืคืชื ืืฆืืืืจื RSA ืืืืืช ืืช ืืืชืืื ืฉื ืขืืืื ื ืืืงืจืืงืื;
- Hash ืืคืชื ืฆืืืืจื RSA, ืฉืืืืง ืืช ืืืชืืื ืฉื ืืืืืื ืงืื ACM (Authenticated Code Module) ืฉืคืืชืื ืขื ืืื ืืื ืื, ืฉื-CPU ืืืื ืืืจืืฅ ืืคื ื ืืคืขืืช ื-BIOS (ืฉืืื ืืืงืจืืงืื) ืื ืืืืื ืคืขืืืชื, ืืืฉืจ ืืชืจืืฉืื ืืืจืืขืื ืืกืืืืื.
ืืื ืื ME
ืชืช-ืืขืจืืช ืื ืืืืื ืฉืื ื ืืืงืืฉื
ืืืจืืช ืืืชืื ืืืช, Intel ME ืืื ืื ืฉืืจืฉ ืืืืื, ืืืืืื ืฉืืฉ ืื:
- ME ROM - ืืืืจืื ืื ื ืืืฃ ืืื ื ืืชื ืืืชืืื ืืืืฉ (ืื ืืกืืคืงืช ืฉืืืช ืขืืืื), ืืืืื ืืช ืงืื ืืืชืืื, ืืื ืื ืืช ื-hash SHA256 ืฉื ืืืคืชื ืืฆืืืืจื RSA, ืฉืืืืง ืืช ืืืชืืื ืฉื ืืงืืฉืื ืฉื Intel ME;
- ืืคืชื AES ืืืืกืื ืืืืข ืกืืื;
- ืืืฉื ืืกื ืฉื ื ืชืืืื (FPFs, Field Programmable Fuses) ืืืฉืืืืื ืืขืจืืช ืืฉืืืื ืืืืกืื ืงืืืข ืฉื ืืืืข ืืกืืื, ืืืื ืืืืข ืฉืฆืืื ืขื ืืื ืกืคืง ืืขืจืืช ืืืืฉื.
Intel Boot Guard 1.x
ืืชื ืืืชืืจ ืงืื. ืืกืคืจื ืืืจืกืืืช ืฉื ืืื ืืืืืืืช Intel Boot Guard ืฉืืื ืื ื ืืฉืชืืฉืื ืืืืืจ ืื ืื ืฉืจืืจืืชืืื ืืืืชืื ืฉืืื ืืื ืฉืื ืงืฉืจ ืืืกืคืืจ ืืืฉืืฉ ืืชืืขืื ืคื ืืื ืฉื Intel. ืื ืืกืฃ, ืืืืืข ืขื ืืืืขืช ืืื ืืืืืื ืื ืฉื ืืชื ืืื ืืชืงืื ืืืืื ืื ืืกื ืืืืืจ, ืืขืฉืื ืืืืื ืื ืืืืงืื ืืืฉืืืื ืืืคืจื ืขืืืจ Intel Boot Guard, ืฉืกืคืง ืื ืืชืคืจืกื ืื ืคืขื.
ืื, Intel Boot Guard (BG) ืืื ืืื ืืืืืืืช ืืืืืช UEFI BIOS ืื ืชืืืช ืืืืืจื. ืื ืืฉืคืื ืืคื ืืชืืืืจ ืืงืื ืฉืื ืืกืคืจ [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot], ืืื ืขืืื ืืฉืจืฉืจืช ืืชืืื ืืืืื ื. ืืืงืืฉืืจ ืืจืืฉืื ืื ืืื ืงืื ืืืชืืื (ืืืงืจืืงืื) ืืชืื ื-CPU, ืืืืคืขื ืขื ืืื ืืืจืืข ื-RESET (ืื ืืืชืืืื ืขื ืืงืืืจ ื-RESET ื-BIOS!). ื-CPU ืืืฆื ืืืืื ืงืื (Intel BG startup ACM) ืฉืคืืชื ืืืชืื ืขื ืืื ืืื ืื ืืืืืจืื ืืคืืืฉ SPI, ืืืขื ืืืชื ืืืืืื ืฉืื, ืืืืช ืืืชื (ืืืจ ืฆืืื ืืืขืื ืฉื-CPU ืืฉ Hash ืืคืชื ืฆืืืืจื ืฉืืืืช ืืช ืืชืืืช ACM ) ืืืชืืื.
ืืืืื ืงืื ืื ืืืจืื ืืืืืืช ืืืง ืืชืืืชื ืงืื ืฉื UEFI BIOS - Initial Boot Block (IBB), ืืฉืจ, ืืชืืจื, ืืืื ืืช ืืคืื ืงืฆืืื ืืืืช ืืืืืืช ืืืืง ืืขืืงืจื ืฉื UEFI BIOS. ืืคืืื, Intel BG ืืืคืฉืจืช ืื ืืืืช ืืช ืืืืชื ืืืืช ืฉื ื-BIOS ืืคื ื ืืชืืื ืืขืจืืช ืืืคืขืื (ืฉื ืืชื ืืืฆืข ืชืืช ืคืืงืื ืฉื ืืื ืืืืืืืช Secure Boot).
ืืื ืืืืืืืช Intel BG ืืกืคืงืช ืฉื ื ืืฆืื ืคืขืืื (ืืืื ืืื ื ืืคืจืืข ืืฉื ื, ืืืืืจ ื ืืชื ืืืคืขืื ืืช ืฉื ื ืืืฆืืื ืืืขืจืืช, ืืืช ืฉื ืืื ื ืืชื ืืืฉืืืช).
ืืชืืื ืืืื
ืืืฆื ืืชืืื ืืืื (MB), ืื ืจืืื ืืชืืื (ืืื ื-CPU) "ืืืื" ืืช ืืื ืืืืฆืขืืช ืืืืืืืช ืฉื Trusted Platform Module (TPM). ืืื ืฉืื ืืืืข, ืืกืืืจ.
ื-TPM ืืฉ PCRs (Platform Configuration Registers), ืืืชืขืืื ืืช ืืชืืฆืื ืฉื ืคืขืืืช ืืืืืื ืืคื ืื ืืกืื:
ืึธืึตื. ืขืจื ื-PCR ืื ืืืื ืชืืื ืืงืืื, ืืืจืืืกืืจืื ืืืื ืืืืคืกืื ืจืง ืืืฉืจ ืืืขืจืืช ืืืืคืกืช.
ืืคืืื, ืืืฆื MB, ืื ืงืืืช ืืื ืืกืืืืช, PCRs ืืฉืงืคืื ืืืื ืืืืืื (ืืชืื ืืืืืืืช ืฉื ืคืขืืืช ื-hash) ืฉื ืืงืื ืื ืื ืชืื ืื ืฉ"ื ืืืื". ื ืืชื ืืืฉืชืืฉ ืืขืจืื ื-PCR ืืืฆืคื ื ืฉื ืคืขืืืืช ืืกืืืืืช ืฉื ื ืชืื ืื (TPM_Seal). ืืืืจ ืืื, ืคืขื ืืื (TPM_Unseal) ืืชืืคืฉืจ ืจืง ืื ืขืจืื ื-PCR ืื ืืฉืชื ื ืืชืืฆืื ืืืืขืื ื (ืืืืืจ, ืืฃ ืจืืื "ื ืืื" ืื ืฉืื ื).
ืืชืืื ืืืืืช
ืืืืจ ืืืคืืื ืืืืชืจ ืขืืืจ ืืื ืฉืืืืืื ืืฉื ืืช ืืช UEFI BIOS ืืื ืืฆื ืืืชืืื ืืืืืืช (VB), ืฉืื ืื ืจืืื ืืชืืื ืืืืช ืงืจืืคืืืืจืคืืช ืืช ืืฉืืืืช ืืืืืชื ืืืืช ืฉื ืืื. ืืืืงืจื ืฉื ืฉืืืืช ืืืืืช, (ืืืช ืืืืคืฉืจืืืืช ืืืืืช) ืืชืจืืฉืช:
- ืืืืื ืขื ืืื ืคืกืง ืืื ืืืงื ืขื 1 ืืงืืช (ืืื ืฉืืืฉืชืืฉ ืืืื ืืื ืืืืื ืืืืข ืืืืฉื ืฉืื ืื ืืืชืื, ืืื ืืคืฉืจ, ืื ืกื ืืฉืืืจ ืืช ื-BIOS);
- ืืืืื ืืืืื (ืืื ืฉืืืฉืชืืฉ ืืื ืืื ืืืืื ืืืืชืจ ืืื, ืืขืฉืืช);
- ืืืฉื ืขืืืื ืขื ืคื ืื ืืฉืจืืช (ืืืงืจื ืฉืืื ืืื ืืืืืืืช, ืื ืืฉ ืืืจืื ืืืชืจ ืืฉืืืื ืืขืฉืืช).
ืืืืจืช ืืคืขืืื ืชืืืื ืืชืฆืืจืช Intel BG ืฉืฆืืื ื (ืืืืืจ, ืืื ืฉื ืงืจื ืืืื ืืืช ืืืืืคื), ืืฉืจ ืืชืืขืืช ืืฆืืืชืืช ืขื ืืื ืกืคืง ืคืืืคืืจืืช ืืืืฉื ืืืืกืื ืฉืชืืื ื ืืืืืื - ื ืชืืืื ืฉื ืขืจืืช ืฉืืืื (FPF). ืขื ื ืงืืื ืื ื ืชืขืื ืืืชืจ ืคืืจืื ืืืืฉื.
ืื ืืกืฃ ืืชืฆืืจื, ืืกืคืง ืืืฆืจ ืฉื ื ืืคืชืืืช RSA 2048 ืืืืฆืจ ืฉื ื ืืื ื ื ืชืื ืื (ืืืฆื ืืืืืจ):
- ืื ืืคืกื ืืคืชื ืืฉืืจืฉ ืฉื ืืกืคืง (KEYM, OEM Root Key Manifest), ืฉืืฆืื ืืช ื-SVN (ืืกืคืจ ืืจืกืช ืืืืื) ืฉื ืื ืืคืกื ืื, ื-hash SHA256 ืฉื ืืืคืชื ืืฆืืืืจื ืฉื ืืื ืืคืกื ืืื, ืืืคืชื ืืฆืืืืจื RSA (ืืืืืจ ืืืืง ืืฆืืืืจื ืฉื ืืื ืืคืกื ืืคืชื ืฉืืจืฉ ืฉื ืกืคืง) ืืื ืืืืช ืืช ืืืชืืื ืฉื ืื ืืคืกื ืื ืืืช ืืืชืืื ืขืฆืื;
- ืื ืืคืกื IBB (IBBM, Initial Boot Block Manifest), ืฉืืฆืื ืืช ื-SVN ืฉื ืื ืืคืกื ืื, ืืช ื-hash SHA256 ืฉื ื-IBB, ืืช ืืืคืชื ืืฆืืืืจื ืืืืืืช ืืืชืืื ืฉื ืื ืืคืกื ืื ืืืช ืืืชืืื ืขืฆืื.
ื-hash SHA256 ืฉื ืืคืชื ืืฉืืจืฉ ืฉื OEM ื ืืชื ืืฆืืืชืืช ืื ืชืืืื ืฉื ืขืจืืืช ืฉืืืื (FPFs), ืืืืืง ืืื ืชืฆืืจืช Intel BG. ืื ืชืฆืืจืช Intel BG ืืกืคืงืช ืืืืื ืฉื ืืื ืืืืืื ืื, ืื ืืขืชื ืืืืื ืืขืจืืช ืื ืจืง ืืืขืืื ืฉื ืืืืง ืืคืจืื ืฉื ืืคืชื ืืฉืืจืฉ ืฉื OEM ืืืื ืืขืืื ืืช ื-BIOS (ืืืืืจ ืืืืืช ืืกืืื ืืืฉื ืืืืฉ ืืช ืืื ืืคืกืืื ืืืื), ืืืืืจ. ืืึนืึตืจ.
ืืฉืืกืชืืืื ืขื ืืชืืื ื, ืืื ืืชืขืืจืจืื ืกืคืงืืช ืืืื ืืฆืืจื ืืฉืจืฉืจืช ืืืืืช ืื ืื ืืจืืื - ืืืืืช ืืืฉืชืืฉ ืืื ืืคืกื ืืื. ืืื ืืกืื?
ืืืขืฉื, ืืื ืื ืืกืคืงืช ืืคืืื ืืกืคืง ืืช ืืืืืื ืืช ืืืฉืชืืฉ ืืืคืชืืืช IBB ืฉืื ืื ืขืืืจ ืงืืื ืืืฆืจืื ืฉืื ืื ืืืื ืืชืืจ ืืฉืืจืฉ. ืื ืืืืง ืืคืจืื ืฉื ืืคืชื IBB (ืฉืืืชื ืขื ืืื ืืคืกื ืืฉื ื) ืืืืฃ, ืืชืงืจืืช ืชืฉืคืืข ืจืง ืขื ืงื ืืืฆืจืื ืืื ืืจืง ืขื ืฉืืกืคืง ืืคืืง ืืื ืืืฉ ืืืืคืฉืจ ืืช ืืื ืืคืกืืื ืืืืืฉืืื ืืืืฉ ืืขืืืื ื-BIOS ืืื.
ืืื ืื ืืคืชื ืืฉืืจืฉ ื ืคืืข (ืขืื ื ืืชื ืืื ืืคืกื ืืจืืฉืื), ืื ื ืืชื ืืืื ืืืืืืฃ ืืืชื, ืืืื ืืืืืื ืื ืืกืืคืง. ื-hash ืฉื ืืืืง ืืฆืืืืจื ืฉื ืืคืชื ืื ืืชืืื ืช ืืชืื FPFs ืืืช ืืืชืืื.
ืชืฆืืจืช Intel Boot Guard
ืืขืช ืืืื ื ืกืชืื ืืงืจืื ืขื ืชืฆืืจืช Intel BG ืืขื ืชืืืื ืืืฆืืจื ืฉืื. ืื ืชืกืชืื ืขื ืืืจืืืกืืื ืืืชืืืื ื-GUI ืฉื Flash Image Tool ื-Intel System Tool Kit (STK), ืชืืืื ืฉืชืฆืืจืช Intel BG ืืืืืช hash ืฉื ืืืืง ืืฆืืืืจื ืฉื ืืคืชื ืืฉืืจืฉ ืฉื ืืกืคืง, ืืื ืื ืืจืืจืื ืขืจืืื ืืื ืืืื. ืคืจืืคืื Intel BG.
ืืืื ื ืฉื ืคืจืืคืื ืื:
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. ืืืฉืจ ืืื ื ืืืง, ืื ืืืืื ืืืคืขืื ACM ืฉื BG ืืคืืืฉ SPI ืื ื ืืฆื, ืื ืืชืจืืฉ ืืชืืื ืืืืื. ืื ืืืื ืื ืืืื.
ืืืจ ืืชืื ื ืืืขืื ืฉื ืืชื ืืืืืืจ ืืช ืืืื ืืืช ืืืืืคื ืขืืืจ ืืฆื VB ืื ืฉืื ืืืืืืช ื ืืฉื, ืฉืื, ืชืชืจืืฉ ืืืจืื ืื ืืืืื ื.
ืืฉืืจ ืืืจืื ืืืื ืืืื ืืกืคืงืื...
ื-GUI ืฉื ืืื ืืฉืืจืืช ืืกืคืง ืืช ืืคืจืืคืืืื ื"ืืืื ืื" ืืืืื:
ืืกืคืจ
ืืฉืืจ
ืชืืืืจ
0
No_FVME
ืืื ืืืืืืืช Intel BG ืืืฉืืชืช
1
VE
ืืฆื VB ืืืคืขื, ืืืืื ืืคื ืคืกืง ืืื
2
VME
ืฉื ื ืืืฆืืื ืืืคืขืืื (VB ื-MB), ืืืืื ืืคื ืคืกืง ืืื
3
VM
ืฉื ื ืืืฆืืื ืืืคืขืืื, ืืืื ืืืืืช ืืช ืืืขืจืืช
4
FVE
ืืฆื VB ืืืคืขื, ืืืืื ืืืืื
5
FVME
ืฉื ื ืืืฆืืื ืืืคืขืืื, ืืืืื ืืืืื
ืืคื ืฉืืืจ ืืืืืจ, ืชืฆืืจืช Intel BG ืืืืืช ืืืืืชื ืืืช ืืืชืืื ืขื ืืื ืกืคืง ืืืขืจืืช ืืชืื ื ืชืืืื ืฉื ืขืจืืช ืฉืืืื (FPF) - ืืืกืื ืืืืข ืืืืจื ืงืื (ืืคื ืืืืข ืื ืืืืืช, 256 ืืชืื ืืืื) ืืชืื ืขืจืืช ืืฉืืืื, ืฉื ืืชื ืืชืื ืช ืืืืฅ. ืืืชืงื ื ืืืืฆืืจ ืฉื ืืื ืื (ืื ืื ืืกืืื ื ืืชื ืืชืื ืืช ืืฉืื ื ืชืืืื).
ืื ื ืืืจ ืืืืกืื ืชืฆืืจื ืืืืืื:
- ืืขื ืืืืจ ืืืกืื ื ืชืื ืื ืฉื ืืชื ืืชืื ืืช ืื-ืคืขืื (ืืืืืง ืืืื ืฉื ืืชืื ืชืฆืืจืช Intel BG);
- ืจืง Intel ME ืืืืื ืืงืจืื ืืืชืื ืช ืืืชื.
ืืื, ืขื ืื ืช ืืืืืืจ ืืช ืืชืฆืืจื ืขืืืจ ืืื ืืืืืืืช Intel BG ืขื ืืขืจืืช ืกืคืฆืืคืืช, ืืกืคืง ืขืืฉื ืืช ืืคืขืืืืช ืืืืืช ืืืืื ืืืืฆืืจ:
- ืฉืืืืฉ ืืืื ื-Flash Image (ื-Intel STK), ืืืฆืจ ืชืืื ืช ืงืืฉืื ืขื ืชืฆืืจืช Intel BG ื ืชืื ื ืืืฉืชื ืื ืืชืื ืืืืจ Intel ME (ืื ืฉื ืงืจื ืืจืื ืืื ืืช ืขืืืจ FPFs);
- ืืืืฆืขืืช ืืื ืชืื ืืช ืืคืืืฉ (ื-Intel STK), ืืืชื ืชืืื ื ืื ืืืืืจืื ืืคืืืฉ SPI ืฉื ืืืขืจืืช ืืกืืืจ ืืช ืื ืฉื ืงืจื. ืืฆื ืืืฆืืจ (ืืืงืจื ืื, ืืคืงืืื ืืืชืืืื ื ืฉืืืช ืืืื ืื ME).
ืืชืืฆืื ืืคืขืืืืช ืืื, ืืื ืื ME ืชืชืืืื ืืคื ื FPF ืืช ืืขืจืืื ืื ืชืื ืื ืืืืจืื ืขืืืจ FPFs ืืืืืจ ME, ืชืืืืจ ืืช ืืืจืฉืืืช ืืืชืืจื ืืืืง ืฉื SPI ืืขืจืืื ืืืืืืฆืื ืขื ืืื ืืื ืื (ืืชืืืจืื ืืชืืืืช ืืชืื) ืืืืฆืข ืืืคืืก ืืขืจืืช.
ื ืืชืื ืืืฉืื ืฉื Intel Boot Guard
ืขื ืื ืช ืื ืชื ืืช ืืืืฉืื ืฉื ืืื ืืืืืื ืื ืขื ืืืืื ืกืคืฆืืคืืช, ืืืงื ื ืืช ืืืขืจืืืช ืืืืืช ืขืืืจ ืขืงืืืช ืฉื ืืื ืืืืืืืช Intel BG:
ืืขืจืืช
ืฉืื ืื
Gigabyte GA-H170-D3H
ืกืงืืืืืืง, ืืฉ ืชืืืื
Gigabyte GA-Q170-D3H
ืกืงืืืืืืง, ืืฉ ืชืืืื
Gigabyte GA-B150-HD3
ืกืงืืืืืืง, ืืฉ ืชืืืื
MSI H170A Gaming Pro
ืกืงืืืืืืง, ืืื ืชืืืื
Lenovo ThinkPad 460
Skylake, ืชืืืื ืืืื ื, ืืื ืืืืืื ืืืคืขืืช
ืืื ืืงืก ืืืื 2 Pro
ืืกืืื, ืืื ืชืืืื
ืื ืืื U330p
ืืกืืื, ืืื ืชืืืื
"ืชืืืื" ืคืืจืืฉื ืื ืืืืืช ืฉื ืืืืื ืืืคืขืื Intel BG ACM, ืืื ืืคืกืืื ืฉืืืืืจื ืืขืื ืืืงืื ืืืชืืื ื-BIOS, ืืืืืจ. ืืืฉืืืื ืื ืืชืื.
ืืืืืื, ื ืืงื ืืช ืื ืฉืืืจื ืืืืฉืจื. ืชืืื ืช ืืชืจ ืฉื ืกืคืง ืฉื ืืืืจืื ืคืืืฉ SPI ืขืืืจ Gigabyte GA-H170-D3H (ืืจืกื F4).
ROM ืืชืืื ืฉื ืืื ืื CPU
ืงืืื ืื, ืืืื ื ืืืจ ืขื ืืคืขืืืืช ืฉื ืืืขืื ืื ืืื ืืืืืืืช Intel BG ืืืคืขืืช.
ืื ื ืืชื ืืื ืืืฆืื ืืืืืืืช ืฉื ืืืืงืจืืงืื ืืืคืืขื ื, ืืื, ืืืฆื ืืคืขืืืืช ืืืชืืืจืืช ืืืื ืืืืฉืืืช (ืืืืงืจืืงืื ืื ืืืืืจื) ืืื ืฉืืื ืคืชืืื. ืขื ืืืช, ืืขืืืื ืฉืืขืืื ืืื ืื ืืืืจื ืืื "ืืืืืื" ืืืฆืข ืืช ืืคืขืืืืช ืืืื ืืื ืขืืืื.
ืืืืจ ืืืฆืืื ืืืฆื RESET, ืืืขืื (ืฉืืืจืื ืืืชืืืืช ืฉืื ืชืืื ืืืืจืื ืืคืืืฉ ืืืจ ืืืืคื) ืืืฆื ืืช ื-FIT (Firmware Interface Table). ืืืฆืื ืืืชื ืงื, ืืืฆืืืข ืืืื ืืชืื ืืืชืืืช FFFF FFC0h.
ืืืืืื ืื, ืืชืืืช ืื ืืืืื ืืช ืืขืจื 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;
};
ืืกืืื ืื ืืืืขื, ืกืืื ืืืืืงื ืื ืชืืื ืืืืฉื ืืืืืืืช ืืื (ืืฉืื ื ืืชืจ ืจืืง).
ืืขืจืืื ืื ืืชืจืื ืืฆืืืขืื ืขื ืงืืฆืื ืืื ืืจืืื ืฉืื ืื ืฉืฆืจืื ืื ืชื / ืืืฆืข ืืคื ื ืืืฆืืข ื-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;
};
ืืฉืื 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
};
ืืขืช ืืจืืจ ืฉืืื ืืขืจืืื ืืฆืืืข ืขื ืืืงืืื ืฉื ื-ACM ืืืื ืืจื ืฉื ืืืคืขืื ืฉื Intel BG. ืืื ื ืืืืชืจืช ืฉื ืืื ืืจื ืื ืืืคืืื ื ืืืืืืื ืงืื ืฉืคืืชืื ืขื ืืื ืืื ืื (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];
};
ืืืขืื ืืืขื ืืช ืืืื ืืจื ืืื ืืชืื ืืืืืื ืฉืื, ืืืืช ืืืคืขืื.
ืืื ืื BG ืืชืืื ACM
ืืชืืฆืื ืื ืืชืื ืืขืืืื ืฉื ACM ืื, ืืชืืจืจ ืฉืืื ืขืืฉื ืืช ืืคืขืืืืช ืืืืืช:
- ืืงืื ื-Intel ME ืืช ืชืฆืืจืช Intel BG ืฉื ืืชืื ืื ืชืืืื ืฉื ืขืจืืช ืืฉืืืื (FPFs);
- ืืืฆื ืื ืืคืกืืื ืฉื KEYM ื-IBBM, ืืืืช ืืืชื.
ืืื ืืืฆืื ืืช ืืื ืืคืกืืื ืืืื, ACM ืืฉืชืืฉืช ืื ืืืืืช FIT, ืฉืืฉ ืื ืฉื ื ืกืืืื ืฉื ืขืจืืื ืืื ืืืฆืืืข ืขื ืืื ืื ืืื (ืจืื FIT_ENTRY_TYPES ืืืขืื).
ืืืื ื ืกืชืื ืืงืจืื ืขื ืืื ืืคืกืืื. ืืืื ื ืฉื ืืื ืืคืกื ืืจืืฉืื, ืื ื ืจืืืื ืืกืคืจ ืงืืืขืื ืื ืืจืืจืื, hash ืฉื ืืืคืชื ืืฆืืืืจื ืืืื ืืคืกื ืืฉื ื, ืืืคืชื OEM Root ืฆืืืืจื ืืชืื ืืืื ื ืืงืื ื:
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];
};
ืืื ืืืืช ืืช ืืืคืชื ืืฆืืืืจื ืฉื ืืคืชื ืืฉืืจืฉ OEM, ืื ื ื ืืืืจ ืื ื ืขืฉื ืฉืืืืฉ ื-hash 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
};
ืืฉื ื ืืืื ืืช ื-Hash SHA256 ืฉื ื-IBB ืืืช ืืกืคืจ ืืืชืืจืื ืืืชืืจืื ืืช ืชืืื ื-IBB (ืืืืืจ ืืื ืืืืฉื ื-hash):
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 (ืืืืืช ืขื ืืื ื-hash SHA256 ืืืื ืืคืกื ืืจืืฉืื) ืืืืชืืื ืฉื ืืื ืืคืกื ืืื:
typedef struct PMSG
{
char Tag[8]; // โ__PMSG__โ
unsigned char : 8; // 10h
BG_RSA_ENTRY IbbKey;
};
ืื, ืขืื ืืคื ื ืชืืืืช ืืืฆืืข ื-UEFI BIOS, ืืืขืื ืืฉืืง ืืช ACM, ืืฉืจ ืืืืช ืืช ืืืืชื ืืืืช ืฉื ืชืืื ืืกืขืืคืื ืขื ืงืื ืืคืืื SEC ื-PEI. ืืืืจ ืืื, ืืืขืื ืืืฆื ืื-ACM, ื ืข ืืืืจื ืืงืืืจ RESET ืืืชืืื ืืืคืขืื ืืช ื-BIOS.
ืืืืืฆื ืืืืืืชืช ืฉื PEI ืืืืืช ืืืืื ืืืืื ืฉืืืืืง ืืช ืฉืืจ ื-BIOS (ืงืื DXE). ืืืืื ืื ืืืจ ืืคืืชื ืขื ืืื IBV (ืกืคืง BIOS ืขืฆืืื) ืื ืกืคืง ืืืขืจืืช ืขืฆืื. ืื ืจืง ืืขืจืืืช Lenovo ื-Gigabyte ืืชืืจืจื ืืขืืืืืช ืืจืฉืืชื ื ืืืขืืืช ืชืืืื ืฉื Intel BG, ืืืื ื ืืื ืืช ืืงืื ืฉืืืืฅ ืืืขืจืืืช ืืื.
ืืืืื UEFI BIOS LenovoVerifiedBootPei
ืืืงืจื ืฉื ืื ืืื, ืืชืืจืจ ืฉืืืืืจ ืืืืืื LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}, ืฉืคืืชื ืขื ืืื Lenovo.
ืชืคืงืืื ืืื ืืืคืฉ (ืขื ืืื GUID) ืืืืช hash ืขืืืจ ื-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, ืืชืืจืจ ืฉืืื ืืืืื BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}, ืฉืคืืชื ืขื ืืื AMI, ืืืื ืงืืื ืืื BIOS ืฉื AMI ืขื ืชืืืื ืฉื Intel BG.
ืืืืืจืืชื ืืคืขืืื ืฉืื ืฉืื ื ืืืงืฆืช, ืขื ืืืช, ืืื ืืกืชืื ืืืืชื ืืืื:
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
ืืืื ื ืืืจ ืืงืฆืจื ืขื ืืืฉืื ื ืืกืฃ ืฉื Intel Boot Guard, ืฉื ืืฆื ืืืขืจืืช ืืืฉื ืืืชืจ ืืืืืกืกืช ืขื Intel SoC ืขื ืืืงืจื-ืืจืืืืงืืืจืช Apollo Lake - ASRock J4205-IT.
ืืืจืืช ืฉืืจืกื ืื ืชืฉืืฉ ืจืง ื-SoCs (ืืขืจืืืช ืืืฉืืช ืขื ืืืงืจื-ืืจืืืืงืืืจืช ืืขืื Kaby Lake ืืืฉืืืืช ืืืฉืชืืฉ ื-Intel Boot Guard 1.x), ืืฉ ืื ืขื ืืื ืจื ืืืืื ืช ืืคืฉืจืืช ืืจืืืืงืืืจื ืืืฉื ืขืืืจ ืคืืืคืืจืืืช ืืืืืกืกืืช ืขื Intel SoCs, ืืฉืจ ื ืจืืชื ืืืืฉืืช ืฉืื ืืืื, ืืืฉื:
- ืืืืจื BIOS ื-Intel ME (ืื ืืืชืจ ืืืืง Intel TXE, ืืคื ืืืื ืื ืฉื Intel SoC) ืื ืืขืช ืืืืจ IFWI ืืื;
- ืืืจืืช ืฉ-Intel BG ืืืคืขืื ืืคืืืคืืจืื, ืืื ืื ืืืื FIT, KEYM, IBBM ืื ื ืืฆืื ืืืืืจืื ืืืืง;
- ืื ืืกืฃ ืืืืืืช TXE ื-ISH (x86), ื ืืกืคื ืืขืจืืช ืืฉืืืื ืืืื ืฉืืืฉืืช (ืฉืื ARC, ืืื) - PMC (Power Management Controller), ืืงืฉืืจื ืืืืืืช ืืชืคืขืื ืฉื ืชืช-ืืขืจืืช ืืืฉืื ืืื ืืืืจ ืืืฆืืขืื.
ืืชืืื ืฉื ืืืืจ IFWI ืืืืฉ ืืื ืงืืืฆื ืฉื ืืืืืืืื ืืืืื:
ืงืืืื
ืฉื
ืชืืืืจ
0000 2000 ืฉืขืืช
SMIP
ืชืฆืืจืช ืคืืืคืืจืื ืืืฉืื, ืืชืืื ืขื ืืื ืืกืคืง
0000 6000 ืฉืขืืช
RBEP
ืกืขืืฃ ืงืื ืงืืฉืื ืฉื Intel TXE, x86, ืืชืื ืขื ืืื Intel
0001 0000 ืฉืขืืช
PMCP
ืกืขืืฃ ืงืื ืงืืฉืื Intel PMC, ARC, ืืชืื ืขื ืืื Intel
0002 0000 ืฉืขืืช
FTPR
ืกืขืืฃ ืงืื ืงืืฉืื ืฉื Intel TXE, x86, ืืชืื ืขื ืืื Intel
0007B000h
UCOD
ืขืืืื ื ืืืงืจืืงืื ืฉื CPU ืืชืืืื ืขื ืืื ืืื ืื
0008 0000 ืฉืขืืช
IBBP
UEFI BIOS, SEC/PEI phases, x86, ืกืคืง ืืชืื
0021 8000 ืฉืขืืช
ISHC
ืงืืข ืงืื ืฉื ืงืืฉืืช Intel ISH, x86, ืืชืื ืขื ืืื ืืกืคืง
0025 8000 ืฉืขืืช
NFTP
ืกืขืืฃ ืงืื ืงืืฉืื ืฉื Intel TXE, x86, ืืชืื ืขื ืืื Intel
0036 1000 ืฉืขืืช
IUNP
ืื ืืืืข
0038 1000 ืฉืขืืช
OBBP
UEFI BIOS, DXE phase, x86, ืื ืืชืื
ืืืืื ืื ืืชืื ืฉื ืงืืฉืืช TXE, ืืชืืจืจ ืื ืืืืจ RESET, TXE ืฉืืืจ ืขื ืืืขืื ืืืฆื ืื ืขื ืฉืืื ืืืื ืืช ืืชืืื ืืืกืืกื ืฉื ืืจืื ืืืชืืืืช ืขืืืจ ื-CPU (FIT, ACM, RESET ืืงืืืจ...). ืืชืจื ืืื, TXE ืืฆืื ืืช ืื ืชืื ืื ืืืื ื-SRAM ืฉืื, ืืืืืจ ืืื ืืื ืืกืคืง ืืืขืื ืืืืคื ืืื ื ืืืฉื ืืฉื ื"ืืฉืืจืจ" ืืืชื ื-RESET.
ืขื ืืืฉืืจ ืฉื rootkits
ืืืื, ืขืืฉืื ืืืื ื ืขืืืจ ื"ืื". ืืืืื ื ืคืขื ืฉืืืขืจืืืช ืจืืืช, ืืชืืืืจื ืคืืืฉ SPI ืืฉ ืืจืฉืืืช ืืืฉื ืืืืืจืื ืฉื ืืืืจืื ืคืืืฉ SPI ืื ืฉืื ืืืฉืชืืฉืื ืืืืืจืื ืืื ืืืืืื ืื ืืืชืื ืืื ืืงืจืื ืื ืืืืจ. ืึธืึตื. ืืื ืกืืืื.
ืืืืจ ืืืืงื ืขื ืืื ืืฉืืจืืช MEinfo (ื-Intel STK), ืจืืื ื ืฉืืฆื ืืืืฆืืจ ืืืขืจืืืช ืืื ืื ื ืกืืจ, ืืืื ื ืชืืืื ืฉื ืขืจืืช ืืฉืืืื (FPFs) ื ืืชืจื ืืืฆื ืืืชื ืืืืืจ. ืื, Intel BG ืื ืืืคืขืืช ืืื ืืืฉืืชืช ืืืงืจืื ืืืื.
ืื ืื ื ืืืืจืื ืขื ืืืขืจืืืช ืืืืืช (ืืืื Intel BG ืืื ืฉืืชืืืจ ืืืืฉื ืืืืืจ, ื ืืืจ ืขื ืืขืจืืืช ืขื ืืืงืจื-ืืจืืืืงืืืจืช ืืขืื Haswell ืืืขืื):
- ืื ืืืฆืจื Gigabyte;
- ืื ืืืฆืจื MSI;
- 21 ืืืื ืืืฉื ื ืืื ืฉื ืื ืืื ื-4 ืืืื ืฉืจืช Lenovo.
ืืืืื, ืืืืืื ื ืขื ืืืืฆื ืืกืคืงืื ืืื, ืืื ืื ืืืื ืื.
ืชืืืื ื ืืืชื ืืืืขื ืจืง ื Lenovoืฉืืืืจ ืืืขืื ื
Gigabyte ื ืจืื ืฉืื ืงืืืื ืืืืข ืขื ืืคืืืขืืช, ืื ืื ืืืืื ืืฉืื ืฆืืจื.
ืชืงืฉืืจืช ืขื MSI ื ืชืงืข ืืืืืืื ืืืงืฉืชื ื ืืฉืืื ืืช ืืคืชื ื-PGP ืืฆืืืืจื ืฉืื ื (ืขื ืื ืช ืืฉืืื ืืื ืืืขืืฅ ืืืืื ืืืฆืคื). ืื ืืฆืืืจื ืฉืื "ืืฆืจื ืืืืจื ืืืื ื ืืืืฆืจืื ืืคืชืืืช PGP".
ืืื ืืืชืจ ืืขื ืืื. ืืืืืื ืฉืื ืชืืืื ื ืืชืจืื ืืืฆื ืื ืืืืืจ, ืืืฉืชืืฉ (ืื ืืชืืงืฃ) ืืืื ืืชืื ืช ืืืชื ืืขืฆืื (ืืงืฉื ืืืืชืจ ืืื
1. ืืชืืื ืืชืื ืืขืจืืช ืืืคืขืื ืฉื Windows (ืืืืคื ืืืื, ื ืืชื ืืืฆืข ืืช ืืฉืืืื ืืืชืืืจืื ืืืื ืื ืชืืช ืืื ืืงืก, ืื ืืชื ืืคืชื ืื ืืืื ืฉื Intel STK ืขืืืจ ืืขืจืืช ืืืคืขืื ืืจืฆืืื). ืืืืฆืขืืช ืืื ืืฉืืจืืช MEinfo, ืืื ืฉืื ืชืืืื ืืืขืจืืช ืื ืืื ื ืืชืืื ืชืื.
2. ืงืจื ืืช ืืชืืื ืฉื ืืืืจืื ืืืืง ืืืืฆืขืืช ืืื ืืชืื ืืช ืืคืืืฉ.
3. ืคืชื ืืช ืชืืื ืช ืืงืจืืื ืืืืฆืขืืช ืื ืืื ืขืจืืืช UEFI BIOS, ืืฆืข ืืช ืืฉืื ืืืื ืืืจืืฉืื (ืืืืืข Rootkit, ืืืฉื), ืฆืืจ / ืขืจืื ืืช ืืื ื KEYM ื-IBBM ืืงืืืืื ืืืืืจ ME.
ืืืืง ืืฆืืืืจื ืฉื ืืคืชื RSA ืืืืืฉ ืืชืืื ื, ืฉื-hash ืฉืื ืืชืื ืช ืื ืชืืืื ืฉื ืขืจืืช ืืฉืืืื ืืื ืขื ืฉืืจ ืชืฆืืจืช Intel BG.
4. ืืืืฆืขืืช ืืื ื-Flash Image Tool, ืื ื ืชืืื ืช ืงืืฉืื ืืืฉื (ืขื ืืื ืืืืจืช ืชืฆืืจืช Intel BG).
5. ืืชืื ืชืืื ื ืืืฉื ืืืืื ืืืืฆืขืืช ืืื ืืชืื ืืช Flash, ืืื ืืืืฆืขืืช MEinfo ืฉืืืืจ ื-ME ืืืื ืืขืช ืืช ืชืฆืืจืช Intel BG.
6. ืืฉืชืืฉ ืืืื ืชืื ืืช ืคืืืฉ ืืื ืืกืืืจ ืืช ืืฆื ืืืืฆืืจ.
7. ืืืขืจืืช ืชืืชืื, ืืืืืจ ืืื, ืืืืฆืขืืช MEinfo, ืชืืื ืืืืื ืฉื-FPFs ืืชืืื ืชืื ืืขืช.
ืืคืขืืืืช ืืืื ืื ืฆื ืืคืขื ืืช Intel BG ืืืขืจืืช ืื. ืื ืืืื ืืืชื ืืคืฉืจื ืืืื ืืช ืืคืขืืื, ืืืืืจ:
- ืจืง ืืืขืืื ืฉื ืืืืง ืืคืจืื ืฉื ืืคืชื ืืฉืืจืฉ (ืืืืืจ ืื ืฉืืคืขืื ืืช Intel BG) ืืืื ืืขืืื ืืช UEFI BIOS ืืืขืจืืช ืื;
- ืื ืชืืืืจ ืืช ืืงืืฉืื ืืืงืืจืืช ืืืขืจืืช ืื, ืืืฉื, ืืืืฆืขืืช ืืชืื ืช, ืืื ืืคืืื ืื ืชืืืืง (ืชืืฆืื ืฉื ืืืื ืืืช ืืืืคื ืืืงืจื ืฉื ืฉืืืืช ืืืืืช);
- ืืื ืืืืคืืจ ื-UEFI BIOS ืืื, ืืชื ืฆืจืื ืืืืืืฃ ืืช ืขืจืืช ืืฉืืืื ืขื FPFs ืืชืืื ืชืื ืขื "ื ืงื" (ืืืืืจ, ืืืืื ืืืืฉ ืืช ืขืจืืช ืืฉืืืื ืื ืืฉ ืื ืืืฉื ืืชืื ืช ืืืืื ืืื ืคืจื ืืืื ืืืืืจ ืฉื ืืืื ืืช, ืื ืคืฉืื ืืืืืืฃ ืืช ืืื ืืื ).
ืืื ืืืืื ืื Rootkit ืืื ืืืื ืืขืฉืืช, ืืชื ืฆืจืื ืืืขืจืื ืื ืืืคืฉืจ ืืืฆืข ืืช ืืงืื ืฉืื ืืกืืืืช UEFI BIOS. ื ืืื, ืืืฆื ืืคืจืืืืืื ืืืืชืจ ืฉื ืืืขืื - SMM. ืขืจืืช ืฉืืจืฉ ืืื ืขืฉืืื ืืืืืช ืืขืืช ืืืืคืืื ืื ืืืืื:
- ืืืชืืฆืข ืืืงืืื ืืืขืจืืช ืืืคืขืื (ืชืืื ืืืืืืจ ืขืืืื ืขื ืืื ืืฆืืจืช ืคืกืืงืช SMI, ืฉืชืืคืขื ืขื ืืื ืืืืืจ);
- ืืฉ ืืช ืื ืืืชืจืื ืืช ืฉื ืืืืืช ืืืฆื SMM (ืืืฉื ืืืื ืืชืืื ืฉื ืืฉืืื RAM ืืืืืจื, ืกืืืืืช ืืืขืจืืช ืืืคืขืื);
- ื ืืชื ืืืฆืคืื ืืืคืขื ื ืืช ืงืื ื-rootkit ืืืฉืจ ืืื ืืืคืขื ืืืฆื SMM. ืื ืื ืชืื ืื ืืืืื ืื ืจืง ืืืฆื SMM ืืืืืื ืืฉืืฉ ืืืคืชื ืืฆืคื ื. ืืืืืื, hash ืืงืืืฆืช ืืชืืืืช ื-SMRAM. ืืื ืืงืื ืืคืชื ืื, ืชืฆืืจื ืืืคืก ื-SMM. ืืื ืืืื ืืืืขืฉืืช ืืฉืชื ืืจืืื. ืืฆื ืืช ื-RCE ืืงืื SMM ืื ืฆื ืืืชื, ืื ืืืกืฃ ืืืืื SMM ืืฉืื ื-BIOS, ืืื ืืืชื ืืคืฉืจื, ืืืืืื ืฉืืคืขืื ื ืืช Boot Guard.
ืืคืืื, ืคืืืขืืช ืื ืืืคืฉืจืช ืืชืืงืฃ:
- ืฆืืจ rootkit ืืืกืชืจ, ืืืชื ื ืืชื ืืืกืจื ืฉื ืืืจื ืื ืืืืขื ืืืขืจืืช;
- ืืฆืข ืืช ืืงืื ืฉืื ืขื ืืืช ืืืืืืช ืขืจืืช ืืฉืืืื ืืชืื ื-Intel SoC, ืืืืืจ ืขื ื-Intel ISH (ืชืกืชืื ืืงืจืื ืขื ืืชืืื ื).
ืืืจืืช ืฉืืืืืืืช ืฉื ืชืช-ืืืขืจืืช ืฉื Intel ISH ืขืืืื ืื ื ืืงืจื, ื ืจืื ืฉืืื ืืงืืืจ ืืชืงืคื ืืขื ืืื ื ืื Intel ME.
ืืืฆืืื
- ืืืืงืจ ืกืืคืง ืชืืืืจ ืืื ื ืฉื ืืืคื ืืคืขืืื ืฉื ืืื ืืืืืืืช ื-Intel Boot Guard. ืืื ืืก ืืื ืกืืืืช ืืืืืื ืฉื ืืื ืื ืืืืฆืขืืช ืืืื ืขืจืคืื.
- ืืืฆื ืชืจืืืฉ ืชืงืืคื ืืืืคืฉืจ ืืฆืืจืช rootkit ืืืชื ื ืืชื ืืืกืจื ืืืขืจืืช.
- ืจืืื ื ืฉืืขืืื ืืื ืื ืืืืจื ืืื ืืกืืืืื ืืืคืขืื ืืจืื ืงืื ืงื ืืื ื ืขืื ืืคื ื ืฉื-BIOS ืืชืืื.
- ืคืืืคืืจืืืช ืขื ืืจืืืืงืืืจืช Intel 64 ืืืคืืืช ืคืืืช ืืคืืืช ืืชืืืืืช ืืืคืขืืช ืชืืื ื ืืืคืฉืืช: ืืืืืช ืืืืจื, ืืกืคืจ ืืืื ืืืื ืฉื ืืื ืืืืืืืช ืงื ืืื ืืืช ืืชืชื ืืขืจืืืช (ืฉืืืฉ ืืืืืช ืืขืจืืช ืืฉืืืื SoC: x86 ME, x86 ISH ื-ARC PMC).
ืืงืืืช
ืกืคืงืื ืฉืืฉืืืจืื ืืืืื ื ืืช ืืฆื ืืืืฆืืจ ืคืชืื ืฆืจืืืื ืืืืื ืืกืืืจ ืืืชื. ืขื ืื, ืื ืจืง ืขืืฆืืื ืขืื ืืื ืืืขืจืืืช Kaby Lake ืืืืฉืืช ืืจืืืช ืืืช.
ืืฉืชืืฉืื ืืืืืื ืืืฉืืืช ืืช Intel BG ืืืขืจืืืช ืฉืืื (ืืืืฉืคืขืืช ืืืคืืืขืืช ืืืชืืืจืช) ืขื ืืื ืืคืขืืช ืืื ืืชืื ืืช Flash ืขื ืืืคืฉืจืืช -closemnf. ืจืืฉืืช, ืขืืื ืืืืื (ืืืืฆืขืืช MEinfo) ืฉืืชืฆืืจื ืฉื Intel BG ืืืืืจ ME ืืกืคืงืช ืืืืืื ืืืืืง ืฉื ืืื ืืืืืื ืื ืืืืจ ืชืื ืืช ื-FPFs.
ืืงืืจ: www.habr.com