
äœã¬ãã«ã«äžããŠãx86äºæã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ã®ã»ãã¥ãªãã£ã«ã€ããŠè©±ãããšãå床ææ¡ããŸãã ä»åã調æ»ã®äž»ãªèŠçŽ ã¯ãIntel Boot GuardïŒIntel BIOS Guardãšæ··åããªãã§ãã ããïŒïŒãä¿¡é Œã§ããBIOSããŒãçšã®ããŒããŠã§ã¢ã§ãµããŒãããããã¯ãããžãŒã§ãããã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ãã³ããŒã¯çç£æ®µéã§æ°žç¶çã«ãªã³ãŸãã¯ãªãã«ã§ããŸãã ããŠãç§ãã¡ã¯ãã§ã«ç 究ã®ç§theãç¥ã£ãŠããŸãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã«ãã£ãŠãã®æè¡ã®å®è£ ãèãã«ãããããã®ã¢ãŒããã¯ãã£ãèšè¿°ããææžåãããŠããªã詳现ã§åããæ»æãã¯ãã«ã§å³ä»ãããŠæ··ãåãããŸãã é·å¹Žã«ããããããã€ãã®ãã³ããŒã®çç£ã«ãããã¯ããŒã³ã®ééãã«ãããæœåšçãªæ»æè ããã®ãã¯ãããžãŒã䜿çšããŠãã·ã¹ãã å ã§ïŒããã°ã©ããŒã§ããïŒåé€ã§ããªãé ãããã«ãŒãããããäœæã§ãããšãã話ã«ç«ãä»ããŸãããã
ã¡ãªã¿ã«ããã®èšäºã¯ZeroNights 2016äŒè°ãšDefCon Russiaã®ç¬¬29åäŒè°ã®ã¬ããŒããGuardian of rootkits ïŒIntel BootGuardãã«åºã¥ããŠããŸãïŒäž¡æ¹ã®ãã¬ãŒã³ããŒã·ã§ã³ã¯ãã¡ãã§ã ïŒã
Intel 64ã¢ãŒããã¯ãã£ãåããã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢
ãŸãã質åã«çããŸããããIntel64ã¢ãŒããã¯ãã£ãåããææ°ã®ã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ã¯äœã§ããïŒ ãã¡ãããUEFI BIOSã ãããããã®ãããªçãã¯æ£ç¢ºã§ã¯ãããŸããã ãã®ã¢ãŒããã¯ãã£ã®ãã¹ã¯ãããïŒã©ãããããïŒããŒãžã§ã³ã瀺ãå³é¢ãèŠãŠã¿ãŸãããã

åºç€ã¯ãããããããŸãïŒ
- ã¡ã€ã³ã³ã¢ã«å ããŠãã°ã©ãã£ãã¯ã³ã¢ïŒãã¹ãŠã®ã¢ãã«ã§ã¯ãªãïŒãšã¡ã¢ãªã³ã³ãããŒã©ãŒïŒIMCãçµ±åã¡ã¢ãªã³ã³ãããŒã©ãŒïŒãåããããã»ããµãŒïŒCPUãäžå€®åŠçè£ çœ®ïŒã
- ãããã»ããïŒPCHããã©ãããã©ãŒã ã³ã³ãããŒã©ãŒããïŒãåšèŸºæ©åšãšããåããããµãã·ã¹ãã ã管çããããã®ããŸããŸãªã³ã³ãããŒã©ãŒãå«ãŸããŠããŸãã ãã®äžã§ãæªåé«ãIntel Management EngineïŒMEïŒã¯ããã¡ãŒã ãŠã§ã¢ïŒIntel MEãã¡ãŒã ãŠã§ã¢ïŒãåããŠããŸãã
äžèšã«å ããŠãã©ãããããã«ã¯ãé»æºãµãã·ã¹ãã ãã¿ããããããããŒããŒããFnããŒïŒç»é¢ã®æãããé³éãããŒããŒãã®ããã¯ã©ã€ããªã©ïŒã®æäœãæ åœããçµ±åã³ã³ãããŒã©ãŒïŒACPI ECãé«åºŠãªå¶åŸ¡ããã³é»æºã€ã³ã¿ãŒãã§ã€ã¹çµã¿èŸŒã¿ã³ã³ãããŒã©ãŒïŒãå¿ èŠã§ãã ïŒãªã©ã ãŸãã圌ã¯èªåã®ãã¡ãŒã ãŠã§ã¢ãæã£ãŠããŸãã
ãããã£ãŠãäžèšã®ãã¡ãŒã ãŠã§ã¢ã®çµã¿åããã¯ãå ±æSPIãã©ãã·ã¥ã¡ã¢ãªã«æ ŒçŽãããŠããã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ïŒã·ã¹ãã ãã¡ãŒã ãŠã§ã¢ïŒã§ãã ãã®ã¡ã¢ãªã®ãŠãŒã¶ãŒãã©ãã«ããã®ãæ··ä¹±ããªãããã«ããã®ã¡ã¢ãªã®å 容ã¯æ¬¡ã®é åã«åå²ãããŸãïŒå³ãåç §ïŒã
- UEFI BIOS;
- ACPI ECãã¡ãŒã ãŠã§ã¢ïŒSkylakeããã»ããµãã€ã¯ãã¢ãŒããã¯ãã£ïŒ2015ïŒããå¥ã®é åãç»å ŽããŸããããå®éã®äœ¿çšäŸã¯ãŸã èŠãŠããŸããããã®ãããçµã¿èŸŒã¿ã³ã³ãããŒã©ãŒã®ãã¡ãŒã ãŠã§ã¢ã¯UEFI BIOSã®äžéšã§ãïŒã
- Intel MEãã¡ãŒã ãŠã§ã¢ã
- çµã¿èŸŒã¿GbEãããã¯ãŒã¯ã¢ããã¿ãŒïŒã®ã¬ãããã€ãŒãµãããïŒã®æ§æïŒMACã¢ãã¬ã¹ãªã©ïŒã
- ãã©ãã·ã¥èšè¿°åïŒãã©ãã·ã¥èšè¿°åïŒ-ãã©ãã·ã¥ã¡ã¢ãªã®ã¡ã€ã³é åãä»ã®é åãžã®ãã€ã³ã¿ãŒãšãããããžã®ã¢ã¯ã»ã¹èš±å¯ãå«ãŸããŸãã

