![](https://habrastorage.org/getpro/habr/post_images/f1c/317/064/f1c3170644a18be60161ed0b987b6b74.jpg)
EMET自体は、保護されたプロセスのシステムライブラリのAPI関数からインターセプトを削除するための内部メカニズムをサポートしています。 この関数は、プロセス保護を迅速に無効にする必要がある場合に使用されます。動的ライブラリemet.dllが実装を担当します。 完全な保護シャットダウンは、アンロードコードDLL_PROCESS_DETACHを使用してDllMainハンドラーによって実装されます。 emet.dllはkernel32!GetModuleHandleW関数をインターセプトせず、その動作を制御しないという事実により、シェルコードがGetModuleHandleWを呼び出してメモリ内のDLLロードアドレスを取得し、 DllMainを呼び出してこの値を渡し、定数を関数にアンロードします。
実際、この脆弱性を悪用するには次の呼び出しで十分です。
BOOL WINAPI DllMain(GetModuleHandleW( "EMET.dll")、DLL_PROCESS_DETACH、NULL);
DllMain関数はライブラリへのエントリポイントであり、他のエントリポイントと同様に、DLLはプロセスにロードされ、プロセスからアンロードされるときにさまざまなイベントを処理します。 最初の引数はライブラリロードのベースアドレス、2番目はイベント、3番目は使用されません。
この脆弱性のデモンストレーションとして、FireEyeの専門家はCVE-2012-1876の脆弱性に対する古いRCEエクスプロイトを利用し、上記の呼び出しを使用してプロセス保護を無効にするシェルコードを追加しました。 このエクスプロイトは、ROPテクニックを使用してDEPをバイパスします。 EMETを無効にすると、エクスプロイトはその機能を安全に実行できます。
US-CERTは、Microsoft Enhanced Mitigation Experience Toolkit(EMET)バージョン5.5以前の脆弱性を認識しています。 この脆弱性を悪用すると、リモートの攻撃者がEMETをバイパスまたは無効にして、影響を受けるシステムを制御する可能性があります。
US-CERTでは、ユーザーと管理者がMicrosoft Security TechCenter(リンクは外部)にアクセスし、EMETバージョン5.5にアップグレードすることをお勧めします。 追加情報については、FireEye脅威調査ブログをご覧ください(リンクは外部です)
www.us-cert.gov/ncas/current-activity/2016/02/23/Microsoft-Releases-Update-EMET