Enhanced Mitigation Experience Toolkit

WindowsEnhanced Mitigation Experience Toolkitとはマイクロソフトが提供する脆弱性緩和ツールである。OSに実装されている緩和策の設定のほか、OSやコンパイラでは提供されていない緩和策をアプリケーション単位で設定することができる。

使用に当たってはアプリケーションが意図的にEMETが防御する手法を使用している可能性があるリスクや、EMETを使用するだけで全ての攻撃を防げるわけではない事に留意する必要がある。

1. 概要
-----

EMETが提供するのは主にメモリ関係の保護機能である。それ以外にもSSL/TLSの正当性確認などの補助機能が追加されている。一部の機能は確率に影響される防御システムのためマイクロソフトは「緩和」と表現している。各機能はアプリケーションごとにオンオフが可能である。

EMETは主にメモリの防御機能のみであるためパターン解析型または動作監視型であるアンチウイルスソフトとは異なる防御システムであり、EMETとアンチウイルスを組み合わせることでより強力なセキュリティを発揮できる。特にゼロデイ攻撃を防ぐ手段の一つとして有効である。アンチウイルスソフトの中にはEMETのような保護機能を持つものがいくつか存在するものの、EMETほど多機能で詳細な動作設定が出来る物はない。

ほとんどのアプリケーションでは、プログラマの設計ミスによりメモリ処理のバグが日常的に発生する。このようなメモリバグを突き、システムに侵入しようとするマルウェアからシステムを保護する機能を提供する。例えば、セキュリティホールのある画像閲覧ソフトが悪意のある画像を読み込むとマルウェアに侵入されてしまう。メモリに不正なアクセスが行われると、EMETは対象のプログラムを停止させてアラートを表示しイベントログに記録する。

悪意のないプログラムであってもセキュリティホールが存在する事があり、EMETがプログラムの動作を中断してしまう事がある。EMETが提供する機能のうち、どれがプログラムに悪影響を及ぼすかはユーザ側が判断する必要がある。特にシステムファイルを保護する場合、システムごとフリーズしてしまう可能性がある。また、EMETより先に起動するようなプログラムは保護できない。Google Chromeなど自前でメモリ保護機能を持っているソフトウェアは、EMETで保護指定すると競合し、不具合を起こす恐れがある。

インストール時に「推奨設定」にすると、Internet Explorerなど一部のマイクロソフト製品やJava、Adobe Readerなどのいくつかのアプリケーションが保護設定に追加される。

パスの一部にワイルドカードを指定する事が出来る。ただし、ファイル名の一部には指定できない。

OK: *\java.exeOK: *Java*\java.exeNG: *\java*.exeEMETは、2018年7月31日でサポートを終了した。Windows 10 ver.1703の場合には一部の機能はOSに取り込まれているため、これらの設定についてはPower Shellで実行する[1]を導入すれば継続して設定可能である。Windows 10 ver.1709以降では、[2]として後継機能が提供されている。

2. EMETにより提供される機能
-----------------

以下の脆弱性緩和策を設定することができる。この内システム全体に設定出来るのはDEP、SEHOP、ASLRのみである。また一部のシステム設定は互換性の問題から規定では選択できないようになっている。

DEPデータ実行防止を参照。システム設定は全ての対応Windowsにて任意の設定が可能。SEHOPSEHハンドラーチェーンの上書きを検出しハンドラーを実行せずにプロセスを終了させる。Windows Vista Service Pack 1にて実装された機能でもあるが、EMETではそれとは別の実装を提供するため以下の2点の違いがある。
Windows 7/2008 R2より前のWindowsでもアプリケーション単位でOpt-Inできる。
Windows Server 2003でも利用可能。EMETによるSEHOP実装にはWindowsのそれと比べて脆弱な部分が指摘されている。NullPageヌルポインタ付近のメモリアドレスへのメモリ割り当てを拒否することでヌルポインタをdereferenceしてしまう脆弱性を利用した攻撃を防ぐ。Windows 8、Windows Server 2012にも実装されており、既定で有効である。HeapSprayHeap sprayingで利用されやすいアドレスを予め使えなくしておくことで攻撃の成功率を下げる。EAFkernel32.dllとntdll.dllのExport Address Tableの読み込み元を限定することで攻撃を防ぐ。この防御により同様の手法を利用した攻撃は99.9%防げるとしている。EAF+EAFの防御に追加でスタックメモリとスタックレジスタのチェックを行う。また、アプリケーションごとにExport Address Tableの読み込み元として許可しないDLLの指定も行う。MandatoryASLR詳細はアドレス空間配置のランダム化を参照。WindowsではASLRの適用はDLL単位でのOpt-Inであり対応になっていないDLLは通常再配置されないが、EMETにより再配置を強制する。アプリケーション単位での強制ASLRはWindows 7以降にも実装された機能であるがEMETはその実装を利用していない。{|class="wikitable" style="margin: 1em auto 1em auto"!システム全体に設定可能な項目 !Windows Vista、Server 2008 !Windows 7、Server 2008 R2 !Windows 8、Server 2012 およびそれ以降 |- |Disabled | | | |- |Application Opt In
| | | |- |Application Opt Out
| | | |- |Always On
| | | |}

BottomUpASLRDLL読み込み以外の低位アドレスから割り当てていくタイプのメモリ確保をランダム化する。LoadLibネットワークパスからのDLL読み込みを拒否する。MemProtスタックメモリに実行可能属性を付加しようとするAPI呼び出しを拒否する。スタックに書き込まれた攻撃コードを実行しようとした際にDEPにより実行が拒否される。Caller攻撃コードにおいて用いられやすい幾つかのAPIが正しい命令で呼び出されたのかをチェックする。StackPivotスタックメモリがすり替えられていないかをチェックする。SimExecFlow攻撃コードにおいて用いられやすい幾つかのAPIの呼び出し元アドレスの命令をシミュレート実行しReturn-oriented programmingで用いられる手法が使われていないかをチェックする。ASR指定したDLLの読み込みを拒否する。任意のプラグインを追加できるアプリケーションの防御に使用する。Internet Explorerではセキュリティーゾーンと連携してDLLの読み込みを許可するゾーンを設定できる。Block Untrusted FontsWebフォントや文書に埋め込まれたフォントなどシステムにインストールされたフォント以外のフォント読み込みを拒否する。Windows 10でのみ利用可能。Certificate Trust
特定のSSL/TLS証明書を検証する際に指定したルート証明機関から発行されたルート証明書であるかなどをチェックする。既定ではデスクトップ版Internet Explorerのみ対応する。以下はEMETを適用したアプリケーションすべてに適用される。

Deep hooksチェックを公開APIだけでなく公開APIが呼び出す内部非公開APIでも行う。Anti detoursAPI入口のコードをあらかじめ別の場所にコピーしておき、コピーしてある方のコードを実行したのち途中から元のAPIに処理を戻す手法のAPIフックを検出する。なおDetoursとはマイクロソフトが提供している同様の手法を用いるAPIフックライブラリの名前である。Banned functions一般的なアプリケーションでは正当な利用方法が無い特定のシステム用APIの使用を拒否する。

3. 脚注
-----