é åãžã®ã¢ã¯ã»ã¹ã®å·®å¥åã¯ïŒæå®ãããèš±å¯ã«åŸã£ãŠïŒSPIãã¹ã¿ãŒãã¹ïŒãã®ã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã«äœ¿çšããããããã»ããã«çµã¿èŸŒãŸããSPIã³ã³ãããŒã©ãŒïŒã«ãã£ãŠåŠçãããŸãã IntelãïŒã»ãã¥ãªãã£äžã®çç±ã§ïŒæšå¥šå€ã«ã¢ã¯ã»ã¹èš±å¯ãèšå®ããŠããå ŽåãSPIãã©ãã·ã¥ã¡ã¢ãªã®åãŠãŒã¶ãŒã¯èªåã®å°åã®ã¿ã«ãã«ã¢ã¯ã»ã¹ïŒèªã¿åã/æžã蟌ã¿ïŒã§ããŸãã ãããŠãæ®ãã¯èªã¿åãå°çšãŸãã¯ã¢ã¯ã»ã¹äžèœã§ãã æ¢ç¥ã®äºå®ïŒå€ãã®ã·ã¹ãã ã§ã¯ãCPUã¯UEFI BIOSããã³GbEãžã®ãã«ã¢ã¯ã»ã¹ããã©ãã·ã¥èšè¿°åãžã®èªã¿åãã¢ã¯ã»ã¹ã®ã¿ãæã¡ãIntel MEé åãžã®ã¢ã¯ã»ã¹ã¯ãŸã£ãããããŸããã ãªãå€ãã¯ãããããŸã£ãããªãã®ãïŒ æšå¥šãããã®ã¯ãªãã·ã§ã³ã§ãã èšäºã§è©³ãã説æããŸãã
ã³ã³ãã¥ãŒã¿ãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ãå€æŽããä¿è·ããããã®ã¡ã«ããºã
æããã«ãã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ã¯ã䟵害ã®å¯èœæ§ããä¿è·ããå¿ èŠããããŸããããã«ãããæœåšçãªæ»æè ããã®ãã©ãããã©ãŒã ã«è¶³ãèžã¿å ¥ãïŒOSã®æŽæ°/åã€ã³ã¹ããŒã«ã«èããïŒãæãç¹æš©çãªã¢ãŒãã§ã³ãŒããå®è¡ã§ããããã«ãªããŸãã ãã¡ããããã©ãã·ã¥ã¡ã¢ãªã®SPIé åãžã®ã¢ã¯ã»ã¹ãå¶éããã ãã§ã¯ååã§ã¯ãããŸããã ãããã£ãŠããã¡ãŒã ãŠã§ã¢ãå€æŽããä¿è·ããããã«ãåå®è¡ç°å¢ã«åºæã®ããŸããŸãªã¡ã«ããºã ã䜿çšãããŸãã
ãã®ãããIntel MEãã¡ãŒã ãŠã§ã¢ã¯æŽåæ§ãšä¿¡é Œæ§ã®å¶åŸ¡ã®ããã«çœ²åãããME UMAã¡ã¢ãªã«ããŒãããããã³ã«MEã³ã³ãããŒã©ã«ãã£ãŠãã§ãã¯ãããŸãã ãã®æ€èšŒããã»ã¹ã¯ãIntel MEãµãã·ã¹ãã ã«é¢ããèšäºã® 1ã€ã§ãã§ã«æ€èšãããŠããŸãã
ååãšããŠãACPI ECãã¡ãŒã ãŠã§ã¢ã¯æŽåæ§ã®ã¿ããã§ãã¯ãããŸãã ãã ãããã®ãã€ããªã¯UEFI BIOSã«å«ãŸããŠãããšããäºå®ã«ãããã»ãšãã©ã®å ŽåUEFI BIOSã䜿çšããã®ãšåãä¿è·ã¡ã«ããºã ãé©çšãããŸãã ãããã«ã€ããŠã話ããŸãã
ãããã®ã¡ã«ããºã ã¯2ã€ã®ã«ããŽãªã«åé¡ã§ããŸãã
UEFI BIOSæžã蟌ã¿ä¿è·
- SPIãã©ãã·ã¥æžã蟌ã¿ä¿è·ãžã£ã³ããŒã®å 容ã®ç©ççä¿è·ã
- ãããã»ããã®PRxã¬ãžã¹ã¿ã䜿çšããCPUã®ã¢ãã¬ã¹ç©ºéã§ã®UEFI BIOSé åã®æ圱ã®ä¿è·ã
- ããããã³ã°ã¯ããããã»ããã¬ãžã¹ã¿ã®BIOS_WE / BLEããã³SMM_BWPããããèšå®ããŠã察å¿ããSMIå²ã蟌ã¿ãçæããã³åŠçããããšã«ãããUEFI BIOSãžã®æžã蟌ã¿ãè©Šã¿ãŸãã
- ãã®ä¿è·ã®ããé«åºŠãªããŒãžã§ã³ã¯ãIntel BIOS GuardïŒPFATïŒã§ãã
ãããã®ã¡ã«ããºã ã«å ããŠããã³ããŒã¯ç¬èªã®ã»ãã¥ãªãã£å¯Ÿçãéçºããã³é©çšã§ããŸãïŒããšãã°ãUEFI BIOSã¢ããããŒãã§ã«ãã»ã«ã«çœ²åããïŒã
ç¹å®ã®ã·ã¹ãã ïŒãã³ããŒã«ãã£ãŠç°ãªããŸãïŒã§ã¯ãäžèšã®ä¿è·ã¡ã«ããºã ã®ãã¹ãŠãé©çšãããããã§ã¯ãªãããŸã£ããé©çšãããªãå¯èœæ§ããããŸãããè匱ã«å®è£ ãããå¯èœæ§ãããããšã«æ³šæããŠãã ããã ãã®èšäºã§ã¯ããããã®ã¡ã«ããºã ãšãã®å®è£ ã®ç¶æ³ã«ã€ããŠè©³ãã説æããŠããŸãã èå³ã®ããæ¹ã¯ã CodeRush UEFI BIOSã»ãã¥ãªãã£èšäºã®å šã·ãªãŒãºãèªãããšããå§ãããŸãã
UEFI BIOSèªèšŒ
ä¿¡é Œã§ããããŒããã¯ãããžãŒã«ã€ããŠè©±ããšããæåã«é ã«æµ®ãã¶ã®ã¯ã»ãã¥ã¢ããŒãã§ãã ãã ããå€éšïŒUEFI BIOSã«é¢ããŠïŒã®ã³ã³ããŒãã³ãïŒãã©ã€ããŒãããŒãããŒããŒãªã©ïŒãèªèšŒããããã«èšèšãããŠããããã¡ãŒã ãŠã§ã¢èªäœã¯èªèšŒããŸããã
ãã®ãããBay Trailãã€ã¯ãã¢ãŒããã¯ãã£ïŒ2012ïŒãæèŒããSoCã®Intelã¯ãåè¿°ã®ã»ãã¥ã¢ããŒããã¯ãããžãšã¯é¢ä¿ã®ãªããããŒããŠã§ã¢ã®åæäžå¯èœãªã»ãã¥ã¢ããŒãïŒæ€èšŒæžã¿ããŒãïŒãå®è£ ããŸããã åŸã§ïŒ2013ïŒããã®ã¡ã«ããºã ã¯æ¹è¯ãããHaswellãã€ã¯ãã¢ãŒããã¯ãã£ãåãããã¹ã¯ãããåãIntel Boot Guardãšããååã§ãªãªãŒã¹ãããŸããã
Intel Boot Guardã«ã€ããŠèª¬æããåã«ãIntel 64ã©ã³ã¿ã€ã ãåãäžããŸãããããã¯ãçµã¿åãããŠããã®ä¿¡é Œã§ããããŒããã¯ãããžãŒã®ä¿¡é Œã®æ ¹ã§ãã
Intel CPU
Capã¯ãããã»ããµãIntel 64ã¢ãŒããã¯ãã£ã®ã¡ã€ã³ã©ã³ã¿ã€ã ã§ããããšã瀺åããŠããŸãã 次ã®èŠçŽ ãæã£ãŠãããšããã®ããã«ãªããŸãã
- ãã€ã¯ãã³ãŒãROM-ãã€ã¯ãã³ãŒããä¿åããããã®äžæ®çºæ§ãæžãæãäžå¯ã®ã¡ã¢ãªã ãã€ã¯ãã³ãŒãã¯ãæãåçŽãªåœä»€ã§ã®ããã»ããµåœä»€ã·ã¹ãã ã®å®è£ ã§ãããšèããããŠããŸãã ãã€ã¯ãã³ãŒãã«ããã°ãçºçããŸãã ãããã£ãŠãBIOSã§ã¯ããã€ã¯ãã³ãŒãã®æŽæ°ãå«ããã€ããªãèŠã€ããããšãã§ããŸãïŒROMã¯äžæžãã§ããªããããããŒãæã«ã¹ãŒããŒã€ã³ããŒãºãããŸãïŒã ãããã®ãã€ããªã®ã³ã³ãã³ãã¯æå·åãããåæãå€§å¹ ã«è€éã«ããŸãïŒãããã£ãŠããã€ã¯ãã³ãŒãã®ç¹å®ã®ã³ã³ãã³ãã¯éçºè ã ããç¥ã£ãŠããŸãïŒã眲åãããŠãæŽåæ§ãšä¿¡é Œæ§ãå¶åŸ¡ããŸãã
- ãã€ã¯ãã³ãŒãæŽæ°ã®å 容ã解èªããããã®AESããŒã
- ãã€ã¯ãã³ãŒãæŽæ°ã®çœ²åããã§ãã¯ããRSAå ¬éããŒããã·ã¥ã
- RSAå ¬éããŒããã·ã¥ãããã¯ãCPUãBIOSã®å®è¡ãéå§ããåïŒhiãã€ã¯ãã³ãŒãïŒãŸãã¯äœããã®ã€ãã³ããçºçããå Žåã®æäœäžã«å®è¡ã§ããIntelãéçºããACMïŒèªèšŒã³ãŒãã¢ãžã¥ãŒã«ïŒã³ãŒãã¢ãžã¥ãŒã«ã®çœ²åããã§ãã¯ããŸãã
Intel ME
ãã®ãµãã·ã¹ãã ã«ã€ããŠã¯ãããã°ã§2ã€ã®ããã°èšäºãåãäžããããŸããã ãã®å®è¡å¯èœç°å¢ã¯ããããã»ããã«çµã¿èŸŒãŸãããã€ã¯ãã³ã³ãããŒã©ãŒã«åºã¥ããŠãããã·ã¹ãã å ã§æãé ãããŠããç¹æš©ãããããšãæãåºããŠãã ããã
æ©å¯æ§ã«ãããããããIntel MEã¯æ¬¡ã®ãããªçç±ããä¿¡é Œã®æ ¹æºã§ããããŸãã
- ME ROM-ã€ã³ãã«MEãã¡ãŒã ãŠã§ã¢ã®çœ²åããã§ãã¯ããRSAå ¬éããŒã®SHA256ããã·ã¥ãšåæ§ã«ãéå§ã³ãŒããå«ãäžæ®çºæ§ãæžãæãäžå¯èœãªã¡ã¢ãªïŒæŽæ°æ¹æ³ã¯æäŸãããŸããïŒã
- æ©å¯æ å ±ãä¿åããAESããŒã
- ãããã»ããã«çµ±åããããã¥ãŒãºã»ããïŒFPFããã£ãŒã«ãããã°ã©ããã«ãã¥ãŒãºïŒã«ã¢ã¯ã»ã¹ããŠãã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ã®ãã³ããŒãæå®ãããã®ãå«ãããã€ãã®æ å ±ãæ°žç¶çã«ä¿åããŸãã
Intel Boot Guard 1.x
å°ããªå 責äºé ã ãã®èšäºã§äœ¿çšããŠããã€ã³ãã«ããŒãã¬ãŒããã¯ãããžãŒã®ããŒãžã§ã³çªå·ã¯æ¡ä»¶ä»ãã§ãããã€ã³ãã«ã®å éšããã¥ã¡ã³ãã§äœ¿çšãããŠããçªå·ä»ããšã¯ç¡é¢ä¿ãããããŸããã ãŸããããã§çŽ¹ä»ãããã®ãã¯ãããžã®å®è£ ã«é¢ããæ å ±ã¯ãªããŒã¹ãšã³ãžãã¢ãªã³ã°äžã«ååŸããããã®ã§ãããIntelããŒãã¬ãŒãã®ä»æ§ãšæ¯èŒãããšäžæ£ç¢ºãªå ŽåããããŸãã
ãã®ãããIntel Boot GuardïŒBGïŒã¯ãããŒããŠã§ã¢ã§ãµããŒããããUEFI BIOSèªèšŒãã¯ãããžãŒã§ãã æ¬[Platform Embedded Security Technology Revealed]ãIntegrityã䜿çšããããŒãããŸãã¯ããŒããªãã®ç« ã®åœŒå¥³ã®çã説æããå€æãããšãä¿¡é Œã§ããããŒããã§ãŒã³ãšããŠæ©èœããŸãã ãããŠãæåã®ãªã³ã¯ã¯CPUå ã®ããŒãã³ãŒãïŒãã€ã¯ãã³ãŒãïŒã§ããããã¯ãRESETã€ãã³ãã«ãã£ãŠããªã¬ãŒãããŸãïŒBIOSã®RESETãã¯ãã«ãšæ··åããªãã§ãã ããïŒïŒã CPUã¯SPIãã©ãã·ã¥ã¡ã¢ãªã§ãIntelãéçºããã³çœ²åããã³ãŒãã¢ãžã¥ãŒã«ïŒIntel BGã¹ã¿ãŒãã¢ããACMïŒãèŠã€ããŠãã£ãã·ã¥ã«ããŒãããæ€èšŒããŸãïŒCPUã«ã¯ACM眲åãæ€èšŒããå ¬éããŒããã·ã¥ãããããšãæ¢ã«ç¢ºèªãããŠããŸãïŒã

