กลับไปหน้าบทความ

อ่าน 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 .
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Intel_MPX&oldid=1305156751 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อินเทล เอ็มพีเอ็กซ์

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 ]