2 คะแนน โดย GN⁺ 2023-11-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การค้นพบปริศนาใน CPU

  • หากคุณสนใจข้อผิดพลาดที่อาจเกิดขึ้นภายใน CPU สมัยใหม่ แนะนำให้อ่านต่อ
  • หากคุณเคยเขียนแอสเซมบลี x86 มาก่อน คุณน่าจะคุ้นเคยกับคำสั่ง rep movsb ที่ใช้ย้ายข้อมูลในหน่วยความจำ
  • หลังจากตั้งค่าต้นทาง ปลายทาง ทิศทาง และจำนวนครั้งแล้ว โปรเซสเซอร์จะจัดการรายละเอียดทั้งหมดให้เอง

การตีความคำนำหน้าคำสั่ง

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

คำนำหน้า REX

  • i386 มีรีจิสเตอร์อเนกประสงค์ 8 ตัว จึงสามารถระบุรีจิสเตอร์ได้ด้วย 3 บิต
  • x86-64 เพิ่มรีจิสเตอร์อเนกประสงค์อีก 8 ตัว ทำให้ต้องใช้บิตมากขึ้น
  • คำนำหน้า rex ช่วยให้คำสั่งถัดไปยืมบิตเพิ่มเติมได้ ทำให้สามารถเข้ารหัสรีจิสเตอร์อเนกประสงค์ทั้ง 16 ตัวได้

กฎการเข้ารหัส

  • คำนำหน้า rex เพิ่มพื้นที่ที่ใช้ได้สำหรับการเข้ารหัสโอเปอแรนด์
  • คำนำหน้าที่ไม่จำเป็นหรือซ้ำซ้อนใน x86 ส่วนใหญ่มักจะถูกเพิกเฉย
  • คำสั่ง rex.rxb rep movsb ไม่มีโอเปอแรนด์ ดังนั้นบิต rex จึงไม่มีความหมาย และโปรเซสเซอร์จะเพิกเฉยต่อคำนำหน้า rex

Fast Short Repeat Move (FSRM)

  • FSRM เป็นฟีเจอร์ใหม่ที่เปิดตัวใน Ice Lake เพื่อแก้ข้อด้อยของ ERMS
  • ส่วนที่ยากของการย้ายสตริงอย่างมีประสิทธิภาพใน ERMS คือการจัดแนวบัฟเฟอร์และใช้การจัดเก็บที่กว้างที่สุดเท่าที่เป็นไปได้
  • FSRM มีเป้าหมายเพื่อย้ายสตริงสั้นที่มีขนาดไม่เกิน 128 ไบต์ให้เร็วขึ้น

การค้นพบ

  • ใช้เทคนิคการตรวจสอบโปรเซสเซอร์ที่เรียกว่า Oracle Serialization เพื่อตรวจสอบว่าโปรแกรมที่สร้างแบบสุ่มสองรูปแบบมีสถานะสุดท้ายเหมือนกันหรือไม่
  • ในเดือนสิงหาคม ระบบตรวจสอบพบกรณีที่การเพิ่มคำนำหน้า rex.r ที่ซ้ำซ้อนเข้าไปในงาน rep movs ที่ปรับแต่งด้วย FSRM ทำให้เกิดผลลัพธ์ที่คาดเดาไม่ได้
  • ยืนยันได้ว่าเมื่อหลายคอร์กระตุ้นบั๊กเดียวกันพร้อมกัน โปรเซสเซอร์จะรายงาน machine check exception และหยุดทำงาน

การทำซ้ำให้เกิดเหตุการณ์

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

การวิเคราะห์

  • วิธีการทำงานของไมโครโค้ดในระบบสมัยใหม่ยังเป็นความลับ จึงทำได้เพียงตั้งทฤษฎีจากสิ่งที่สังเกตเห็น
  • คาดว่าบั๊กนี้ทำให้ฟรอนต์เอนด์คำนวณขนาดของคำสั่ง movsb ผิดพลาด ส่งผลให้รายการถัดไปใน ROB (reorder buffer) ถูกเชื่อมโยงกับแอดเดรสที่ไม่ถูกต้อง

คำถาม

  • อาจมีคำถามว่าในสถานะ "glitch" ที่ไม่คาดคิดนี้สามารถทำอะไรได้บ้าง
  • ทราบแล้วว่าสามารถทำให้สถานะของระบบเสียหายมากพอที่จะก่อให้เกิด machine check error ได้ และเธรดหนึ่งสามารถส่งผลต่อการทำงานของโปรเซสเซอร์พี่น้องใน SMT ได้
  • เนื่องจากไม่มีวิธีดีบักการทำงานของ μop จึงยังไม่ทราบว่าสามารถยกระดับสิทธิ์ได้หรือไม่

