
ααΎαααααΎα±ααα
α»ααα
ααααα·αααΆαααααααα α αΎααα·ααΆαα’αααΈαα»ααααα·ααΆααααααααα·ααΈαααααα x86-αααααα·ααΈαα»αααααΌαααα ααΎαααα ααΆαα»ααααααααΆααααααΆααα·ααααΆααΊ Intel Boot Guard (αα·αααααΌαα
ααα‘αααΆαα½α Intel BIOS Guard!) - αα
αα
αααα·ααααΆα
αΆααααααΎααααααΏααΆααααΎ BIOS αααααΆααααααα hardware αααα’αααααααααααααααα»αααααΌαααα’αΆα
ααΎα α¬αα·αααΆα’α
α·αααααααααα
ααααΆααααΆαααα·αα ααΆααΆααααααΎαααΆαα ααΎαααΆαααΉαααΈααΌαααααααααΆαααααΆααα½α
α αΎαα ααΆαααααααααΆαα’αα»αααααα
αα
αααα·ααααΆαααααααα·ααααααααααα
αααΆα αα·αααααΆα’αααΈααααΆααααααααααααααΆ αααααααΆαααααααααΆααααα’α·αααααα·αααΆαα―αααΆα αααα
αααΆααΆαα½αααα·α
αααααΆααααα αΆαααΎααααΈααααααααααΆαα· αα·αααΆαααΆα α
αΌαααααααααααΎαααΆαα½αααΉαααΏαα’αααΈαααααααααα α»αααααΌααα
αααα»αααΆαααα·αα’ααααααααΆα
αααΎαααααΆαα’αα»ααααΆαα±ααα’αααααΆααααα αΆαααΆααααααΆαα»ααααααΎααααΆαααα
αα
αααα·ααααΆαααααΎααααΈαααααΎα rootkit ααΆααααααα·αα’αΆα
ααα
ααααΆα (ααΌααααΈαααααα’αααααααααααααα·ααΈ) αα
αααα»αααααααααα
ααααα·ααΈααα α’αααααααΊααα’ααααΎαααΆαααΆααα "On Guard for Rootkits: Intel BootGuard" ααΈααααα·ααΈαα αα·ααα·α
αα
ααααα»αααΎαααΈ 29 (αααααα αΆαααΆααααΈα ).
αααααα·ααΈαααααααααααΆαααααα·ααΆαα»αααααΌααααααααΆαααααΆαααααααα Intel 64
ααΎααααΈα αΆααααααΎα α αΌαααΎαααααΎααααα½αα ααΎαααααα·ααΈαααααααααααα·ααΆαα»αααααΌαααααααΎαααΆαα½αααααΆαααααααα Intel 64 ααΊααΆα’αααΈ? ααΆααΆααα·αααΆαα UEFI BIOS α ααα»ααααα ααααΎααααααΉααα·αααααΉαααααΌαααα ααΌααααα‘ααααΎαααΌαααααααα αΆαααΈαααααααααα» (αα»αααααΌααααα½ααα) ααααααΆαααααααααααα

ααΌαααααΆαααΊαααααααΆααα
- α’αααααααΎαααΆα (CPU, Central Processing Unit) αααααααααααΎααααΌαααααΆααα ααΆαααααΌαααααΆα ααα·ααααααααΆααααααΆαα½α (αα·ααααααααααααΌαααααΆααα’αα) αα·αα§ααααααααααΆα’αααα αα αΆα (IMC, Integrated Memory Controller);
- αααααααΈα (PCH, Platform Controller Hub) αααααΆαα§ααααααααααΆαααααααααααΆααααααΎα’ααααααααααΆαα½αα§αααααααααΏααα»αααααΌααα αα·ααααααααααααααααααααα αααα»αα αααααααααΆα Intel Management Engine (ME) ααααααΈααααΆααααααΆααααααα·ααΈαααααα (Intel ME firmware) αααααα
αα»αααααΌααααα½ααα ααααααααΈααΎα ααα»α ααΆαααΎ ααααΌαααΆαα§ααααααααααΆαα½ααααα αΌαααααΆ (ACPI EC, Advanced Control αα·α Power Interface Embedded Controller) αααααα½ααα»αααααΌαα ααααααααα·ααααα·ααΆαααααααααααααααΆααα αααααααα ααααΆαα α»α ααααΆααα α»α Fn (αααααΊα’αααααα ααααα·αααα‘αα ααααΆαα α»α α α’αααΌα Backlight ααΆααΎα) αα·αα αααΎααααα α αΎαααΆααααααΆααααααα·ααΈααααααααααΆαααααα½ααααααα
ααΌα ααααααΆααα½ααααα αΌαααααΆαααααααα·ααΈααααααααΆαααΎααΊααΆαααααα·ααΈαααααααααααα·ααΆαα»αααααΌααα (αααααα·ααΈαααααααααααααα) αααααααΌαααΆααααααΆαα»ααα ααΎα’αααα αα αΆααααααΊ SPI ααααααΆα ααΌα ααααβα’αααβααααΎβα’αααβα αα αΆαβαααβαα·αβααααΌαβαααβα ααα‘αβααΈβααααααβααΆβαααβα’αααβααΆβαα»α α ααΆαα·ααΆβααβα’αααβα αα αΆαβαααβααααΌαβααΆαβαααβα ααβααΆβαααααβααΌα βααΆαβααααα (ααΌα βαααα αΆαβαααα»αβααΌα)α
- UEFI BIOS;
- αααααα·ααΈαααααα ACPI EC (αααααααΆα ααααα‘αααα½αααΆααααα αΆααααα½αααΆαα½αααΉαααααΆααααααααααααΎαααΆα Skylake microarchitecture (2015) ααα»αααααα αααα»αααααααΎααα·αααΆααααΎαα§ααΆα αααααααΆαααααΎααααΆααααααααΆαα α‘αΎα ααΌα αααααααααα·ααΈααααααα§ααααααααααΆαααααααααααΊαα ααααΆααααααα½ααα UEFI BIOS);
- αααααα·ααΈαααααα Intel ME;
- ααΆαααααααα ααΆαααααααα (α’αΆααααααΆα MAC ααα) ααα’αΆααΆααααααααααΆα GbE (Gigabit Ethernet) αααααααΆααααααΆαα½αα
- flash descriptors - αααααααααΆααααα’αααα αα αΆα flash αααααΆαα ααα’α»ααα ααααααααααααα ααααΌα ααΆααΆαα’αα»ααααΆαα±ααα αΌαααααΎαα½αααΆα

