ช่องโหว่ในกลไกการดำเนินการเก็งกำไรของโปรเซสเซอร์ AMD

โครงการ Grsecurity ได้เผยแพร่รายละเอียดและการสาธิตวิธีการโจมตีสำหรับช่องโหว่ใหม่ (CVE-2021-26341) ในโปรเซสเซอร์ AMD ที่เกี่ยวข้องกับการดำเนินการตามคำสั่งเชิงคาดเดาหลังจากการส่งต่อแบบไม่มีเงื่อนไข หากการโจมตีสำเร็จ ช่องโหว่จะทำให้สามารถกำหนดเนื้อหาของพื้นที่หน่วยความจำที่กำหนดเองได้ ตัวอย่างเช่น นักวิจัยได้เตรียมช่องโหว่ที่ช่วยให้พวกเขาสามารถกำหนดเค้าโครงที่อยู่และข้ามกลไกการป้องกัน KASLR (การสุ่มหน่วยความจำเคอร์เนล) โดยการรันโค้ดที่ไม่มีสิทธิพิเศษในระบบย่อยเคอร์เนล ePBF สถานการณ์การโจมตีอื่นๆ ไม่สามารถตัดออกได้ซึ่งอาจนำไปสู่การรั่วไหลของเนื้อหาหน่วยความจำเคอร์เนล

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

เช่นเดียวกับการใช้ประโยชน์จากช่องโหว่ Spectre-v1 การโจมตีจำเป็นต้องมีลำดับคำสั่ง (แกดเจ็ต) บางอย่างในเคอร์เนลที่นำไปสู่การดำเนินการเชิงคาดเดา การบล็อกช่องโหว่ในกรณีนี้ขึ้นอยู่กับการระบุอุปกรณ์ดังกล่าวในโค้ดและเพิ่มคำแนะนำเพิ่มเติมเพื่อบล็อกการดำเนินการเชิงคาดเดา เงื่อนไขสำหรับการดำเนินการเก็งกำไรยังสามารถสร้างขึ้นโดยโปรแกรมที่ไม่มีสิทธิพิเศษที่ทำงานในเครื่องเสมือน eBPF หากต้องการบล็อกความสามารถในการสร้างอุปกรณ์โดยใช้ eBPF ขอแนะนำให้ปิดการใช้งานการเข้าถึง eBPF ในระบบที่ไม่มีสิทธิพิเศษ (“sysctl -w kernel.unprivileged_bpf_disabled=1”)

ช่องโหว่ดังกล่าวส่งผลกระทบต่อโปรเซสเซอร์ที่ใช้สถาปัตยกรรมไมโคร Zen1 และ Zen2 รวมถึงโปรเซสเซอร์ AMD EPYC และ AMD Ryzen Threadripper รุ่นที่หนึ่งและสอง รวมถึง AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper โปรเซสเซอร์ซีรีส์ PRO และ APU A. หากต้องการบล็อกการดำเนินการตามคำสั่งแบบเก็งกำไร ขอแนะนำให้เรียกคำสั่ง INT3 หรือ LFENCE หลังจากการดำเนินการสาขา (RET, JMP, CALL)

ที่มา: opennet.ru

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