ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
เราเสนอให้ลงไปที่ระดับต่ำอีกครั้งและพูดคุยเกี่ยวกับความปลอดภัยของเฟิร์มแวร์สำหรับแพลตฟอร์มคอมพิวเตอร์ที่รองรับ x86 ในครั้งนี้ ส่วนประกอบหลักของการศึกษาวิจัยนี้คือ Intel Boot Guard (อย่าสับสนกับ Intel BIOS Guard!) ซึ่งเป็นเทคโนโลยีการบูต BIOS ที่รองรับฮาร์ดแวร์ที่เชื่อถือได้ ซึ่งผู้จำหน่ายระบบคอมพิวเตอร์สามารถเปิดหรือปิดใช้งานอย่างถาวรในขั้นตอนการผลิตได้ สูตรการวิจัยที่เราคุ้นเคยอยู่แล้ว: หั่นการนำเทคโนโลยีนี้ไปใช้โดยใช้วิศวกรรมย้อนกลับเป็นชิ้นบาง ๆ อธิบายสถาปัตยกรรมของมัน เติมรายละเอียดที่ไม่มีเอกสาร ปรุงรสด้วยเวกเตอร์โจมตีเพื่อลิ้มรสและผสม มาเติมเชื้อเพลิงให้กับเรื่องราวของการที่ข้อผิดพลาดที่ถูกโคลนมานานหลายปีในการผลิตของผู้จำหน่ายหลายรายทำให้ผู้โจมตีใช้เทคโนโลยีนี้เพื่อสร้างรูทคิทที่ซ่อนอยู่ในระบบซึ่งไม่สามารถลบออกได้ (แม้จะใช้โปรแกรมเมอร์ก็ตาม)

อย่างไรก็ตาม บทความนี้อ้างอิงจากรายงาน “On Guard of Rootkits: Intel BootGuard” จากการประชุม ซีโร่ไนท์ส 2016 และการประชุมครั้งที่ 29 เดฟคอน รัสเซีย (ทั้งการนำเสนอ. ที่นี่).

เฟิร์มแวร์สำหรับแพลตฟอร์มคอมพิวเตอร์ที่มีสถาปัตยกรรม Intel 64

ก่อนอื่นมาตอบคำถาม: เฟิร์มแวร์ของแพลตฟอร์มคอมพิวเตอร์สมัยใหม่ที่มีสถาปัตยกรรม Intel 64 คืออะไร? แน่นอน UEFI BIOS แต่คำตอบดังกล่าวจะไม่ถูกต้อง มาดูภาพซึ่งแสดงสถาปัตยกรรมนี้ในเวอร์ชันเดสก์ท็อป (แล็ปท็อป)

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
พื้นฐานคือลิงค์:

  • โปรเซสเซอร์ (CPU, หน่วยประมวลผลกลาง) ซึ่งนอกเหนือจากคอร์หลักแล้วยังมีคอร์กราฟิกในตัว (ไม่ใช่ในทุกรุ่น) และตัวควบคุมหน่วยความจำ (IMC, Integrated Memory Controller)
  • ชิปเซ็ต (PCH, Platform Controller Hub) ที่มีตัวควบคุมต่างๆ สำหรับการโต้ตอบกับอุปกรณ์ต่อพ่วงและการจัดการระบบย่อย หนึ่งในนั้นคือ Intel Management Engine (ME) ที่รู้จักกันดีซึ่งมีเฟิร์มแวร์ (เฟิร์มแวร์ Intel ME)

นอกเหนือจากที่กล่าวมาข้างต้น แล็ปท็อปจำเป็นต้องมีคอนโทรลเลอร์ในตัว (ACPI EC, Advanced Control และ Power Interface Embedded Controller) ซึ่งรับผิดชอบการทำงานของระบบย่อยพลังงาน, ทัชแพด, คีย์บอร์ด, ปุ่ม Fn (ความสว่างหน้าจอ, ระดับเสียง , ไฟแบ็คไลท์คีย์บอร์ด ฯลฯ ) และอื่นๆ และก็มีเฟิร์มแวร์ของตัวเองด้วย

ดังนั้นจำนวนรวมของเฟิร์มแวร์ข้างต้นคือเฟิร์มแวร์ของแพลตฟอร์มคอมพิวเตอร์ (เฟิร์มแวร์ระบบ) ซึ่งจัดเก็บไว้ในหน่วยความจำแฟลช SPI ทั่วไป เพื่อให้ผู้ใช้หน่วยความจำนี้ไม่สับสนว่าอยู่ที่ไหน เนื้อหาของหน่วยความจำนี้จึงถูกแบ่งออกเป็นภูมิภาคต่างๆ ดังต่อไปนี้ (ดังแสดงในรูป)

  • ไบออส UEFI;
  • เฟิร์มแวร์ ACPI EC (ภูมิภาคที่แยกต่างหากปรากฏขึ้นพร้อมกับสถาปัตยกรรมไมโครโปรเซสเซอร์ Skylake (2015) แต่เรายังไม่เห็นตัวอย่างการใช้งานโดยทั่วไป ดังนั้นเฟิร์มแวร์ของคอนโทรลเลอร์ในตัวยังคงรวมอยู่ใน UEFI BIOS) ;
  • เฟิร์มแวร์ Intel ME;
  • การกำหนดค่า (ที่อยู่ MAC ฯลฯ ) ของอะแดปเตอร์เครือข่าย GbE (Gigabit Ethernet) ในตัว
  • Flash Descriptor คือขอบเขตหลักของหน่วยความจำแฟลชที่มีตัวชี้ไปยังภูมิภาคอื่นๆ รวมถึงการอนุญาตในการเข้าถึง

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
SPI บัสมาสเตอร์ซึ่งเป็นตัวควบคุม SPI ที่สร้างไว้ในชิปเซ็ตซึ่งมีการเข้าถึงหน่วยความจำนี้ มีหน้าที่รับผิดชอบในการกำหนดขอบเขตการเข้าถึงภูมิภาค (ตามสิทธิ์ที่ระบุ) หากตั้งค่าการอนุญาตเป็นค่าที่แนะนำของ Intel (ด้วยเหตุผลด้านความปลอดภัย) ผู้ใช้ SPI flash แต่ละคนจะมีสิทธิ์เข้าถึงแบบเต็ม (อ่าน/เขียน) ในภูมิภาคของตนเท่านั้น และที่เหลือเป็นแบบอ่านอย่างเดียวหรือไม่สามารถเข้าถึงได้ ข้อเท็จจริงที่รู้จักกันดี: ในหลาย ๆ ระบบ CPU มีสิทธิ์เข้าถึง UEFI BIOS และ GbE เต็มรูปแบบ สิทธิ์การอ่านเฉพาะตัวอธิบายแฟลช และไม่มีสิทธิ์เข้าถึงภูมิภาค Intel ME เลย ทำไมในหลาย ๆ และไม่ทั้งหมด? สิ่งที่แนะนำไม่จำเป็น เราจะบอกรายละเอียดเพิ่มเติมให้คุณทราบในบทความต่อไป

