ช่องโหว่ในซีพียู AMD ที่อนุญาตให้คุณหลีกเลี่ยงกลไกการป้องกัน SEV (Secure Encrypted Virtualization)

นักวิจัยที่ Helmholtz Center for Information Security (CISPA) ได้เผยแพร่วิธีการโจมตี CacheWarp ใหม่เพื่อโจมตีกลไกความปลอดภัยของ AMD SEV (Secure Encrypted Virtualization) ที่ใช้ในระบบเวอร์ช่วลไลเซชั่น เพื่อปกป้องเครื่องเสมือนจากการรบกวนโดยไฮเปอร์ไวเซอร์หรือผู้ดูแลระบบโฮสต์ วิธีการที่นำเสนอช่วยให้ผู้โจมตีสามารถเข้าถึงไฮเปอร์ไวเซอร์เพื่อรันโค้ดของบุคคลที่สามและเพิ่มสิทธิพิเศษในเครื่องเสมือนที่ได้รับการป้องกันโดยใช้ AMD SEV

การโจมตีขึ้นอยู่กับการใช้ช่องโหว่ (CVE-2023-20592) ที่เกิดจากการทำงานของแคชที่ไม่ถูกต้องระหว่างการดำเนินการคำสั่งตัวประมวลผล INVD ด้วยความช่วยเหลือซึ่งเป็นไปได้ที่จะทำให้ข้อมูลในหน่วยความจำและแคชไม่ตรงกัน และกลไกบายพาสเพื่อรักษาความสมบูรณ์ของหน่วยความจำเครื่องเสมือน ใช้งานตามส่วนขยาย SEV-ES และ SEV-SNP ช่องโหว่นี้ส่งผลกระทบต่อโปรเซสเซอร์ AMD EPYC ตั้งแต่รุ่นแรกถึงรุ่นที่สาม

สำหรับโปรเซสเซอร์ AMD EPYC รุ่นที่สาม (Zen 3) ปัญหาได้รับการแก้ไขแล้วในการอัพเดตไมโครโค้ดเดือนพฤศจิกายนที่เผยแพร่เมื่อวานนี้โดย AMD (การแก้ไขไม่ส่งผลให้ประสิทธิภาพลดลง) สำหรับ AMD EPYC รุ่นแรกและรุ่นที่สอง (Zen 1 และ Zen 2) จะไม่มีการป้องกัน เนื่องจาก CPU เหล่านี้ไม่รองรับส่วนขยาย SEV-SNP ซึ่งให้การควบคุมความสมบูรณ์สำหรับเครื่องเสมือน โปรเซสเซอร์ AMD AMD EPYC “Genoa” รุ่นที่สี่ที่ใช้สถาปัตยกรรมไมโคร “Zen 4” ไม่มีช่องโหว่

เทคโนโลยี AMD SEV ใช้สำหรับการแยกเครื่องเสมือนโดยผู้ให้บริการคลาวด์ เช่น Amazon Web Services (AWS), Google Cloud, Microsoft Azure และ Oracle Compute Infrastructure (OCI) การป้องกัน AMD SEV ดำเนินการผ่านการเข้ารหัสระดับฮาร์ดแวร์ของหน่วยความจำเครื่องเสมือน นอกจากนี้ ส่วนขยาย SEV-ES (สถานะที่เข้ารหัส) ยังช่วยปกป้องการลงทะเบียน CPU เฉพาะระบบแขกปัจจุบันเท่านั้นที่สามารถเข้าถึงข้อมูลที่ถอดรหัสได้ และเมื่อเครื่องเสมือนอื่นและไฮเปอร์ไวเซอร์พยายามเข้าถึงหน่วยความจำนี้ พวกเขาจะได้รับชุดข้อมูลที่เข้ารหัส

โปรเซสเซอร์ AMD EPYC รุ่นที่สามนำเสนอส่วนขยายเพิ่มเติม SEV-SNP (Secure Nested Paging) ซึ่งช่วยให้มั่นใจถึงการทำงานที่ปลอดภัยของตารางเพจหน่วยความจำแบบซ้อน นอกเหนือจากการเข้ารหัสหน่วยความจำทั่วไปและการแยกการลงทะเบียนแล้ว SEV-SNP ยังใช้มาตรการเพิ่มเติมเพื่อปกป้องความสมบูรณ์ของหน่วยความจำโดยป้องกันการเปลี่ยนแปลง VM โดยไฮเปอร์ไวเซอร์ คีย์การเข้ารหัสจะได้รับการจัดการที่ด้านข้างของโปรเซสเซอร์ PSP (Platform Security Processor) ที่แยกต่างหากซึ่งติดตั้งอยู่ในชิป ซึ่งใช้งานบนพื้นฐานของสถาปัตยกรรม ARM

สาระสำคัญของวิธีการโจมตีที่เสนอคือการใช้คำสั่ง INVD เพื่อทำให้บล็อก (บรรทัด) ในแคชของเพจสกปรกเป็นโมฆะ โดยไม่ทิ้งข้อมูลที่สะสมในแคชลงในหน่วยความจำ (เขียนกลับ) ดังนั้นวิธีนี้ช่วยให้คุณสามารถลบข้อมูลที่เปลี่ยนแปลงออกจากแคชโดยไม่ต้องเปลี่ยนสถานะหน่วยความจำ ในการโจมตี ขอเสนอให้ใช้ข้อยกเว้นซอฟต์แวร์ (การฉีดข้อผิดพลาด) เพื่อขัดขวางการทำงานของเครื่องเสมือนในสองแห่ง: ประการแรก ผู้โจมตีเรียกคำสั่ง "wbnoinvd" เพื่อรีเซ็ตการดำเนินการเขียนหน่วยความจำทั้งหมดที่สะสมใน แคชและอันดับที่สองเรียกคำสั่ง "invd" เพื่อส่งคืนการดำเนินการเขียนที่ไม่สะท้อนในหน่วยความจำเป็นสถานะเก่า

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

ตัวอย่างเช่น นักวิจัยแสดงให้เห็นถึงความเป็นไปได้ในการใช้วิธี CacheWarp เพื่อทำการโจมตี Bellcore ในการใช้งานอัลกอริทึม RSA-CRT ในไลบรารี ipp-crypto ซึ่งทำให้สามารถกู้คืนคีย์ส่วนตัวผ่านการทดแทนข้อผิดพลาดเมื่อคำนวณดิจิทัล ลายเซ็น. นอกจากนี้ยังแสดงวิธีที่คุณสามารถเปลี่ยนพารามิเตอร์การตรวจสอบเซสชันเป็น OpenSSH เมื่อเชื่อมต่อกับระบบแขกจากระยะไกล จากนั้นเปลี่ยนสถานะการตรวจสอบเมื่อเรียกใช้ยูทิลิตี้ sudo เพื่อรับสิทธิ์รูทใน Ubuntu 20.04 ช่องโหว่นี้ได้รับการทดสอบบนระบบที่ใช้โปรเซสเซอร์ AMD EPYC 7252, 7313P และ 7443

ที่มา: opennet.ru

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