ααΆααα»αααααΆααααΆαα
αΌααα
ααΆααααααα (ααααααΆαααΆαα’αα»ααααΆααααααΆααααααΆαα) ααααΌαααΆααααααααααααα SPI bus master - α§ααααααααααΆ SPI αααααΆααααααΎαα‘αΎααα
αααα»α chipset αααααΆαααα memory αααααααΌαααΆαα
αΌαααααΎααααΆααα ααααα·αααΎααΆαα’αα»ααααΆαααααΌαααΆαααααααα
ααααααααααΆαααααΆα (αααααΆααα ααα»αααα»ααααα·ααΆα) ααα Intel αααα’αααααααΎααααΆααααΈαα½αααα SPI flash ααΆααα·αααα·α
αΌαααααΎααααΆαααααααα (α’αΆα/ααααα) αααααα»αααααααααααα½αααααα»αααααα αα
αααααΊααΆαααα’αΆα α¬αα·αα’αΆα
α
αΌαααααΎααΆαα ααΆααα·ααααααααααΆααα αα
ααΎααααααααααΆα
αααΎα αααΈααΈααΌααΆααα·αααα·α
αΌαααααΎαααΆααααααααα
ααΆαα UEFI BIOS αα·α GbE α
αΌαα’αΆαααΆαααα’ααααααααΆαααααΊααα»ααααα α αΎαααααΆαααΆαα
αΌααα
ααΆααααααα Intel ME ααΆαααααααα α ααα»α’αααΈααΆαααΆα
αααΎα αα·ααα·ααααααΆααα’αα? α’αααΈαααααααΌαααΆαααααΆαααΊααααα
α
α·αααα ααΎαααΉαααααΆααα’αααααααααααααα
αααααααααα
αααα»αα’αααααα
ααααααΆααααααΆααααΆαααΆααααααα·ααΈαααααααααααα·ααΆαα»αααααΌαααααΈααΆααααααα
ααΆααααααα αααααα·ααΈαααααααααααα·ααΆαα»αααααΌααααα½αααααααΌαααΆαααΆαααΆαααΈααΆααααααααααα½ααααα’αΆα ααΎαααΆα αααα’αΆα α±ααα’αααααΆααααα αΆααααααΆααααααΆαα»ααα’αΆα ααα½αααΆαααΌαααααΆααα αααα»αααΆ (αααααΆαααΆαααΈαα·α ααΆαααααΎαα αα α»ααααααααΆαααααααααααααα·ααααα·ααΆα / ααΆαααα‘αΎαα‘αΎααα·α) ααααα·ααααα·ααΌααααααα½ααααααα»ααααααααααΆααα·αααα·α αααΎααααα»αααα α αΎαααΆααααααααΆαα αΌαααααΎαααααα’αααα αα αΆα SPI ααΊαα·ααααααααααΆααααα ααΌα αααα ααααααΆααααααααααααΆααααΆααα ααααααα·ααΆααΆαααααα·ααααα·ααΈαα½αα ααααΌαααΆαααααΎααΎααααΈααΆαααΆααααααα·ααΈααααααααΈααΆαααααααα
ααΌα αααα αααααα·ααΈαααααα Intel ME ααααΌαααΆαα α»αα αααααααΆαααααΆααααΆααααα½ααα·αα·αααααΆαααααΉαααααΌα αα·αααΆαααααΉαααααΌα α αΎαααααΌαααΆααααα½ααα·αα·ααααααα§ααααααααααΆ ME ααΆααααααααααΆααααΌαααΆααααα»ααα αααα»αα’αααα αα αΆα ME UMA α ααααΎαααΆααααααααααΆαααααααααΌαααΆααα·ααΆααααΆαα½α α αΎαααααα½αααΎααα αααα»ααα½ααααα»αα αααα α§αααα·αααααααααααααα Intel ME α
α αΎααααααα·ααΈαααααα ACPI EC ααΆαααα½αααααΌαααΆααα·αα·ααααααααΆααααααΆαααααΉαααααΌαααα»αααααα αααααΆαααΆαααΆααααααααααΆαααααΆααα·ααααααΆαααααααααααααΈααααααααΌαααΆααα½ααααα αΌααα αααα»α UEFI BIOS ααΆααααΎααααααααααΆααααααααα»ααααααααΆαααΆαααΆαααΌα ααααΆααα UEFI BIOS ααααΎα α αΌααα·ααΆαα’αααΈαα½αααα
ααααααΆαααΆαααααα’αΆα αααα ααααΆααΈαααααααα
αααααααΆαααΆαααΆααα ααααα UEFI BIOS
- ααΆαααΆαααΆαααΆαααΆαααααΆαα·ααΆααα’αααα αα αΆααααααΊ SPI ααΆαα½αααΉα jumper ααΆαααΆαααΆαααααα;
- ααΆαααΆαααΆαααΆαααααΆααααααααααα UEFI BIOS αα αααα»αα αααααα’αΆααααααΆα CPU αααααααΎααΆαα α»αααααα PRx αααααααααααΈαα
- ααΆααααααααΆααααΆαααααΆααΆαααααααα ααΆααααααα UEFI BIOS ααααααααΎα αα·αααααΎαααΆαααΆαααααΆα SMI αααααααΌαααααΆαααααααααααΈα BIOS_WE / BLE αα·α SMM_BWP αα αααα»αααΆαα α»αααααααααααααΈαα
- ααααααααα·ααααααααααΆαααΆαααΆααααααΊ Intel BIOS Guard (PFAT) α
ααααααααΈααΎααααααΆαααΆααααα α’ααααααα’αΆα αααααΎα αα·αα’αα»αααααα·ααΆαααΆααα»ααααα·ααΆαααααΆαααααα½ααααααα½ααα (α§ααΆα ααα ααΆαα α»αα αααααααΆααΎααααααααΆαα½αααΉαααΆαααααΎαα αα α»ααααααααΆα UEFI BIOS) α
ααΆααΆααΆαααααΆαααααα»αααΆαααααααααΆααααΆαα ααΎααααααααααΆααααΆαααα½α (α’αΆαααααααΎα’αααααα) αα·αααααααααααααααΆαααΆαααΆαααΆαααΎα’αΆα ααααΌαααΆαα’αα»αααααα αα½αααα’αΆα ααΉααα·αααααΌαααΆαα’αα»ααααααΆααααααα α¬αα½αααα’αΆα ααααΌαααΆαα’αα»ααααααΆααααααααααΆααααααααα α’αααα’αΆα α’αΆαααααααα’αααΈααααααΆαααΆααααα αα·αααααΆαααΆαααΆαα½αααΉαααΆαα’αα»αααααααααα½ααααα αααα»α . αααααΆααα’ααααααα αΆααα’αΆαααααα ααΎαααΌαααααΆαα±ααα’αααα’αΆααααααΈααΆααααΌαααα’αααααααααΈααΈαα»ααααα·ααΆα UEFI BIOS ααΈ .
ααΆααααααααααΆααααΆααααααααααΆαα UEFI BIOS
αα αααααΎααα·ααΆαα’αααΈαα αα αααα·ααααΆα αΆααααααΎααααα’αΆα αα»αα α·αααααΆα ααΏαααααΌααααααααΌααα·αααΊ Secure Boot α ααααααΆαααΆααααα ααΆαααααΆαααααααα ααΆααααΌαααΆααα ααΆα‘αΎαααΎααααΈαααααααααΆαααααΆαααΆαα»ααΆααααα αα UEFI BIOS (αααααα·ααΈαααααΆ α§ααααααααα»αααα) α αΎααα·αααααααααα·ααΈαααααααααα½αααΆαααααα
ααΌα ααααα αΎα αααα»αα αα»α Intel αα αααα»α SoCs ααΆαα½αααΉαααΈααααΌααααΆαααααααα Bay Trail (2012) ααΆαα’αα»αααα Hardware ααααα·αα’αΆα ααααΌαααΆα Secure Boot (Verified Boot) ααααα·αααΆαααΆααααΆαααααααααΉααα αα αααα·ααααΆ Secure Boot αααααΆααααααΆααααΆαααΎαααααα ααααααα (ααααΆα 2013) ααααααΆααααααααΌαααΆααααααα’ α αΎααααααααααα Intel Boot Guard ααααΌαααΆαα ααααααΆααααααΆαααα»αααααΌαααααΎαα»ααΆαα½α Haswell microarchitecture α
αα»αααααα·αααααΆα’αααΈ Intel Boot Guard ααΌααααα‘ααααΎααααααααΆααααΎαααΆααα αααα»αααααΆαααααααα Intel 64 ααααα½αααααααααΆ ααΊααΆα«ααααααααΆαααΏαα»αα α·ααααααααΆαααα αα αααα·ααααΆα αΆααααααΎααααααΏαα»αα α·ααααααα
αααΈααΈααΌ Intel α
Cap ααααΆαααΆ processor ααΊααΆααα·ααααΆαααααα·ααααα·ααααααΆαααα αααα»αααααΆαααααααα Intel 64α α ααα»α’αααΈααΆαααΆααΆααααΆα«ααααααααΆαααΏαα»αα α·ααα? ααΆααααααΆααΆααΊααΆαααααα·αααα·ααααΆαα»ααΌα ααΆαααααααααααααΎα±ααααΆααΌα αααα:
- Microcode ROM ααΊααΆα’αααα αα αΆαααααα·αααΆαααΉαααααααΆα ααα» αα·ααα·αα’αΆα αααααα‘αΎααα·αααΆααααααΆαααααααΆαα»αααΈααααΌααΌαα ααΆααααΌαααΆαααααΏααΆ microcode ααΊααΆααΆαα’αα»ααααααααααααααααααΆααααααα½αααααΆααα ααΎααΆαααααΆαααααΆαααααααα»αα ααΎαα‘αΎααα αααα»αααΈααααΌααΌααααααα . ααΌα αααααα αααα»α BIOS α’αααα’αΆα ααααΎααααααααααααααΈαααΆαα½αααΉαααΆαα’αΆαααααααΈααααΌααΌα (αα½αααΆααααΌαααΆαααΆααααΈααΎαα αααα αΆααααααΎα ααααα ROM αα·αα’αΆα αααααααΆααααΈααΎααΆααα)α ααααΉαααΆααααααααααααααααΈαααΆαααααααααΌαααΆαα’αα·αααααΈα αααααααΎα’ααααΆαααΆααααα»αααααΆααααααΆααα·ααΆααααΆαααααΆαα (α ααα»ααα ααααΉαααΆαααΆααααΆααααααΈααααΌααΌαααααΌαααΆαααααααΆααααα ααααα’αααααααααααΎαααΆααα»ααααα) α αΎαααΆαα α»αα αααααααΆααΎααααΈαααααααααααΆααα»α αα·α αα·αααΆαααααΉαααααΌαα
- ααααΆααα α»α AES ααΎααααΈαα·ααααΈαααΆαα·ααΆααααΆαααααΎαα αα α»ααααααααΆαααΈααααΌααΌαα
- αααααΆααααααΆααΆααα RSA ααααααααααααΆααα αααααααΆααααΆαααααΎαα αα α»ααααααααΆαααΈααααΌααΌαα
- αααααΆααααΆααΆααα RSA ααααα·αα·αααααΎαα αααααααΆαααααΌαα»αααΌα ACM (Authenticated Code Module) ααααααααΎαα‘αΎαααα Intel ααααααΈααΈααΌα’αΆα ααααΎαααΆααα»αααα BIOS α αΆααααααΎα (αα½ααααΈααΈααααΌααΌα) α¬α’αα‘α»ααααααααα·ααααα·ααΆαααααααΆ αα ααααααααααΉαααα·ααΆααααα½αα ααα½αααΎαα‘αΎαα
αααα»αα αα»α Intel ME
ααααααααααααααα αααα»ααααα»αααααααΎαααααΌαααΆαα§αααα·αααα . ααΌαα αΆαααΆααα·ααΆααΆααααα’αΆα ααααα·ααααα·ααΆααααααΊααα’ααααΎ microcontroller αααααΆααααααΎαα‘αΎααα αααα»α chipset α αΎαααΆααΆαααΆααααααΆαααααα»α αα·αααΆαα―ααα·αααα·αα αααα»αααααααααα
αααααΈααΆααΆαααΆαααααΆααααΆαααααα Intel ME ααααΆα«ααααααααΆαααΏαα»αα α·αααααααααααααααΆααΆαα
- ME ROM - α’αααα αα αΆαααααα·αααΆαααΉαααααααΆα ααα» αα·αα’αΆα αααααα‘αΎααα·αααΆα (αα·αααΆααα·ααΈααΆαααααα’αΆαααααααααΌαααΆααααααααΌα) αααααΆααααααΌαα αΆααααααΎα ααααΌα ααΆαααααΆ SHA256 ααααααΆααΆααα RSA ααααα·αα·αααα αααααααΆαααααααααα·ααΈαααααα Intel ME α
- αααααΉα AES αααααΆαααααααΆαα»αααααααΆααααααΆαα;
- ααΆαα αΌααα ααΆαααααα»ααα fuses (FPFs, Field Programmable Fuses) αα½ααααα αΌααα αααα»α chipset αααααΆαααααααΆαα»αααααααΆααα½αα ααα½αααΆα’α α·αααααααα αα½αααΆααααααααΆααααααΆααααααΆαααααα’αααααααααααααααα»αααααΌαααα
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] ααΆααααΎαααΆαααΆαααααααααΆααα αΆααααααΎααααα’αΆα αα»αα α·αααααΆαα α αΎααααααααΆααααααΌααα αααα»αααΆααΊααΆααΌαα αΆααααααΎα (ααΈααααΌααΌα) αα ααΆααααα»ααααΈααΈααΌ αααααααΌαααΆαααααα‘αΎααααααααΉαααα·ααΆααα RESET (αα·αααααΌαα ααα‘αααΆαα½αααα·α ααα RESET αα αααα»α BIOS!) α αααΈααΈααΌααααΎααααΌαα»αααΌα (Intel BG startup ACM) ααααααααΎα αα·αα α»αα αααααααΆααα Intel αα ααΎα’αααα αα αΆα SPI flash αααα»αααΆαα αααα»αααααΆαααααααΆααααααααΆ αααααααααΆααααΆ (ααΆααααΌαααΆαααααααααΆαααα½α α αΎαααΆαααΎααΆαααΈααΈααΌααΆααααααΆααααΆααΆαααααααααααααααΆααα αααααααΆ ACM ) α αΎαα αΆααααααΎαα

