インテル MPX(メモリー保護拡張機能)は、 x86命令セットアーキテクチャーの廃止された拡張機能セットです。コンパイラー、ランタイムライブラリ、およびオペレーティングシステムのサポートにより、インテル MPX は、通常のコンパイル時の意図が実行時にバッファーオーバーフローによって悪意を持って悪用されるポインター参照をチェックすることで、ソフトウェアのセキュリティを強化すると主張していました。実際には、設計にあまりにも多くの欠陥が発見されたため、役に立たず、ほとんどのコンパイラーとオペレーティングシステムでサポートが非推奨または削除されました。インテルは、『インテル® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル 第 1 巻』のセクション 2.5 で、2019 年以降のハードウェアで MPX が削除されたことを記載しています。 [ 1 ]
拡張
Intel MPXは、新しい境界レジスタと、これらのレジスタを操作する新しい命令セット拡張を導入しています。さらに、境界レジスタに収まらない境界を格納する新しい「境界テーブル」セットがあります。[ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]
MPXは、4つの新しい128ビット境界レジスタ(BND0~ )を使用します。BND3各レジスタは、バッファの64ビットの下限値(LB)と上限値(UB)のペアを格納します。上限値は1の補数形式で格納され、BNDMK(境界の作成)とBNDCU(上限の確認)によって変換が行われます。このアーキテクチャには、2つの構成レジスタBNDCFGx(BNDCFGUユーザー空間とBNDCFGSカーネルモード)と、BNDSTATUS例外発生時にメモリアドレスとエラーコードを提供するステータスレジスタが含まれています。[ 7 ] [ 8 ]
メモリに境界を格納するために、2段階のアドレス変換が用いられる。最上位層は、アプリケーションの起動時に作成される境界ディレクトリ(BD)から構成される。各BDエントリは空であるか、動的に作成される境界テーブル(BT)へのポインタを含む。BTには、ポインタ境界のセットとポインタの線形アドレスが含まれる。境界ロード(BNDLDX)命令と境界ストア(BNDSTX)命令は、アドレス変換を透過的に実行し、適切なBTエントリ内の境界にアクセスする。[ 7 ] [ 8 ]
Intel MPXはSkylakeマイクロアーキテクチャの一部として導入されました。[ 9 ]
インテルGoldmontマイクロアーキテクチャはインテルMPXもサポートしています。[ 9 ]
ソフトウェアサポート
- glibc はバージョン 2.35 でサポートが削除されました。
- GNUコンパイラコレクション(GCC)5.0ではMPXのサポートが追加されました。[ 10 ] 2018年には、メンテナンスの負担とIntel開発者によるパッチの提供が断続的だったため、これらの拡張機能のサポートは減少し、GCC 9.0でサポートを廃止する提案が出されました。[ 11 ] GCC 9.1ではサポートが削除されました。[ 12 ]
- インテルC++コンパイラ(icc)15.0ではインテルMPXのサポートが追加されました。[ 10 ]
- Intel MPXのカーネルレベルのソフトウェアサポートは、2015年2月8日にリリースされたカーネルバージョン3.19でLinuxカーネルメインラインに統合されました。 [ 13 ] [ 14 ] 2018年、Thomas GleixnerはLinuxカーネル4.18からMPXサポートを削除することを提案しました。[ 15 ]削除を含むプルリクエストは、4.20開発サイクル中の2018年12月に投稿されましたが、[ 16 ]受け入れられませんでした。2回目の試みは2019年7月に行われました。[ 17 ] MPXサポートは5.6で削除されました。[ 18 ]
- QEMUはバージョン2.6からMPXをサポートしていましたが[ 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 命令は、MPX サポートのない Intel CPU でも、パフォーマンスに大幅な低下 (15% 以上) をもたらします。
さらに、レビューではMPXはまだ本番環境に対応しておらず、AddressSanitizerの方がより良い選択肢であると結論付けられました。[ 8 ] AddressSanitizerの開発者であるGoogleのKostya Serebryany氏によるレビューでも[ 22 ]同様の結果が出ています。[ 23 ]
メルトダウン
スペクターとメルトダウンのセキュリティ脆弱性の範囲を調査した別の研究[ 24 ]では、メルトダウンはBound Range Exceeded(#BR)ハードウェア例外を利用してIntel MPXを回避できることが発見されました。発表によると、研究者たちはMPXシステムによって保護されたアレイへの境界外アクセスから、Flush+Reloadの隠れチャネルを介して情報を漏洩することができました。彼らの概念実証は公表されていません
参照
参考文献
- ^インテル® 64 および IA-32 アーキテクチャー・ソフトウェア開発マニュアル 第 1 巻: 基本アーキテクチャー. Intel . 2020 年 11 月. 2021 年 3 月 3 日閲覧。
- ^ 「Intel ISA Extensions」 . Intel . 2013年11月4日閲覧。
- ^ 「Intel Memory Protection Extensions の紹介」 Intel 2013年7月16日2013年9月10日閲覧。
- ^ 「Intel Memory Protection Extensions (MPX) の解説と AddressSanitizer との比較」 code.google.com . 2013年11月4日閲覧。
- ^ 「GCCコンパイラーにおけるIntel® Memory Protection Extensions(Intel® MPX)のサポート」gcc.gnu.org . 2013年11月4日閲覧。
- ^ 「Intel MPXの説明:メモリへの境界の保存」intel-mpx.github.io . 2017年2月6日閲覧。
- ^ a b「Intelアーキテクチャ命令セット拡張プログラミング・リファレンス」(PDF) . Intel . 2013年12月. 2014年1月17日閲覧。
- ^ a b c d Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). 「Intel MPX の説明:Intel MPX とソフトウェアベースの境界検査アプローチの実証的研究」. arXiv : 1702.00719 [ cs.CR ].
- ^ a b「Intel Software Development Emulator」 . Intel . 2012年6月15日. 2013年11月4日閲覧。
- ^ a b「Intel MPXの設計」。Intel。
- ^ 「GCC 9はIntel MPXのサポートを削除する予定」 Phoronix 2018年4月27日閲覧。
- ^ 「Intel MPX サポートが GCC 9 から削除されました - Phoronix」。www.phoronix.com。
- ^ 「Linuxカーネル3.19、セクション1.2. Intelメモリ保護拡張機能のサポート」 . kernelnewbies.org . 2015年2月9日. 2015年2月9日閲覧。
- ^ Jonathan Corbet (2014年1月29日). 「LinuxでのIntel MPXのサポート」 . LWN.net . 2015年2月9日閲覧。
- ^ 「Linuxカーネルはメモリ保護拡張機能のサポートを廃止する可能性があります」。Phoronix 。
- ^ "[GIT PULL] x86: Intel MPX を削除する" .
- ^ 「[PATCH 0/3] [RFC] x86: MPX削除プロセスを開始する」。
- ^ 「Intel MPX サポートはLinux 5.6 で終了 - Phoronix」。www.phoronix.com。
- ^ "ChangeLog/2.6" .
- ^ 「QEMU 4はArmファン、RISC-V革命家、POWER愛好者向けの機能を搭載しています…お分かりいただけると思います」。The Register。
- ^ 「Visual Studio 2015 Update 1: 新しい実験的機能 - MPX」 . Microsoft . 2016年1月20日.
- ^セレブリャニ、コンスタンチン. 「コンスタンチン・セレブリャニ」 . Google Research . 2023年7月27日時点のオリジナルよりアーカイブ。 2024年7月18日閲覧。
- ^ 「AddressSanitizer Intel Memory Protection Extensions」 . GitHub . 2024年7月18日時点のオリジナルよりアーカイブ。 2013年11月4日閲覧。
- ^カネッラ、クラウディオ;ヴァン・バルク、ジョー;シュワルツ、マイケル。リップ、モリッツ。フォン・ベルク、ベンヤミン。オルトナー、フィリップ。ピーセンス、フランク。エフチュシュキン、ドミトリー。グラス、ダニエル (2018)。 「一時的な実行攻撃と防御の系統的評価」。arXiv : 1811.05441 [ cs.CR ]。
外部リンク
- インテル アーキテクチャー命令セット拡張プログラミング・リファレンス(PDF) .インテル. 2013年7月. 2016年1月10日閲覧
- 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年7月16日. 2013年9月10日閲覧.
- 「Intel ISA 拡張機能」 . Intel . 2013年11月4日閲覧。
- 「GCCコンパイラーにおけるIntel® Memory Protection Extensions(Intel® MPX)のサポート」gcc.gnu.org 2013年11月4日閲覧。
- Hansen, Dave (2016-03-16). 「Linux向けIntel® Memory Protection Extensions (Intel® MPX)」 . 2018年5月17日閲覧。