วิธีแก้ไข

  • Intel ได้เผยแพร่ไมโครโค้ดที่อัปเดตแล้วสำหรับโปรเซสเซอร์ที่ได้รับผลกระทบทั้งหมด
  • ผู้ให้บริการระบบปฏิบัติการหรือ BIOS อาจมีการปล่อยอัปเดตนี้ออกมาแล้วเช่นกัน

ทางเลือก

  • หากไม่สามารถอัปเดตได้ สามารถปิดการทำงานของ fast strings ผ่านรีจิสเตอร์เฉพาะรุ่น IA32_MISC_ENABLE ได้
  • แต่สิ่งนี้จะทำให้ประสิทธิภาพลดลงอย่างมาก จึงควรใช้เฉพาะเมื่อจำเป็นจริง ๆ เท่านั้น

ความเห็นของ GN⁺

ประเด็นสำคัญที่สุดของบทความนี้คือการค้นพบสถานะ "glitch" ที่ไม่คาดคิดซึ่งอาจเกิดขึ้นใน CPU สมัยใหม่ และการแสดงให้เห็นว่าสิ่งนี้สามารถนำไปสู่ช่องโหว่ด้านความปลอดภัยได้ บทความนี้น่าจะน่าสนใจสำหรับวิศวกรซอฟต์แวร์ และช่วยเพิ่มความตระหนักถึงความซับซ้อนของ CPU และความเปราะบางของระบบ นอกจากนี้ยังช่วยให้เข้าใจว่าการค้นพบลักษณะนี้สามารถนำไปสู่ภัยคุกคามด้านความปลอดภัยจริงได้อย่างไร พร้อมทั้งตอกย้ำความสำคัญของการอัปเดตไมโครโค้ด

1 ความคิดเห็น

 
GN⁺ 2023-11-15
ความคิดเห็นบน Hacker News
  • ทีมของ Konrad Magnusson พบปัญหาที่เกี่ยวข้องกับ mimalloc

    • Konrad Magnusson แห่ง Paradox Interactive พบประเด็นที่เกี่ยวข้องกับ mimalloc ซึ่งอาจเชื่อมโยงกับช่องโหว่ของ CPU แบบใหม่ที่นักวิจัยของ Google ค้นพบ
  • หลายทีมวิจัยภายใน Google ค้นพบบั๊กนี้แยกกันโดยอิสระ

    • หลายทีมวิจัยภายใน Google รวมถึงทีม silifuzz และทีม Google Information Security Engineering ต่างค้นพบบั๊กเดียวกันโดยอิสระ
  • โปรเซสเซอร์รายงาน machine check exception และหยุดทำงาน

    • มีการกล่าวถึงอาการที่โปรเซสเซอร์รายงาน machine check exception แล้วหยุดทำงาน
  • ทำให้ตระหนักว่าตนเองยังเข้าใจฮาร์ดแวร์ไม่มากพอ

    • ผู้แสดงความเห็นตระหนักว่าตนมีความรู้ด้านฮาร์ดแวร์ไม่เพียงพอ และตั้งคำถามว่าทำไมจึงต้องใช้ "prefix" เพื่อเปลี่ยนพฤติกรรมการทำงานของคำสั่ง
  • ชวนให้นึกถึงการวิเคราะห์ปัญหาของ qemu ตอนเจอปัญหา repz ret

    • เป็นการนึกย้อนไปถึงสถานการณ์ที่ qemu เคยวิเคราะห์ปัญหา repz ret
  • ทั้งพนักงานของ Intel เองและพนักงาน Google เป็นผู้รายงานปัญหา

    • Intel กล่าวขอบคุณพนักงานของตนเองและพนักงาน Google ที่ค้นพบและรายงานปัญหานี้ภายในองค์กร
  • สนุกกว่าบทความของ Google มาก

    • แสดงความคิดเห็นว่าการสนทนานี้น่าสนใจกว่าบทความของ Google มาก
  • ตั้งข้อสงสัยว่าจะออกแบบ CPU ที่ไม่ทำงานตามลำดับและทำ speculative execution ได้โดยไม่มีปัญหาด้านความปลอดภัยหรือไม่

    • ตั้งคำถามถึงปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นเมื่อออกแบบ CPU ที่ไม่ทำงานตามลำดับและทำ speculative execution พร้อมทั้งถามว่าในอนาคตจะมุ่งไปสู่แนวทางที่แต่ละคอร์ A55 ทำงานแอปพลิเคชันเดียวอย่างอิสระหรือไม่
  • คำอธิบายเกี่ยวกับประกาศด้านความปลอดภัยของ Intel

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