αααΌαα»αααΌααααααα½ααα»αααααΌααααα»αααΆααααααααααΆαααααααα
αΆααααααΎαααΌα
αα½ααα UEFI BIOS - Initial Boot Block (IBB) ααααα
αααα»ααααααΆααα»αααΆααααααΆαααααααααααΆαααααααααααΆαααα UEFI BIOS α ααΌα
αααα Intel BG α’αα»ααααΆαα±ααα’ααααααααααααΆααααΆαααααΉαααααΌααα BIOS αα»ααααα
αΆααααααΎαααααααααααααα·ααααα·ααΆα (αααα’αΆα
ααααΌαααΆαα’αα»αααααααααααΆααααα½ααα·αα·ααααααα
αα
αααα·ααααΆ Secure Boot) α
αα αα αααα·ααααΆ Intel BG αααααααΌαααααααααα·ααααα·ααΆαααΈα (α αΎααα½ααα·αααααααααααααΆαα½ααααααααα αααααΊααααααΆααααΈαα’αΆα ααααΌαααΆαααΎααα ααΎαααααααα α αΎαααΆααααΈαα’αΆα ααααΌαααΆααα·α)α
ααΆαααΆααααα Boot
αα αααα»ααααα Measured Boot (MB) αααΆαααΆαα»α αΆααααααΎαααΈαα½αα (α αΆααααααΎαααΆαα½α CPU boot ROM) "ααΆαα" αα½ααααααΆαααααααααΎαααααααΆααα Trusted Platform Module (TPM) α αααααΆααβα’αααβαααβαα·αβααΉαβαααα»αβααΌαβααααααβα
TPM ααΆα PCRs (Platform Configuration Registers) ααααααααααΆααααααααααααα·ααααα·ααΆα hashing ααΆαααΌαααααα

