เมื่อเร็วๆ นี้. วิศวกรของ Google ได้ประกาศ รายละเอียดเกี่ยวกับช่องโหว่สำคัญที่ระบุว่าเป็น CVE-2024-56161 รับบัพติศมาภายใต้นามว่า เข้าสู่ระบบ, ความล้มเหลวนี้ ช่วยให้หลีกเลี่ยงกลไกการตรวจสอบลายเซ็นดิจิทัลได้ ระหว่างการอัปเดตไมโครโค้ดบนโปรเซสเซอร์ AMD ที่ใช้สถาปัตยกรรมไมโคร Zen สี่รุ่นแรก
เข้าสู่ระบบ ส่งผลกระทบต่อโปรเซสเซอร์หลายประเภท ช่วยให้ผู้โจมตีสามารถหลีกเลี่ยงการควบคุมความปลอดภัยที่รับรองความสมบูรณ์ของไมโครโค้ด ซึ่งอาจเปิดประตูให้เกิดการปรับเปลี่ยนพฤติกรรมฮาร์ดแวร์ที่เป็นอันตรายต่อได้
เกี่ยวกับช่องโหว่
ที่มาของช่องโหว่นี้เกิดจากการใช้อัลกอริทึม AES-CMAC ในระหว่างการตรวจสอบลายเซ็นดิจิทัลแทนฟังก์ชันแฮชที่เชื่อถือได้ AMD ใช้อัลกอริทึมนี้ในการลงนามไมโครโค้ดโดยใช้คีย์ RSA ส่วนตัวและเพิ่มคีย์สาธารณะลงในแพทช์
กระบวนการตรวจสอบ เกี่ยวข้องกับโปรเซสเซอร์ที่เปรียบเทียบแฮชของคีย์สาธารณะที่ฝังไว้ในระหว่างการผลิตกับแฮชของคีย์ที่ระบุในแพทช์ อย่างไรก็ตาม, เนื่องจากมีการใช้ CMAC ซึ่งจริงๆ แล้วไม่ใช่ฟังก์ชันแฮชแต่เป็นรหัสยืนยันตัวตน การส่งข้อความ ทำให้เกิดการละเมิดความปลอดภัย
CMAC มีพื้นฐานมาจากอัลกอริทึม AES และใช้การดำเนินการ XOR เพื่อรวมกลุ่มข้อมูลแต่เนื่องจากไม่ได้ออกแบบมาให้ทนทานต่อการชน จึงทำให้ผู้โจมตีที่ทราบคีย์การเข้ารหัสสามารถคำนวณค่ากลางที่ชดเชยการเปลี่ยนแปลงของอินพุตได้ โดยไม่เปลี่ยนแปลงผลลัพธ์ของการดำเนินการ
ทั้ง Intel และ AMD ได้ออกแบบชุดคำสั่งไมโครโค้ดที่ใช้ RISC เฉพาะ ซึ่งไม่มีการบันทึกไว้ในเอกสาร แต่ในเชิงแนวคิดมีความคล้ายคลึงกับชุดคำสั่ง RISC อื่นๆ เช่น ARM หรือ RISC-V เช่นเดียวกับซอฟต์แวร์ การนำฮาร์ดแวร์ที่ซับซ้อนมาใช้ให้ถูกต้องก็เป็นความท้าทายเช่นกัน ในอดีต สิ่งนี้ส่งผลให้เกิดจุดบกพร่องที่เป็นที่รู้จักหลายจุด เช่น ข้อบกพร่อง FDIV ของ Intel ใน Pentium ในปี 1994
AMD จัดหาคีย์การเข้ารหัสเดียว สำหรับ AES-CMAC ในโปรเซสเซอร์ทั้งหมดตั้งแต่ Zen 1 ถึง Zen 4ซึ่งหมายความว่าหากใครก็ตามแยกคีย์นี้ออกจาก CPU ตัวหนึ่ง พวกเขาก็สามารถนำคีย์นี้ไปใช้กับ CPU ตัวอื่นๆ ทั้งหมดได้ ในความเป็นจริง นักวิจัยพบว่าโปรเซสเซอร์เหล่านี้ใช้คีย์ที่รู้จัก ซึ่งนำมาจากตัวอย่างในแนวปฏิบัติ NIST SP 800-38B
ซึ่งทำให้สามารถสร้างแพตช์ปลอมได้ในทางทฤษฎี โดยการแทนที่คีย์สาธารณะของแพทช์ด้วยคีย์ที่สร้างแฮชแบบเดียวกัน และเลือกการชนกันสำหรับลายเซ็นดิจิทัล การปะทะกันดังกล่าวทำได้โดยการเพิ่มบล็อกข้อมูลที่ดูเหมือนสุ่มเพิ่มเติมลงในไมโครโค้ด ทำให้แพตช์ที่แก้ไขยังคงลายเซ็นดิจิทัลเดิมของ AMD ไว้
เพื่อแก้ไขปัญหานี้เพื่อสำรวจวิธีใหม่ในการจัดการไมโครโค้ดในโปรเซสเซอร์ AMD วิศวกรของ Google พวกเขาพัฒนา Zentoolชุดเครื่องมือรวมสำหรับการตรวจสอบแพทช์ไมโครโค้ด รวมถึงการถอดประกอบแบบจำกัด การสร้างแพทช์ไมโครโค้ดโดยใช้การประกอบวิศวกรรมย้อนกลับจำนวนจำกัด
Zentool ได้รับการออกแบบมาเพื่ออำนวยความสะดวกในการวิเคราะห์และปรับเปลี่ยนไมโครโค้ดซึ่งนำเสนอชุดคำสั่งที่สามารถทำได้ตั้งแต่แก้ไขพารามิเตอร์และแทนที่คำสั่งไปจนถึงการโหลดไมโครโค้ดที่แก้ไขแล้วลงใน CPU และแก้ไขลายเซ็นดิจิทัลของแพตช์
ตัวอย่างเช่น คำสั่ง "zentool edit" ช่วยให้สามารถแก้ไขพารามิเตอร์ในไฟล์ไมโครโค้ดได้ ในขณะที่คำสั่ง "zentool print" จะแสดงข้อมูลโดยละเอียดเกี่ยวกับโครงสร้างภายในของไมโครโค้ด นอกจากนี้ «zentool load» จะโหลดไมโครโค้ดลงใน CPU และ «zentool resign» จะคำนวณลายเซ็นดิจิทัลใหม่ โดยคำนึงถึงการเปลี่ยนแปลงที่เกิดขึ้น นอกจากนี้ แพ็คเกจยังรวมยูทิลิตี้ต่างๆ เช่น mcas และ mcop ซึ่งให้ฟังก์ชันการทำงานแอสเซมเบลอร์และดิสแอสเซมเบลอร์เพื่อทำงานกับไมโครโค้ดโดยตรง
ความสามารถของ Zentool ช่วยให้ผู้พัฒนาสามารถเตรียมและใช้แพตช์ของตนเองได้ บนโปรเซสเซอร์ AMD Zen เป็นตัวอย่างประกอบ เราได้เตรียมแพตช์ที่แก้ไขตรรกะของคำสั่ง RDRAND หลังจากใช้แพตช์นี้แล้ว คำสั่ง RDRAND จะหยุดสร้างลำดับแบบสุ่มเทียมและเริ่มส่งคืนหมายเลข 4 อย่างสม่ำเสมอ ซึ่งแสดงให้เห็นถึงความสามารถของการแก้ไขไมโครโค้ดและเปลี่ยนแปลงพฤติกรรมที่คาดหวังของโปรเซสเซอร์
เป็นมูลค่าการกล่าวขวัญว่า Zentool มาพร้อมกับคู่มือโดยละเอียด เกี่ยวกับสถาปัตยกรรมไมโคร RISC86 ที่ใช้ในไมโครโค้ด AMD รวมถึงบันทึกคำแนะนำที่อธิบายวิธีการสร้างไมโครโค้ดแบบกำหนดเอง คู่มือนี้แสดงให้เห็นวิธีการออกแบบคำสั่งโปรเซสเซอร์ใหม่ ปรับเปลี่ยนพฤติกรรมของคำสั่งที่มีอยู่ และโหลดการเปลี่ยนแปลงเหล่านั้นลงใน CPU โดยตรง
สุดท้ายนี้ หากท่านสนใจทราบข้อมูลเพิ่มเติม สามารถดูรายละเอียดใน ลิงค์ต่อไปนี้