ブログ

FFRI BLOG

Monthly Research 「Intel Memory Protection Extensionsとその活用

今回紹介するIntel Memory Protection Extensions(Intel MPX)は、コンパイラやOS、言語ランタイムによる、より高度なメモリ保護機能を高速に実行するためのCPUの命令拡張です。

高度なメモリ保護の関連研究として、産総研が開発したFail-safe C(リンク:https://staff.aist.go.jp/y.oiwa/FailSafeC/)が分かりやすい例といえるでしょう。Fail-safe Cの機能の一つに、変数や配列へのアクセスを行う際にメモリ境界をチェックする機能があります。これにより、配列の添え字を使った意図しないメンバへのアクセスなどを実行時に検出することができます。

Fail-safe Cでは、コンパイル時にこのようなメモリ境界のチェックを行うコードを生成します。これらはプログラムの実行時に大きなオーバーヘッドとなりますが、Fail-safeCは様々な最適化を用いて、このオーバーヘッドを削減しています。メモリの境界チェックは図1のようなイメージです。配列Aのメンバ以外へ、配列Aの範囲を超える添字を用いてアクセスした場合、例外を発生させます。


Intel MPXはメモリ境界をチェックするためのCPUの専用命令と専用レジスタを用意しています。メモリ境界チェックのハードウェア支援機能といえるでしょう。コンパイラやOSがよる高度なメモリ保護が先にあり、このハードウェア支援により、実用的に利用できるようになる、といったところです。

これまで、Software fault isolationやランタイムによるinstrumentationなど、多くのメモリ保護の研究が提案されていますが、それらの弱点の一つに、オーバーヘッドの大きさがあります。例えば、コンパイル時にコードを挿入するcode instrumentationでは、図2(fig2)に示すような配列へのアクセス一つに対してもメモリ境界チェックのための多量のコードが必ず挿入されます。これは、開発者にとって明らかなオーバーヘッドです。


しかし、この境界チェックのための専用命令と専用レジスタにより、このオーバーヘッドはかなり削減され、実用的な範囲になるのではないかと考えられます。というのも、現在、IntelMPXを実装したCPUは出荷されておらずエミュレータでしか動作を確認できないため、実際のパフォーマンスはどの程度のものか分かりません。なお、GCCコンパイラやLunuxの対応など、ソフトウェアが先行してIntel MPXの有効利用ができる環境が既に整いつつあります。

新しいハードウェアが必要という障壁があり、これらの技術が爆発的に普及することは考えにくいです。ただ、例えばソフトウェアのアップデートが難しい組込機器や、どうしてもセキュリティを高めたい基盤ソフトウェアなど、そういった場面でこういった技術が使われる日が来るかもしれません。


Monthly Researchのダウンロードはこちら


関連記事

Monthly Research 「Windowsのセキュリティ新機能-Control Flow Guardについて」

Monthly Research 「SELinux 再入門-仮想化・コンテナ編-」

Monthly Research 「POSマルウェアについて」