ãã®ã³ãŒãã¢ãžã¥ãŒã«ã¯ãUEFI BIOSã®å°ããªéå§éšå-åæããŒããããã¯ïŒIBBïŒã®æ€èšŒãæ åœããŸããããã«ã¯ãUEFI BIOSã®äž»èŠéšåãæ€èšŒããæ©èœãå«ãŸããŸãã ãããã£ãŠãIntel BGã§ã¯ãOSãèµ·åããåã«BIOSã®ä¿¡é Œæ§ãæ€èšŒã§ããŸãïŒã»ãã¥ã¢ããŒããã¯ãããžãŒã®ç£èŠäžã§å®è¡ã§ããŸãïŒã
Intel BGãã¯ãããžãŒã¯ã2ã€ã®åäœã¢ãŒããæäŸããŸãïŒããã«ãäžæ¹ãä»æ¹ã«å¹²æžããŸãããã€ãŸããã·ã¹ãã ã§äž¡æ¹ã®ã¢ãŒããæå¹ã«ããããäž¡æ¹ããªãã«ãããã§ããŸãïŒã
枬å®ãããããŒã
枬å®ããŒãïŒMBïŒã¢ãŒãã§ã¯ãåããŒãå¯èœã³ã³ããŒãã³ãïŒCPUããŒãROMããéå§ïŒã¯ãTPMïŒTrusted Platform ModuleïŒã®æ©èœã䜿çšããŠæ¬¡ã®ã³ã³ããŒãã³ããã枬å®ãããŸãã ææ°ã§ã¯ãªã人ã®ããã«ãç§ãã¡ã¯èª¬æããŸãã
TPMã«ã¯PCRïŒãã©ãããã©ãŒã æ§æã¬ãžã¹ã¿ïŒããããããã·ã¥æŒç®ã®çµæã¯æ¬¡ã®åŒã«åŸã£ãŠæžã蟌ãŸããŸãã
ã€ãŸã çŸåšã®PCRå€ã¯åã®å€ã«äŸåããŸããããããã®ã¬ãžã¹ã¿ã¯RESETã·ã¹ãã ã§ã®ã¿ãŒãã«ãªã»ãããããŸãã
ãããã£ãŠãMBã¢ãŒãã§ã¯ãããæç¹ã§ãPCRã¯ã枬å®ããããã³ãŒããŸãã¯ããŒã¿ã®äžæã®ïŒããã·ã¥æäœã®å¶éå ã§ã®ïŒèå¥åãåæ ããŸãã PCRå€ã¯ãäžéšã®ããŒã¿ã®æå·åæäœã§äœ¿çšã§ããŸãïŒTPM_SealïŒã ãã®åŸãèªã¿èŸŒã¿ã®çµæãšããŠPCRå€ãå€æŽãããŠããªãå ŽåïŒã€ãŸããã枬å®ããããã³ã³ããŒãã³ããå€æŽãããŠããªãå ŽåïŒã®ã¿ã埩å·åïŒTPM_UnsealïŒãå¯èœã«ãªããŸãã
æ€èšŒæžã¿ããŒã
UEFI BIOSãå€æŽããã人ã«ãšã£ãŠææªãªã®ã¯ãæ€èšŒæžã¿ããŒãïŒVBïŒã¢ãŒãã§ãããã®ã¢ãŒãã§ã¯ãåããŒãã³ã³ããŒãã³ãã次ã®æŽåæ§ãšä¿¡é Œæ§ãæå·ã§ç¢ºèªããŸãã æ€èšŒãšã©ãŒã®å Žåã次ã®ãããããçºçããŸãã
- 1åãã30åãŸã§ã®ã¿ã€ã ã¢ãŠãã«ããã·ã£ããããŠã³ïŒãŠãŒã¶ãŒãã³ã³ãã¥ãŒã¿ãŒãèªã¿èŸŒãŸããŠããªãçç±ãç解ããå¯èœã§ããã°BIOSã埩å ããããšããæéã確ä¿ããããïŒ;
- å³æã®ã·ã£ããããŠã³ïŒãŠãŒã¶ãŒãç解ããæéããªãããã«ãããã«ã¯ããããããïŒ;
- ãŸã£ãããªé¡ã§äœæ¥ãç¶ããŸãïŒããéèŠãªããšãããããå®å šã§ãªãå ŽåïŒã
ã¢ã¯ã·ã§ã³ã®éžæã¯ãæ§ææžã¿ã®Intel BGæ§æïŒã€ãŸããããããæœè¡ããªã·ãŒïŒã«äŸåããŸããããã¯ãã³ã³ãã¥ãŒã¿ãŒãã©ãããã©ãŒã ã®ãã³ããŒãç¹å¥ã«èšèšãããã¹ãã¬ãŒãž-ãããã»ãããã¥ãŒãºïŒFPFïŒã«æ°žç¶çã«æžã蟌ã¿ãŸãã ãã®ç¹ã«ã€ããŠã¯ãåŸã§è©³ãã説æããŸãã
æ§æã«å ããŠããã³ããŒã¯2ã€ã®RSA 2048ããŒãçæãã2ã€ã®ããŒã¿æ§é ãäœæããŸãïŒå³ãåç §ïŒã
- ãã³ããŒã«ãŒãããŒãããã§ã¹ãïŒKEYMãOEMã«ãŒãããŒãããã§ã¹ãïŒããã®ãããã§ã¹ãã®ã»ãã¥ãªãã£ããŒãžã§ã³çªå·ïŒSVNïŒã次ã®ãããã§ã¹ãã®å ¬éããŒã®SHA256ããã·ã¥ãRSAå ¬éããŒïŒãã³ããŒã«ãŒãããŒã®å ¬ééšåïŒãå ¥ããŠããã®çœ²åãæ€èšŒããŸããããã§ã¹ããšçœ²åèªäœ;
- IBBãããã§ã¹ãïŒIBBMãåæããŒããããã¯ãããã§ã¹ãïŒããã®ãããã§ã¹ãã®SVNãSHA256 IBBããã·ã¥ããã®ãããã§ã¹ãã®çœ²åãæ€èšŒããå ¬éããŒãããã³çœ²åèªäœãé 眮ããŸãã
OEMã«ãŒãããŒã®SHA256å ¬éããŒããã·ã¥ã¯ãIntel BGæ§æãšåæ§ã«ããããã»ãããã¥ãŒãºïŒFPFïŒã«æ°žç¶çã«èšé²ãããŸãã Intel BGæ§æã«ãã®ãã¯ãããžãŒãå«ãŸããŠããå Žåãã·ã¹ãã äžã®ãã®æç¹ããBIOSãæŽæ°ããïŒã€ãŸãããããã®ãããã§ã¹ããåã«ãŠã³ãã§ããïŒããšãã§ããã®ã¯ãOEMã«ãŒãããŒã®ãã©ã€ããŒãéšåã®ææè ã®ã¿ã§ãã ãã³ããŒã

