โจมตี Intel SGX เพื่อดึงข้อมูลที่ละเอียดอ่อนหรือรันโค้ดในวงล้อม

นักวิจัยจาก Defense Science and Technology University of the People's Liberation Army of China, National University of Singapore และ ETH Zurich ได้พัฒนาวิธีการโจมตีแบบใหม่กับ Intel SGX (Software Guard eXtensions) การโจมตีนี้เรียกว่า SmashEx และเกิดจากปัญหาการกลับเข้ามาใหม่ในการจัดการข้อยกเว้นระหว่างการทำงานของส่วนประกอบรันไทม์สำหรับ Intel SGX วิธีการโจมตีที่เสนอทำให้เป็นไปได้ หากมีการควบคุมระบบปฏิบัติการ เพื่อระบุข้อมูลลับที่อยู่ในวงล้อม หรือจัดระเบียบการคัดลอกรหัสของตนลงในหน่วยความจำของวงล้อมและดำเนินการ

ต้นแบบการใช้ประโยชน์ได้รับการเตรียมสำหรับวงล้อมรันไทม์ที่ใช้ Intel SGX SDK (CVE-2021-0186) และ Microsoft Open Enclave (CVE-2021-33767) ในกรณีแรก ความสามารถในการแยกคีย์ RSA ที่ใช้บนเว็บเซิร์ฟเวอร์สำหรับ HTTPS ได้รับการสาธิต และในกรณีที่สอง เป็นไปได้ที่จะระบุเนื้อหาที่ได้รับจากยูทิลิตี cURL ที่รันภายในวงล้อม ช่องโหว่นี้ได้รับการแก้ไขโดยทางโปรแกรมแล้วใน Intel SGX SDK 2.13 และ Open Enclave 0.17.1 นอกเหนือจาก Intel SGX SDK และ Microsoft Open Enclave แล้ว ช่องโหว่ดังกล่าวยังปรากฏใน Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX และ Veracruz

จำได้ว่าเทคโนโลยี SGX (Software Guard Extensions) ปรากฏในโปรเซสเซอร์ Intel Core เจนเนอเรชั่นที่หก (Skylake) และนำเสนอชุดคำสั่งที่อนุญาตให้แอปพลิเคชันระดับผู้ใช้จัดสรรพื้นที่หน่วยความจำแบบปิด - วงล้อมที่เนื้อหาไม่สามารถอ่านและเปลี่ยนแปลงได้แม้โดย เคอร์เนลและโค้ดดำเนินการโดยในโหมด ring0, SMM และ VMM เป็นไปไม่ได้ที่จะถ่ายโอนการควบคุมไปยังโค้ดในวงล้อมโดยใช้ฟังก์ชันข้ามแบบดั้งเดิมและการจัดการกับรีจิสเตอร์และสแต็ก - คำสั่งใหม่ที่สร้างขึ้นเป็นพิเศษ EENTER, EEXIT และ ERESUME ใช้เพื่อถ่ายโอนการควบคุมไปยังวงล้อม ซึ่งดำเนินการตรวจสอบการอนุญาต ในกรณีนี้ โค้ดที่อยู่ในวงล้อมสามารถใช้วิธีการเรียกแบบคลาสสิกเพื่อเรียกฟังก์ชันภายในวงล้อม และใช้คำสั่งพิเศษเพื่อเรียกฟังก์ชันภายนอกได้ การเข้ารหัสหน่วยความจำแบบวงล้อมใช้เพื่อป้องกันการโจมตีฮาร์ดแวร์ เช่น การเชื่อมต่อ DRAM

โจมตี Intel SGX เพื่อดึงข้อมูลที่ละเอียดอ่อนหรือรันโค้ดในวงล้อม

ปัญหาคือเทคโนโลยี SGX ช่วยให้ระบบปฏิบัติการขัดจังหวะการดำเนินการของวงล้อมได้โดยการทิ้งข้อยกเว้นของฮาร์ดแวร์ และวงล้อมไม่ได้ปรับใช้แบบดั้งเดิมอย่างเหมาะสมสำหรับการจัดการข้อยกเว้นดังกล่าวในระดับปรมาณู ไม่เหมือนกับเคอร์เนลของระบบปฏิบัติการและแอปพลิเคชันทั่วไป โค้ดภายในวงล้อมไม่มีสิทธิ์เข้าถึง primitives สำหรับจัดระเบียบการทำงานของปรมาณูระหว่างการจัดการข้อยกเว้นที่ยกขึ้นแบบอะซิงโครนัส หากไม่มี atomic primitives ที่ระบุ วงล้อมสามารถถูกขัดจังหวะและกลับสู่การดำเนินการได้ทุกเมื่อ แม้ในขณะที่ส่วนสำคัญกำลังดำเนินการอยู่ในวงล้อมและอยู่ในสถานะที่ไม่ปลอดภัย (เช่น เมื่อการลงทะเบียน CPU ไม่ได้รับการบันทึก/กู้คืน) .

โจมตี Intel SGX เพื่อดึงข้อมูลที่ละเอียดอ่อนหรือรันโค้ดในวงล้อม

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

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

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

โจมตี Intel SGX เพื่อดึงข้อมูลที่ละเอียดอ่อนหรือรันโค้ดในวงล้อม
โจมตี Intel SGX เพื่อดึงข้อมูลที่ละเอียดอ่อนหรือรันโค้ดในวงล้อม


ที่มา: opennet.ru

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