กลไกในการปกป้องเฟิร์มแวร์แพลตฟอร์มคอมพิวเตอร์จากการดัดแปลง

แน่นอนว่าเฟิร์มแวร์ของแพลตฟอร์มคอมพิวเตอร์ควรได้รับการปกป้องจากการประนีประนอมที่อาจเกิดขึ้น ซึ่งจะช่วยให้ผู้โจมตีสามารถตั้งหลักได้ (เอาตัวรอดจากการอัปเดต/การติดตั้งระบบปฏิบัติการใหม่) รันโค้ดในโหมดที่ได้รับสิทธิพิเศษสูงสุด เป็นต้น และการจำกัดการเข้าถึงขอบเขตหน่วยความจำแฟลช SPI นั้นไม่เพียงพอ ดังนั้น เพื่อปกป้องเฟิร์มแวร์จากการดัดแปลง จึงมีการใช้กลไกต่างๆ เฉพาะสำหรับแต่ละสภาพแวดล้อมการทำงาน

ดังนั้น เฟิร์มแวร์ Intel ME จึงได้รับการลงนามเพื่อควบคุมความสมบูรณ์และความถูกต้อง และได้รับการตรวจสอบโดยตัวควบคุม ME ทุกครั้งที่โหลดลงในหน่วยความจำ ME UMA กระบวนการตรวจสอบนี้เราได้หารือกันแล้วในหนึ่งในนั้น บทความ, สำหรับระบบย่อย Intel ME โดยเฉพาะ

และตามกฎแล้วเฟิร์มแวร์ ACPI EC จะถูกตรวจสอบเพื่อความสมบูรณ์เท่านั้น อย่างไรก็ตาม เนื่องจากไบนารีนี้รวมอยู่ใน UEFI BIOS จึงมักจะอยู่ภายใต้กลไกการป้องกันแบบเดียวกับที่ UEFI BIOS ใช้เกือบทุกครั้ง มาพูดถึงพวกเขากันดีกว่า

กลไกเหล่านี้สามารถแบ่งได้เป็นสองประเภท

การป้องกันการเขียนในภูมิภาค UEFI BIOS

  1. การป้องกันทางกายภาพของเนื้อหาของหน่วยความจำแฟลช SPI ด้วยจัมเปอร์ป้องกันการเขียน
  2. ปกป้องการฉายภาพของขอบเขต UEFI BIOS ในพื้นที่ที่อยู่ CPU โดยใช้การลงทะเบียนชิปเซ็ต PRx
  3. การบล็อกความพยายามในการเขียนไปยังภูมิภาค UEFI BIOS โดยการสร้างและประมวลผลการขัดจังหวะ SMI ที่สอดคล้องกันโดยการตั้งค่าบิต BIOS_WE/BLE และ SMM_BWP ในการลงทะเบียนชิปเซ็ต
  4. เวอร์ชันขั้นสูงของการป้องกันนี้คือ Intel BIOS Guard (PFAT)

นอกเหนือจากกลไกเหล่านี้แล้ว ผู้จำหน่ายยังสามารถพัฒนาและใช้มาตรการรักษาความปลอดภัยของตนเองได้ (เช่น การลงนามแคปซูลด้วยการอัพเดต UEFI BIOS)

สิ่งสำคัญคือต้องทราบว่าในระบบเฉพาะ (ขึ้นอยู่กับผู้จำหน่าย) อาจไม่สามารถใช้กลไกการป้องกันข้างต้นทั้งหมดได้ อาจไม่สามารถนำไปใช้ได้เลย หรืออาจถูกนำไปใช้ในลักษณะที่มีช่องโหว่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับกลไกเหล่านี้และสถานการณ์ในการนำไปใช้ได้ บทความนี้. สำหรับผู้ที่สนใจ เราขอแนะนำให้คุณอ่านบทความทั้งหมดเกี่ยวกับความปลอดภัยของ UEFI BIOS จาก โค้ดรัช.

การรับรองความถูกต้อง UEFI BIOS

เมื่อเราพูดถึงเทคโนโลยีการบูตที่เชื่อถือได้ สิ่งแรกที่นึกถึงคือ Secure Boot อย่างไรก็ตาม ในทางสถาปัตยกรรมนั้น ได้รับการออกแบบมาเพื่อตรวจสอบความถูกต้องของส่วนประกอบภายนอก UEFI BIOS (ไดรเวอร์ บูตโหลดเดอร์ ฯลฯ) ไม่ใช่ตัวเฟิร์มแวร์เอง

ดังนั้น Intel ใน SoCs ที่มีสถาปัตยกรรมไมโคร Bay Trail (2012) จึงได้ใช้ Secure Boot ที่ไม่ปิดใช้งานฮาร์ดแวร์ (Verified Boot) ซึ่งไม่มีอะไรที่เหมือนกันกับเทคโนโลยี Secure Boot ที่กล่าวถึงข้างต้น ต่อมา (2013) กลไกนี้ได้รับการปรับปรุงและเผยแพร่ภายใต้ชื่อ Intel Boot Guard สำหรับเดสก์ท็อปที่มีสถาปัตยกรรมไมโคร Haswell

ก่อนที่จะอธิบาย Intel Boot Guard เรามาดูสภาพแวดล้อมการดำเนินการในสถาปัตยกรรม Intel 64 ซึ่งเมื่อรวมกันแล้วจะเป็นรากฐานของความไว้วางใจสำหรับเทคโนโลยีการบูตที่เชื่อถือได้นี้

CPU ของ Intel

