拡張機能
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 ]
Intel GoldmontマイクロアーキテクチャはIntel MPXもサポートしています。[ 9 ]
分析
ある研究では、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 ]
メルトダウン
SpectreとMeltdownのセキュリティ脆弱性の範囲を調査した別の研究[ 24 ]では、MeltdownがBound Range Exceeded(#BR)ハードウェア例外を使用してIntel MPXをバイパスできることが発見されました。彼らの発表によると、研究者らはMPXシステムによって保護されているアレイへの境界外アクセスから、Flush+Reloadの隠しチャネルを介して情報を漏洩させることができました。彼らの概念実証は一般には公開されていません。
参考文献
- ↑ Intel® 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 1 巻: 基本アーキテクチャ。Intel。2020年11月。2021年 3 月 3 日に取得。
- ↑ 「Intel ISA Extensions」 . Intel . 2013年11月4日取得。
- ↑ 「Intel メモリ保護拡張機能の概要」 . Intel . 2013-07-16 . 2013-09-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-02-06取得。
- 1 2 「Intel Architecture Instruction Set Extensions Programming Reference」(PDF)。Intel 。 2013年12月。 2014年1月17日取得。
- 1 2 3 4 Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). "Intel MPX の説明: Intel MPX とソフトウェアベースの境界チェック手法に関する実証的研究". arXiv : 1702.00719 [ cs.CR ].
- 1 2 「Intel Software Development Emulator」 . Intel . 2012-06-15 . 2013-11-04に取得.
- 1 2 「Intel MPX の設計」 . Intel.
- ↑ 「GCC 9 は Intel MPX サポートを削除する予定」。Phoronix。2018年 4 月 27日取得。
- ↑ 「GCC 9 から Intel MPX サポートが削除されました - 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日。
- ↑ Serebryany, Konstantin. "Konstantin Serebryany" . Google Research . 2023-07-27 のオリジナルからアーカイブ済み. 2024-07-18に取得.
- ↑ "Address Sanitizer Intel Memory Protection Extensions" . GitHub . 2024-07-18 のオリジナルからアーカイブ済み. 2013-11-04に取得.
- ↑カネッラ、クラウディオ。ヴァン・バルク、ジョー;シュワルツ、マイケル。リップ、モーリッツ。フォン・ベルク、ベンヤミン。オルトナー、フィリップ。ピーセンス、フランク。エフチュシュキン、ドミトリー。グラス、ダニエル (2018)。 「一時的な実行攻撃と防御の系統的評価」。arXiv : 1811.05441 [ cs.CR ]。
外部リンク
- Intelアーキテクチャ命令セット拡張プログラミングリファレンス(PDF)。Intel。 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 メモリ保護拡張機能の概要」 . Intel . 2013-07-16 . 2013-09-10に取得.
- 「Intel ISA Extensions」 . Intel . 2013年11月4日取得。
- 「GCCコンパイラにおけるIntel® Memory Protection Extensions (Intel® MPX)のサポート」 . gcc.gnu.org . 2013年11月4日取得。
- Hansen, Dave (2016-03-16). "Intel® Memory Protection Extensions (Intel® MPX) for Linux" . 2018-05-17に取得。