åçãèŠããšããã®ãããªé·ãæ€èšŒãã§ãŒã³ã®å¿ èŠæ§ã«ã€ããŠããã«ç念ãçããŸãã1ã€ã®ãããã§ã¹ãã䜿çšããããšãå¯èœã§ããã ãªããããè€éã«ããŸããïŒ
å®éãã€ã³ãã«ã¯ãã³ããŒã«ãç°ãªã補åã©ã€ã³ãšã«ãŒããšããŠç°ãªãIBBããŒã䜿çšããæ©äŒãæäŸããŠããŸãã IBBããŒã®ç§å¯éšåããªãŒã¯ããããšïŒ2çªç®ã®ãããã§ã¹ãã眲åãããïŒãã€ã³ã·ãã³ãã¯1ã€ã®è£œåã©ã€ã³ã®ã¿ã«åœ±é¿ãããã³ããŒãæ°ãããã¢ãçæãã次ã®BIOSã¢ããããŒãã§åã«ãŠã³ãããããããã§ã¹ããå«ãããŸã§ã®ã¿ã§ãã
ãã ããã«ãŒãããŒïŒæåã®ãããã§ã¹ãã眲åãããïŒã䟵害ãããå Žåã眮ãæããããšã¯ã§ããŸããã倱å¹æé ã¯æäŸãããŸããã ãã®ããŒã®å ¬ééšåã®ããã·ã¥ã¯ãFPFã§äžåºŠã ãããã°ã©ã ãããŸãã
IntelããŒãã¬ãŒãã®æ§æ
次ã«ãIntel BGã®æ§æãšãã®äœæããã»ã¹ã«ã€ããŠèª¬æããŸãã Intel System Tool KitïŒSTKïŒã®Flash Image ToolãŠãŒãã£ãªãã£ã®GUIã§å¯Ÿå¿ããã¿ããèŠããšãIntel BGæ§æã«ã¯ãã³ããŒã®ã«ãŒãããŒã®å ¬ééšåã®ããã·ã¥ãããã€ãã®ãããŸããªå€ãªã©ãå«ãŸããŠããããšãããããŸãã 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ãã©ã°ãæ€èšããŠãã ããã åé€ãããšãã«ãSPIãã©ãã·ã¥ã¡ã¢ãªäžã®BGã¹ã¿ãŒãã¢ããACMã¢ãžã¥ãŒã«ãèŠã€ãããªãå Žåãä¿¡é Œã§ããããŒãã¯ãããŸããã ä¿¡é ŒãããŸããã
åè¿°ã®ãšããã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çç£æœèšã®å€éšã§ããã°ã©ã ã§ããŸãïŒãããã£ãŠã ãã£ãŒã«ãããã°ã©ããã«ãã¥ãŒãºã§ãïŒã
次ã®çç±ã«ãããæ§æã®ä¿åã«æé©ã§ãã
- ããŒã¿ãæ ŒçŽããããã®1åéãã®ããã°ã©ã å¯èœãªé åããããŸãïŒIntel BGæ§æãæžã蟌ãŸããå ŽæïŒã
- Intel MEã®ã¿ããããèªã¿åããããã°ã©ã ã§ããŸãã
ãã®ãããç¹å®ã®ã·ã¹ãã ã§Intel BGãã¯ãããžãŒãæ§æããããã«ããã³ããŒã¯çç£äžã«æ¬¡ã®ããšãè¡ããŸãã
- Flash Image ToolïŒIntel STKããïŒã䜿çšããŠãIntel MEãªãŒãžã§ã³ïŒFPFã®ããããäžæãã©ãŒïŒå ã®å€æ°ã®åœ¢ã§Intel BGã®æå®ãããæ§æã§ãã¡ãŒã ãŠã§ã¢ã€ã¡ãŒãžãäœæããŸãã
- ãã©ãã·ã¥ããã°ã©ãã³ã°ããŒã«ïŒIntel STK補ïŒã䜿çšããŠããã®ã€ã¡ãŒãžãã·ã¹ãã ã®SPIãã©ãã·ã¥ã¡ã¢ãªã«æžã蟌ã¿ããããã 補é ã¢ãŒãïŒãã®å Žåã察å¿ããã³ãã³ãã¯Intel MEã«éä¿¡ãããŸãïŒã
ãããã®æäœã®çµæãšããŠãIntel MEã¯MEãªãŒãžã§ã³ã®FPFã®ãã©ãŒããæå®ãããå€ã«FPFãã³ãããããSPIãã©ãã·ã¥èšè¿°åã®æš©éãIntelãæšå¥šããå€ã«èšå®ãïŒèšäºã®åé ã§èª¬æïŒãRESETã·ã¹ãã ãå®è¡ããŸãã
ã€ã³ãã«ããŒãã¬ãŒãã®å®è£ åæ
ç¹å®ã®äŸã䜿çšããŠãã®ãã¯ãããžãŒã®å®è£ ãåæããããã«ãã€ã³ãã«BGãã¯ãããžãŒã®å åã«ã€ããŠæ¬¡ã®ã·ã¹ãã ããã§ãã¯ããŸããã
ã·ã¹ãã | ã泚æ |
---|---|
ã®ã¬ãã€ãGA-H170-D3H | SkylakeããµããŒãããããŸã |
ã®ã¬ãã€ãGA-Q170-D3H | SkylakeããµããŒãããããŸã |
ã®ã¬ãã€ãGA-B150-HD3 | SkylakeããµããŒãããããŸã |
MSI H170A Gaming Pro | SkylakeããµããŒããªã |
Lenovo ThinkPad 460 | SkylakeããµããŒãããããæè¡ãå«ãŸããŠããŸã |
Lenovo Yoga 2 Pro | ãã¹ãŠã§ã«ããµããŒããªã |
ã¬ããU330p | ãã¹ãŠã§ã«ããµããŒããªã |
ããµããŒãããšã¯ãIntel BGã¹ã¿ãŒãã¢ããACMã¢ãžã¥ãŒã«ãäžèšã®ãããã§ã¹ããããã³BIOSå ã®å¯Ÿå¿ããã³ãŒãã®ååšãæå³ããŸãã åæã®ããã®å®è£ ã
äŸãšããŠãããŠã³ããŒãå ãã芧ãã ããã ã®ã¬ãã€ãGA-H170-D3HïŒããŒãžã§ã³F4ïŒçšã®ãã³ããŒãµã€ãã€ã¡ãŒãžSPIãã©ãã·ã¥ã¡ã¢ãªã
Intel CPUããŒã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-vectorïŒ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 };
ãšã³ããªã®1ã€ãIntel BGã¹ã¿ãŒãã¢ããACM binarã®å ŽæãæããŠããããšã¯æããã§ãã ãã®binarã®ããããŒæ§é ã¯ãIntelãéçºããã³ãŒãã¢ãžã¥ãŒã«ïŒACMããã€ã¯ãã³ãŒãã®æŽæ°ãIntel MEã³ãŒãã»ã¯ã·ã§ã³ãªã©ïŒã«å žåçã§ãã
typedef struct BG_ACM_HEADER { unsigned short ModuleType; // 2 unsigned short ModuleSubType; // 3 unsigned long HeaderLength; // in dwords unsigned long : 32; unsigned long : 32; unsigned long ModuleVendor; // 8086h unsigned long Date; // in BCD format unsigned long TotalSize; // in dwords unsigned long unknown1[6]; unsigned long EntryPoint; unsigned long unknown2[16]; unsigned long RsaKeySize; // in dwords unsigned long ScratchSize; // in dwords unsigned char RsaPubMod[256]; unsigned long RsaPubExp; unsigned char RsaSig[256]; };
ããã»ããµã¯ãã®ãã€ããªããã£ãã·ã¥ã«ããŒãããæ€èšŒããŠèµ·åããŸãã
Intel BGã¹ã¿ãŒãã¢ããACM
ãã®ACMã®åäœãåæããçµæã次ã®ããšãè¡ã£ãŠããããšãæããã«ãªããŸããã
- Intel MEãããããã»ãããã¥ãŒãºïŒFPFïŒã«èšé²ãããIntel BGã®æ§æãåãåããŸãã
- KEYMããã³IBBMãããã§ã¹ããèŠã€ããããããæ€èšŒããŸãã
ãããã®ãããã§ã¹ããèŠã€ããããã«ãACMã¯FITããŒãã«ã䜿çšããŸãããã®ããŒãã«ã§ã¯ã2çš®é¡ã®ã¬ã³ãŒããå²ãåœãŠãããŠæ§é ããŒã¿ã瀺ããŸãïŒäžèšã®FIT_ENTRY_TYPESãåç §ïŒã
ãããã§ã¹ãã«ã€ããŠèª¬æããŸãããã æåã®ãããã§ã¹ãã®æ§é ã«ã¯ãããã€ãã®ãããŸããªå®æ°ã2çªç®ã®ãããã§ã¹ãããã®å ¬éããŒã®ããã·ã¥ãããã³ãã¹ããããæ§é ã®åœ¢åŒã®çœ²åãæã€å ¬éOEMã«ãŒãããŒããããŸãã
typedef struct KEY_MANIFEST { char Tag[8]; // '__KEYM__' unsigned char : 8; // 10h unsigned char : 8; // 10h unsigned char : 8; // 0 unsigned char : 8; // 1 unsigned short : 16; // 0Bh unsigned short : 16; // 20h == hash size? unsigned char IbbmKeyHash[32]; // SHA256 of an IBBM public key BG_RSA_ENTRY OemRootKey; }; typedef struct BG_RSA_ENTRY { unsigned char : 8; // 10h unsigned short : 16; // 1 unsigned char : 8; // 10h unsigned short RsaPubKeySize; // 800h unsigned long RsaPubExp; unsigned char RsaPubKey[256]; unsigned short : 16; // 14 unsigned char : 8; // 10h unsigned short RsaSigSize; // 800h unsigned short : 16; // 0Bh unsigned char RsaSig[256]; };
OEMã«ãŒãããŒã®å ¬éããŒã確èªããã«ã¯ããã®æç¹ã§Intel MEããæ¢ã«åä¿¡ããŠããSHA256ãã¥ãŒãºããã·ã¥ã䜿çšããŸãã
2çªç®ã®ãããã§ã¹ãã«é²ã¿ãŸãããã 次ã®3ã€ã®æ§é ã§æ§æãããŸãã
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 };
2çªç®ã¯ã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ãã§ãŒãºã¢ãžã¥ãŒã«ã®çµã¿åããã§ãã
2çªç®ã®ãããã§ã¹ãã¯ãIBBå ¬éããŒïŒæåã®ãããã§ã¹ãããã®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ãã³ããŒïŒãŸãã¯ã·ã¹ãã ãã³ããŒèªèº«ã«ãã£ãŠéçºãããŠããŸãã ãªããªã ã¬ãããšã®ã¬ãã€ãã®ã·ã¹ãã ã®ã¿ãèªç±ã«äœ¿çšã§ããIntel BGããµããŒãããŠããå Žåã®ã¿ããããã®ã·ã¹ãã ããæœåºãããã³ãŒããæ€èšããŠãã ããã
UEFI BIOSã¢ãžã¥ãŒã«LenovoVerifiedBootPei
Lenovoã®å Žåãããã¯LenovoãéçºããLenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}ã¢ãžã¥ãŒã«ã§ããããšãå€æããŸããã
圌ã®ä»äºã¯ãDXEã®ããã·ã¥ããŒãã«ãïŒGUIDã§ïŒæ€çŽ¢ããDXEãæ€èšŒããããšã§ãã
if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME) { if (!FindHashTable()) return EFI_NOT_FOUND; if (!VerifyDxe()) return EFI_SECURITY_VIOLATION; }
ããã·ã¥ããŒãã«{389CC6F2-1EA8-467B-AB8A-78E769AE2A15}ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
typedef struct HASH_TABLE { char Tag[8]; // '$HASHTBL' unsigned long NumDxeDescriptors; DXE_DESCRIPTORS[]; };
typedef struct DXE_DESCRIPTOR { unsigned char BlockHash[32]; // SHA256 unsigned long Offset; unsigned long Size; };
UEFI BIOSã¢ãžã¥ãŒã«BootGuardPei
Gigabyteã®å ŽåãAMIã«ãã£ãŠéçºãããBootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}ã¢ãžã¥ãŒã«ã§ããããšãå€æãããããIntel BGããµããŒãããAMI BIOSã«ååšããŸãã
æäœã¢ã«ãŽãªãºã ã¯å€å°ç°ãªããŸãããåããã®ã«ãªããŸãã
int bootMode = EFI_PEI_SERVICES->GetBootMode(); if (bootMode != BOOT_ON_S3_RESUME && bootMode != BOOT_ON_FLASH_UPDATE && bootMode != BOOT_IN_RECOVERY_MODE) { HOB* h = CreateHob(); if (!FindHashTable()) return EFI_NOT_FOUND; WriteHob(&h, VerifyDxe()); return h; }
æ¢ããŠããããã·ã¥ããŒãã«{389CC6F2-1EA8-467B-AB8A-78E769AE2A15}ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
typedef HASH_TABLE DXE_DESCRIPTORS[]; typedef struct DXE_DESCRIPTOR { unsigned char BlockHash[32]; // SHA256 unsigned long BaseAddress; unsigned long Size; };
Intel Boot Guard 2.x
Apollo Lakeãã€ã¯ãã¢ãŒããã¯ãã£ãåããIntel SoCããŒã¹ã®æ°ããã·ã¹ãã ã§ããASRock J4205-ITã§èŠã€ãã£ãIntel Boot Guardã®ãã1ã€ã®å®è£ ã«ã€ããŠç°¡åã«èª¬æããŸãã
ãã®ããŒãžã§ã³ã¯SoCã§ã®ã¿äœ¿çšãããŸããïŒKaby Lakeããã»ããµã®ãã€ã¯ãã¢ãŒããã¯ãã£ãåããæ°ããã·ã¹ãã ã¯åŒãç¶ãIntel Boot Guard 1.xã䜿çšããŸãïŒãIntel SoCäžã®ãã©ãããã©ãŒã åãã«æ°ããããŒãžã§ã³ã®ã¢ãŒããã¯ãã£ãæ€èšããããšã¯å€§ããªé¢å¿äºã§ãã ïŒ
- BIOSããã³Intel MEãªãŒãžã§ã³ïŒãŸãã¯Intel SoCã®çšèªã«ãããšIntel TXEïŒã¯ã1ã€ã®IFWIãªãŒãžã§ã³ã«ãªããŸããã
- ãã©ãããã©ãŒã ã§Intel BGãæå¹ã«ãªã£ãŠããŠããFITãKEYMãIBBMãªã©ã®æ§é ã¯ãã©ãã·ã¥ã¡ã¢ãªã§èŠã€ãããŸããã§ããã
- TXEããã³ISHã³ã¢ïŒx86ïŒã«å ããŠã3çªç®ã®ã³ã¢ããããã»ããã«è¿œå ãããŸããïŒãããARCã§ãïŒ-PMCïŒé»æºç®¡çã³ã³ãããŒã©ãŒïŒãé»æºãµãã·ã¹ãã ã®ããã©ãŒãã³ã¹ã®ç¢ºä¿ãšããã©ãŒãã³ã¹ã®ç£èŠã«é¢é£ããŠããŸãã

æ°ããIFWIãªãŒãžã§ã³ã®ã³ã³ãã³ãã¯ã次ã®ã¢ãžã¥ãŒã«ã®ã³ã¬ã¯ã·ã§ã³ã§ãã
ãªãã»ãã | å | 説æ |
---|---|---|
0000 2000h | SMIP | ãã³ããŒã«ãã£ãŠçœ²åããããã©ãããã©ãŒã æ§æ |
0000 6000h | RBEP | Intelã眲åããIntel TXEãã¡ãŒã ãŠã§ã¢ã³ãŒãã»ã¯ã·ã§ã³ãx86 |
0001 0000h | PMCP | Intelã«ãã£ãŠçœ²åãããIntel PMCãã¡ãŒã ãŠã§ã¢ã³ãŒãã»ã¯ã·ã§ã³ãARC |
0002 0000h | FTPR | Intelã眲åããIntel TXEãã¡ãŒã ãŠã§ã¢ã³ãŒãã»ã¯ã·ã§ã³ãx86 |
0007 B000h | UCOD | Intelã«ãã£ãŠçœ²åãããCPUã®ãã¡ãŒã ãŠã§ã¢ã¢ããããŒã |
0008 0000h | IBBP | UEFI BIOSãSEC / PEIãã§ãŒãºãx86ããã³ããŒã«ãã眲å |
0021 8000h | ISHC | ãã³ããŒã«ãã£ãŠçœ²åãããIntel ISHãã¡ãŒã ãŠã§ã¢ã³ãŒãã»ã¯ã·ã§ã³ãx86 |
0025 8000h | NFTP | Intelã眲åããIntel TXEãã¡ãŒã ãŠã§ã¢ã³ãŒãã»ã¯ã·ã§ã³ãx86 |
0036 1000æé | IUNP | äžæã§ã |
0038 1000æé | Obbp | UEFI BIOSãDXEãã§ãŒãºãx86ã眲åãªã |
TXEãã¡ãŒã ãŠã§ã¢ã®åæäžã«ãRESETã®åŸãTXEã¯CPUã®ã¢ãã¬ã¹ã¹ããŒã¹ã®åºæ¬çãªå 容ïŒFITãACMãRESETãã¯ã¿ãŒãªã©ïŒãæºåãããŸã§ãããã»ããµããã®ç¶æ ã«ä¿ã€ããšãæããã«ãªããŸããã ããã«ãTXEã¯ãã®ããŒã¿ãSRAMã«é 眮ããåŸãäžæçã«ããã»ããµã«ã¢ã¯ã»ã¹ãèš±å¯ããRESETããã解æŸãããŸãã
ã«ãŒããããã¬ãŒã
ããŠããããã«ç§»ããŸãããã SPIãã©ãã·ã¥èšè¿°åã®å€ãã®ã·ã¹ãã ã§ã¯ãSPIãã©ãã·ã¥ã¡ã¢ãªã®ãã¹ãŠã®ãŠãŒã¶ãŒãä»»æã®é åãèªã¿æžãã§ããããã«ãSPIãã©ãã·ã¥ã¡ã¢ãªã®é åã«ã¢ã¯ã»ã¹ããæš©éãæžã蟌ãŸããŠããããšãããããŸããã ã€ãŸã ãŸããã
ïŒIntel STKã®ïŒMEinfoãŠãŒãã£ãªãã£ã§ç¢ºèªãããšããããããã®ã·ã¹ãã ã®è£œé ã¢ãŒããéããããŠããªãããšãããããŸããããããã£ãŠããããã»ãããã¥ãŒãºïŒFPFïŒã¯æªå®çŸ©ã®ç¶æ ã®ãŸãŸã«ãªããŸããã ã¯ããIntel BGã¯ãã®ãããªå Žåã«ãªã³ã«ããªãã«ããªããŸããã
次ã®ã·ã¹ãã ã«ã€ããŠè©±ããŸãïŒIntel BGããã³èšäºã§åŸè¿°ãããã®ã«ã€ããŠã¯ãHaswellããã»ããµãã€ã¯ãã¢ãŒããã¯ãã£ä»¥äžã®ã·ã¹ãã ã«ã€ããŠè©±ããŸãïŒã
- ãã¹ãŠã®ã®ã¬ãã€ã補åã
- ãã¹ãŠã®MSI補å
- 21ã®Lenovoã©ãããããã¢ãã«ãš4ã€ã®LenovoãµãŒãââãŒã¢ãã«ã
ãã¡ããããããã®ãã³ããŒãšIntelã«çºèŠãå ±åããŸããã
é©åãªå¿çã¯ãåé¡ãèªèãããããããªãªãŒã¹ãã ã¬ããããã®ã¿æ¥ãŸããã
Gigabyteã¯ãã®è匱æ§ã«é¢ããæ å ±ãåãå ¥ããããã§ãããããã«ã€ããŠã¯ãŸã£ããã³ã¡ã³ãããŠããŸããã
ïŒæå·åãããã»ãã¥ãªãã£ã¢ããã€ã¶ãªãéä¿¡ããããã«ïŒ MSIãšã®éä¿¡ã¯ãå ¬éPGPããŒãéä¿¡ãããšãããªã¯ãšã¹ãã«ããå®å šã«åæ¢ããŸããã 圌ãã¯ã圌ãã¯æ©åšã®ã¡ãŒã«ãŒã§ãããPGPéµã¯çç£ããªãããšè¿°ã¹ãã
ãããããã€ã³ãã«è¿ãã ãã¥ãŒãºã¯æªå®çŸ©ã®ç¶æ ã®ãŸãŸãªã®ã§ããŠãŒã¶ãŒïŒãŸãã¯æ»æè ïŒã¯èªåã§ããããããã°ã©ã ã§ããŸãïŒæãé£ããã®ã¯Intel STKãèŠã€ããããšã§ãïŒã ãããè¡ãã«ã¯ã次ã®æé ãå®è¡ããŸãã
1. Windows OSãèµ·åããŸãïŒäžè¬ã«ãç®çã®OSåãã«Intel STKã®é¡äŒŒç©ãéçºããå Žåã¯ãLinuxã®äžãã以äžã®æé ãå®è¡ããããšãã§ããŸãïŒã MEinfoãŠãŒãã£ãªãã£ã䜿çšããŠããã®ã·ã¹ãã ã§ãã¥ãŒãºãããã°ã©ã ãããŠããªãããšã確èªããŠãã ããã
2.ãã©ãã·ã¥ããã°ã©ãã³ã°ããŒã«ã䜿çšããŠããã©ãã·ã¥ã¡ã¢ãªã®å 容ãèªã¿åããŸãã
3. UEFI BIOSãç·šéããããã®ä»»æã®æ段ã䜿çšããŠèªã¿åãã€ã¡ãŒãžãéããå¿ èŠãªå€æŽïŒããšãã°ã«ãŒããããã®å®è£ ïŒãè¡ããMEé åã§æ¢åã®KEYMããã³IBBMæ§é ãäœæ/ç·šéããŸãã
RSAããŒã®å ¬ééšåãåçã§åŒ·èª¿è¡šç€ºãããŠããããã®ããã·ã¥ã¯Intel BGæ§æã®æ®ãã®éšåãšå ±ã«ãããã»ãããã¥ãŒãºã«ããã°ã©ã ãããŸãã
4. Flash Image Toolã䜿çšããŠãæ°ãããã¡ãŒã ãŠã§ã¢ã€ã¡ãŒãžãçµã¿ç«ãŠãŸãïŒIntel BGæ§æãæå®ïŒã
5.ãã©ãã·ã¥ããã°ã©ãã³ã°ããŒã«ã䜿çšããŠæ°ããã€ã¡ãŒãžããã©ãã·ã¥ã¡ã¢ãªã«æžã蟌ã¿ãŸããMEinfoã§ãMEé åã«Intel BGæ§æãå«ãŸããããã«ãªããŸãã
6.ãã©ãã·ã¥ããã°ã©ãã³ã°ããŒã«ã䜿çšããŠã補é ã¢ãŒããéããŸãã
7.ã·ã¹ãã ãåèµ·åããMEinfoã䜿çšããŠFPFãããã°ã©ã ãããŠããããšã確èªã§ããŸãã
ãããã®æé ã«ããããã®ã·ã¹ãã ã§Intel BG ãæ°žç¶çã«æå¹ã«ãªããŸãã ã¢ã¯ã·ã§ã³ãå ã«æ»ãããšã¯ã§ããŸãããã€ãŸãã次ã®ããšãæå³ããŸãã
- ã«ãŒãããŒã®ãã©ã€ããŒãéšåã®ææè ïŒã€ãŸããIntel BGããªã³ã«ãããã®ïŒã®ã¿ãããã®ã·ã¹ãã ã®UEFI BIOSãæŽæ°ã§ããŸãã
- ããšãã°ãããã°ã©ããŒã䜿çšããŠå ã®ãã¡ãŒã ãŠã§ã¢ããã®ã·ã¹ãã ã«æ»ããšãïŒæ€èšŒãšã©ãŒã®å Žåã®æœè¡ããªã·ãŒã®çµæãšããŠïŒèµ·åããããšãããããŸããã
- ãã®ãããªUEFI BIOSãåãé€ãã«ã¯ããããã»ããããã¯ãªãŒã³ãã«ããã°ã©ã ãããFPFã«äº€æããå¿ èŠããããŸãïŒã€ãŸããèªåè»ã®è²»çšã§èµ€å€ç·ã¯ãã ä»ãã¹ããŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããå Žåã¯ãããã»ãããåã¯ãã ä»ããããããã¶ãŒããŒãã亀æããã ãã§ãïŒã
ãã®ãããªã«ãŒãããããã§ããããšãç解ããã«ã¯ãUEFI BIOSç°å¢ã§ã³ãŒããå®è¡ã§ããããã«ãããã®ãè©äŸ¡ããå¿ èŠããããŸãã æãç¹æš©çãªããã»ããµã¢ãŒãã§ããSMMã«ã€ããŠèããŠã¿ãŸãããã ãã®ãããªã«ãŒããããã«ã¯ã次ã®ããããã£ããããŸãã
- OSãšäžŠè¡ããŠå®è¡ããŸãïŒã¿ã€ããŒã«ãã£ãŠããªã¬ãŒãããSMIå²ã蟌ã¿ãçæããããã«ã¯ãŒã¯ã¢ãŠããæ§æã§ããŸãïŒã
- SMMã¢ãŒãã§ããããšã®ãã¹ãŠã®å©ç¹ïŒRAMããã³ããŒããŠã§ã¢ãªãœãŒã¹ã®ã³ã³ãã³ããžã®ãã«ã¢ã¯ã»ã¹ãOSããã®æ©å¯æ§ïŒããããŸãã
- ã«ãŒããããããã°ã©ã ã³ãŒãã¯ãSMMã¢ãŒãã§èµ·åãããšæå·åããã³åŸ©å·åã§ããŸãã æå·åã®ããŒãšããŠãSMMã¢ãŒãã§ã®ã¿äœ¿çšå¯èœãªããŒã¿ã䜿çšã§ããŸãã ããšãã°ãSMRAMã®ã¢ãã¬ã¹ã®ã»ããããã®ããã·ã¥ã ãã®ããŒãååŸããã«ã¯ãSMMã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã ãããŠãããã«ã¯2ã€ã®æ¹æ³ããããŸãã SMMã³ãŒãã§RCEãèŠã€ããŠå®è¡ããããSMMã¢ãžã¥ãŒã«ãBIOSã«è¿œå ããŸããããã¯ããŒãã¬ãŒãããªã³ã«ããããäžå¯èœã§ãã
ãããã£ãŠããã®è匱æ§ã«ãããæ»æè ã¯æ¬¡ã®ããšãã§ããŸãã
- ã·ã¹ãã å ã«ç®çãäžæãªãé ããããåãå€ãã§ããªãã«ãŒãããããäœæããŸãã
- Intel SoCå ã®ãããã»ããã³ã¢ã®1ã€ãã€ãŸãIntel ISHã§ã³ãŒããå®è¡ããŸãïŒåçãããèŠãŠãã ããïŒã


Intel ISHãµãã·ã¹ãã ã®æ©èœã¯ãŸã 調æ»ãããŠããŸããããIntel MEã«å¯Ÿããèå³æ·±ãæ»æãã¯ãã«ã®ããã§ãã
çµè«
- ãã®èª¿æ»ã§ã¯ãIntel Boot Guardãã¯ãããžãŒã®æè¡çãªèª¬æãæäŸãããŸããã Intelã®ã»ãã¥ãªãã£ãªããªãã¹ãã¥ãªãã£ã¢ãã«ã®ç§å¯ã¯2ã€æªæºã§ãã
- ã·ã¹ãã ã«åé€ã§ããªãã«ãŒãããããäœæã§ããæ»æã·ããªãªã衚瀺ãããŸãã
- ææ°ã®Intelããã»ããµã¯ãBIOSãåäœãéå§ããåã§ãã£ãŠãå€ãã®ç¬èªã³ãŒããå®è¡ã§ããããšãããããŸããã
- Intel 64ã¢ãŒããã¯ãã£ãåãããã©ãããã©ãŒã ã¯ãããªãŒãœãããŠã§ã¢ã®å®è¡ã«é©ããªããªãã€ã€ãããŸããããŒããŠã§ã¢æ€èšŒãç¬èªæè¡ããã³ãµãã·ã¹ãã ã®å¢å ïŒSoCãããã»ããã®3ã€ã®ã³ã¢ïŒx86 MEãx86 ISHããã³ARC PMCïŒã
ç·©åç
補é ã¢ãŒããæå³çã«éãããŸãŸã«ãããã³ããŒã¯ãå¿ ãéããŠãã ããã ãããŸã§ã®ãšãããç®ã ããéããããŠãããæ°ããKaby Lakeã·ã¹ãã ã¯ããã瀺ããŠããŸãã
ãŠãŒã¶ãŒã¯ã-closemnfãã©ã¡ãŒã¿ãŒãæå®ããŠFlashããã°ã©ãã³ã°ããŒã«ãå®è¡ããããšã«ãããã·ã¹ãã ã§Intel BGããªãã«ããããšãã§ããŸãïŒããã¯ã説æããè匱æ§ã®åœ±é¿ãåããŸãïŒã ãŸããMEãªãŒãžã§ã³ã®Intel BGã®æ§æãFPFã§ã®ããã°ã©ãã³ã°åŸã«ãã®ãã¯ãããžãŒãæ£ç¢ºã«ãªãã«ããããšãïŒMEinfoã䜿çšããŠïŒç¢ºèªããå¿ èŠããããŸãã