ααΆαααααα ααααα PCR αα αα α»ααααααααΊα’αΆαααααααΎαα»α α αΎαααΆαα α»ααααααααΆαααααααααΌαααΆααααααα‘αΎααα·ααααα ααααααααααααααααααΌαααΆα RESET ααα»αααααα
ααΌα αααααα αααα»ααααα MB αα α ααα»α αα½αα ααα½α PCRs αααα»ααααα αΆααααΈα’ααααααααΆααααα½αααα (αα αααα»ααααααααΆαααααααα·ααααα·ααΆα hash) ααααΌα α¬αα·αααααααααααααΌαααΆα "ααΆααααα" α ααααα PCR α’αΆα ααααΌαααΆαααααΎαα αααα»αααΆαα’αα·αααααΈααα·αααααααα½αα ααα½α (TPM_Seal) ααααα·ααααα·ααΆαα αααααΆααααΈααα ααΆααα·ααααΈααααααα½ααα (TPM_Unseal) ααΉαα’αΆα ααααΎαα ααΆααα»αααααΆααααααα PCR αα·αααΆαααααΆααααααΌαααΆααααααααααΆααααα»α (α§. αα·αααααααΆαααΆαα» "ααΆααααα" αααα½αααααΌαααΆααααααααα)α
ααΆααααααααααΆαα Boot
α’αααΈααααα½αα±ααααααΆα αααα»ααααααΆααα’ααααααα αΌαα α·ααααααααα UEFI BIOS ααΊαααα Verified Boot (VB) ααααααΆαααΆαα»α αΆααααααΎαααΈαα½αααααααααααΆααααΆαααααΉαααααΌα αα·αααΆαααααΉαααααΌααααααααα·ααΈαααααΆααα α αΎααααα»αααααΈααΆαααα α»ααααα»αααΆααααααααααΆαα (αα½ααααα»αα ααααααΆαααααα) ααΎαα‘αΎαα
- αα·ααααααΆαα’αααααααΈ 1 ααΆααΈαα 30 ααΆααΈ (ααΎααααΈα±ααα’αααααααΎααααΆααααΆααααααααΆααΎααααΈαααααΈααΌαα ααα»ααααα»αααααΌαααααααααΆαααα·αα αΆααααααΎαα αΎαααααα·αααΎα’αΆα ααααΎαα ααΆαααΉαααααΆααΆαααααΆα BIOS α‘αΎααα·α);
- ααΆααα·αααααΆαα (ααΌα ααααα’αααααααΎααααΆαααα·αααΆααααααααΆααΎααααΈαααα αΎαααΎαααΈααααα αααααΎααααΈααααΎ);
- ααΆαααααααΆαααΆαααααα»αααααα (ααααΈααααα·αααΆαααααααααΆαααα»ααααα·ααΆα αααααααΆααα·α αα ααΆαααααΆααααααααααΌαααααΎ)α
αααααΎααααααααααΆαααΊα’αΆαααααααΎααΆαααααααα ααΆαααααααα Intel BG αααααΆααααααΆαα (αααααΊαα ααΎα’αααΈαααααα α ααΆαααααΆαααα’αα»αααα) αααααααΌαααΆααααααααΆααΆα’α α·αααααααααααα’αααααααααα·ααΆαα»αααααΌααααα αααα»ααααααααααα»ααααααΆααα ααΆααΆαα·ααα - chipset fuses (FPFs) α ααΎαβααΉαβαα·ααΆαβαααα’α·αβα’αααΈβα ααα»α βαααβαα βαααβαααααα
ααααααααΈααΎααΆαααααα α’αααααααααααΎαααΌααα RSA 2048 α ααα½αααΈα α αΎααααααΎααα ααΆαααααααααα·ααααααααΈα (αααα αΆααααα»αααΌαααΆα)α
- ααΆααααα αΆααααααΆ root ααααα’αααααα (KEYM, OEM Root Key Manifest) αααααΆαα SVN (ααααααααα»ααααα·ααΆα) αα manifest ααα αααααΆ SHA256 ααααααΆααΆααααα manifest αααααΆαα ααααΆααΆααα RSA (α§. αααααααΆααΆααααα vendor root key) ααΎααααΈαααααααααΆααα αααααααΆαα manifest ααα αα·αα αααααααΆαααα½αα―αα
- IBB Manifest (IBBM, Initial Boot Block Manifest) αααααΆαα SVN αα manifest ααα αααααΆ SHA256 αα IBB αααααΆααααΆααΆααααααααΆαααααααααααΆααα αααααααΆαα manifest ααα αα·αα αααααααΆαααα½αα―αα
αααααΆ SHA256 αα OEM Root Key ααααΌαααΆααααααααΆα’α α·αααααααααα ααΆαα chipset fuses (FPFs) ααΌα αα ααΉαααΆαααααααα ααΆαααααααα Intel BG αααα ααααα·αααΎααΆαααααααα ααΆαααααααα Intel BG ααααααααααΆααααΆαααΆαααααα αΌααα αα αααα·ααααΆααα αααα αΆααααΈααααααααα αα ααΎααααααααααα ααΆαααααα αΆαααααααα―ααααα OEM Root Key ααα»ααααααααα’αΆα ααααΎαα αα α»ααααααααΆα BIOS (αααααΊα’αΆα ααααΆα‘αΎααα·αααΌαααΆααααα αΆαααΆααααα) αααααΊα§α α’ααααααα

