ç§ãã¡ã¯ãããäžåºŠäœã¬ãã«ã«æ»ã£ãŠããã¡ãŒã ãŠã§ã¢ x86 äºæã³ã³ãã¥ãŒã¿ãŒ ãã©ãããã©ãŒã ã®ã»ãã¥ãªãã£ã«ã€ããŠè©±ãããšãææ¡ããŸãã ä»åã®ç 究ã®äž»ãªèŠçŽ ã¯ãã€ã³ãã« ããŒã ã¬ãŒã (ã€ã³ãã« BIOS ã¬ãŒããšæ··åããªãã§ãã ãã!) ã§ããããã¯ãã³ã³ãã¥ãŒã¿ãŒ ã·ã¹ãã ãã³ããŒã補é 段éã§æ°žç¶çã«ãªã³ãŸãã¯ãªãã«ã§ãããããŒããŠã§ã¢ã§ãµããŒãããã BIOS ãã©ã¹ããã ããŒã ãã¯ãããžã§ãã ããã§ãããç§ãã¡ã¯ãã§ã«ç 究ã®ã¬ã·ããç¥ã£ãŠããŸãããªããŒã¹ ãšã³ãžãã¢ãªã³ã°ã«ãã£ãŠãã®ãã¯ãããžãŒã®å®è£
ã现ããåãåºãããã®ã¢ãŒããã¯ãã£ã説æããææžåãããŠããªã詳现ãåã蟌ã¿ãæ»æãã¯ãã«ã§å³ä»ãããŠæ··ãåãããŸãã æ°å¹Žã«ããã£ãŠè€æ°ã®ãã³ããŒã®è£œåã«ã¯ããŒã³åããããã°ãåå ã§ãæœåšçãªæ»æè
ããã®ãã¯ãããžã䜿çšããŠãã·ã¹ãã å
ã« (ããã°ã©ãã§ãã£ãŠã) åé€ã§ããªãé ãã«ãŒãããããäœæã§ããããã«ãªã£ããšãã話ã§ãããã«ç«ãä»ããŠã¿ãŸãããã
ã¡ãªã¿ã«ãã®èšäºã¯ã«ã³ãã¡ã¬ã³ã¹ãOn Guard for Rootkits: Intel BootGuardãã®ã¬ããŒããåºã«ããŠããŸãã
Intel 64 ã¢ãŒããã¯ãã£ãåããã³ã³ãã¥ãŒã¿ ãã©ãããã©ãŒã çšã®ãã¡ãŒã ãŠã§ã¢
ãŸãããIntel 64 ã¢ãŒããã¯ãã£ãåããææ°ã®ã³ã³ãã¥ãŒã¿ãŒ ãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ã¯äœã§ãã?ããšãã質åã«çããŸãããã ãã¡ããUEFI BIOSã ãããããã®çãã¯æ£ç¢ºã§ã¯ãããŸããã ãã®ã¢ãŒããã¯ãã£ã®ãã¹ã¯ããã (ã©ããããã) ããŒãžã§ã³ã瀺ãå³ãèŠãŠã¿ãŸãããã
ãªã³ã¯ãåºç€ã§ã:
- ããã»ããµãŒ (CPUãäžå€®åŠçè£ çœ®)ãã¡ã€ã³ã³ã¢ã«å ããŠãã°ã©ãã£ãã¯ã¹ã³ã¢ (ãã¹ãŠã®ã¢ãã«ã«ããããã§ã¯ãããŸãã) ãšã¡ã¢ãªãŒã³ã³ãããŒã©ãŒ (IMCãçµ±åã¡ã¢ãªãŒã³ã³ãããŒã©ãŒ) ãçµã¿èŸŒãŸããŠããŸãã
- ãããã»ãã (PCHããã©ãããã©ãŒã ã³ã³ãããŒã©ãŒ ãã)ãåšèŸºããã€ã¹ãšå¯Ÿè©±ãããµãã·ã¹ãã ã管çããããã®ããŸããŸãªã³ã³ãããŒã©ãŒãå«ãŸããŠããŸãã ãã®äžã«ã¯ãæªåé«ãã€ã³ãã« ãããžã¡ã³ã ãšã³ãžã³ (ME) ããããããã«ããã¡ãŒã ãŠã§ã¢ (ã€ã³ãã« ME ãã¡ãŒã ãŠã§ã¢) ããããŸãã
ã©ãããããã«ã¯ãäžèšã«å ããŠãé»æºãµãã·ã¹ãã ãã¿ããããããããŒããŒããFn ã㌠(ç»é¢ã®æãããé³éãããŒããŒã) ã®æäœãæ åœããçµ±åã³ã³ãããŒã©ãŒ (ACPI ECãã¢ããã³ã¹ã ã³ã³ãããŒã«ããã³é»æºã€ã³ã¿ãŒãã§ã€ã¹çµã¿èŸŒã¿ã³ã³ãããŒã©ãŒ) ãå¿ èŠã§ããããã¯ã©ã€ããªã©ïŒãïŒãªã©ã ãããŠåœŒã¯ç¬èªã®ãã¡ãŒã ãŠã§ã¢ãæã£ãŠããŸãã
ãããã£ãŠãäžèšã®ãã¡ãŒã ãŠã§ã¢ãçµã¿åããããã®ãã³ã³ãã¥ãŒã¿ ãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ (ã·ã¹ãã ãã¡ãŒã ãŠã§ã¢) ãšãªããäžè¬ç㪠SPI ãã©ãã·ã¥ ã¡ã¢ãªã«ä¿åãããŸãã ãã®ã¡ã¢ãªã®ãŠãŒã¶ãŒãã©ãã«èª°ãã暪ããã£ãŠããã®ãæ··ä¹±ããªãããã«ããã®ã¡ã¢ãªã®å 容ã¯æ¬¡ã®é åã«åå²ãããŠããŸã (å³ã«ç€ºãããã«)ã
- UEFI BIOS;
- ACPI EC ãã¡ãŒã ãŠã§ã¢ (Skylake ããã»ããµ ãã€ã¯ãã¢ãŒããã¯ã㣠(2015) ã§ã¯å¥ã®é åãç»å ŽããŸããããå®éã«ã¯ãã®äœ¿çšäŸããŸã 確èªãããŠããªããããçµã¿èŸŒã¿ã³ã³ãããŒã©ãŒ ãã¡ãŒã ãŠã§ã¢ã¯äŸç¶ãšã㊠UEFI BIOS ã®äžéšã§ã)ã
- ã€ã³ãã« ME ãã¡ãŒã ãŠã§ã¢ã
- å èµ GbE (ã®ã¬ããã ã€ãŒãµããã) ãããã¯ãŒã¯ ã¢ããã¿ãŒã®èšå® (MAC ã¢ãã¬ã¹ãªã©)ã
- ãã©ãã·ã¥èšè¿°å - ãã©ãã·ã¥ ã¡ã¢ãªã®ã¡ã€ã³é åãä»ã®é åãžã®ãã€ã³ã¿ãšãããããžã®ã¢ã¯ã»ã¹èš±å¯ãå«ãŸããŸãã
é åãžã®ã¢ã¯ã»ã¹ã®åºå¥ (æå®ãããèš±å¯ã«åŸã£ãŠ) ã¯ãSPI ãã¹ ãã¹ã¿ãŒ (ãããã»ããã«çµã¿èŸŒãŸãã SPI ã³ã³ãããŒã©ãŒ) ã«ãã£ãŠåŠçããããããéããŠãã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããŸãã ã¢ã¯ã»ã¹èš±å¯ã Intel ã«ãã£ãŠæšå¥šãããå€ (ã»ãã¥ãªãã£äžã®çç±) ã«èšå®ãããŠããå Žåãå SPI ãã©ãã·ã¥ ãŠãŒã¶ãŒã¯èªåã®ãªãŒãžã§ã³ã«å¯ŸããŠã®ã¿ãã« ã¢ã¯ã»ã¹ (èªã¿åã/æžã蟌ã¿) ãæã¡ãŸãã æ®ãã¯èªã¿åãå°çšã§ãããã¢ã¯ã»ã¹ã§ããŸããã æ¢ç¥ã®äºå®: å€ãã®ã·ã¹ãã ã§ã¯ãCPU 㯠UEFI BIOS ããã³ GbE ãžã®å®å
šãªã¢ã¯ã»ã¹æš©ãæã¡ããã©ãã·ã¥èšè¿°åãžã®èªã¿åãã¢ã¯ã»ã¹ã®ã¿ããããIntel ME é åã«ã¯ãŸã£ããã¢ã¯ã»ã¹ã§ããŸããã ãªãå
šå¡ã§ã¯ãªãå€ãã®äººãããã®ã§ããïŒ æšå¥šããããã®ã¯ãªãã·ã§ã³ã§ãã 詳现ã«ã€ããŠã¯ãèšäºã®åŸåã§èª¬æããŸãã
ã³ã³ãã¥ãŒã¿ ãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ãå€æŽããä¿è·ããã¡ã«ããºã
æããã«ãã³ã³ãã¥ãŒã¿ ãã©ãããã©ãŒã ã®ãã¡ãŒã ãŠã§ã¢ã¯ãæœåšçãªæ»æè ãããã«è¶³å Žãç¯ãïŒOS ã®æŽæ°ãåã€ã³ã¹ããŒã«ã«èããïŒãæãç¹æš©ã¢ãŒãã§ã³ãŒããå®è¡ãããªã©ã®å¯èœæ§ããã䟵害ããä¿è·ãããå¿ èŠããããŸãã ãã¡ãããSPI ãã©ãã·ã¥ ã¡ã¢ãªé åãžã®ã¢ã¯ã»ã¹ãå¶éããã ãã§ã¯ååã§ã¯ãããŸããã ãããã£ãŠããã¡ãŒã ãŠã§ã¢ãå€æŽããä¿è·ããããã«ãåå®è¡ç°å¢ã«åºæã®ããŸããŸãªã¡ã«ããºã ã䜿çšãããŸãã
ãã®ãããã€ã³ãã« ME ãã¡ãŒã ãŠã§ã¢ã¯å®å
šæ§ãšä¿¡é Œæ§ã®å¶åŸ¡ã®ããã«çœ²åãããŠãããME UMA ã¡ã¢ãªã«ããŒãããããã³ã« ME ã³ã³ãããŒã©ãŒã«ãã£ãŠãã§ãã¯ãããŸãã ãã®æ€èšŒããã»ã¹ã«ã€ããŠã¯ã次ã®ããããã®èšäºã§ãã§ã«èª¬æããŸããã
ãŸããACPI EC ãã¡ãŒã ãŠã§ã¢ã¯ãååãšããŠãæŽåæ§ã®ã¿ããã§ãã¯ãããŸãã ãã ãããã®ãã€ããªã¯ UEFI BIOS ã«å«ãŸããŠãããããã»ãšãã©ã®å ŽåãUEFI BIOS ã䜿çšããã®ãšåãä¿è·ã¡ã«ããºã ã®å¯Ÿè±¡ã«ãªããŸãã ãããã«ã€ããŠè©±ããŸãããã
ãããã®ã¡ã«ããºã 㯠XNUMX ã€ã®ã«ããŽãªã«åé¡ã§ããŸãã
UEFI BIOS é åãžã®æžã蟌ã¿ä¿è·
- æžã蟌ã¿ä¿è·ãžã£ã³ãã«ãã SPI ãã©ãã·ã¥ ã¡ã¢ãªã®å 容ã®ç©ççä¿è·ã
- ãããã»ããã® PRx ã¬ãžã¹ã¿ã䜿çšãããCPU ã¢ãã¬ã¹ç©ºéå ã® UEFI BIOS é åã®æ圱ã®ä¿è·ã
- ãããã¯ã§ã¯ããããã»ãã ã¬ãžã¹ã¿ã® BIOS_WE / BLE ããã³ SMM_BWP ããããèšå®ããŠã察å¿ãã SMI å²ã蟌ã¿ãçæããã³åŠçããããšã«ãããUEFI BIOS é åãžã®æžã蟌ã¿ãè©Šè¡ããŸãã
- ãã®ä¿è·ã®ããé«åºŠãªããŒãžã§ã³ã¯ãIntel BIOS Guard (PFAT) ã§ãã
ãããã®ã¡ã«ããºã ã«å ããŠããã³ããŒã¯ç¬èªã®ã»ãã¥ãªãã£å¯Ÿçãéçºããã³å®è£ ã§ããŸã (ããšãã°ãUEFI BIOS ã¢ããããŒãã«ããã«ãã»ã«ãžã®çœ²å)ã
ç¹å®ã®ã·ã¹ãã (ãã³ããŒã«ãã£ãŠç°ãªããŸã) ã§ã¯ãäžèšã®ä¿è·ã¡ã«ããºã ã®ãã¹ãŠãé©çšãããããã§ã¯ãªãããŸã£ããé©çšãããªãããŸãã¯è匱ãªæ¹æ³ã§å®è£
ãããŠããå¯èœæ§ãããããšã«æ³šæããããšãéèŠã§ãã ãããã®ã¡ã«ããºã ãšãã®å®è£
ç¶æ³ã«ã€ããŠè©³ããã¯ãã
UEFI BIOS èªèšŒã®æ€èšŒ
ãã©ã¹ããã ããŒã ãã¯ãããžã«ã€ããŠè©±ããšããæåã«æãæµ®ãã¶ã®ã¯ã»ãã¥ã¢ ããŒãã§ãã ãã ããã¢ãŒããã¯ãã£çã«ã¯ããã¡ãŒã ãŠã§ã¢èªäœã§ã¯ãªããUEFI BIOS ã®å€éšã®ã³ã³ããŒãã³ã (ãã©ã€ããŒãããŒããŒãªã©) ãèªèšŒããããã«èšèšãããŠããŸãã
ãããã£ãŠãIntel ã¯ãBay Trail ãã€ã¯ãã¢ãŒããã¯ã㣠(2012) ãåãã SoC ã«ãããŒããŠã§ã¢ã®åãæ¿ãäžå¯èœãªã»ãã¥ã¢ ããŒã (æ€èšŒæžã¿ããŒã) ãå®è£ ããŸãããããã¯ãåè¿°ã®ã»ãã¥ã¢ ããŒã ãã¯ãããžãšã¯äœã®é¢ä¿ããããŸããã ãã®åŸ (2013 幎)ããã®ã¡ã«ããºã ã¯æ¹è¯ãããIntel Boot Guard ãšããååã§ãHaswell ãã€ã¯ãã¢ãŒããã¯ãã£ãåãããã¹ã¯ãããçšã«ãªãªãŒã¹ãããŸããã
Intel Boot Guard ã«ã€ããŠèª¬æããåã«ãIntel 64 ã¢ãŒããã¯ãã£ã®å®è¡ç°å¢ãèŠãŠã¿ãŸãããããããã®çµã¿åãããããã®ãã©ã¹ããã ããŒã ãã¯ãããžã®ä¿¡é Œã®ã«ãŒããšãªããŸãã
ã€ã³ãã«ã®CPU
Cap æ°ã¯ãããã»ããµãŒã Intel 64 ã¢ãŒããã¯ãã£ãŒã®äž»èŠãªå®è¡ç°å¢ã§ãããšç€ºåããŠããŸããããªããããä¿¡é Œã®ã«ãŒãã§ãããã®ã§ãããã? ãã®çç±ã¯ã次ã®èŠçŽ ãåããŠããããã§ããããšãããããŸããã
- ãã€ã¯ãã³ãŒã ROM ã¯ããã€ã¯ãã³ãŒããä¿åããããã®äžæ®çºæ§ã§æžãæãäžå¯èœãªã¡ã¢ãªã§ãã ãã€ã¯ãã³ãŒãã¯ãæãåçŽãªåœä»€ã«å¯Ÿããããã»ããµåœä»€ã·ã¹ãã ã®å®è£
ã§ãããšèããããŠããŸãã ãã€ã¯ãã³ãŒãã§ãçºçããŸã
ãã° ã ãã®ãããBIOS ã§ã¯ããã€ã¯ãã³ãŒãæŽæ°ãå«ããã€ããªãèŠã€ããããšãã§ããŸã (ROM ã¯äžæžãã§ããªãããããã€ããªã¯èµ·åæã«éããŠè¡šç€ºãããŸã)ã ãããã®ãã€ããªã®å 容ã¯æå·åãããŠãããããåæãéåžžã«è€éã«ãªã (ãããã£ãŠããã€ã¯ãã³ãŒãã®å ·äœçãªå 容ã¯éçºè ã®ã¿ã«ç¥ãããŸã)ãå®å šæ§ãšä¿¡é Œæ§ãå¶åŸ¡ããããã«çœ²åãããŸãã - ãã€ã¯ãã³ãŒãæŽæ°ã®å 容ã埩å·åããããã® AES ããŒã
- ãã€ã¯ãã³ãŒãæŽæ°ã®çœ²åãæ€èšŒãã RSA å ¬éããŒã®ããã·ã¥ã
- RSA å ¬éã㌠ããã·ã¥ãIntel ãéçºãã ACM (Authenticated Code Module) ã³ãŒã ã¢ãžã¥ãŒã«ã®çœ²åããã§ãã¯ããŸãããã®ã³ãŒã ã¢ãžã¥ãŒã«ã¯ãBIOS ã®éå§å (Hello ãã€ã¯ãã³ãŒã) ãŸã㯠BIOS ã®åäœäžã«ãäœããã®ã€ãã³ããçºçãããšãã« CPU ãå®è¡ã§ããŸãã
ã€ã³ãã« ME
ç§ãã¡ã®ããã°ã®ãã®ãµãã·ã¹ãã ã¯ã
ã¹ãã«ã¹æ§ã«ãããããããã€ã³ãã« ME ã¯ä»¥äžã®æ©èœãåããŠãããããä¿¡é Œã®ã«ãŒãã§ããããŸãã
- ME ROM - éå§ã³ãŒããšã€ã³ãã« ME ãã¡ãŒã ãŠã§ã¢ã®çœ²åããã§ãã¯ãã RSA å ¬éããŒã® SHA256 ããã·ã¥ãå«ãäžæ®çºæ§ãæžãæãäžå¯èœãªã¡ã¢ãª (æŽæ°æ¹æ³ã¯æäŸãããŠããŸãã)ã
- ç§å¯æ å ±ãä¿åããããã® AES ããŒã
- ã³ã³ãã¥ãŒã¿ ã·ã¹ãã ãã³ããŒã«ãã£ãŠæå®ãããæ å ±ãå«ããäžéšã®æ å ±ãæ°žç¶çã«ä¿åããããã«ãããã»ããã«çµ±åãããäžé£ã®ãã¥ãŒãº (FPFããã£ãŒã«ã ããã°ã©ããã« ãã¥ãŒãº) ãžã®ã¢ã¯ã»ã¹ã
ã€ã³ãã« ããŒã ã¬ãŒã 1.x
å°ããªå 責äºé ã ãã®èšäºã§äœ¿çšããã€ã³ãã« ããŒã ã¬ãŒã ãã¯ãããžã®ããŒãžã§ã³çªå·ã¯ä»»æã§ãããã€ã³ãã«ã®å éšããã¥ã¡ã³ãã§äœ¿çšãããŠããçªå·ãšã¯é¢ä¿ããªãå ŽåããããŸãã ããã«ãããã«èšèŒãããŠãããã®ãã¯ãããžãŒã®å®è£ ã«é¢ããæ å ±ã¯ããªããŒã¹ ãšã³ãžãã¢ãªã³ã°äžã«ååŸããããã®ã§ãããå ¬éãããå¯èœæ§ãäœãã€ã³ãã« ããŒã ã¬ãŒãã®ä»æ§ãšæ¯èŒããŠäžæ£ç¢ºãªéšåãå«ãŸããŠããå¯èœæ§ããããŸãã
ã€ãŸããIntel Boot Guard (BG) ã¯ãããŒããŠã§ã¢ã§ãµããŒãããã UEFI BIOS èªèšŒãã¯ãããžã§ãã æžç± [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot] ã®çã説æããå€æãããšãããã¯ä¿¡é Œã§ããããŒã ãã§ãŒã³ãšããŠæ©èœããŸãã ãã®æåã®ãªã³ã¯ã¯ CPU å ã®ããŒã ã³ãŒã (ãã€ã¯ãã³ãŒã) ã§ãRESET ã€ãã³ãã«ãã£ãŠããªã¬ãŒãããŸã (BIOS ã® RESET ãã¯ã¿ãŒãšæ··åããªãã§ãã ãã)ã CPU ã¯ãSPI ãã©ãã·ã¥ ã¡ã¢ãªäžã§ã€ã³ãã«ã«ãã£ãŠéçºããã³çœ²åãããã³ãŒã ã¢ãžã¥ãŒã« (ã€ã³ãã« BG ã¹ã¿ãŒãã¢ãã ACM) ãèŠã€ããããããã£ãã·ã¥ã«ããŒãããŠæ€èšŒããŸã (CPU ã ACM 眲åãæ€èšŒããå ¬éã㌠ããã·ã¥ãæã£ãŠããããšã¯äžã§ãã§ã«è¿°ã¹ãŸãã) ïŒãããŠå§ãŸããŸãã
ãã®ã³ãŒã ã¢ãžã¥ãŒã«ã¯ãUEFI BIOS ã®å°ããªéå§éšåã§ããåæããŒã ããã㯠(IBB) ãæ€èšŒãã圹å²ãæãããŸããããã«ã¯ãUEFI BIOS ã®äž»èŠéšåãæ€èšŒããããã®æ©èœãå«ãŸããŠããŸãã ãããã£ãŠãIntel BG ã䜿çšãããšãOS ãèµ·åããåã« BIOS ã®ä¿¡é Œæ§ãæ€èšŒã§ããŸã (ããã¯ã»ãã¥ã¢ ããŒã ãã¯ãããžã®ç£èŠäžã§å®è¡ã§ããŸã)ã
ã€ã³ãã« BG ãã¯ãããžãŒã¯ XNUMX ã€ã®åäœã¢ãŒããæäŸããŸã (äžæ¹ã¯ä»æ¹ãšå¹²æžããŸãããã€ãŸããã·ã¹ãã äžã§äž¡æ¹ã®ã¢ãŒããæå¹ã«ããããšããäž¡æ¹ãç¡å¹ã«ããããšãã§ããŸã)ã
ã¡ãžã£ãŒããŒã
ã¡ãžã£ãŒã ããŒã (MB) ã¢ãŒãã§ã¯ãåããŒã ã³ã³ããŒãã³ã (CPU ããŒã ROM ããå§ãŸã) ã¯ããã©ã¹ããã ãã©ãããã©ãŒã ã¢ãžã¥ãŒã« (TPM) ã®æ©èœã䜿çšããŠæ¬¡ã®ã³ã³ããŒãã³ããã枬å®ãããŸãã ç¥ããªã人ã®ããã«èª¬æããŸãããã
TPM ã«ã¯ PCR (ãã©ãããã©ãŒã æ§æã¬ãžã¹ã¿) ãããã次ã®åŒã«åŸã£ãŠããã·ã¥æäœã®çµæãèšé²ããŸãã
ãããã®ã çŸåšã® PCR å€ã¯åã®å€ã«äŸåãããããã®ã¬ãžã¹ã¿ã¯ã·ã¹ãã ããªã»ãããããå Žåã«ã®ã¿ãªã»ãããããŸãã
ãããã£ãŠãMB ã¢ãŒãã§ã¯ãããæç¹ã§ãPCR ã¯ã枬å®ããããã³ãŒããŸãã¯ããŒã¿ã®äžæã® (ããã·ã¥æäœã®æ©èœå ã§) èå¥åãåæ ããŸãã PCR å€ã¯ãäžéšã®ããŒã¿ã®æå·å (TPM_Seal) æäœã«äœ¿çšã§ããŸãã ãã®åŸãããŒãã®çµæãšã㊠PCR å€ãå€æŽãããŠããªãå Žå (ã€ãŸããã枬å®ããããã³ã³ããŒãã³ãã XNUMX ã€ãå€æŽãããŠããªãå Žå) ã«ã®ã¿ããããã®åŸ©å·å (TPM_Unseal) ãå¯èœã«ãªããŸãã
確èªæžã¿ã®èµ·å
UEFI BIOS ãå€æŽããã人ã«ãšã£ãŠæãæãã®ã¯ãåããŒã ã³ã³ããŒãã³ãã次ã®ããŒã ã³ã³ããŒãã³ãã®æŽåæ§ãšä¿¡é Œæ§ãæå·çã«æ€èšŒããæ€èšŒããŒã (VB) ã¢ãŒãã§ãã æ€èšŒãšã©ãŒãçºçããå Žåã(次ã®ãããã) ãçºçããŸãã
- 1 åãã 30 åã®ã¿ã€ã ã¢ãŠãã«ãã£ãŠã·ã£ããããŠã³ããŸã (ãŠãŒã¶ãŒãèªåã®ã³ã³ãã¥ãŒã¿ãèµ·åããªãçç±ãç解ããæéã確ä¿ããå¯èœã§ããã° BIOS ã®åŸ©å ãè©Šã¿ãŸã)ã
- å³æã·ã£ããããŠã³ïŒãŠãŒã¶ãŒãç解ããæéããªããããã«å®è¡ããæéããªãããïŒã
- çé¡ã§äœæ¥ãç¶ç¶ããïŒä»ã«ããã¹ãããšããããå®å šã確ä¿ããæéããªãå ŽåïŒã
ã¢ã¯ã·ã§ã³ã®éžæã¯ãæå®ãããã€ã³ãã« BG æ§æ (ã€ãŸãããããã匷å¶ããªã·ãŒ) ã«ãã£ãŠæ±ºãŸããŸãããã®æ§æã¯ãã³ã³ãã¥ãŒã¿ãŒ ãã©ãããã©ãŒã ãã³ããŒã«ãã£ãŠç¹å¥ã«èšèšãããã¹ãã¬ãŒãžã§ãããããã»ãã ãã¥ãŒãº (FPF) ã«æ°žç¶çã«èšé²ãããŸãã ãã®ç¹ã«ã€ããŠã¯åŸã»ã©è©³ãã説æããŸãã
æ§æã«å ããŠããã³ããŒã¯ 2048 ã€ã® RSA XNUMX ããŒãçæããXNUMX ã€ã®ããŒã¿æ§é ãäœæããŸã (å³ãåç §)ã
- ãã³ã㌠ã«ãŒã ã㌠ãããã§ã¹ã (KEYMãOEM ã«ãŒã ã㌠ãããã§ã¹ã)ããã®ãããã§ã¹ãã® SVN (ã»ãã¥ãªã㣠ããŒãžã§ã³çªå·)ã次ã®ãããã§ã¹ãã®å ¬éããŒã® SHA256 ããã·ã¥ãRSA å ¬éã㌠(ã€ãŸãããã³ã㌠ã«ãŒã ããŒ) ã䜿çšããŠããã®ãããã§ã¹ãã®çœ²åãšçœ²åèªäœãæ€èšŒããŸãã
- IBB ãããã§ã¹ã (IBBMãåæããŒã ããã㯠ãããã§ã¹ã)ããã®ãããã§ã¹ãã® SVNãIBB ã® SHA256 ããã·ã¥ããã®ãããã§ã¹ãã®çœ²åãæ€èšŒããããã®å ¬éããŒãããã³çœ²åèªäœãå«ãŸããŸãã
OEM ã«ãŒã ããŒã® SHA256 ããã·ã¥ã¯ãIntel BG æ§æãšåæ§ã«ããããã»ãã ãã¥ãŒãº (FPF) ã«æ°žç¶çã«æžã蟌ãŸããŸãã Intel BG æ§æã«ãã®ãã¯ãããžãå«ããããšãã§ããå Žåãä»åŸããã®ã·ã¹ãã ã§ã¯ãOEM ã«ãŒã ããŒã®ãã©ã€ããŒãéšåã®ææè ã®ã¿ã BIOS ãæŽæ°ã§ããŸã (ã€ãŸãããããã®ãããã§ã¹ããåèšç®ã§ããŸã)ã ãã³ããŒã
ãã®å³ãèŠããšãããã»ã©é·ãæ€èšŒãã§ãŒã³ã®å¿
èŠæ§ã«ã€ããŠããã«çåãçããŸãããããã§ã¹ãã XNUMX ã€äœ¿çšããããšãã§ããã¯ãã§ãã ãªãè€éã«ãªãã®ã§ããããïŒ
å®éãã€ã³ãã«ã¯ããã³ããŒã«å¯Ÿããç°ãªã補åã©ã€ã³ã«ç°ãªã IBB ããŒã䜿çšããXNUMX ã€ãã«ãŒããšããŠäœ¿çšããæ©äŒãæäŸããŸãã IBB ããŒã®ãã©ã€ããŒãéšå (XNUMX çªç®ã®ãããã§ã¹ãã«çœ²åãã) ãæŒæŽ©ããå Žåããã®ã€ã³ã·ãã³ã㯠XNUMX ã€ã®è£œåã©ã€ã³ã«ã®ã¿åœ±é¿ãããã³ããŒãæ°ãããã¢ãçæãã次åã® BIOS ã¢ããããŒãã§åèšç®ããããããã§ã¹ããæå¹ã«ãããŸã§ã®ã¿åœ±é¿ããŸãã
ãã ããã«ãŒã ã㌠(æåã®ãããã§ã¹ãã®çœ²åã«äœ¿çšãããããŒ) ã䟵害ãããå Žåãããã眮ãæããããšã¯ã§ããã倱å¹æé ã¯æäŸãããŸããã ãã®ããŒã®å ¬ééšåã®ããã·ã¥ã¯ãFPF ã«å®å šã«ããã°ã©ã ãããŸãã
ã€ã³ãã« ããŒã ã¬ãŒãã®æ§æ
ããã§ãIntel BG ã®æ§æãšãã®äœæããã»ã¹ã詳ããèŠãŠã¿ãŸãããã ã€ã³ãã« ã·ã¹ãã ããŒã« ããã (STK) ã®ãã©ãã·ã¥ ã€ã¡ãŒãž ããŒã«ã® GUI ã®å¯Ÿå¿ããã¿ããèŠããšãã€ã³ãã« BG æ§æã«ãã³ã㌠ã«ãŒã ããŒã®å ¬ééšåã®ããã·ã¥ãå«ãŸããŠããããšãããããŸãã䟡å€èŠ³ãªã©ã ã€ã³ãã« 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
ããã_FVME
ã€ã³ãã« BG ãã¯ãããžãŒãç¡å¹ã«ãªã£ãŠããŸã
1
VE
VB ã¢ãŒãæå¹ãã¿ã€ã ã¢ãŠãã«ããã·ã£ããããŠã³
2
VME
äž¡æ¹ã®ã¢ãŒã (VB ãš MB) ãæå¹ã«ãªã£ãŠãããã¿ã€ã ã¢ãŠãã«ãã£ãŠã·ã£ããããŠã³ãããŸãã
3
VM
ã·ã¹ãã ããªãã«ããããšãªããäž¡æ¹ã®ã¢ãŒããæå¹ã«ãªããŸã
4
FVE
VB ã¢ãŒãæå¹ãå³æã·ã£ããããŠã³
5
FVME
äž¡æ¹ã®ã¢ãŒããæå¹ãå³æã·ã£ããããŠã³
ãã§ã«è¿°ã¹ãããã«ãIntel BG æ§æã¯ãã·ã¹ãã ãã³ããŒã«ãã£ãŠãããã»ãã ãã¥ãŒãº (FPF) ã«äžåºŠã ãæžã蟌ãŸããå¿ èŠããããŸããFPF ã¯ããããã»ããå ã®å°ã㪠(æªæ€èšŒã®æ å ±ã«ãããšãããã 256 ãã€ã) ããŒããŠã§ã¢æ å ±ã¹ãã¬ãŒãžã§ãããå€éšã§ããã°ã©ã ããããšãã§ããŸããã€ã³ãã«ã®çç£æœèšã® ãã£ãŒã«ãããã°ã©ããã« ãã¥ãŒãºïŒã
次ã®çç±ãããæ§æãä¿åããã®ã«æé©ã§ãã
- ã¯ã³ã¿ã€ã ããã°ã©ã å¯èœãªããŒã¿ã¹ãã¬ãŒãžé å (Intel BG æ§æãæžã蟌ãŸããå Žæ) ãåããŠããŸãã
- Intel ME ã ãããããèªã¿åã£ãŠããã°ã©ã ããããšãã§ããŸãã
ãããã£ãŠãç¹å®ã®ã·ã¹ãã äžã§ã€ã³ãã« BG ãã¯ãããžãŒã®æ§æãèšå®ããããã«ããã³ããŒã¯éçšäžã«æ¬¡ã®ããšãè¡ããŸãã
- Flash Image Tool ãŠãŒãã£ãªã㣠(Intel STK ã®) ã䜿çšããŠãIntel ME é å (FPF ã®ããããäžæãã©ãŒ) å ã®å€æ°ãšããŠãç¹å®ã® Intel BG æ§æãæã€ãã¡ãŒã ãŠã§ã¢ ã€ã¡ãŒãžãäœæããŸãã
- ãã©ãã·ã¥ ããã°ã©ãã³ã° ããŒã« (Intel STK 補) ã䜿çšããŠããã®ã€ã¡ãŒãžãã·ã¹ãã ã® SPI ãã©ãã·ã¥ ã¡ã¢ãªã«æžã蟌ã¿ããããããã¡ã€ã«ãéããŸãã 補é ã¢ãŒã (ãã®å Žåã察å¿ããã³ãã³ããã€ã³ãã« ME ã«éä¿¡ãããŸã)ã
ãããã®æäœã®çµæãã€ã³ãã« ME ã¯ãME é åã® FPF ã®ãã©ãŒããæå®ãããå€ã FPF ã«ã³ãããããSPI ãã©ãã·ã¥èšè¿°åã®ã¢ã¯ã»ã¹èš±å¯ãã€ã³ãã«ãæšå¥šããå€ã«èšå®ããŸã (æ¬æžã®åé ã§èª¬æ)èšäº) ãå®è¡ããã·ã¹ãã ãªã»ãããå®è¡ããŸãã
Intel Boot Guard å®è£ ã®åæ
ç¹å®ã®äŸã§ã®ãã®ãã¯ãããžãŒã®å®è£ ãåæããããã«ã次ã®ã·ã¹ãã ã§ã€ã³ãã« BG ãã¯ãããžãŒã®çè·¡ã確èªããŸããã
ã·ã¹ãã
泚æ
ã®ã¬ãã€ãGA-H170-D3H
SkylakeããµããŒãããããŸã
ã®ã¬ãã€ã GA-Q170-D3H
SkylakeããµããŒãããããŸã
ã®ã¬ãã€ã GA-B150-HD3
SkylakeããµããŒãããããŸã
MSI H170A ã²ãŒãã³ã° ãã
SkylakeããµããŒããªã
Lenovo ThinkPad 460
SkylakeããµããŒããå©çšå¯èœããã¯ãããžãŒãæå¹
ã¬ãããšã¬2ãã
ãã¹ãŠã§ã«ããµããŒããªã
ã¬ããU330p
ãã¹ãŠã§ã«ããµããŒããªã
ããµããŒãããšã¯ãã€ã³ãã« BG ã¹ã¿ãŒãã¢ãã ACM ã¢ãžã¥ãŒã«ãäžèšã®ãããã§ã¹ããããã³ BIOS å ã®å¯Ÿå¿ããã³ãŒãã®ååšãæå³ããŸãã åæçšã®å®è£ ã
äŸãšããŠããªãã£ã¹ããããŠã³ããŒããããã®ãèŠãŠã¿ãŸãããã Gigabyte GA-H170-D3H (ããŒãžã§ã³ F4) ã® SPI ãã©ãã·ã¥ ã¡ã¢ãªã®ãã³ã㌠ãµã€ãã®ã€ã¡ãŒãžã
ã€ã³ãã«CPUããŒãROM
ãŸãæåã«ãã€ã³ãã« 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;
};
äœããã®çç±ã§ããããã®ããŒãã«ã§ã¯ãã§ãã¯ãµã ãåžžã«èšç®ãããããã§ã¯ãããŸãã (ãã£ãŒã«ã㯠null ã®ãŸãŸã§ã)ã
æ®ãã®ãšã³ããªã¯ã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
};
ããã§ããšã³ããªã® XNUMX ã€ãã€ã³ãã« BG ã¹ã¿ãŒãã¢ãã ACM ãã€ããªã®å ŽæãæããŠããããšã¯æããã§ãã ãã®ãã€ããªã®ããããŒæ§é ã¯ãã€ã³ãã«ãéçºããã³ãŒã ã¢ãžã¥ãŒã« (ACMããã€ã¯ãã³ãŒã ã¢ããããŒããã€ã³ãã« 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 ã®åäœãåæããçµæã次ã®ããšãè¡ãããšãæããã«ãªããŸããã
- ãããã»ãã ãã¥ãŒãº (FPF) ã«æžã蟌ãŸããã€ã³ãã« BG æ§æãã€ã³ãã« ME ããåä¿¡ããŸãã
- KEYM ããã³ IBM ãããã§ã¹ããæ€çŽ¢ããæ€èšŒããŸãã
ãããã®ãããã§ã¹ããèŠã€ããããã«ãACM 㯠FIT ããŒãã«ã䜿çšããŸãããã®ããŒãã«ã«ã¯ããããã®æ§é ãæã XNUMX çš®é¡ã®ãšã³ããªããããŸã (äžèšã® FIT_ENTRY_TYPES ãåç §)ã
ãããã§ã¹ãã詳ããèŠãŠã¿ãŸãããã æåã®ãããã§ã¹ãã®æ§é ã«ã¯ãããã€ãã®äžæçãªå®æ°ãXNUMX çªç®ã®ãããã§ã¹ãã®å ¬éããŒã®ããã·ã¥ãããã³ãã¹ããããæ§é ãšããŠçœ²åãããå ¬é 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 ã«ãŒã ããŒã®å
¬éããŒãæ€èšŒããã«ã¯ããã¥ãŒãºããã® SHA256 ããã·ã¥ã䜿çšãããããšãæãåºããŠãã ããããã®ããã·ã¥ã¯ãçŸæç¹ã§ã¯ãã§ã« Intel ME ããåä¿¡ãããŠããŸãã
第äºã®ãããã§ã¹ãã«ç§»ããŸãããã ãã㯠XNUMX ã€ã®æ§é ã§æ§æãããŸãã
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
};
256 çªç®ã«ã¯ãIBB ã® SHAXNUMX ããã·ã¥ãšã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 ãã§ãŒãºã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ãçµã¿åããããã®ã§ãã
256 çªç®ã®ãããã§ã¹ãã¯ãIBB å ¬éã㌠(æåã®ãããã§ã¹ãã® SHAXNUMX ããã·ã¥ã«ãã£ãŠæ€èšŒããã) ãšãã®ãããã§ã¹ãã®çœ²åãå«ãæ§é ã§çµãããŸãã
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 (Independent BIOS Vendor) ãŸãã¯ã·ã¹ãã ãã³ããŒèªäœã«ãã£ãŠãã§ã«éçºãããŠããŸãã ãªããªãLenovo ãš Gigabyte ã·ã¹ãã ã®ã¿ãèªç±ã«äœ¿çšã§ããIntel BG ããµããŒãããŠããããšãå€æããŸããããããã®ã·ã¹ãã ããæœåºãããã³ãŒããèããŠã¿ãŸãããã
UEFI BIOS ã¢ãžã¥ãŒã« LenovoVerifiedBootPei
Lenovo ã®å ŽåãLenovo ãéçºãã LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} ã¢ãžã¥ãŒã«ã§ããããšãå€æããŸããã
ãã®ä»äºã¯ã(GUID ã«ãã£ãŠ) DXE ã®ããã·ã¥ ããŒãã«ãæ€çŽ¢ããDXE ãæ€èšŒããããšã§ãã
if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
if (!FindHashTable())
return EFI_NOT_FOUND;
if (!VerifyDxe())
return EFI_SECURITY_VIOLATION;
}
Ð¥ÐµÑ ÑаблОÑа {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ÐžÐŒÐµÐµÑ ÑлеЎÑÑÑОй ÑПÑЌаÑ:
typedef struct HASH_TABLE
{
char Tag[8]; // â$HASHTBLâ
unsigned long NumDxeDescriptors;
DXE_DESCRIPTORS[];
};
typedef struct DXE_DESCRIPTOR
{
unsigned char BlockHash[32]; // SHA256
unsigned long Offset;
unsigned long Size;
};
UEFI BIOS ã¢ãžã¥ãŒã« BootGuardPei
Gigabyte ã®å Žåããã㯠AMI ã«ãã£ãŠéçºããã BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} ã¢ãžã¥ãŒã«ã§ããããšãå€æãããããIntel BG ããµããŒããããã¹ãŠã® AMI BIOS ã«ååšããŸãã
åäœã¢ã«ãŽãªãºã ã¯å€å°ç°ãªããŸãããèŠããã«åãã§ãã
int bootMode = EFI_PEI_SERVICES->GetBootMode();
if (bootMode != BOOT_ON_S3_RESUME &&
bootMode != BOOT_ON_FLASH_UPDATE &&
bootMode != BOOT_IN_RECOVERY_MODE)
{
HOB* h = CreateHob();
if (!FindHashTable())
return EFI_NOT_FOUND;
WriteHob(&h, VerifyDxe());
return h;
}
æ€çŽ¢ããããã·ã¥ ããŒãã« {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
typedef HASH_TABLE DXE_DESCRIPTORS[];
typedef struct DXE_DESCRIPTOR
{
unsigned char BlockHash[32]; // SHA256
unsigned long BaseAddress;
unsigned long Size;
};
ã€ã³ãã« ããŒã ã¬ãŒã 2.x
Intel Boot Guard ã®å¥ã®å®è£ ã«ã€ããŠç°¡åã«èª¬æããŸããããã¯ãApollo Lake ãã€ã¯ãã¢ãŒããã¯ãã£ãåãã Intel SoC ã«åºã¥ãæ°ããã·ã¹ãã ãASRock J4205-IT ã«çµã¿èŸŒãŸããŠããŸãã
ãã®ããŒãžã§ã³ã¯ SoC ã§ã®ã¿äœ¿çšãããŸãã (Kaby Lake ããã»ããµ ãã€ã¯ãã¢ãŒããã¯ãã£ãåããæ°ããã·ã¹ãã ã¯åŒãç¶ã Intel Boot Guard 1.x ã䜿çšããŸã)ãIntel SoC ã«åºã¥ããã©ãããã©ãŒã ã®æ°ããã¢ãŒããã¯ã㣠ãªãã·ã§ã³ãæ€èšããäžã§éåžžã«èå³æ·±ããã®ã§ãããããã¯å ·äœçãªãã®ãšãªã£ãŠããŸããå€æŽäŸ:
- BIOS ããã³ Intel ME é å (Intel SoC ã®çšèªã«ããã°ãããã Intel TXE) ã¯ãXNUMX ã€ã® IFWI é åã«ãªããŸããã
- Intel BG ã¯ãã©ãããã©ãŒã ã§æå¹ã«ãªã£ãŠããŸããããFITãKEYMãIBBM ãªã©ã®æ§é ããã©ãã·ã¥ ã¡ã¢ãªå ã«èŠã€ãããŸããã§ããã
- TXE ããã³ ISH ã³ã¢ (x86) ã«å ããŠãé»æºãµãã·ã¹ãã ã®æäœæ§ã®ç¢ºä¿ãšããã©ãŒãã³ã¹ç£èŠã«é¢é£ãã XNUMX çªç®ã®ã³ã¢ (ã¡ãªã¿ã«ãããã ARC) ããããã»ããã«è¿œå ãããŸãã - PMC (é»æºç®¡çã³ã³ãããŒã©ãŒ)ã
æ°ãã IFWI ãªãŒãžã§ã³ã®ã³ã³ãã³ãã¯ã次ã®ã¢ãžã¥ãŒã«ã®ã»ããã§ãã
ãªãã»ãã
åå
説æ
0000æé
SMIP
ãã³ããŒã«ãã£ãŠçœ²åãããäžéšã®ãã©ãããã©ãŒã æ§æ
0000æé
RBEP
Intel TXE ãã¡ãŒã ãŠã§ã¢ ã³ãŒã ã»ã¯ã·ã§ã³ (x86ãIntel ã«ãã£ãŠçœ²å)
0001æé
PMCP
ãã¡ãŒã ãŠã§ã¢ ã³ãŒã ã»ã¯ã·ã§ã³ Intel PMCãARCãIntel ã«ãã眲å
0002æé
FTPR
Intel TXE ãã¡ãŒã ãŠã§ã¢ ã³ãŒã ã»ã¯ã·ã§ã³ (x86ãIntel ã«ãã£ãŠçœ²å)
0007B000h
ãŠãŒã³ãã
Intel ã«ãã£ãŠçœ²åããã CPU ãã€ã¯ãã³ãŒãã®æŽæ°
0008æé
IBBP
UEFI BIOSãSEC/PEI ãã§ãŒãºãx86ããã³ããŒçœ²åæžã¿
0021æé
ISC
ãã³ããŒã«ãã£ãŠçœ²åãããã€ã³ãã« ISH ãã¡ãŒã ãŠã§ã¢ x86 ã®ã³ãŒã ã»ã¯ã·ã§ã³
0025æé
FTP
Intel TXE ãã¡ãŒã ãŠã§ã¢ ã³ãŒã ã»ã¯ã·ã§ã³ (x86ãIntel ã«ãã£ãŠçœ²å)
0036æé
IUNP
æªç¥æ°
0038æé
OBBP
UEFI BIOSãDXE ãã§ãŒãºãx86ãæªçœ²å
TXE ãã¡ãŒã ãŠã§ã¢ã®åæäžã«ãRESET åŸãCPU ã®ã¢ãã¬ã¹ç©ºéã®åºæ¬çãªå 容 (FITãACMãRESET ãã¯ãã«ãªã©) ãæºåãããŸã§ãTXE ãããã»ããµããã®ç¶æ ã«ç¶æããããšãæããã«ãªããŸããã ããã«ãTXE ã¯ãã®ããŒã¿ã SRAM ã«é 眮ãããã®åŸäžæçã«ããã»ããµã«ãããžã®ã¢ã¯ã»ã¹ãæäŸããRESET ããã解æŸãããŸãã
ã«ãŒãããããèŠæãã
ããŠã次ã¯ãããããã«ç§»ããŸãããã ç§ãã¡ã¯ãã€ãŠãå€ãã®ã·ã¹ãã 㧠SPI ãã©ãã·ã¥èšè¿°åã SPI ãã©ãã·ã¥ ã¡ã¢ãªã®é åã«ã¢ã¯ã»ã¹ããæš©éãæã£ãŠããããšãçºèŠããŸããããã®ããããã®ã¡ã¢ãªã®ãã¹ãŠã®ãŠãŒã¶ãŒã¯ä»»æã®é åã«æžã蟌ã¿ãšèªã¿åãã®äž¡æ¹ãè¡ãããšãã§ããŸãã ãããã®ã ãšãã§ããªãã
MEinfo ãŠãŒãã£ãªã㣠(Intel STK 補) ã§ç¢ºèªãããšããããããã®ã·ã¹ãã ã®è£œé ã¢ãŒããéããããŠããªãããããããã»ãã ãã¥ãŒãº (FPF) ãäžå®ã®ç¶æ ã®ãŸãŸã«ãªã£ãŠããããšãããããŸããã ã¯ãããã®ãããªå ŽåãIntel BG ã¯æå¹ã«ãç¡å¹ã«ããªããŸããã
ããã§ã¯æ¬¡ã®ã·ã¹ãã ã«ã€ããŠèª¬æããŸã (Intel BG ãšãã®èšäºã§åŸè¿°ããå 容ã«ã€ããŠã¯ãHaswell ããã»ããµ ãã€ã¯ãã¢ãŒããã¯ãã£ä»¥äžã®ã·ã¹ãã ã«ã€ããŠèª¬æããŸã)ã
- ãã¹ãŠã®ã®ã¬ãã€ã補åã
- ãã¹ãŠã® MSI 補åã
- 21 å°ã® Lenovo ã©ããããã ã¢ãã«ãš 4 å°ã® Lenovo ãµãŒã㌠ã¢ãã«ã
ãã¡ãããç§ãã¡ã¯ãã®çºèŠãã€ã³ãã«ã ãã§ãªããããã®ãã³ããŒã«ãå ±åããŸããã
ããã®ã¿é©åãªå¯Ÿå¿ãè¡ãããŸãã ã¬ãã誰ãåé¡ãèªããã®ãããããŠ
ã®ã¬ãã€ã è匱æ§ã«é¢ããæ å ±ã¯åãå ¥ããããã ããç¹ã«ã³ã¡ã³ãã¯ããªãã£ãã
ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ MSI (æå·åãããã»ãã¥ãªãã£å§åãéä¿¡ãããã) PGP å ¬éããŒãéä¿¡ãããšããç§ãã¡ã®èŠæ±ã«ãããå®å šã«åæ¢ããŠããŸããŸããã 圌ãã¯ãèªç€Ÿã¯ããŒããŠã§ã¢ã¡ãŒã«ãŒã§ãããPGP ããŒã補é ããŠããããã§ã¯ãªãããšè¿°ã¹ãŠããŸãã
ãããããã£ãšéèŠãªããšã§ãã ãã¥ãŒãºã¯æªå®çŸ©ã®ç¶æ
ã®ãŸãŸã§ããããããŠãŒã¶ãŒ (ãŸãã¯æ»æè
) ãèªåã§ãã¥ãŒãºãããã°ã©ã ã§ããŸã (æãé£ããã®ã¯
1. Windows OS ãèµ·åããŸã (äžè¬ã«ãç®çã® OS çšã® Intel STK ã®é¡äŒŒç©ãéçºããŠããå Žåã¯ã以äžã§èª¬æããæé ã Linux ãããå®è¡ã§ããŸã)ã MEinfo ãŠãŒãã£ãªãã£ã䜿çšããŠããã®ã·ã¹ãã ã®ãã¥ãŒãºãããã°ã©ã ãããŠããªãããšã確èªããŸãã
2. ãã©ãã·ã¥ ããã°ã©ãã³ã° ããŒã«ã䜿çšããŠãã©ãã·ã¥ ã¡ã¢ãªã®å
容ãèªã¿åããŸãã
3. ä»»æã® UEFI BIOS ç·šéããŒã«ã䜿çšããŠèªã¿åã£ãã€ã¡ãŒãžãéããå¿
èŠãªå€æŽãå ã (ã«ãŒããããã®å®è£
ãªã©)ãME é åå
ã®æ¢åã® KEYM ããã³ IBBM æ§é ãäœæ/ç·šéããŸãã
ç»åã§ã¯ RSA ããŒã®å
¬ééšåã匷調衚瀺ãããŠããããã®ããã·ã¥ã¯ã€ã³ãã« BG æ§æã®æ®ãã®éšåãšãšãã«ãããã»ãã ãã¥ãŒãºã«ããã°ã©ã ãããŸãã
4. Flash Image Tool ã䜿çšããŠã(Intel BG æ§æãèšå®ããããšã«ãã) æ°ãããã¡ãŒã ãŠã§ã¢ ã€ã¡ãŒãžãæ§ç¯ããŸãã
5. ãã©ãã·ã¥ ããã°ã©ãã³ã° ããŒã«ã䜿çšããŠæ°ããã€ã¡ãŒãžããã©ãã·ã¥ã«æžã蟌ã¿ãMEinfo ã䜿çšã㊠ME é åã«ã€ã³ãã« BG æ§æãå«ãŸããŠããããšã確èªããŸãã
6. ãã©ãã·ã¥ ããã°ã©ãã³ã° ããŒã«ã䜿çšããŠã補é ã¢ãŒããéããŸãã
7. ã·ã¹ãã ãåèµ·åããåŸãMEinfo ã䜿çšããŠãFPF ãããã°ã©ã ãããããšã確èªã§ããŸãã
ãããã®ã¢ã¯ã·ã§ã³ æ°žé ã« ãã®ã·ã¹ãã ã§ã€ã³ãã« BG ãæå¹ã«ããŸãã ã¢ã¯ã·ã§ã³ãå
ã«æ»ãããšã¯äžå¯èœã«ãªããŸããããã¯ã次ã®ããšãæå³ããŸãã
- ã«ãŒã ããŒã®ãã©ã€ããŒãéšåã®ææè (ã€ãŸããIntel BG ãæå¹ã«ãã人) ã ããããã®ã·ã¹ãã ã® UEFI BIOS ãæŽæ°ã§ããŸãã
- ããšãã°ããã°ã©ãã䜿çšããŠå ã®ãã¡ãŒã ãŠã§ã¢ããã®ã·ã¹ãã ã«æ»ããŠããé»æºãå ¥ããŸãã (æ€èšŒãšã©ãŒãçºçããå Žåã®åŒ·å¶ããªã·ãŒã®çµæ)ã
- ãã®ãã㪠UEFI BIOS ãåé€ããã«ã¯ãããã°ã©ã ããã FPF ãåãããããã»ããããã¯ãªãŒã³ãªããããã»ãããšäº€æããå¿ èŠããããŸã (ã€ãŸããè»ã®äŸ¡æ Œã§èµ€å€ç·ã¯ãã ä»ãã¹ããŒã·ã§ã³ãå©çšã§ããå Žåã¯ãããã»ãããåã¯ãã ä»ããããããã¶ãŒããŒãã亀æããã ãã§ã) ïŒã
ãã®ãããªã«ãŒããããã§äœãã§ããããç解ããã«ã¯ãUEFI BIOS ç°å¢ã§ã®ã³ãŒãã®å®è¡ãå¯èœã«ãããã®ãè©äŸ¡ããå¿ èŠããããŸãã ããšãã°ãããã»ããµã®æãç¹æš©ã®ããã¢ãŒãã§ãã SMM ã§èããŸãã ãã®ãããªã«ãŒããããã«ã¯æ¬¡ã®ç¹æ§ãããå ŽåããããŸãã
- OS ãšäžŠè¡ããŠå®è¡ãããŸã (ã¿ã€ããŒã«ãã£ãŠããªã¬ãŒããã SMI å²ã蟌ã¿ãçæããããšã§åŠçãæ§æã§ããŸã)ã
- SMM ã¢ãŒãã®å©ç¹ããã¹ãŠåããŠããŸã (RAM ããã³ããŒããŠã§ã¢ ãªãœãŒã¹ã®å 容ãžã®ãã« ã¢ã¯ã»ã¹ãOS ããã®ç§å¯ä¿æ)ã
- ã«ãŒãããã ã³ãŒãã¯ãSMM ã¢ãŒãã§èµ·åãããšæå·åããã³åŸ©å·åã§ããŸãã SMM ã¢ãŒãã§ã®ã¿å©çšå¯èœãªããŒã¿ã¯ãã¹ãŠæå·åããŒãšããŠäœ¿çšã§ããŸãã ããšãã°ãSMRAM å ã®äžé£ã®ã¢ãã¬ã¹ããã®ããã·ã¥ã§ãã ãã®ããŒãååŸããã«ã¯ãSMM ã«å ¥ãå¿ èŠããããŸãã ãã㯠XNUMX ã€ã®æ¹æ³ã§å®è¡ã§ããŸãã SMM ã³ãŒã㧠RCE ãèŠã€ããŠãããæªçšããããç¬èªã® SMM ã¢ãžã¥ãŒã«ã BIOS ã«è¿œå ããŸããBoot Guard ãæå¹ã«ãªã£ãŠãããããããã¯äžå¯èœã§ãã
ãããã£ãŠããã®è匱æ§ã«ãããæ»æè ã¯æ¬¡ã®ããšãè¡ãããšãã§ããŸãã
- ã·ã¹ãã å ã«ç®çäžæã®åé€äžå¯èœãªé ãããã«ãŒãããããäœæããŸãã
- Intel SoC å ã®ãããã»ãã ã³ã¢ã® XNUMX ã€ãã€ãŸã Intel ISH ã§ã³ãŒããå®è¡ããŸã (å³ãããèŠãŠãã ãã)ã
Intel ISH ãµãã·ã¹ãã ã®æ©èœã¯ãŸã 調æ»ãããŠããŸããããIntel ME ã«å¯Ÿããèå³æ·±ãæ»æãã¯ãã«ã§ããããã§ãã
æèŠ
- ãã®èª¿æ»ã§ã¯ãIntel Boot Guard ãã¯ãããžãã©ã®ããã«æ©èœãããã«é¢ããæè¡çãªèª¬æãæäŸãããŸããã ã€ã³ãã«ã®ã»ãã¥ãªãã£ãŒã»ã¹ã«ãŒã»ãªãã¹ãã¥ãªãã£ã»ã¢ãã«ã«ã¯ããã€ãã®ç§å¯ããããŸãã
- ã·ã¹ãã å ã«åé€äžå¯èœãªã«ãŒãããããäœæã§ããæ»æã·ããªãªã瀺ãããŠããŸãã
- ææ°ã® Intel ããã»ããµã¯ãBIOS ãèµ·åããåã§ãå€ãã®ç¬èªã³ãŒããå®è¡ã§ããããšãããããŸããã
- Intel 64 ã¢ãŒããã¯ãã£ãåãããã©ãããã©ãŒã ã¯ãããŒããŠã§ã¢æ€èšŒãç¬èªã®ãã¯ãããžãšãµãã·ã¹ãã (SoC ãããã»ããã® 86 ã€ã®ã³ã¢: x86 MEãxXNUMX ISHãããã³ ARC PMC) ã®å¢å ãªã©ãããªãŒ ãœãããŠã§ã¢ã®å®è¡ã«ã¯ãŸããŸãé©ããŠããŸããã
ç·©å
æå³çã«è£œé ã¢ãŒããéãããŸãŸã«ãããã³ããŒã¯ãå¿ ããããéããã¹ãã§ãã ãããŸã§ã®ãšããã圌ãã¯ç®ãéããŠããã ãã§ãããæ°ãã Kaby Lake ã·ã¹ãã ã¯ããã瀺ããŠããŸãã
ãŠãŒã¶ãŒã¯ã-closemnf ãªãã·ã§ã³ãæå®ããŠãã©ãã·ã¥ ããã°ã©ãã³ã° ããŒã«ãå®è¡ããããšã«ãããã·ã¹ãã (èšèŒãããŠããè匱æ§ã®åœ±é¿ãåãã) 㧠Intel BG ãç¡å¹ã«ããããšãã§ããŸãã ãŸãã(MEinfo ã䜿çšããŠ) ME é åã®ã€ã³ãã« BG ã®æ§æããFPF ã§ã®ããã°ã©ãã³ã°åŸã«ãã®ãã¯ãããžãŒãæ£ç¢ºã«ãªãã«ããããã«æäŸãããŠããããšã確èªããå¿
èŠããããŸãã
åºæïŒ habr.com