ชุดคำสั่ง Intel MPX การป้องกันซอฟต์แวร์ใหม่ที่มากับซีพียู Skylake

by lew
8 August 2015 - 06:45

ซีพียู Skylake เพิ่งเปิดตัวไป สำหรับคนส่วนมาก มันคือซีพียูที่แรงขึ้นตามรอบการอัพเกรดของอินเทล แต่นอกจากความแรงแล้ว อินเทลยังค่อยๆ ปรับปรุงสถาปัตยกรรมของซีพียูทุกรอบที่ออกรุ่นใหม่ เช่นใน Haswell ที่มีชุดคำสั่ง TSX สำหรับโมเดลการเขียนโปรแกรมแบบหลายเธรดแบบใหม่ ในสถาปัตยกรรม Skylake ชุดคำสั่งใหม่คือ Intel MPX (Memory Protection Extensions)

ชุดคำสั่ง MPX พยายามแก้ปัญหาความปลอดภัยซอฟต์แวร์ที่เป็นปัญหามายาวนาน คือ การใช้หน่วยความจำเกินกว่าที่จองไว้ (memory overflow) ความผิดพลาดที่โปรแกรมเมอร์ไม่ได้ตรวจสอบขนาดของหน่วยความจำที่จองไว้หรือขนาดข้อมูลที่กำลังเขียนลงไป สร้างช่องโหว่สำคัญๆ มากมาย ก่อนหน้านี้มีโครงการที่พยายามแก้ปัญหานี้ เช่น AddressSanitizer ที่รองรับใน GCC มาตั้งแต่รุ่น 4.8 และช่วยให้พบช่องโหว่ในเบราว์เซอร์โครมหลายจุด สำหรับชุดคำสั่ง MPX เป็นการย้ายกระบวนการตรวจสอบจากที่อยู่ในระดับซอฟต์แวร์มาอยู่ในระดับฮาร์ดแวร์ที่วงจรของซีพียูโดยตรง แต่ยังจำเป็นต้องให้ ระบบปฎิบัติการและคอมไพล์เลอร์รองรับ

ตัวอย่างโค้ดที่ MPX สามารถตรวจสอบความผิดพลาดได้ เช่นดังภาพ

การเขียนสตริง "Intel MPXexample" ความยาวเกินขนาดหน่วยความจำที่จองไว้เพียง 4 ไบต์จะทำให้เกิดอินเตอร์รัพท์ และโปรแกรมจะเข้าฟังก์ชั่นเพื่อแจ้งความผิดพลาดทันที

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

แม้ว่า Skylake จะเพิ่งออกวางตลาด แต่อินเทลก็เตรียมการสำหรับชุดคำสั่ง MPX มาล่วงหน้าหลายปี โดยส่งแบบจำลองการทำงานให้ผู้ผลิตหลายรายไว้ล่วงหน้า โครงการ AddressSanitizer มีบทความเขียนเปรียบเทียบการทำงานกับ MPX พร้อมกับตั้งข้อสงสัยว่าจริงๆ แล้วการตรวจสอบที่ระดับฮาร์ดแวร์จะได้ประสิทธิภาพเพิ่มขึ้นจริงหรือไม่ สำหรับลินุกซ์อินเทลส่งโค้ดเข้าไปยังเคอร์เนลตั้งแต่ต้นปีที่แล้ว ทำให้ลินุกซ์ตั้งแต่รุ่น 3.19 รองรับ MPX มาโดยตลอด และ GCC ก็รองรับ MPX บนลินุกซ์ตั้งแต่รุ่น 5.1 เป็นต้นมา สำหรับวินโดวส์นั้น รุ่น 8.1 เป็นต้นมาก็รองรับแล้ว แต่เอกสารของอินเทลไม่ได้พูดถึงคอมไพล์เลอร์ว่า Visual Studio รองรับหรือไม่ ระบุเพียงว่า Intel C++ รองรับบนวินโดวส์แล้ว

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

ที่มา - Intel (PDF)

Blognone Jobs Premium