αα
αααα’ααααααα‘ααααΎαααΌαααΆα ααΆαααααααααΎαα‘αΎαααααΆααα’αααΈαααααΌαααΆααααααΆαααααααααααΆαααααααααααΆααααααααααααα - α’αααα’αΆα
ααααΎααΆααααα αΆααα½αα α ααα»α’αααΈαααα»αααααΆα?
ααΆααΆααα·α Intel ααΌα αααααααααα±ααα’ααααααααΌαα±ααΆαααΎααααΈααααΎαα IBB αααααααααΆαααααΆαααααααΆααααα·ααααααααααααΆ αα·ααα½αααΆ root α ααααα·αααΎαααααα―αααααααΌααα IBB (αααααΆαααααΆαααα αΆαααΈααΈα) ααααΌαααΆαααα ααααΆα α§αααααα ααα»ααΉααααααΆαααααααααααα·ααααααα½αααα»ααααα α αΎααα αΌααααα’αααααααααααΎαααΌααααΈ αα·αααΎαααααΎαααΆαα‘αΎααα·αααΌα manifests αααααΆαααααΆα‘αΎααα·ααα αααα»αααΆαα’αΆααααα BIOS αααααΆααα
ααα»ααααααααα·αααΎααα«αααααΌαααΆααααααααααα½α (αααααΆααααα αΆαααααΌαααααΌαααΆαα α»αα αααααααΆ) ααΆααΉααα·αα’αΆα αααα½αααΆααΆααα ααΈαα·αα·ααΈααα αΌααα·αααααΌαααΆααααααα±ααααα αααααΆαααααααααΆααΆααααααααααΉααααααααΌαααΆαααΆαααααααα·ααΈαα αααα»α FPFs αααα αα·ααααααΆααααΆααα’ααα
ααΆαααααααα ααΆαααααααα Intel Boot Guard
α₯α‘αΌααααααΌααααα‘ααααΎαααΆαααααααα ααΆαααααααα Intel BG αα·αααααΎαααΆαααααΆααααααΎαααααααΆα ααααα·αααΎα’ααααααα‘ααααΎαααααΆαααααααααΌαααααΆαα αααα»α GUI αα Flash Image Tool ααΈ Intel System Tool Kit (STK) α’αααααΉααααααΆααααΎαααΆ ααΆαααααααα ααΆαααααααα Intel BG αα½ααααα αΌααααααΆαααααααααΆααΆααααα vendor root key αααααΆααΆααα·αα αααΆααααΆαααα½αα ααα½αα ααααα α αΎαααΌα αααααα ααΎα αααααα 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 flash αα·αααααΌαααΆαααααΎαααααα ααααΆαααΆαα αΆααααααΎααααα’αΆα αα»αα α·αααααΆαααΉαααΎαα‘αΎαααα ααΆααΉααα·ααα½αα±αααα»αα α·αααα
ααΎαααΆααααααααΆαααΎαα½α α αΎαααΆαααααΆαααα’αα»αααααααααΆαααααα VB α’αΆα ααααΌαααΆαααααααα ααΆαααααααα ααΌα ααααααααα·αααΎααΆααααααααααΆαααααΆααα αααααΆαααΆαααααααα·ααα½αα±αααα»αα α·αααααΉαααΎαα‘αΎααααααααα
αα»αβααΏαβαααβαααβαα βα’αααβααα...
GUI ααααα§αααααααααΎααααΆαααααααααΌααααααα "αα½α ααΆααα αΎα" ααΆααααααα
αααααα
αααα
ααα·ααΆα
0
No_FVME
αα
αα
αααα·ααααΆ Intel BG ααααΌαααΆααα·α
1
VE
αα»αααΆα VB ααααΌαααΆαααΎα αα·ααααααΆαα’ααααα
2
VME
ααααααΆααααΈαααααΌαααΆαααΎα (VB αα·α MB) αα·ααααααΆαα’ααααα
3
VM
ααααααΆααααΈαααααΌαααΆαααΎα ααααα·ααα·ααααααααα
4
α’αα ααααΈα’ααΈ
αα»αααΆα VB ααααΌαααΆαααΎα ααΆααα·αααααΆαα
5
FVME
ααααααΆααααΈαααααΌαααΆαααΎα ααΆααα·αααααΆαα
ααΌα αααααΆααααααΆαααα½α ααα αΎα ααΆαααααααα ααΆαααααααα Intel BG ααααΌαααααααααααα αα·ααααααΆααααΆααα’αααααα’αααααααααααααααα αααα»α chipset fuses (FPFs) - ααΌα αα½α (ααααα ααΆαααααααΆαααααα·αααΆααααααΆαα ααΆααα 256 bytes) hardware storage information in the chipset αααα’αΆα ααΆαααααααα·ααΈαα ααΆααααα ααΆαα ααααααααααα·ααααα Intel (αααα αΎαααΆααΌαα ααα» Field α’αΆα βαααααα·ααΈβααΆα fuses) α
ααΆααα’ααΆαααααααΆααααΆααααααΆαα»αααΆαααααααα ααΆααααααααααΈαααααα
- ααΆαβααααβαααα»αβαα·ααααααβαααβα’αΆα βαααααα·ααΈβααΆαβαα½αβαα (ααααΆααβααβααΆβααααααβαααβααΆαβαααααβαα ααΆβαααααααα Intel BG ααααΌαβααΆαβααααα);
- ααΆααα Intel ME ααα»ααααααααα’αΆα α’αΆα αα·αααααααααααα·ααΈααΆααΆαα
ααΌα ααααααΎααααΈααααααα ααΆαααααααααααααΆαααα αα αααα·ααααΆ Intel BG αα ααΎααααααααααΆααααΆαααα½α α’ααααααααααΎααΌα ααΆαααααααααα»αα’αα‘α»ααααααα·α:
- αααααααΎα§αααααααααΎααααΆααααΌαααΆα Flash (ααΈ Intel STK) αααααΎαααΌαααΆααααααα·ααΈααααααααΆαα½αααΉαααΆαααααααα ααΆαααααααα Intel BG αααααΆααααααα±ααααΆα’ααααα αααα»αααααα Intel ME (αααα α ααΆαααα ααααααααα’αΆαααααααααΆαα FPFs);
- αααααααΎα§αααααααααααααααα·ααΈ Flash (ααΈ Intel STK) αααααααΌαααΆαααααα α’αααα αα αΆααααααΊ SPI ααααααααααα αΎααα·αα’αααΈαααααα α ααΆα ααααααα·α (αααα»αααααΈαααααΆααααααααΆαααααααΌαααααΆααααΌαααΆααααααΌααα Intel ME) α
ααΆααααααααααααα·ααααα·ααΆαααΆααααα Intel ME ααΉαααααααααΆα αααα FPFs ααΌαααααααααααΆααααααΆααααΈαααα αααααααΆαα FPFs αα αααα»αααααα ME αααααααΆαα’αα»ααααΆααα αααα»α SPI flash descriptors αα ααΉαααααααααααΆαααααΆαααα 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 α’α₯
Skylake, ααΆαααΆαααααααααΆα, αα
αα
αααα·ααααΆααΆαααΎα
ααΆααααααΌα αααΆααΌα’α·α 2 Pro α
Haswell ααααΆαααΆαααΆααααααα
αααα»αα αα»α Lenovo U330p
Haswell ααααΆαααΆαααΆααααααα
"ααΆαααΆαααα" ααΆααααααΆααααααΆααααα Intel BG startup module ACM, manifests αααααΆααααααΆααααΆαααΎ αα·αααΌααααααααΌαααααΆαα αααα»α BIOS, i.e. ααΆαα’αα»αααααααααΆααααΆααα·ααΆαα
ααΆα§ααΆα ααα α αΌαααΎααααα½ααααααΆαααΆαααααΈααΆαα·ααΆαααα ααΌαααΆαααα αααααα’ααααααααα’αααα αα αΆααααααΊ SPI αααααΆαα Gigabyte GA-H170-D3H (αααα F4) α
Intel CPU boot ROM
ααΆααααΌαααΌααα·ααΆαα’αααΈαααααααΆααααααα½αααααΆαααααα·αααΎαα αα αααα·ααααΆ Intel BG ααααΌαααΆαααΎαα
ααΆαα·αα’αΆα ααααΎαααααΌααααΈααααΌααΌααααααΆααα·ααααΈααα ααΌα ααααα αΎα ααααααααααααααΆααααααΆααα·αααααΆααΆααααααααααΌαααΆαα’αα»αααα (αα αααα»αααΈααααΌααΌα α¬αα αααα»ααααααααΉα) ααΊααΆαααα½αααΎαα αα α ααααααΆαααΆααααα ααΆααα·ααααααΆααααααααααααΎαααΆα Intel ααααΎα "α’αΆα " ααααΎαααααααΆαααΆαααααααΊααΆααΆααα·αα
αααααΆααααΈα ααααΈααααΆαααΆα RESET αα½αααααΆα (αα αααα»αα’αΆααααααΆααααααΆαα·ααΆααα’αααα αα αΆααααααΊααααΌαααΆαααΌαααΆααα½α α αΎα) ααααΎα FIT (ααΆααΆαα ααα»α αααααΆαααααααα·ααΈαααααα) α ααΆααααααααααΆααΆααααα½α ααααα·α αα ααΆααααΌαααΆαααααααα α’αΆααααααΆα 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
};α₯α‘αΌααααααΆα αααΆααααΆααααΆααΆαα»αα½αα ααα’α»ααα ααΈααΆαααααα Intel BG startup ACM binary α αα ααΆααααααααααααααΆαααααααααααααααΈααααααΊααααααΆαααααΆαααααΌαα»αααΌαααααααααΎαα‘αΎαααα Intel (ACMs, microcode updates, Intel ME code sections, ...)α
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 BG ACM
ααΆααααααααααΆααα·ααΆαααααΆαααΆααααα ACM αααααΆα αααΆααααΆααααΆααΆααααΎααΌα ααΆαααααα:
- ααα½αααΆαααΈ Intel ME ααΆαααααααα ααΆαααααααα Intel BG αααααααΌαααΆαααααααα ααΆαα chipset fuses (FPFs);
- ααααΎα KEYM αα·α IBBM manifests αααααααααΆαααα½αααΆα
ααΎααααΈαααααααααΆααααα αΆαααΆααααα ACM ααααααΎααΆααΆα FIT αααααΆαααΆαα»ααΈαααααααααΎααααΈα ααα’α»ααα αα ααΆααααααααααΆααααα (ααΌαααΎα FIT_ENTRY_TYPES ααΆαααΎ)α
ααΌααααα‘ααααΎα manifestos α±ααααΆααα·ααααα αα αααα»ααα ααΆαααααααααα manifest ααΈαα½α ααΎαααΎαααααα·αα αααΆααααΆαααα½αα ααα½α αααααΆααααααΆααΆαααααΈ manifest ααΈααΈα αα·α OEM Root Key ααΆααΆαααααΆαα α»αα αααααααΆααΆαα ααΆαααααααααααααΆααααααΆα
typedef struct KEY_MANIFEST
{
char Tag[8]; // β__KEYM__β
unsigned char : 8; // 10h
unsigned char : 8; // 10h
unsigned char : 8; // 0
unsigned char : 8; // 1
unsigned short : 16; // 0Bh
unsigned short : 16; // 20h == hash size?
unsigned char IbbmKeyHash[32]; // SHA256 of an IBBM public key
BG_RSA_ENTRY OemRootKey;
};
typedef struct BG_RSA_ENTRY
{
unsigned char : 8; // 10h
unsigned short : 16; // 1
unsigned char : 8; // 10h
unsigned short RsaPubKeySize; // 800h
unsigned long RsaPubExp;
unsigned char RsaPubKey[256];
unsigned short : 16; // 14
unsigned char : 8; // 10h
unsigned short RsaSigSize; // 800h
unsigned short : 16; // 0Bh
unsigned char RsaSig[256];
}; 
ααΎααααΈαααααααααΆααααααΆααΆααααα OEM Root Key ααΎαα
αΆαααΆ SHA256 hash ααΈ fuses ααααΌαααΆαααααΎ ααααα
ααααααααΆαααα½ααα½α
α αΎαααΈ Intel ME α
α αΌαααΎααααααα manifesto ααΈααΈαα ααΆααΆααα ααΆααααααααααΈα
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
};ααΈααΈαααΆααααααΆ SHA256 αααα IBB αα·αα ααα½αα’ααααααααΆααααα·αααααΆα’αααΈααααΉαααΆααα 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 ααΈ manifest ααααΌα) αα·αα αααααααΆαα manifest αααα
typedef struct PMSG
{
char Tag[8]; // β__PMSG__β
unsigned char : 8; // 10h
BG_RSA_ENTRY IbbKey;
}; 
ααΌα
ααααααΌααααΈαααα»ααααα
αΆααααααΎαααΆαααααα·ααααα· UEFI BIOS αα½αααααΆαααΉαα
αΆααααααΎα ACM αααααΉααααααααααΆααααΆαααααΉαααααΌαααααΆαα·ααΆαααααααααΆαα½αααΉααααααΌαααααΆααααΆα SEC αα·α PEI α αααααΆαααα processor α
ααααΈ ACM ααααΆααααΈααΆαααα·α
ααα RESET α αΎαα
αΆααααααΎαααααΎαααΆα BIOS α
ααΆαααΆααααααΆααααααααααΆαα PEI ααααΌαααααΆααααΌαα»ααααααΉααα·αα·αααααΎααα ααααα BIOS (αααααΌα DXE) α αααΌαα»αααααααα»αααααΌαααΆααααααΎαα‘αΎαααα IBV (Independent BIOS Vendor) α¬α’ααααααααααααααα αααααΆααα ααΆααααααααααα Lenovo αα·α Gigabyte ααα»ααααααααααΆαααααΆαααΆααΆαα ααα αΆαααααααΎα α αΎαααΆαααΆαααΆαααα Intel BG ααΌααα·α αΆαααΆααΌααααααΆααααααα ααααΈααααααααααΆαααααα
αααΌαα»α UEFI BIOS LenovoVerifiedBootPei
αααα»αααααΈ Lenovo ααΆααΆαααααααααΆααα ααΆαααΌαα»α LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} ααααααααΎαα‘αΎαααααααα»αα αα»α Lenovo α
ααΆαααΆαααααααΆααΊααΎααααΈααααΎα (ααα 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 ααΆαααααα ααΆαααΌαα»α BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} ααααααααΎαα‘αΎαααα AMI ααΌα ααααα αΎαααΆαααααααΆααα αααα»α AMI BIOS ααΆαα½ααααααΆαααΆαααΆαααα 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 processor ααααααααΎ Intel Boot Guard 1.x) ααΆααΆαα αααΆααα’αΆαααααααααΆαααααΆαααααα»αααΆαααααααααααααΎαααααΆααααααααααααΈαααααΆαααααα·ααΆαααααΆαααΌαααααΆαααΎ Intel SoCs αααααΆαααΎαααΆαααααααα ααΆαααααΆααααααΌαα§ααΆα αααα
- ααααα BIOS αα·α Intel ME (α¬ααΆ Intel TXE αααααΎαααααΆαααΆαααααααα Intel SoC) α₯α‘αΌααααααΊααΆααααα IFWI αα½αα
- αααααΈααΆ Intel BG ααααΌαααΆαααΎααα ααΎαααα·ααΆααααα αα ααΆααααααααααΌα ααΆ FIT, KEYM, IBBM αα·αααααΌαααΆαααααΎααα αααα»αα’αααα αα αΆααααααΊααα
- ααααααααΈααΎ TXE αα·α ISH cores (x86) ααααΌαααΈααΈ (ααααααα ARC ααααα·ααΈααα) ααααΌαααΆααααααααα chipset - PMC (Power Management Controller) αααααααΆααααΆαα½αααΆαααΆααΆααΌαααααα·ααααα·ααΆαααααααααααααααΆααα αα·αααΆααααα½ααα·αα·αααααααΎαααΆαα