Cap แนะนำว่าโปรเซสเซอร์คือสภาพแวดล้อมการดำเนินการหลักในสถาปัตยกรรม Intel 64 เหตุใดจึงถือเป็นรากฐานของความไว้วางใจ ปรากฎว่าสิ่งที่ทำให้เขาเป็นเช่นนั้นคือการครอบครององค์ประกอบต่อไปนี้:

  • Microcode ROM เป็นหน่วยความจำแบบไม่ลบเลือนและไม่สามารถเขียนซ้ำได้สำหรับจัดเก็บไมโครโค้ด เชื่อกันว่าไมโครโค้ดคือการนำระบบคำสั่งของโปรเซสเซอร์ไปใช้โดยใช้คำสั่งที่ง่ายที่สุด เกิดขึ้นในไมโครโค้ดด้วย เป็นโรคจิต. ดังนั้นใน BIOS คุณจะพบไบนารีที่มีการอัพเดตไมโครโค้ด (ซ้อนทับระหว่างการบู๊ตเนื่องจาก ROM ไม่สามารถเขียนทับได้) เนื้อหาของไบนารีเหล่านี้ได้รับการเข้ารหัส ซึ่งทำให้การวิเคราะห์มีความซับซ้อนอย่างมาก (ดังนั้น เนื้อหาเฉพาะของไมโครโค้ดจึงเป็นที่รู้จักเฉพาะผู้ที่พัฒนาไมโครโค้ดเท่านั้น) และลงนามเพื่อควบคุมความสมบูรณ์และความถูกต้อง
  • ปุ่ม AES สำหรับการถอดรหัสเนื้อหาของการอัพเดตไมโครโค้ด
  • แฮชของคีย์สาธารณะ RSA ที่ใช้ในการตรวจสอบลายเซ็นของการอัพเดตไมโครโค้ด
  • แฮชพับลิกคีย์ RSA ซึ่งตรวจสอบลายเซ็นของโมดูลโค้ด ACM (Authenticated Code Module) ที่พัฒนาโดย Intel ซึ่ง CPU สามารถเปิดใช้งานก่อนการประมวลผล BIOS (สวัสดีไมโครโค้ด) หรือระหว่างการดำเนินการเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น

อินเทล เอ็มอี

บล็อกของเรามีไว้สำหรับระบบย่อยนี้โดยเฉพาะ สอง บทความ. ขอให้เราระลึกว่าสภาพแวดล้อมที่ปฏิบัติการได้นี้ใช้ไมโครคอนโทรลเลอร์ที่ติดตั้งอยู่ในชิปเซ็ตและเป็นสภาพแวดล้อมที่ซ่อนเร้นและมีสิทธิ์มากที่สุดในระบบ

แม้จะเป็นความลับ แต่ Intel ME ยังเป็นรากฐานของความไว้วางใจเนื่องจากมี:

  • ME ROM - หน่วยความจำไม่ลบเลือนและไม่สามารถเขียนซ้ำได้ (ไม่มีวิธีการอัพเดต) ที่มีโค้ดเริ่มต้นรวมถึงแฮช SHA256 ของคีย์สาธารณะ RSA ซึ่งตรวจสอบลายเซ็นของเฟิร์มแวร์ Intel ME
  • คีย์ AES สำหรับจัดเก็บข้อมูลที่เป็นความลับ
  • การเข้าถึงชุดฟิวส์ (FPF, ฟิวส์ที่ตั้งโปรแกรมได้ภาคสนาม) ที่รวมอยู่ในชิปเซ็ตเพื่อการจัดเก็บข้อมูลบางอย่างอย่างถาวร รวมถึงข้อมูลที่ระบุโดยผู้จำหน่ายระบบคอมพิวเตอร์

Intel Boot Guard 1.x

ข้อจำกัดความรับผิดชอบเล็กน้อย หมายเลขเวอร์ชันเทคโนโลยี Intel Boot Guard ที่เราใช้ในบทความนี้เป็นตัวเลขที่กำหนดเอง และอาจไม่เกี่ยวข้องกับหมายเลขที่ใช้ในเอกสารภายในของ Intel นอกจากนี้ ข้อมูลที่ให้ไว้ที่นี่เกี่ยวกับการใช้เทคโนโลยีนี้ได้รับในระหว่างการวิศวกรรมย้อนกลับ และอาจมีความไม่ถูกต้องเมื่อเปรียบเทียบกับข้อกำหนดสำหรับ Intel Boot Guard ซึ่งไม่น่าจะมีการเผยแพร่เลย

ดังนั้น Intel Boot Guard (BG) จึงเป็นเทคโนโลยีการตรวจสอบการรับรองความถูกต้อง UEFI BIOS ที่รองรับฮาร์ดแวร์ เมื่อพิจารณาจากคำอธิบายสั้นๆ ในหนังสือ [Platform Embedded Security Technology Revealed, บทที่ Boot with Integrity หรือ Not Boot] มันทำงานเป็นห่วงโซ่การบูตที่เชื่อถือได้ และลิงค์แรกในนั้นคือรหัสบูต (ไมโครโค้ด) ภายใน CPU ซึ่งถูกกระตุ้นโดยเหตุการณ์ RESET (อย่าสับสนกับเวกเตอร์ RESET ใน BIOS!) CPU ค้นหาโมดูลรหัสที่พัฒนาและลงนามโดย Intel (ACM เริ่มต้น Intel BG) บนหน่วยความจำแฟลช SPI โหลดลงในแคช ตรวจสอบ (มีการระบุไว้ข้างต้นแล้วว่า CPU มีแฮชของรหัสสาธารณะที่ตรวจสอบ ACM ลายเซ็นต์) และเริ่มต้น

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard

โมดูลโค้ดนี้มีหน้าที่ตรวจสอบส่วนเริ่มต้นเล็กๆ ของ UEFI BIOS - Initial Boot Block (IBB) ซึ่งในทางกลับกันจะมีฟังก์ชันสำหรับตรวจสอบส่วนหลักของ UEFI BIOS ดังนั้น Intel BG ช่วยให้คุณสามารถตรวจสอบความถูกต้องของ BIOS ก่อนที่จะโหลดระบบปฏิบัติการ (ซึ่งสามารถทำได้ภายใต้การควบคุมดูแลของเทคโนโลยี Secure Boot)

