インテル MPX

インテル 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つの構成レジスタBNDCFGxBNDCFGUユーザー空間とBNDCFGSカーネルモード)と、BNDSTATUS例外発生時にメモリアドレスとエラーコードを提供するステータスレジスタが含まれています。[ 7 ] [ 8 ]

メモリに境界を格納するために、2段階のアドレス変換が用いられる。最上位層は、アプリケーションの起動時に作成される境界ディレクトリ(BD)から構成される。各BDエントリは空であるか、動的に作成される境界テーブル(BT)へのポインタを含む。BTには、ポインタ境界のセットとポインタの線形アドレスが含まれる。境界ロード(BNDLDX)命令と境界ストア(BNDSTX)命令は、アドレス変換を透過的に実行し、適切なBTエントリ内の境界にアクセスする。[ 7 ] [ 8 ]

Intel MPXはSkylakeマイクロアーキテクチャの一部として導入されました。[ 9 ]

インテルGoldmontマイクロアーキテクチャはインテルMPXもサポートしています。[ 9 ]

ソフトウェアサポート

分析

ある研究では、MPXシステムスタックの詳細なクロスレイヤー解析と、3つの主要なソフトウェアベースのメモリ保護メカニズム(AddressSanitizer、SAFECode、SoftBound)との比較を行い、以下の結論を示しました。[ 8 ]

  • Intel MPXは、独自のハードウェアレジスタセットを備えた特別に設計されたハードウェア支援型のアプローチですが、ソフトウェアベースのアプローチよりも高速ではありません。新しいIntel MPX命令は、最悪の場合、最大4倍の速度低下を引き起こす可能性がありますが、コンパイラの最適化によってその速度低下は軽減され、実行時のオーバーヘッドは平均で約50%になります。
  • 他のソフトウェア ベースのソリューションとは対照的に、Intel MPX は一時的なメモリ安全性エラーに対する保護を提供しません。
  • 二重間接境界テーブルからの読み取りと書き込みはスレッドセーフではありません。
  • MPX は、柔軟な配列メンバー、あるフィールドを別のフィールドからのオフセットとして参照するなど、いくつかの一般的なC / C++プログラミング表現をサポートしていません。
  • MPXは他のISA拡張機能と競合し、パフォーマンスとセキュリティの問題を引き起こします。具体的には、Intel MPXをIntel TSXIntel 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の隠れチャネルを介して情報を漏洩することができました。彼らの概念実証は公表されていません

参照

参考文献

  1. ^インテル® 64 および IA-32 アーキテクチャー・ソフトウェア開発マニュアル 第 1 巻: 基本アーキテクチャー. Intel . 2020 年 11 月. 2021 年 3 月 3 日閲覧
  2. ^ 「Intel ISA Extensions」 . Intel . 2013年11月4日閲覧。
  3. ^ 「Intel Memory Protection Extensions の紹介」 Intel 2013年7月16日2013年9月10日閲覧
  4. ^ 「Intel Memory Protection Extensions (MPX) の解説と AddressSanitizer との比較」 code.google.com . 2013年11月4日閲覧
  5. ^ 「GCCコンパイラーにおけるIntel® Memory Protection Extensions(Intel® MPX)のサポート」gcc.gnu.org . 2013年11月4日閲覧
  6. ^ 「Intel MPXの説明:メモリへの境界の保存」intel-mpx.github.io . 2017年2月6日閲覧
  7. ^ a b「Intelアーキテクチャ命令セット拡張プログラミング・リファレンス」(PDF) . Intel . 2013年12月. 2014年1月17日閲覧
  8. ^ a b c d Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). 「Intel MPX の説明:Intel MPX とソフトウェアベースの境界検査アプローチの実証的研究」. arXiv : 1702.00719 [ cs.CR ].
  9. ^ a b「Intel Software Development Emulator」 . Intel . 2012年6月15日. 2013年11月4日閲覧
  10. ^ a b「Intel MPXの設計」。Intel。
  11. ^ 「GCC 9はIntel MPXのサポートを削除する予定」 Phoronix 2018年4月27日閲覧
  12. ^ 「Intel MPX サポートが GCC 9 から削除されました - Phoronix。www.phoronix.com
  13. ^ 「Linuxカーネル3.19、セクション1.2. Intelメモリ保護拡張機能のサポート」 . kernelnewbies.org . 2015年2月9日. 2015年2月9日閲覧
  14. ^ Jonathan Corbet (2014年1月29日). 「LinuxでのIntel MPXのサポート」 . LWN.net . 2015年2月9日閲覧
  15. ^ 「Linuxカーネルはメモリ保護拡張機能のサポートを廃止する可能性があります。Phoronix
  16. ^ "[GIT PULL] x86: Intel MPX を削除する" .
  17. ^ 「[PATCH 0/3] [RFC] x86: MPX削除プロセスを開始する」
  18. ^ 「Intel MPX サポートはLinux 5.6 で終了 - Phoronix」。www.phoronix.com
  19. ^ "ChangeLog/2.6" .
  20. ^ 「QEMU 4はArmファン、RISC-V革命家、POWER愛好者向けの機能を搭載しています…お分かりいただけると思います」。The Register
  21. ^ 「Visual Studio 2015 Update 1: 新しい実験的機能 - MPX」 . Microsoft . 2016年1月20日.
  22. ^セレブリャニ、コンスタンチン. 「コンスタンチン・セレブリャニ」 . Google Research . 2023年7月27日時点のオリジナルよりアーカイブ。 2024年7月18日閲覧
  23. ^ 「AddressSanitizer Intel Memory Protection Extensions」 . GitHub . 2024年7月18日時点のオリジナルよりアーカイブ。 2013年11月4日閲覧
  24. ^カネッラ、クラウディオ;ヴァン・バルク、ジョー;シュワルツ、マイケル。リップ、モリッツ。フォン・ベルク、ベンヤミン。オルトナー、フィリップ。ピーセンス、フランク。エフチュシュキン、ドミトリー。グラス、ダニエル (2018)。 「一時的な実行攻撃と防御の系統的評価」。arXiv : 1811.05441 [ cs.CR ]。