ααααΉαααΆαααααααα IFWI ααααΈααΊααΆαααα»ααααααΌαα»αααΆααααααα
α’α»α αααα·α
ααααα
ααα·ααΆα
α¦α‘ αααα
SMIP
ααΆαααααααα
ααΆαααααααααααα·ααΆαα½αα
ααα½α α
α»αα αααααααΆαααα’αααααα
α¦α‘ αααα
RBEP
αααααααΌααααααα·ααΈαααααα Intel TXE, x86, α
α»αα αααααααΆααα Intel
α¦α‘ αααα
PMCP
αααααααΌααααααα·ααΈαααααα Intel PMC, ARC, α
α»αα αααααααΆααα Intel
α¦α‘ αααα
FTPR
αααααααΌααααααα·ααΈαααααα Intel TXE, x86, α
α»αα αααααααΆααα Intel
0007B000 ααααα
UCOD
ααΆαααααΎαα
αα
α»ααααααααΆαααΈααααΌααΌααααΈααΈααΌ α
α»αα αααααααΆααα Intel
α¦α‘ αααα
αααα»αα αα»α IBBP
UEFI BIOS, ααααΆααααΆα SEC/PEI, x86, α’ααααααααΆαα
α»αα αααααααΆ
α¦α‘ αααα
ISHC
αααααααΌααααααααα·ααΈαααααα Intel ISH, x86, α
α»αα αααααααΆαααα’αααααα
α¦α‘ αααα
α’α·αα’αα ααααΈααΈ
αααααααΌααααααα·ααΈαααααα Intel TXE, x86, α
α»αα αααααααΆααα Intel
α¦α‘ αααα
IUNP
ααΊαα·αααααΆαα
α¦α‘ αααα
OBBP
UEFI BIOS, ααααΆααααΆα DXE, x86, αα·αααΆαα
α»αα αααααααΆ
αααα»αα’αα‘α»ααααααααΆααα·ααΆααααααααα·ααΈαααααα TXE ααΆα αααΆααααΆαααααΆααααΈ RESET TXE αααααΆ processor αα αααα»αααααΆαααΆαααααα αΌααααααΆαααα αααΆαα·ααΆααΌαααααΆαααααα αα’αΆααααααΆααααααΆαα CPU (FIT, ACM, RESET vector ... )α ααΎαααΈααα TXE ααΆαααα·ααααααααααα αααα»α SRAM ααααααΆ αααααΆααααΈαααααΆαααααα’αααα½αααααΆαααααααα’αΆααααααΌαααΆαα αΌαααααΎαα ααΈααα α αΎα "αααα αα" ααΆααΈ RESET α
αα ααΎααΆαααΆαααΆααα rootkits
α₯α‘αΌααααααΌααααααα "αααα " α ααΎαααΆαααααΎαααΆαα ααΎααααααααααΆα αααΎα α’ααααααααΆ SPI flash ααΆααα·αααα·α αΌαααααΎαααααααα’αααα αα αΆα SPI flash ααΌα ααααα’αααααααΎααααΆααααΆααα’ααααα’αααα αα αΆααααα’αΆα ααααα αα·αα’αΆααααααααΆαα½αα ααΆαααααα ααααΆαααααΌαααα
αααααΆααααΈαα·αα·αααααΎαααΆαα½αα§αααααααααΎααααΆαα MEinfo (ααΈ Intel STK) ααΎαααΎαααΆααααααα·ααα ααΎααααααααααΆααααααα·αααααΌαααΆααα·ααα α ααα»ααΌα ααααα αΎα αααααααααααΈ (FPFs) ααααΌαααΆααα»ααααα»αααααΆαααΆααα·ααααααα ααΆα Intel BG αα·αααΎα α¬αα·ααα αααα»αααααΈααααααααα
ααΎααααα»ααα·ααΆαα’αααΈααααααααααΆαααααα (ααΆααααααΉα Intel BG αα·αα’αααΈαααααΉαααααΌαααΆααα·αααααΆαα αααααααααα αααα»αα’ααααα ααΎαααΉααα·ααΆαα’αααΈαααααααααααααΆαααΈααααΌααααΆαααααααα Haswell processor αα·ααααααααΆαααα)α
- ααα·ααα Gigabyte ααΆααα’αα;
- ααα·ααα MSI ααΆααα’αα;
- αααΌααααα»αααααΌααααα½ααα Lenovo α ααα½α 21 αααΌααα αα·ααααΌααααααΆαααΈααα Lenovo α ααα½α 4 α
ααΆααΆααα·αααΆαα ααΎαααΆαααΆαααΆαααααΈααΆαααααΎααα ααΆααα’ααααααααΆααααα ααααΌα ααΆαα ααΆαα Intel αααααα
ααΆαααααΎααααααααααααΆααααααΎααΆαααααΈ αααα»αα αα»α Lenovoαααααα½αααααΆαααααα αΆ αα·α .
ααΈααΆαα ααΆα αΆααααΌα ααΆααΆαα½αααααΆαααα½αααααααααΆαα’αααΈααΆαααΆαααααααα ααα»αααααα·αααΆαααααΎα’ααααΆαα·ααααΆαααΆααααααααΆαααΆαα½αα‘αΎαα
ααΆαααααΆαααααααΆααααααΆαα½α MSI ααΆαααΆααααΆααααΆαααααα»αααΆαααααΎααααααΎααααα»αααΆαααααΎαα PGP ααΆααΆαααααααααΎα (ααΎααααΈααααΎα±αααα½αααααΌαααααΌααααΆααα»ααααα·ααΆααααααΆαα’αα·αααααΈα)α αα½αααααΆααα·ααΆαααΆαα½ααα "ααΆα’αααααα·ααααααααΉα α αΎααα·αααα·αααΌααα PGP"α
ααα»ααααα αααΎαααααααα ααα»α α αααααΆαα ααα»αα ααααΈαααααΌαααΆααα»ααααα»αααααΆαααΆαααααα·αααΆαααααα α’αααααααΎααααΆαα (α¬α’αααααΆααααα αΆα) α’αΆα ααααααααααα·ααΈαα½αααΆααααααα½αα―α (αα·ααΆααααα»αααΊ ) ααααααααΌαα±ααααΆαααα αΆαααΌα ααΆααααααα
1. α αΆααααααΎαα αΌααα αααα»αααααααααααααα·ααααα·ααΆα Windows (ααΆααΌαα αααααααΆααααααΆααα·αααααΆααΆααααααα’αΆα ααααΎααΆαααΈααααα Linux(ααααα·αααΎα’ααααααααΎαα’αΆααΆα‘αΌα Intel STK αααααΆααααααααααααααα·ααααα·ααΆααααα ααααΆα)α αααααααΎα§αααααααααΎααααΆαα MEinfo ααΌαααααΆααααΆα ααα»ααααΈααα ααΎααααααααααααα·αααααΌαααΆαααααααααααα·ααΈααα

2. α’αΆαααΆαα·ααΆααα’αααα
αα
αΆααααααΊαααααααΎα§ααααααααααα·ααΈ Flash α

3. ααΎαααΌαααΆααααααΆαα’αΆααααααααΎα§αααααααααααα½α UEFI BIOS ααΆαα½α ααααΎααΆαααααΆααααααΌαα
αΆαααΆα
α (α’αα»αααααααα»α root ααΆα§ααΆα ααα) αααααΎα/ααααααα½ααα
ααΆαααααααα KEYM αα·α IBBM αααααΆαααααΆαααα
αααα»αααααα ME α


αααααααΆααΆαααααααααΆααα
α»α
RSA ααααΌαααΆαααααα
αα
αααα»αααΌαααΆα ααααααααΆααααααΆααΉαααααΌαααΆαααΆαααααααα·ααΈαα
αααα»α chipset fuses αα½αααΆαα½αααΉαααΆαααααααα
ααΆαααααααα Intel BG ααααα
αααα
4. αααααααΎα§αααααααΌαααΆα Flash αααααΎαααΌαααΆααααααα·ααΈααααααααααΈ (αααααΆαααααααα ααΆαααααααα Intel BG) α

5. αααααααΌαααΆαααααΈααΎααααΈαααα
αααααααΊαααααααΎα§ααααααααααα·ααΈ Flash αααααααααΆαααααααααΎ MEinfo ααΆααααα ME α₯α‘αΌααααααΆαααΆαααααααα
ααΆαααααααα Intel BG α

6. ααααΎα§αααααααααααααααα·ααΈ Flash ααΎααααΈαα·αααααααα·αα

7. ααααααααααΉαα
αΆααααααΎαα‘αΎααα·α αααααΆααααΈααααααααααΎ MEinfo α’αααα’αΆα
αααααααααΆααααΆ FPFs α₯α‘αΌααααααααΌαααΆααααααα·ααΈα αΎαα

αααααααΆαααΆααααα ααΆααααα αΌα ααΎαααααΎαααΆα Intel BG αα
ααΎαααααααααααα ααΆααΉααα·αα’αΆα
αα
αα½α
αααααα»αααΆααα»αα
αααααααααΆα αααααΆααααααΆα
- ααΆαβααβααα αΆααβαααααβα―αααβαα root key (α§. α’αααβαααβααΆαβααΎα Intel BG) ααΉαβα’αΆα βααααΎβαα αα α»ααααααααΆα UEFI BIOS αα βααΎβααααααααβαααα
- ααααα·αααΎα’ααααααα‘αααααααα·ααΈααααααααΎααα ααααααααααα α§ααΆα ααα αααααααΎα’αααααααααααααα·ααΈ ααΆααΉααα·αααΎααα (αααα·ααΆααααααααΆαααα’αα»αααααααα»αααααΈααΆαααα α»ααααααααααΆαα);
- ααΎααααΈαααα αΆαα UEFI BIOS αααααα α’αααααααΌααααα½ααααααααααααΈααΆαα½ααααααα·ααΈ FPFs αααααααΎ "ααα’αΆα" αα½α (α§. ααααααααααααααΈ ααααα·αααΎα’αααααΆααα·αααα·α αΌααα ααααΆααΈααααα’ααΈαα αααααΆαααααααα»ααααααα‘αΆα α¬ααααΆαααααααα½α motherboard ααα»αααααα )
ααΎααααΈαααααΈα’αααΈααα rootkit ααααααα’αΆα ααααΎααΆα α’αααααααΌαααΆααααααααΈα’αααΈαααααααΎα±ααααΆα’αΆα ααααα·ααααα·ααΌαααααα’ααααα αααα»αααα·ααααΆα UEFI BIOS α αα·ααΆαααΆαα αααα»ααααααααααΆααα·αααα·αααα»ααααα½αααααΆα - SMM α rootkit ααααααα’αΆα ααΆααααααααααααααα·ααΌα ααΆααααααα
- ααααΌαααΆαααααα·ααααα·ααααααΆαα½αααααααααααααα·ααααα·ααΆα (α’αααα’αΆα ααααααα ααΆααααααααααααΎαααΆαααααααααΎαααΆαααααΆα SMI αααααΉαααααΌαααΆαααααα‘αΎαααααααααα·ααΈααααααααα);
- ααΆααα»ααααααααα·ααΆααα’ααααααΆααααα·ααα αααα»ααααα SMM (ααΆαα αΌαααααΎαααΆααααααααα ααΆααααΆαα·ααΆαα RAM αα·αααααΆααααααααΉα ααΆααααααΆααααΈααααααααααααα·ααααα·ααΆα);
- ααΌα rootkit α’αΆα ααααΌαααΆαα’αα·αααααΈα αα·ααα·ααααΈα αα αααααΎαααααΎαααΆααααα»ααααα SMM α αα·ααααααααΆαα½ααααααΆααααα αααα»ααααα SMM ααα»αααααα’αΆα ααααΌαααΆαααααΎααΆααα’αα·αααααΈαα α§ααΆα ααα hash ααΈαααα»αααα’αΆααααααΆααα αααα»α SMRAM α ααΎααααΈααα½αααΆααααααΉαααα α’αααααΉαααααΌαα αΌααα ααΆαα SMMα α αΎααααα’αΆα ααααΌαααΆαααααΎααΆαααΈααα·ααΈα ααααααα RCE αα αααα»αααΌα SMM α αΎαααΆαααααΆ α¬αααααααααΌαα»α SMM ααααΆαααααα½αααααα’ααααα BIOS αααααΆαα·αα’αΆα αα αα½α ααα αΆααααΆααααΈααΎαααΆαααΎαααααΎαααΆα Boot Guard α
ααΌα αααα ααΆαααΆαααααααααααα’αα»ααααΆαα±ααα’αααααΆααααα αΆαα
- αααααΎααααα»α root ααααα·αα’αΆα ααα ααααΆααααααΆαααααααααααααα·αααααΆαααα αααα»αααααααααα
- ααααα·ααααα·ααΌαααααα’ααααα ααΎααααΌααααααααΈααα½ααα ααΆααααα»α Intel SoC αααααΊαα ααΎ Intel ISH (ααΌαααΎαααΌαααΆαα±ααααΆααααα αααΆαα)α


αααααΈααΆαααααααΆααααααααααααα Intel ISH αα·αααΆααααααΌαααΆαααααααΎαααααα ααΆα αΆααααΌα
ααΆααα·α
αααααΆααααα αΆααα½αα±ααα
αΆααα’αΆαααααααααααΆααααΉα Intel ME α
ααΆαααααΎα
- ααΆααα·ααααΆαααααΆααααααααΌαααΆααα·αααααΆαα αα αααααα’αααΈααααααααα αα αααα·ααααΆ Intel Boot Guard ααααΎαααΆαα ααα’αΆααααααΆααααΈαααΈαα αααα»ααα»ααααα·ααΆααααα Intel ααΆααααααααΌαα·αα αααΆααααΆααα
- ααααΆααΈαααΌααααΆαααΆααααα αΆαααααΌαααΆααααα αΆααααα’αα»ααααΆαα±αααααααΎααααα»α root ααααα·αα’αΆα ααα ααααΆααα αααα»αααααααααα
- ααΎαααΆαααΎαααΆααααααααααααΎαααΆα Intel ααααΎαα’αΆα ααααα·ααααα·ααΌααααααα·αααααΆα αααΎα ααΌααααΈαααα»αααα BIOS α αΆααααααΎααααααα
- αααα·ααΆαααααΆαααααΆαααααααα Intel 64 ααΆαααααα·α αα αααααααααααααααΆααααΆαααααΎαααΆααααααα·ααΈα₯ααα·αααααα ααΆααααααααααΆαααααααααΉα ααΆαααΎαα‘αΎαα ααα½ααααα αα αααα·ααααΆαααααα·αααα· αα·ααααααααααα (ααααΌαααΈαα αααα»ααααααααΈα SoC: x86 ME, x86 ISH αα·α ARC PMC) α
ααΆαααΆααααααα
α’αααααααααααΎαααααααα·ααααααααα ααααΆ αα½ααααα·αααΆα αα αΌαααααααααααα αα½αααααααΆαααααα·ααααααααα»ααααα α αΎαααααααααααΉα Kaby ααααΈαααα αΆαααΏααααα
α’αααααααΎααααΆααα’αΆα
αα·α Intel BG αα
ααΎαααααααααααααα½ααα (αααααααΌαααΆααααααΆαααααααΆαααΆαααααααααααααΆααα·αααααΆ) αααααααΎαααΆα Flash Programming Tool ααΆαα½αααΉααααααΎα -closemnfα ααΆααααΌα α’ααααα½αααααααΆααααΆ (αααααααΎ MEinfo) ααΆααΆαααααααα
ααΆαααααααααααα Intel BG αα
αααα»αααααα ME αααααααΌαααΆααα·ααα
αα
αααα·ααααΆααααααΆααα·αααααΆαααααααΆααααΈααΆαααααααααααα·ααΈαα
αααα»α FPFs α
ααααα: www.habr.com