เทคโนโลยี Intel BG มีโหมดการทำงานสองโหมด (และโหมดหนึ่งไม่รบกวนโหมดอื่น กล่าวคือ สามารถเปิดใช้งานทั้งสองโหมดบนระบบ หรือปิดใช้งานทั้งสองโหมดได้)

วัดบูต

ในโหมด Measured Boot (MB) แต่ละองค์ประกอบการบูต (เริ่มต้นด้วย ROM บูต CPU) “จะวัด” องค์ประกอบถัดไปโดยใช้ความสามารถของ TPM (Trusted Platform Module) สำหรับผู้ที่ไม่ทราบให้ฉันอธิบาย

TPM มี PCR (Platform Configuration Registers) ซึ่งผลลัพธ์ของการดำเนินการแฮชจะถูกเขียนตามสูตร:

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard

เหล่านั้น. ค่า PCR ปัจจุบันขึ้นอยู่กับค่าก่อนหน้า และรีจิสเตอร์เหล่านี้จะถูกรีเซ็ตเมื่อระบบถูกรีเซ็ตเท่านั้น

ดังนั้น ในโหมด MB ในบางช่วงเวลา PCR จะสะท้อนถึงตัวระบุเฉพาะ (ภายในความสามารถของการดำเนินการแฮช) ของโค้ดหรือข้อมูลที่ถูก "วัด" ค่า PCR สามารถใช้ในการดำเนินการเข้ารหัสข้อมูลบางอย่าง (TPM_Seal) ได้ หลังจากนี้ การถอดรหัส (TPM_Unseal) จะเป็นไปได้ก็ต่อเมื่อค่า PCR ไม่เปลี่ยนแปลงอันเป็นผลมาจากการโหลด (เช่น ไม่มีการแก้ไขส่วนประกอบ "ที่วัดได้" แม้แต่รายการเดียว)

ยืนยันการบูต

สิ่งที่แย่ที่สุดสำหรับผู้ที่ต้องการแก้ไข UEFI BIOS คือโหมด Verified Boot (VB) ซึ่งส่วนประกอบการบู๊ตแต่ละตัวจะตรวจสอบความสมบูรณ์และความถูกต้องของส่วนประกอบถัดไปแบบเข้ารหัส และในกรณีที่เกิดข้อผิดพลาดในการตรวจสอบ (หนึ่งในนั้น) จะเกิดขึ้น:

  • ปิดเครื่องโดยหมดเวลาตั้งแต่ 1 นาทีถึง 30 นาที (เพื่อให้ผู้ใช้มีเวลาทำความเข้าใจว่าเหตุใดคอมพิวเตอร์จึงไม่บูตและหากเป็นไปได้ให้พยายามกู้คืน BIOS)
  • ปิดระบบทันที (เพื่อให้ผู้ใช้ไม่มีเวลาทำความเข้าใจ ทำอะไรไม่ได้เลย);
  • ทำงานด้วยสีหน้าสงบต่อไป (กรณีที่ไม่มีเวลาเพื่อความปลอดภัยเพราะมีเรื่องสำคัญกว่าต้องทำ)

ทางเลือกของการดำเนินการขึ้นอยู่กับการกำหนดค่า Intel BG ที่ระบุ (กล่าวคือในนโยบายการบังคับใช้ที่เรียกว่า) ซึ่งผู้จำหน่ายแพลตฟอร์มคอมพิวเตอร์จะบันทึกอย่างถาวรในที่เก็บข้อมูลที่ออกแบบมาเป็นพิเศษ - ฟิวส์ชิปเซ็ต (FPF) เราจะกล่าวถึงประเด็นนี้โดยละเอียดในภายหลัง

นอกเหนือจากการกำหนดค่าแล้ว ผู้จำหน่ายยังสร้างคีย์ RSA 2048 สองคีย์ และสร้างโครงสร้างข้อมูลสองโครงสร้าง (แสดงในรูป):

  1. รายการคีย์รูทของผู้ขาย (KEYM, รายการคีย์รูท OEM) ซึ่งประกอบด้วย SVN (หมายเลขเวอร์ชันความปลอดภัย) ของรายการนี้, แฮช SHA256 ของคีย์สาธารณะของรายการถัดไป, คีย์สาธารณะ RSA (เช่น ส่วนสาธารณะของ รูทคีย์ของผู้ขาย) เพื่อตรวจสอบลายเซ็นของแถลงการณ์นี้และลายเซ็นของตัวเอง
  2. IBB Manifest (IBBM, Initial Boot Block Manifest) ซึ่งมี SVN ของ manifesto นี้, แฮช SHA256 ของ IBB, กุญแจสาธารณะสำหรับตรวจสอบลายเซ็นของ manifesto นี้และลายเซ็นนั้นเอง

แฮช SHA256 ของคีย์สาธารณะคีย์รูท OEM จะถูกบันทึกอย่างถาวรในฟิวส์ชิปเซ็ต (FPF) เช่นเดียวกับการกำหนดค่า Intel BG หากการกำหนดค่า Intel BG จัดให้มีการรวมเทคโนโลยีนี้ จากนี้ไปมีเพียงเจ้าของส่วนตัวของ OEM Root Key เท่านั้นที่สามารถอัปเดต BIOS บนระบบนี้ได้ (เช่น สามารถคำนวณรายการเหล่านี้ใหม่ได้) เช่น ผู้ขาย

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard

เมื่อดูภาพจะเกิดข้อสงสัยทันทีเกี่ยวกับความจำเป็นในห่วงโซ่การตรวจสอบที่ยาวนานเช่นนี้ - พวกเขาอาจใช้รายการเดียวก็ได้ ทำไมต้องทำให้เรื่องซับซ้อน?

ในความเป็นจริง Intel จึงเปิดโอกาสให้ผู้จำหน่ายใช้คีย์ IBB ที่แตกต่างกันสำหรับกลุ่มผลิตภัณฑ์ที่แตกต่างกันและอีกหนึ่งคีย์เป็นรูทคีย์ หากส่วนที่เป็นส่วนตัวของคีย์ IBB (ซึ่งมีการลงนามรายการที่สอง) รั่วไหล เหตุการณ์จะส่งผลกระทบต่อกลุ่มผลิตภัณฑ์เพียงรายการเดียวเท่านั้น และจนกว่าผู้จำหน่ายจะสร้างคู่ใหม่ และรวมรายการที่ได้รับการคำนวณใหม่ในการอัพเดต BIOS ครั้งถัดไป

