การผจญภัยในลายเซ็น UEFI ของ Microsoft

ฉันบังเอิญแปลบทความนี้ที่เขาเขียน เจมส์บอททอมลีย์ที่ปรึกษาด้านเทคนิคของ มูลนิธิลินุกซ์ที่เริ่มต้นร่วมกัน pre-bootloader เพื่อให้คุณสามารถบูต Linux ได้.

ดังที่ฉันได้อธิบายไว้ในโพสต์ก่อนหน้าของฉันเรามีโค้ดสำหรับ Linux Foundation pre-bootloader อยู่แล้ว อย่างไรก็ตามมีไฟล์ ล่าช้า ในขณะที่เราสามารถเข้าถึงระบบการลงนามของ Microsoft

สิ่งแรกที่ต้องทำคือ จ่าย $ 99 ให้กับ Verisign (ปัจจุบันคือไซแมนเทค) และได้รับการยืนยันคีย์โดย Verisign เราทำเพื่อ Linux Foundation และสิ่งที่พวกเขาต้องการคือโทรหาสำนักงานใหญ่เพื่อตรวจสอบ คีย์จะส่งคืนใน URL ที่ติดตั้งในเบราว์เซอร์ของคุณ แต่สามารถใช้เครื่องมือ Linux SSL มาตรฐานเพื่อแยกและสร้างใบรับรองและคีย์ PEM ตามปกติ ไม่มีส่วนเกี่ยวข้องกับการลงนาม UEFI แต่ใช้เพื่อตรวจสอบความถูกต้องของระบบ ระบบ Microsoft ว่าคุณเป็นอย่างที่คุณพูดว่าคุณเป็น ก่อนจะสร้างบัญชี sysdev ได้คุณต้องทดสอบก่อน ลงนามในปฏิบัติการที่พวกเขาให้คุณและอัปโหลด. พวกเขากำหนดข้อกำหนดที่เข้มงวดเพื่อให้คุณลงนามบนแพลตฟอร์ม Windows ที่เฉพาะเจาะจง แต่อย่างน้อยก็ใช้งานได้และบิงโกบัญชีของเราถูกสร้างขึ้น

เมื่อสร้างบัญชีแล้วคุณจะยังไม่สามารถอัปโหลดไบนารี UEFI สำหรับการลงชื่อได้โดยไม่ต้องลงชื่อก่อน เซ็นสัญญากระดาษ. ข้อตกลงมีความยุ่งยากมากรวมถึงใบอนุญาตที่ยกเว้นจำนวนมาก (รวมถึง GPL ทั้งหมดสำหรับไดรเวอร์ แต่ไม่ใช่สำหรับโปรแกรมโหลดบูต) ส่วนที่ยุ่งยากที่สุดคือดูเหมือนว่าข้อตกลงจะมาถึง นอกเหนือจากวัตถุ UEFI ที่คุณเซ็นชื่อ. ทนายความของ Linux Foundation สรุปว่าส่วนใหญ่ไม่เป็นอันตรายต่อ LF เพราะเราไม่ได้ขายผลิตภัณฑ์ แต่อาจเป็นที่น่ารังเกียจสำหรับ บริษัท อื่น ๆ จากข้อมูลของ Matthew Garrett Microsoft ยินดีที่จะเจรจาข้อตกลงพิเศษกับการแจกจ่ายเพื่อบรรเทาปัญหาเหล่านั้น

เมื่อมีการลงนามข้อตกลงจริง ความสนุกทางเทคนิค. คุณไม่สามารถอัปโหลดไบนารี UEFI และลงนามได้ ก่อนอื่นคุณต้องทำ ห่อเป็นไฟล์. cab. โชคดีที่มีโครงการโอเพ่นซอร์สที่สามารถสร้างไฟล์ cabinet ที่เรียกว่า lcab แล้วคุณจะต้อง เซ็นชื่อไฟล์. cab ด้วยคีย์ Verisign. อีกครั้งมีโครงการโอเพ่นซอร์สอีกโครงการหนึ่งที่สามารถทำได้: osslsigncode สำหรับใครก็ตามที่ต้องการเครื่องมือเหล่านั้นมีอยู่ในที่เก็บ UEFI ของ openSuse Build Service ของฉัน ปัญหาสุดท้ายคือการอัปโหลดไฟล์ ต้องใช้แสงสีเงิน. น่าเสียดายที่แสงจันทร์ดูเหมือนจะไม่ทำงานและแม้จะมีตัวอย่างเวอร์ชัน 4 ช่องอัปโหลดก็ว่างเปล่าดังนั้น ถึงเวลาใช้ windows 7 ภายใต้ kvm (เครื่องเสมือนที่ใช้เคอร์เนล) เมื่อคุณไปถึงส่วนนั้นคุณต้องรับรองด้วยว่าไบนารี“ จะลงนาม ต้องไม่ได้รับอนุญาตภายใต้ GPLv3 หรือใบอนุญาตโอเพนซอร์สที่คล้ายกัน”. ฉันคิดว่าเป็นเพราะกลัวการเปิดเผยคีย์ แต่ไม่ชัดเจนเลย (เช่นเดียวกันกับ "ใบอนุญาตโอเพนซอร์สที่คล้ายกัน")

เมื่อการอัปโหลดเสร็จสมบูรณ์ไฟล์ cabinet จะหยุดผ่านเจ็ดขั้นตอน น่าเสียดายที่การไต่ทดสอบครั้งแรกยังคงอยู่ ถูกขังอยู่ในขั้นตอนที่ 6 (ลายเซ็นของไฟล์) หลังจาก 6 วันฉันส่งอีเมลสนับสนุนไปยัง Microsoft เพื่อถามว่าเกิดอะไรขึ้น คำตอบ:“ รหัสข้อผิดพลาดที่เกิดจากกระบวนการเซ็นชื่อนั้น ไฟล์ของคุณไม่ใช่แอปพลิเคชัน Win32 ที่ถูกต้อง. เป็นแอปพลิเคชัน Win32 ที่ถูกต้องหรือไม่” คำตอบ: ไม่ชัดเจนมันเป็นไบนารี UEFI 64 บิตที่ถูกต้อง ไม่มีคำตอบเพิ่มเติม...

ฉันพยายามอีกครั้ง คราวนี้ฉันได้รับอีเมลดาวน์โหลดสำหรับไฟล์ที่ลงชื่อและบอร์ดแจ้งว่า การลงนามล้มเหลว. ฉันดาวน์โหลดและตรวจสอบแล้ว ไบนารีทำงานบนแพลตฟอร์ม secureboot และเซ็นชื่อด้วยคีย์

เรื่อง = / C = US / ST = Washington / L = Redmond / O = Microsoft Corporation / OU = MOPR / CN = Microsoft Windows UEFI Driver Publisher
ผู้ออก = / C = US / ST = Washington / L = Redmond / O = Microsoft Corporation / CN = Microsoft Corporation UEFI CA 2011

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

อย่างไรก็ตามนี่คือสถานะ: เราจะยังคงรอให้ Microsoft มอบเครื่องโหลดก่อนบูตที่ลงนามและตรวจสอบความถูกต้องให้กับ Linux Foundation เมื่อเป็นเช่นนั้นระบบจะอัปโหลดไปยังไซต์ Linux Foundation เพื่อให้ทุกคนใช้งานได้

Fuente: http://blog.hansenpartnership.com/adventures-in-microsoft-uefi-signing/

สรุปข้อสรุปของคุณ แต่จะต้องใช้เวลา


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google