พบช่องโหว่ระดับ Meltdown ในโปรเซสเซอร์ AMD ที่ใช้สถาปัตยกรรมไมโคร Zen+ และ Zen 2

กลุ่มนักวิจัยจากมหาวิทยาลัยเทคนิคแห่งเดรสเดนได้ระบุช่องโหว่ (CVE-2020-12965) ในโปรเซสเซอร์ AMD ที่ใช้สถาปัตยกรรมไมโคร Zen+ และ Zen 2 ซึ่งช่วยให้สามารถโจมตีแบบ Meltdown ได้ ในตอนแรกสันนิษฐานว่าโปรเซสเซอร์ AMD Zen+ และ Zen 2 ไม่ไวต่อช่องโหว่ Meltdown แต่นักวิจัยระบุคุณลักษณะที่นำไปสู่การเข้าถึงพื้นที่หน่วยความจำที่ได้รับการป้องกันแบบเก็งกำไร เมื่อใช้ที่อยู่เสมือนที่ไม่เป็นที่ยอมรับ

สถาปัตยกรรม AMD64 ใช้เพียง 48 บิตแรกของที่อยู่เสมือน และละเว้น 16 บิตที่เหลือ มีการระบุว่าบิต 48 ถึง 63 ต้องคัดลอกค่าของบิต 47 เสมอ (ส่วนขยายบิตเครื่องหมาย) หากเงื่อนไขนี้ถูกละเมิดและพยายามเข้าถึงที่อยู่ที่มีค่าบิตบนโดยพลการ ตัวประมวลผลจะสร้างข้อยกเว้น การเติมบิตบนซ้ำๆ จะทำให้พื้นที่ที่อยู่ที่มีอยู่ถูกแบ่งออกเป็นสองบล็อก - บล็อกล่าง (ตั้งแต่ 0 ถึง 00007FFFFFFFFFFFFF) ซึ่งบิตบนถูกตั้งค่าเป็น 800000000000 และบล็อกบน (จาก FFFF1 ถึง FFFFFFFFFFFFFFFF) ซึ่ง บิตบนทั้งหมดถูกตั้งค่าเป็น XNUMX

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

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

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

คุณลักษณะของช่องโหว่ใหม่ที่ส่งผลกระทบต่อโปรเซสเซอร์ AMD Zen+ และ Zen 2 คือ CPU อนุญาตให้มีการดำเนินการอ่านและเขียนแบบเก็งกำไรที่เข้าถึงหน่วยความจำโดยใช้ที่อยู่ที่ไม่ใช่แบบบัญญัติที่ไม่ถูกต้อง โดยไม่สนใจ 16 บิตบน ดังนั้นในระหว่างการดำเนินการโค้ดเก็งกำไร โปรเซสเซอร์จะใช้เฉพาะบิตที่ต่ำกว่า 48 บิตเสมอ และความถูกต้องของที่อยู่จะถูกตรวจสอบแยกกัน หากเมื่อแปลที่อยู่เสมือนที่ไม่ใช่แบบบัญญัติไปเป็นที่อยู่ทางกายภาพในบัฟเฟอร์การแปลแบบเชื่อมโยง (TLB) หากตรวจพบการจับคู่ในส่วนมาตรฐานของที่อยู่ การดำเนินการโหลดแบบเก็งกำไรจะส่งกลับค่าโดยไม่คำนึงถึงเนื้อหา ของ 16 บิตบน ซึ่งอนุญาตให้ข้ามการแบ่งปันหน่วยความจำระหว่างเธรด ต่อจากนั้นการดำเนินการจะถือว่าไม่ถูกต้องและละทิ้ง แต่การเข้าถึงหน่วยความจำจะเสร็จสิ้นและข้อมูลจะจบลงในแคช

ในระหว่างการทดลอง โดยใช้เทคนิคการกำหนดเนื้อหาของแคช FLUSH+RELOAD นักวิจัยสามารถจัดช่องทางสำหรับการถ่ายโอนข้อมูลที่ซ่อนอยู่ด้วยความเร็ว 125 ไบต์ต่อวินาที นอกจากชิป AMD แล้ว ปัญหายังส่งผลกระทบต่อโปรเซสเซอร์ Intel ทั้งหมดซึ่งเสี่ยงต่อช่องโหว่ Meltdown แบบคลาสสิกอีกด้วย เทคนิคเดียวกับที่ช่วยป้องกันการโจมตี Meltdown เช่น การใช้คำสั่ง LFENCE สามารถใช้เพื่อป้องกันการโจมตีประเภทใหม่นี้ได้ ตัวอย่างเช่น หากโปรเซสเซอร์ Intel มีการป้องกันฮาร์ดแวร์จากการล่มสลายหรือระบบเปิดใช้งานการป้องกันซอฟต์แวร์ การกำหนดค่าดังกล่าวจะไม่เสี่ยงต่อการโจมตีรูปแบบใหม่

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

เนื่องจากโปรแกรมที่ไม่มีช่องโหว่มีความสามารถในการเข้าถึงเธรดของมัน จากมุมมองเชิงปฏิบัติวิธีการนี้จึงเป็นที่สนใจในการข้ามการแยกแซนด์บ็อกซ์และการจัดระเบียบการแทรกแซงการทำงานของเธรดอื่น ๆ ในโปรแกรมที่อนุญาตการดำเนินการของบุคคลที่สาม โค้ด เช่น เว็บเบราว์เซอร์และเอ็นจิ้น JIT นักวิจัยได้ตรวจสอบช่องโหว่ของเอ็นจิ้น SpiderMonkey JavaScript และเคอร์เนล Linux ที่จะโจมตี แต่ไม่พบลำดับโค้ดที่มีช่องโหว่ที่สามารถนำมาใช้ในการโจมตีได้ นอกเหนือจากการโจมตีแอปพลิเคชันแล้ว วิธีการนี้ยังสามารถใช้เพื่อบังคับให้กระแสข้อมูลที่ไม่สามารถยอมรับได้ระหว่างองค์ประกอบทางสถาปัตยกรรมระดับไมโครของโปรเซสเซอร์ในระหว่างการหาประโยชน์จากช่องโหว่ทางสถาปัตยกรรมระดับย่อยอื่นๆ

ที่มา: opennet.ru

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