แต่หากคีย์รูท (ที่มีการเซ็นชื่อรายการแรก) จะถูกบุกรุก จะไม่สามารถแทนที่คีย์ดังกล่าวได้ ไม่มีขั้นตอนการเพิกถอนที่กำหนดไว้ แฮชของส่วนสาธารณะของคีย์นี้ถูกตั้งโปรแกรมไว้ใน FPF ทุกครั้ง

การกำหนดค่า Intel Boot Guard

ตอนนี้เรามาดูการกำหนดค่า Intel BG และกระบวนการสร้างอย่างละเอียดยิ่งขึ้น หากคุณดูแท็บที่เกี่ยวข้องใน GUI ของยูทิลิตี้ Flash Image Tool จาก Intel System Tool Kit (STK) คุณจะสังเกตเห็นว่าการกำหนดค่า Intel BG มีแฮชของส่วนสาธารณะของรูทคีย์ของผู้จำหน่าย สองสามรายการ ค่าที่ไม่ชัดเจน ฯลฯ โปรไฟล์ Intel BG

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard

โครงสร้างของโปรไฟล์นี้:

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
ไม่ใช่_FVME
ปิดการใช้งานเทคโนโลยี Intel BG

1
VE
เปิดใช้งานโหมด VB แล้วปิดเครื่องตามระยะหมดเวลา

2
วีเอ็มอี
เปิดใช้งานทั้งสองโหมด (VB และ MB) ปิดเครื่องตามระยะหมดเวลา

3
VM
เปิดใช้งานทั้งสองโหมดโดยไม่ต้องปิดระบบ

4
ฟวีอี
เปิดใช้งานโหมด VB แล้วปิดเครื่องทันที

5
เอฟวีเอ็มอี
เปิดใช้งานทั้งสองโหมด ปิดเครื่องทันที

ดังที่ได้กล่าวไปแล้วการกำหนดค่า Intel BG จะต้องเขียนเพียงครั้งเดียวและสำหรับทั้งหมดโดยผู้จำหน่ายระบบลงในชิปเซตฟิวส์ (FPF) - อุปกรณ์จัดเก็บข้อมูลฮาร์ดแวร์ขนาดเล็ก (ตามข้อมูลที่ไม่ได้รับการยืนยันเพียง 256 ไบต์เท่านั้น) ภายในชิปเซ็ตซึ่งสามารถตั้งโปรแกรมได้ นอกโรงงานผลิตของ Intel (นั่นคือสาเหตุที่แท้จริง) ตั้งโปรแกรมภาคสนามได้ ฟิวส์)

เหมาะอย่างยิ่งสำหรับการจัดเก็บการกำหนดค่าเนื่องจาก:

  • มีพื้นที่ที่สามารถตั้งโปรแกรมได้ครั้งเดียวสำหรับการจัดเก็บข้อมูล (ตรงกับที่เขียนการกำหนดค่า Intel BG)
  • มีเพียง Intel ME เท่านั้นที่สามารถอ่านและตั้งโปรแกรมได้

ดังนั้น เพื่อตั้งค่าการกำหนดค่าสำหรับเทคโนโลยี Intel BG บนระบบเฉพาะ ผู้จำหน่ายจะดำเนินการต่อไปนี้ระหว่างการผลิต:

  1. การใช้ยูทิลิตี้ Flash Image Tool (จาก Intel STK) จะสร้างอิมเมจเฟิร์มแวร์ด้วยการกำหนดค่า Intel BG ที่กำหนดในรูปแบบของตัวแปรภายในขอบเขต Intel ME (ที่เรียกว่ามิเรอร์ชั่วคราวสำหรับ FPF)
  2. การใช้ยูทิลิตี้ Flash Programming Tool (จาก Intel STK) จะเขียนอิมเมจนี้ไปยังหน่วยความจำแฟลช SPI ของระบบและปิดสิ่งที่เรียกว่า โหมดการผลิต (ในกรณีนี้ คำสั่งที่เกี่ยวข้องจะถูกส่งไปยัง Intel ME)

จากการดำเนินการเหล่านี้ Intel ME จะยอมรับค่าที่ระบุจากมิเรอร์สำหรับ FPF ในภูมิภาค ME เป็น FPF ตั้งค่าความละเอียดในตัวอธิบายแฟลช SPI เป็นค่าที่แนะนำโดย Intel (อธิบายไว้ที่จุดเริ่มต้นของ บทความ) และทำการรีเซ็ตระบบ

การวิเคราะห์การใช้งาน Intel Boot Guard

เพื่อวิเคราะห์การใช้งานเทคโนโลยีนี้โดยใช้ตัวอย่างเฉพาะ เราได้ตรวจสอบระบบต่อไปนี้เพื่อดูร่องรอยของเทคโนโลยี Intel BG:

ระบบ
หมายเหตุ

Gigabyte GA-H170-D3H
สกายเลค มีการสนับสนุน

กิกะไบต์ GA-Q170-D3H
สกายเลค มีการสนับสนุน

กิกะไบต์ GA-B150-HD3
สกายเลค มีการสนับสนุน

MSI H170A เกมมิ่งโปร
สกายเลค ไม่สนับสนุน

Lenovo ThinkPad 460
Skylake รองรับ เปิดใช้งานเทคโนโลยีแล้ว

เลอโนโวโยคะ 2 Pro
แฮสเวลล์ ไม่มีการสนับสนุน

เลอโนโว U330p
แฮสเวลล์ ไม่มีการสนับสนุน

โดย "การสนับสนุน" เราหมายถึงการมีอยู่ของโมดูล ACM เริ่มต้น Intel BG รายการดังกล่าวข้างต้นและรหัสที่เกี่ยวข้องใน BIOS เช่น การนำไปใช้เพื่อการวิเคราะห์

ตัวอย่างเช่น มาดูอันที่ดาวน์โหลดมาจากออฟฟิศกัน รูปภาพเว็บไซต์ผู้จำหน่ายของหน่วยความจำแฟลช SPI สำหรับ Gigabyte GA-H170-D3H (เวอร์ชัน F4)

ROM บูตซีพียู Intel

ก่อนอื่น เรามาพูดถึงการทำงานของโปรเซสเซอร์หากเปิดใช้งานเทคโนโลยี Intel BG

