Google แสดงให้เห็นถึงการใช้ประโยชน์จากช่องโหว่ของ Spectre โดยใช้ JavaScript ในเบราว์เซอร์

เมื่อไม่นานมานี้ Google ได้เผยแพร่ตัวอย่างการโจมตีหลายรูปแบบ ซึ่งแสดงให้เห็นถึงความเป็นไปได้ในการโจมตี ช่องโหว่ประเภท Spectre โดยการเรียกใช้โค้ด JavaScript ในเบราว์เซอร์ โดยไม่ต้องผ่านมาตรการรักษาความปลอดภัยที่เพิ่มเข้ามาก่อนหน้านี้

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

ต้นแบบที่เสนอได้รับการออกแบบมาเพื่อโจมตีระบบที่มีโปรเซสเซอร์ Intel Core i7-6500U ในสภาพแวดล้อมที่มี Linux และ Chrome 88แม้ว่านี่จะไม่ตัดความเป็นไปได้ที่จะเปลี่ยนแปลงเพื่อใช้ช่องโหว่นี้ในสภาพแวดล้อมอื่นๆ ก็ตาม

วิธีการทำงานของช่องโหว่นี้ไม่ได้จำเพาะเจาะจงกับโปรเซสเซอร์ Intel เท่านั้น: หลังจากปรับแต่งอย่างเหมาะสมแล้วพบว่าช่องโหว่นี้ใช้งานได้กับระบบที่มี CPU จากผู้ผลิตรายอื่น รวมถึง Apple M1 ที่ใช้สถาปัตยกรรม ARM ด้วย หลังจากปรับแต่งเล็กน้อย ช่องโหว่นี้ยังใช้งานได้กับระบบปฏิบัติการและเบราว์เซอร์อื่น ๆ ที่ใช้เอนจิน Chromium เช่นกัน

ในสภาพแวดล้อมที่ใช้โปรเซสเซอร์มาตรฐาน Chrome 88 และ Intel Skylake เราประสบความสำเร็จในการรั่วไหลของข้อมูลจากกระบวนการที่รับผิดชอบในการแสดงผลเนื้อหาเว็บในแท็บ Chrome ปัจจุบัน (กระบวนการแสดงผล) ที่ความเร็ว 1 กิโลไบต์ต่อวินาที นอกจากนี้ยังมีการพัฒนาต้นแบบทางเลือกเช่นการใช้ประโยชน์ที่ช่วยให้เสถียรภาพลดลงสามารถเพิ่มอัตราการรั่วไหลเป็น 8kB / s เมื่อใช้ตัวจับเวลา performance.now () ที่มีความแม่นยำ 5 ไมโครวินาที (0.005 มิลลิวินาที ). นอกจากนี้ยังมีการเตรียมตัวแปรที่ดำเนินการด้วยความแม่นยำในการจับเวลาหนึ่งมิลลิวินาทีซึ่งสามารถใช้เพื่อจัดระเบียบการเข้าถึงหน่วยความจำของกระบวนการอื่นในอัตราประมาณ 60 ไบต์ต่อวินาที

รหัสสาธิตที่เผยแพร่ประกอบด้วยสามส่วน:

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

เทคนิคการใช้ประโยชน์ที่เสนอมานี้ช่วยให้ไม่ต้องใช้ตัวจับเวลาความแม่นยำสูงที่มีอยู่ใน API performance.now() และไม่ต้องรองรับประเภท SharedArrayBuffer ซึ่งอนุญาตให้สร้างอาร์เรย์ในหน่วยความจำที่ใช้ร่วมกัน

การใช้ประโยชน์รวมถึงอุปกรณ์ Spectre ซึ่งทำให้เกิดการเรียกใช้รหัสเก็งกำไรที่ควบคุมและตัววิเคราะห์การรั่วไหลของช่องสัญญาณด้านข้างซึ่งกำหนดข้อมูลที่ถูกแคชไว้ระหว่างการดำเนินการแบบเก็งกำไร

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

ในการวิเคราะห์เนื้อหาของแคชภายใต้เงื่อนไขของความแม่นยำของตัวจับเวลาที่ไม่เพียงพอจึงมีการเสนอวิธีการที่ใช้เทคนิคการขับไล่ข้อมูลแคชของ Tree-PLRU ที่ใช้ในโปรเซสเซอร์และอนุญาตให้เพิ่มจำนวนรอบเพื่อเพิ่มเวลาที่แตกต่างอย่างมีนัยสำคัญเมื่อค่า จะถูกส่งคืนจากแคชและในกรณีที่ไม่มีค่าในแคช

Google ได้เผยแพร่ต้นแบบของช่องโหว่ดังกล่าวเพื่อแสดงให้เห็นถึงความเป็นไปได้ของการโจมตีโดยใช้ช่องโหว่ประเภท Spectre และเพื่อกระตุ้นให้นักพัฒนาเว็บใช้เทคนิคที่ช่วยลดความเสี่ยงจากการโจมตีดังกล่าว

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

ที่มา: https://security.googleblog.com


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google