อ่าน 5 นาที
อินเทล เอ็มพีเอ็กซ์
Intel MPX ( Memory Protection Extensions ) เป็นชุดส่วนขยายที่เลิกใช้แล้วสำหรับ สถาปัตยกรรมชุดคำสั่ง x86 Intel MPX อ้างว่าช่วยเพิ่มความปลอดภัยให้กับ ซอฟต์แวร์ โดย การ ตรวจสอบ...
อินเทล เอ็มพีเอ็กซ์
Intel MPX ( Memory Protection Extensions ) เป็นชุดส่วนขยายที่เลิกใช้แล้วสำหรับสถาปัตยกรรมชุดคำสั่งx86 Intel MPX อ้างว่าช่วยเพิ่มความปลอดภัยให้กับซอฟต์แวร์โดยการตรวจสอบการอ้างอิงตัวชี้ ซึ่งเจตนาในการคอมไพล์ตามปกติ จะถูกใช้ประโยชน์ในทางที่ผิดในระหว่างการทำงานเนื่องจากบัฟเฟอร์โอเวอร์โฟลว์ในทางปฏิบัติ มีการค้นพบข้อบกพร่องในการออกแบบมากเกินไปจนไม่สามารถใช้งานได้ และการสนับสนุนจึงถูกยกเลิกหรือลบออกจากคอมไพเลอร์และระบบปฏิบัติการส่วนใหญ่Intelได้ระบุว่า MPX ถูกลบออกในฮาร์ดแวร์ปี 2019 และหลังจากนั้นในส่วนที่ 2.5 ของคู่มือสำหรับนักพัฒนาซอฟต์แวร์ Intel® 64 และ IA-32 Architectures เล่มที่ 1 [ 1 ]
ส่วนขยาย
Intel MPX นำเสนอรีจิสเตอร์ ขอบเขตใหม่ และ ส่วนขยาย ชุดคำสั่ง ใหม่ ที่ทำงานกับรีจิสเตอร์เหล่านี้ นอกจากนี้ยังมีชุด "ตารางขอบเขต" ใหม่ที่เก็บขอบเขตที่เกินกว่าจะใส่ลงในรีจิสเตอร์ขอบเขตได้[ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]
MPX ใช้รีจิสเตอร์ขอบเขต 128 บิตใหม่สี่ตัวBND0โดยBND3แต่ละตัวจะเก็บค่าขอบเขตล่าง (LB) และขอบเขตบน (UB) ขนาด 64 บิตสองค่าของบัฟเฟอร์ ขอบเขตบนจะถูกเก็บใน รูปแบบ ส่วนเติมเต็มหนึ่งโดยBNDMK(สร้างขอบเขต) และBNDCU(ตรวจสอบขอบเขตบน) จะทำการแปลง สถาปัตยกรรมประกอบด้วยรีจิสเตอร์การกำหนดค่าสองตัวBNDCFGx( BNDCFGUในพื้นที่ผู้ใช้และBNDCFGSในโหมดเคอร์เนล) และรีจิสเตอร์สถานะBNDSTATUSซึ่งให้ที่อยู่หน่วยความจำและรหัสข้อผิดพลาดในกรณีที่มีข้อยกเว้น[ 7 ] [ 8 ]
การแปลที่อยู่แบบสองระดับใช้สำหรับการจัดเก็บขอบเขตในหน่วยความจำ เลเยอร์บนสุดประกอบด้วยไดเร็กทอรีขอบเขต (BD) ที่สร้างขึ้นเมื่อแอปพลิเคชันเริ่มต้น แต่ละรายการใน BD จะว่างเปล่าหรือมีตัวชี้ไปยังตารางขอบเขต (BT) ที่สร้างขึ้นแบบไดนามิก ซึ่งประกอบด้วยชุดของขอบเขตตัวชี้พร้อมกับที่อยู่เชิงเส้นของตัวชี้ คำสั่งโหลดขอบเขต ( BNDLDX) และจัดเก็บขอบเขต ( BNDSTX) จะดำเนินการแปลที่อยู่และเข้าถึงขอบเขตในรายการ BT ที่เหมาะสมอย่างโปร่งใส[ 7 ] [ 8 ]
Intel MPX ได้รับการแนะนำเป็นส่วนหนึ่งของสถาปัตยกรรมไมโครSkylake [ 9 ]
สถาปัตยกรรมไมโคร Intel Goldmontยังรองรับ Intel MPX ด้วย[ 9 ]
การสนับสนุนซอฟต์แวร์
- glibcได้ลบการสนับสนุนในเวอร์ชัน 2.35 แล้ว
- GNU Compiler Collection (GCC) 5.0 เพิ่มการสนับสนุนสำหรับ MPX [ 10 ]ในปี 2018 การสนับสนุนส่วนขยายเหล่านี้ลดลงเนื่องจากภาระในการบำรุงรักษาและ นักพัฒนา ของ Intelที่ส่งแพตช์เป็นระยะๆ ส่งผลให้มีข้อเสนอให้ยกเลิกการสนับสนุนใน GCC 9.0 [ 11 ]การสนับสนุนถูกลบออกใน GCC 9.1 [ 12 ]
- Intel C++ Compiler (icc) 15.0 เพิ่มการสนับสนุนสำหรับ Intel MPX [ 10 ]
- การสนับสนุนซอฟต์แวร์ระดับ เคอร์เนลสำหรับ Intel MPX ได้ถูกรวมเข้ากับเคอร์เนล Linux หลักในเวอร์ชันเคอร์เนล 3.19 ซึ่งเผยแพร่เมื่อวันที่ 8 กุมภาพันธ์ 2015 [ 13 ] [ 14 ]ในปี 2018 Thomas Gleixner เสนอให้ลบการสนับสนุน MPX ออกจากเคอร์เนล Linux 4.18 [ 15 ]คำขอพูลที่มีการลบดังกล่าวถูกโพสต์ในเดือนธันวาคม 2018 ระหว่างรอบการพัฒนา 4.20 [ 16 ]แต่ไม่ได้รับการยอมรับ ความพยายามครั้งที่สองเกิดขึ้นในเดือนกรกฎาคม 2019 [ 17 ]การสนับสนุน MPX ถูกลบออกในเวอร์ชัน 5.6 [ 18 ]
- QEMUรองรับ MPX ตั้งแต่เวอร์ชัน 2.6 [ 19 ]และยกเลิกการสนับสนุนในเวอร์ชัน 4.0 [ 20 ]
- Microsoft Visual Studio 2015 Update 1 เพิ่มการสนับสนุนแบบทดลองสำหรับ MPX [ 21 ]
การวิเคราะห์
การศึกษาวิจัยได้ตรวจสอบการวิเคราะห์แบบละเอียดของสแต็กระบบ MPX และเปรียบเทียบกับกลไกการป้องกันหน่วยความจำแบบซอฟต์แวร์ที่โดดเด่น 3 แบบ ( AddressSanitizer , SAFECode และ SoftBound) และได้ข้อสรุปดังต่อไปนี้[ 8 ]
- แม้ว่า Intel MPX จะเป็นวิธีการที่ออกแบบมาเป็นพิเศษโดยใช้ฮาร์ดแวร์ช่วย โดยมีชุดรีจิสเตอร์ฮาร์ดแวร์เพิ่มเติมเฉพาะตัว แต่ก็ไม่ได้เร็วกว่าวิธีการใดๆ ที่ใช้ซอฟต์แวร์ คำสั่ง Intel MPX ใหม่สามารถทำให้ความเร็วลดลงได้ถึง 4 เท่าในกรณีที่เลวร้ายที่สุด แม้ว่าการเพิ่มประสิทธิภาพของคอมไพเลอร์จะช่วยลดผลกระทบนี้ลง และทำให้เกิดค่าใช้จ่ายในการรันไทม์โดยเฉลี่ยประมาณ 50% ก็ตาม
- แตกต่างจากโซลูชันที่ใช้ซอฟต์แวร์อื่นๆ Intel MPX ไม่มีระบบป้องกันข้อผิดพลาดด้านความปลอดภัยของหน่วยความจำชั่วคราว
- การอ่านและเขียนข้อมูลจากตารางขอบเขตแบบอ้างอิงสองทางนั้นไม่ปลอดภัยต่อการใช้งานแบบมัลติเธรด
- MPX ไม่รองรับ สำนวนการเขียนโปรแกรม C / C++ ทั่วไปหลายอย่าง เช่นสมาชิกอาร์เรย์แบบยืดหยุ่นการอ้างอิงฟิลด์หนึ่งเป็นค่าออฟเซ็ตจากอีกฟิลด์หนึ่ง เป็นต้น
- MPX ขัดแย้งกับส่วนขยาย ISA อื่นๆ บางส่วน ส่งผลให้เกิดปัญหาด้านประสิทธิภาพและความปลอดภัย โดยเฉพาะอย่างยิ่ง ปัญหาเหล่านี้เกิดขึ้นเมื่อใช้ Intel MPX ร่วมกับกลไกการป้องกันแบบฮาร์ดแวร์อื่นๆ เช่นIntel TSXและIntel SGX
- คำสั่ง MPX ทำให้ประสิทธิภาพการทำงานลดลงอย่างมาก (มากกว่า 15%) แม้แต่ในซีพียู Intel ที่ไม่รองรับ MPX ก็ตาม
นอกจากนี้ การตรวจสอบยังสรุปว่า MPX ยังไม่พร้อมสำหรับการใช้งานจริง และAddressSanitizerเป็นตัวเลือกที่ดีกว่า[ 8 ]การตรวจสอบโดย Kostya Serebryany ที่ Google ซึ่งเป็นผู้พัฒนา AddressSanitizer [ 22 ]มีผลการค้นพบที่คล้ายคลึงกัน[ 23 ]
เมลท์ดาวน์
การศึกษาวิจัยอีกฉบับหนึ่ง[ 24 ]ที่สำรวจขอบเขตของ ช่องโหว่ด้านความปลอดภัยของ SpectreและMeltdownพบว่า Meltdown สามารถใช้เพื่อหลีกเลี่ยง Intel MPX โดยใช้ข้อยกเว้นฮาร์ดแวร์ Bound Range Exceeded (#BR) ตามที่ตีพิมพ์ นักวิจัยสามารถรั่วไหลข้อมูลผ่านช่องทางลับ Flush+Reload จากการเข้าถึงนอกขอบเขตบนอาร์เรย์ที่ได้รับการปกป้องโดยระบบ MPX หลักฐานแนวคิดของพวกเขายังไม่ได้รับการเปิดเผยต่อสาธารณะ
ดูเพิ่มเติม
ลิงก์ภายนอก
- เอกสารอ้างอิงการเขียนโปรแกรมส่วนขยายชุดคำสั่งสถาปัตยกรรม Intel (PDF) Intelกรกฎาคม 2556สืบค้นเมื่อ 10 มกราคม 2559
- Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). "คำอธิบาย Intel MPX: การศึกษาเชิงประจักษ์ของ Intel MPX และวิธีการตรวจสอบขอบเขตแบบใช้ซอฟต์แวร์" arXiv : 1702.00719 [ cs.CR ]เอกสารประกอบเพิ่มเติมออนไลน์อยู่ที่https://intel-mpx.github.io
- "บทนำเกี่ยวกับ Intel Memory Protection Extensions" Intel . 2013-07-16 . สืบค้นเมื่อ2013-09-10 .
- "ส่วนขยาย Intel ISA" Intel สืบค้นเมื่อ4 พฤศจิกายน 2013
- "การรองรับ Intel® Memory Protection Extensions (Intel® MPX) ในคอมไพเลอร์ GCC" . gcc.gnu.org . สืบค้นเมื่อ2013-11-04 .
- Hansen, Dave (16 มีนาคม 2016). "ส่วนขยายการป้องกันหน่วยความจำของ Intel® (Intel® MPX) สำหรับ Linux" . สืบค้นเมื่อ17 พฤษภาคม 2018 .
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อินเทล เอ็มพีเอ็กซ์
Intel MPX ( Memory Protection Extensions ) เป็นชุดส่วนขยายที่เลิกใช้แล้วสำหรับ สถาปัตยกรรมชุดคำสั่ง x86 Intel MPX อ้างว่าช่วยเพิ่มความปลอดภัยให้กับ ซอฟต์แวร์ โดย การ ตรวจสอบ...
ส่วนขยาย
Intel MPX นำเสนอ รีจิสเตอร์ ขอบเขตใหม่ และ ส่วนขยาย ชุดคำสั่ง ใหม่ ที่ทำงานกับรีจิสเตอร์เหล่านี้ นอกจากนี้ยังมีชุด "ตารางขอบเขต" ใหม่ที่เก็บขอบเขตที่เกินกว่าจะใส่ลงในรีจิสเตอร์ขอบเขตได้ [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]
การสนับสนุนซอฟต์แวร์
glibc ได้ลบการสนับสนุนในเวอร์ชัน 2.35 แล้ว GNU Compiler Collection (GCC) 5.
การวิเคราะห์
การศึกษาวิจัยได้ตรวจสอบการวิเคราะห์แบบละเอียดของสแต็กระบบ MPX และเปรียบเทียบกับกลไกการป้องกันหน่วยความจำแบบซอฟต์แวร์ที่โดดเด่น 3 แบบ ( AddressSanitizer , SAFECode และ SoftBound) และได้ข้อสรุปดังต่อไปนี้ [ 8 ]