ไม่สามารถค้นหาตัวอย่างไมโครโค้ดที่ถอดรหัสได้ ดังนั้นการดำเนินการที่อธิบายไว้ด้านล่างจะถูกนำไปใช้อย่างไร (ในไมโครโค้ดหรือฮาร์ดแวร์) จึงเป็นคำถามเปิด อย่างไรก็ตามความจริงที่ว่าโปรเซสเซอร์ Intel สมัยใหม่ "สามารถ" ดำเนินการเหล่านี้ได้

หลังจากออกจากสถานะ RESET โปรเซสเซอร์ (เนื้อหาของหน่วยความจำแฟลชได้ถูกแมปลงในพื้นที่ที่อยู่แล้ว) จะค้นหาตาราง FIT (ตารางอินเทอร์เฟซเฟิร์มแวร์) หาง่าย ตัวชี้เขียนไว้ที่ที่อยู่ FFFF FFC0h

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ในตัวอย่างที่อยู่ระหว่างการพิจารณา ค่า 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;
};

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ด้วยเหตุผลที่ไม่ทราบสาเหตุ เช็คซัมไม่ได้ถูกคำนวณในตารางเหล่านี้เสมอไป (ฟิลด์จะเหลือศูนย์)

รายการที่เหลือชี้ไปที่ไบนารีต่างๆ ที่จำเป็นต้องแยกวิเคราะห์/ดำเนินการก่อนที่จะดำเนินการ 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;
};

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ฟิลด์ 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 โครงสร้างส่วนหัวของไบนารีนี้เป็นเรื่องปกติสำหรับโมดูลโค้ดที่พัฒนาโดย 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];
};

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
โปรเซสเซอร์โหลดไบนารีนี้ลงในแคช ตรวจสอบและรัน

ACM สตาร์ทอัพ Intel BG

จากการวิเคราะห์งานของ ACM นี้ ปรากฏชัดเจนว่าดำเนินการดังต่อไปนี้:

  • รับการกำหนดค่า Intel BG จาก Intel ME ซึ่งเขียนลงในฟิวส์ชิปเซ็ต (FPF)
  • พบ KEYM และ IBBM ปรากฏและยืนยันสิ่งเหล่านั้น

หากต้องการค้นหารายการเหล่านี้ ACM ยังใช้ตาราง FIT ซึ่งมีรายการสองประเภทเพื่อระบุข้อมูลโครงสร้าง (ดู FIT_ENTRY_TYPES ด้านบน)

มาดูแถลงการณ์กันดีกว่า ในโครงสร้างของไฟล์ Manifest แรก เราเห็นค่าคงที่ที่ไม่ชัดเจนหลายค่า แฮชของคีย์สาธารณะจากไฟล์ Manifest ที่สอง และคีย์รูต 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];
};

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ในการตรวจสอบคีย์สาธารณะ OEM Root Key เราจำได้ว่าเราใช้แฮชฟิวส์ 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
};

ส่วนที่สองประกอบด้วยแฮช 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 จากรายการแรก) และลายเซ็นของรายการนี้:

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

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ดังนั้นก่อนที่ UEFI BIOS จะเริ่มทำงาน โปรเซสเซอร์จะเปิดตัว ACM ซึ่งจะตรวจสอบความถูกต้องของเนื้อหาในส่วนต่างๆ ด้วยรหัสเฟสของ SEC และ PEI จากนั้น โปรเซสเซอร์จะออกจาก ACM ตามเวกเตอร์ RESET และเริ่มดำเนินการ BIOS

พาร์ติชัน PEI ที่ตรวจสอบแล้วจะต้องมีโมดูลที่จะตรวจสอบส่วนที่เหลือของ BIOS (รหัส DXE) โมดูลนี้ได้รับการพัฒนาโดย IBV (ผู้จำหน่าย BIOS อิสระ) หรือผู้จำหน่ายระบบเอง เพราะ มีเพียงระบบ 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

แม้ว่าเวอร์ชันนี้จะใช้ใน SoC เท่านั้น (ระบบใหม่ที่มีสถาปัตยกรรมไมโครโปรเซสเซอร์ Kaby Lake ยังคงใช้ Intel Boot Guard 1.x ต่อไป) แต่ก็เป็นที่สนใจอย่างมากในการศึกษาตัวเลือกสถาปัตยกรรมใหม่สำหรับแพลตฟอร์ม Intel SoC ซึ่งได้เห็นการเปลี่ยนแปลงที่สำคัญ ตัวอย่างเช่น :

  • ภูมิภาค BIOS และ Intel ME (หรือมากกว่า Intel TXE ตามคำศัพท์สำหรับ Intel SoC) ตอนนี้เป็นภูมิภาค IFWI หนึ่งแห่ง
  • แม้ว่า Intel BG จะเปิดใช้งานบนแพลตฟอร์ม แต่ไม่พบโครงสร้างเช่น FIT, KEYM, IBBM ในหน่วยความจำแฟลช
  • นอกเหนือจากคอร์ TXE และ ISH (x86) แล้ว คอร์ที่สามยังถูกเพิ่มเข้าไปในชิปเซ็ต (ARC อีกครั้ง) - PMC (ตัวควบคุมการจัดการพลังงาน) ซึ่งเกี่ยวข้องกับการรับรองการทำงานของระบบย่อยพลังงานและการตรวจสอบประสิทธิภาพ

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
เนื้อหาของภูมิภาค IFWI ใหม่คือชุดของโมดูลต่อไปนี้:

อคติ
ชื่อ
ลักษณะ

0000 2000 ชม
สมิพ
การกำหนดค่าแพลตฟอร์มบางอย่างที่ลงนามโดยผู้จำหน่าย

0000 6000 ชม
ส.ส.บ
ส่วนรหัสเฟิร์มแวร์ Intel TXE, x86, Intel ที่ลงนาม

0001 0000 ชม
พีเอ็มซีพี
ส่วนรหัสเฟิร์มแวร์ Intel PMC, ARC, Intel ลงนาม

0002 0000 ชม
เอฟทีพีอาร์
ส่วนรหัสเฟิร์มแวร์ Intel TXE, x86, Intel ที่ลงนาม

0007 B000h
ยูซีโอดี
อัพเดตไมโครโค้ดสำหรับ CPU ลงนามโดย Intel

