มีการเสนอวิธีการโจมตีเพื่อระบุชิ้นส่วนหน่วยความจำบนเซิร์ฟเวอร์จากระยะไกล

กลุ่มนักวิจัยจาก Technical University of Graz (ออสเตรีย) ซึ่งก่อนหน้านี้เป็นที่รู้จักในการพัฒนาการโจมตี MDS, NetSpectre, Throwhammer และ ZombieLoad ได้เผยแพร่วิธีการโจมตีแบบใหม่ (CVE-2021-3714) ผ่านช่องทางของบุคคลที่สามบน Memory- กลไกการขจัดข้อมูลซ้ำซ้อน ซึ่งช่วยให้ระบุการมีอยู่ของข้อมูลบางอย่างในหน่วยความจำ รั่วไหลของเนื้อหาหน่วยความจำแบบไบต์ต่อไบต์ หรือกำหนดเค้าโครงหน่วยความจำเพื่อข้ามการป้องกัน Address Randomization (ASLR) วิธีการใหม่นี้แตกต่างจากรูปแบบต่างๆ ของการโจมตีกลไกการขจัดข้อมูลซ้ำซ้อนที่แสดงให้เห็นก่อนหน้านี้ โดยดำเนินการโจมตีจากโฮสต์ภายนอกโดยใช้เป็นเกณฑ์การเปลี่ยนแปลงในเวลาตอบสนองต่อคำขอที่ส่งโดยผู้โจมตีผ่านโปรโตคอล HTTP/1 และ HTTP/2 ความเป็นไปได้ของการโจมตีได้รับการพิสูจน์แล้วสำหรับเซิร์ฟเวอร์ที่ใช้ Linux และ Windows

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

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

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

มีการเสนอวิธีการโจมตีเพื่อระบุชิ้นส่วนหน่วยความจำบนเซิร์ฟเวอร์จากระยะไกล

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

มีการเสนอรูปแบบการทำงานสามแบบของการโจมตี ตัวเลือกแรกให้คุณกำหนดข้อมูลในหน่วยความจำของเว็บเซิร์ฟเวอร์ที่ใช้ Memcached การโจมตีเกิดขึ้นที่การโหลดชุดข้อมูลบางอย่างลงในที่เก็บข้อมูล Memcached การล้างบล็อกที่ซ้ำซ้อน เขียนองค์ประกอบเดิมใหม่ และสร้างเงื่อนไขสำหรับการคัดลอก COW โดยการเปลี่ยนเนื้อหาของบล็อก ระหว่างการทดลองกับ Memcached ใช้เวลา 166.51 วินาทีในการระบุเวอร์ชันของ libc ที่ติดตั้งบนระบบที่ทำงานในเครื่องเสมือน

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

ตัวเลือกที่สามทำให้สามารถข้ามกลไกการป้องกัน KASLR ได้อย่างสมบูรณ์ภายใน 4 นาที และรับข้อมูลเกี่ยวกับออฟเซ็ตในหน่วยความจำของเคอร์เนลอิมเมจของเครื่องเสมือน ในสถานการณ์ที่แอดเดรสออฟเซ็ตอยู่ในหน้าหน่วยความจำซึ่งข้อมูลอื่นไม่มี เปลี่ยน. การโจมตีดำเนินการจากโฮสต์ที่อยู่ห่างจากระบบที่ถูกโจมตี 14 กระโดด ตัวอย่างโค้ดสำหรับการโจมตีที่นำเสนอได้รับการสัญญาว่าจะเผยแพร่บน GitHub

ที่มา: opennet.ru

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