0008 0000 ชม
IBBP
UEFI BIOS, เฟส SEC/PEI, x86, ลงนามโดยผู้จำหน่าย

0021 8000 ชม
สอศ
ส่วนรหัสเฟิร์มแวร์ Intel ISH, x86, ลงนามโดยผู้จำหน่าย

0025 8000 ชม
เอ็นเอฟทีพี
ส่วนรหัสเฟิร์มแวร์ Intel TXE, x86, Intel ที่ลงนาม

0036 1000 ชม
ไอยูเอ็นพี
ไม่เป็นที่รู้จัก

0038 1000 ชม
โอบีบีพี
UEFI BIOS, เฟส DXE, x86, ไม่ได้ลงนาม

ในระหว่างการวิเคราะห์เฟิร์มแวร์ TXE เห็นได้ชัดว่าหลังจาก RESET TXE จะคงโปรเซสเซอร์ไว้ในสถานะนี้จนกว่าจะเตรียมเนื้อหาพื้นฐานของพื้นที่ที่อยู่สำหรับ CPU (FIT, ACM, RESET vector ... ) ยิ่งไปกว่านั้น TXE จะวางข้อมูลนี้ไว้ใน SRAM หลังจากนั้นจะให้สิทธิ์การเข้าถึงโปรเซสเซอร์ที่นั่นชั่วคราวและ "เผยแพร่" จาก RESET

ระวังรูทคิท

เอาล่ะ มาดูเรื่อง "ร้อน" กันดีกว่า ครั้งหนึ่งเราค้นพบว่าในหลายระบบ ตัวอธิบายแฟลช SPI มีสิทธิ์ในการเข้าถึงขอบเขตของหน่วยความจำแฟลช SPI เพื่อให้ผู้ใช้หน่วยความจำนี้สามารถเขียนและอ่านภูมิภาคใดก็ได้ เหล่านั้น. ไม่มีทาง.

หลังจากตรวจสอบด้วยยูทิลิตี้ MEinfo (จาก Intel STK) เราพบว่าโหมดการผลิตบนระบบเหล่านี้ไม่ได้ปิด ดังนั้นฟิวส์ของชิปเซ็ต (FPF) จึงยังคงอยู่ในสถานะที่ไม่ได้กำหนด ใช่ Intel BG จะไม่เปิดหรือปิดในกรณีเช่นนี้

เรากำลังพูดถึงระบบต่อไปนี้ (เกี่ยวกับ Intel BG และสิ่งที่จะอธิบายต่อไปในบทความเราจะพูดถึงระบบที่มีสถาปัตยกรรมไมโครโปรเซสเซอร์ Haswell และสูงกว่า):

  • ผลิตภัณฑ์ Gigabyte ทั้งหมด
  • ผลิตภัณฑ์ MSI ทั้งหมด;
  • แล็ปท็อป Lenovo 21 รุ่น และเซิร์ฟเวอร์ Lenovo 4 รุ่น

แน่นอนว่าเราได้รายงานการค้นพบนี้ไปยังผู้จำหน่ายเหล่านี้รวมถึง Intel ด้วย

ปฏิกิริยาที่เพียงพอก็มาจากเท่านั้น เลอโนโวที่ตระหนักถึงปัญหาและ ปล่อยแพทช์.

กิกะไบต์ ดูเหมือนว่าพวกเขาจะยอมรับข้อมูลเกี่ยวกับช่องโหว่ดังกล่าว แต่ไม่ได้แสดงความคิดเห็นใดๆ ทั้งสิ้น

การสื่อสารกับ ของ MSI หยุดทำงานโดยสิ้นเชิงตามคำขอของเราที่จะส่งคีย์ PGP สาธารณะของคุณ (เพื่อส่งคำแนะนำด้านความปลอดภัยในรูปแบบที่เข้ารหัส) พวกเขาระบุว่า "เป็นผู้ผลิตฮาร์ดแวร์และไม่ผลิตคีย์ PGP"

แต่ขอเข้าประเด็น เนื่องจากฟิวส์ยังคงอยู่ในสถานะที่ไม่ระบุ ผู้ใช้ (หรือผู้โจมตี) สามารถตั้งโปรแกรมได้อย่างอิสระ (สิ่งที่ยากที่สุดคือ ค้นหา Intel STK). เมื่อต้องการทำเช่นนี้ คุณต้องทำตามขั้นตอนต่อไปนี้ให้เสร็จสิ้น

1. บูตเข้าสู่ Windows OS (โดยทั่วไป การดำเนินการที่อธิบายไว้ด้านล่างสามารถทำได้บน Linux หากคุณพัฒนาอะนาล็อกของ Intel STK สำหรับระบบปฏิบัติการที่ต้องการ) การใช้ยูทิลิตี้ MEinfo ตรวจสอบให้แน่ใจว่าไม่ได้ตั้งโปรแกรมฟิวส์ไว้ในระบบนี้

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
2. อ่านเนื้อหาของหน่วยความจำแฟลชโดยใช้ Flash Programming Tool

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
3. เปิดรูปภาพที่อ่านโดยใช้เครื่องมือแก้ไข UEFI BIOS ทำการเปลี่ยนแปลงที่จำเป็น (เช่น แนะนำรูทคิท) สร้าง/แก้ไขโครงสร้าง KEYM และ IBBM ที่มีอยู่ในภูมิภาค ME

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
รูปภาพไฮไลต์ส่วนสาธารณะของคีย์ RSA ซึ่งแฮชจะถูกตั้งโปรแกรมไว้ในฟิวส์ชิปเซ็ตพร้อมกับส่วนที่เหลือของการกำหนดค่า Intel BG

4. การใช้ Flash Image Tool สร้างอิมเมจเฟิร์มแวร์ใหม่ (โดยการตั้งค่าการกำหนดค่า Intel BG)

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
5. เขียนภาพใหม่ลงในหน่วยความจำแฟลชโดยใช้เครื่องมือการเขียนโปรแกรม Flash และตรวจสอบโดยใช้ MEinfo ว่าภูมิภาค ME มีการกำหนดค่า Intel BG แล้ว

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
6. ใช้ Flash Programming Tool เพื่อปิดโหมดการผลิต

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
7. ระบบจะรีบูต หลังจากนั้นคุณสามารถใช้ MEinfo เพื่อตรวจสอบว่า FPF ได้รับการตั้งโปรแกรมไว้แล้ว

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
การกระทำเหล่านี้ ตลอดไป เปิดใช้งาน Intel BG บนระบบนี้ การดำเนินการนี้ไม่สามารถยกเลิกได้ ซึ่งหมายความว่า:

  • เฉพาะเจ้าของส่วนตัวของรูทคีย์ (เช่นผู้ที่เปิดใช้งาน Intel BG) เท่านั้นจึงจะสามารถอัปเดต UEFI BIOS บนระบบนี้ได้
  • หากคุณคืนเฟิร์มแวร์ดั้งเดิมให้กับระบบนี้เช่นโดยใช้โปรแกรมเมอร์มันจะไม่เปิดขึ้นมาด้วยซ้ำ (ผลที่ตามมาของนโยบายการบังคับใช้ในกรณีที่เกิดข้อผิดพลาดในการตรวจสอบ)
  • ในการกำจัด UEFI BIOS คุณต้องเปลี่ยนชิปเซ็ตด้วย FPF ที่ตั้งโปรแกรมไว้ด้วยชิปเซ็ตที่ "สะอาด" (เช่น จำหน่ายชิปเซ็ตต่อหากคุณสามารถเข้าถึงสถานีบัดกรีอินฟราเรดในราคารถยนต์หรือเพียงแค่เปลี่ยนเมนบอร์ด ).

เพื่อทำความเข้าใจว่ารูทคิทสามารถทำอะไรได้บ้าง คุณต้องประเมินว่าอะไรทำให้สามารถรันโค้ดของคุณในสภาพแวดล้อม UEFI BIOS ได้ สมมติว่าในโหมดโปรเซสเซอร์ที่มีสิทธิพิเศษสูงสุด - SMM รูทคิทดังกล่าวอาจมีคุณสมบัติดังต่อไปนี้:

  • ดำเนินการควบคู่ไปกับระบบปฏิบัติการ (คุณสามารถกำหนดค่าการประมวลผลเพื่อสร้างการขัดจังหวะ SMI ซึ่งจะถูกทริกเกอร์โดยตัวจับเวลา)
  • มีข้อดีทั้งหมดของการอยู่ในโหมด SMM (การเข้าถึงเนื้อหาของ RAM และทรัพยากรฮาร์ดแวร์โดยสมบูรณ์ความลับจากระบบปฏิบัติการ)
  • รหัสโปรแกรมของรูทคิทสามารถเข้ารหัสและถอดรหัสได้เมื่อเปิดใช้งานในโหมด SMM ข้อมูลใดๆ ที่มีเฉพาะในโหมด SMM เท่านั้นที่สามารถใช้เป็นคีย์เข้ารหัสได้ ตัวอย่างเช่น แฮชจากชุดที่อยู่ใน SMRAM หากต้องการรับรหัสนี้ คุณจะต้องเข้าสู่ SMM และสามารถทำได้สองวิธี ค้นหา RCE ในโค้ด SMM และใช้ประโยชน์จากมัน หรือเพิ่มโมดูล SMM ของคุณเองลงใน BIOS ซึ่งเป็นไปไม่ได้เนื่องจากเราเปิดใช้งาน Boot Guard

ดังนั้นช่องโหว่นี้ทำให้ผู้โจมตีสามารถ:

  • สร้างรูทคิทที่ซ่อนอยู่และไม่สามารถลบได้ซึ่งไม่ทราบจุดประสงค์ในระบบ
  • รันโค้ดของคุณบนคอร์ชิปเซ็ตตัวใดตัวหนึ่งภายใน Intel SoC นั่นคือบน Intel ISH (ลองดูรูปภาพอย่างละเอียด)

ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
ดาวน์โหลดที่เชื่อถือได้ของSchrödinger Intel Boot Guard
แม้ว่าความสามารถของระบบย่อย Intel ISH ยังไม่ได้รับการสำรวจ แต่ดูเหมือนว่าจะเป็นเวกเตอร์การโจมตีที่น่าสนใจสำหรับ Intel ME

ผลการวิจัย

  1. การศึกษานี้ทำให้สามารถรับคำอธิบายทางเทคนิคเกี่ยวกับการทำงานของเทคโนโลยี Intel Boot Guard ได้ ลบความลับสองสามข้อในการรักษาความปลอดภัยของ Intel ผ่านโมเดลที่คลุมเครือ
  2. มีการนำเสนอสถานการณ์การโจมตีที่ช่วยให้คุณสามารถสร้างรูทคิทที่สามารถถอนการติดตั้งได้ในระบบ
  3. เราเห็นว่าโปรเซสเซอร์ Intel สมัยใหม่สามารถรันโค้ดที่เป็นกรรมสิทธิ์จำนวนมากได้ก่อนที่ BIOS จะเริ่มทำงานด้วยซ้ำ
  4. แพลตฟอร์มที่มีสถาปัตยกรรม Intel 64 เริ่มมีความเหมาะสมน้อยลงสำหรับการใช้งานซอฟต์แวร์ฟรี: การตรวจสอบฮาร์ดแวร์ เทคโนโลยีและระบบย่อยที่เป็นกรรมสิทธิ์จำนวนมากขึ้น (สามคอร์ในชิปเซ็ต SoC: x86 ME, x86 ISH และ ARC PMC)

การบรรเทา

ผู้จัดจำหน่ายที่จงใจเปิดโหมดการผลิตทิ้งไว้ควรแน่ใจว่าได้ปิดแล้ว จนถึงตอนนี้ มีเพียงดวงตาของพวกเขาเท่านั้นที่หลับใหล และระบบ Kaby Lake ใหม่ก็แสดงให้เห็นสิ่งนี้

ผู้ใช้สามารถปิดการใช้งาน Intel BG บนระบบของพวกเขา (ซึ่งเสี่ยงต่อช่องโหว่ที่อธิบายไว้) โดยการรัน Flash Programming Tool พร้อมพารามิเตอร์ -closemnf ขั้นแรก คุณควรตรวจสอบให้แน่ใจ (โดยใช้ MEinfo) ว่าการกำหนดค่า Intel BG ในภูมิภาค ME มีไว้สำหรับการปิดเทคโนโลยีนี้หลังจากการเขียนโปรแกรมใน FPF

ที่มา: will.com

เพิ่มความคิดเห็น