検索
連載

エメット(EMET)さん、破れたり山市良のうぃんどうず日記(17)

「Enhanced Mitigation Experience Toolkit」(EMET)は、Windowsやアプリケーションに存在する未パッチの脆弱性を悪用した攻撃を検出、阻止してくれる“かもしれない”、脆弱性緩和ツールです。今回は、この“かもしれない”ということがよく分かる実証実験にお付き合いください。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

連載目次

エメット(EMET)について簡単におさらい

 マイクロソフトが無償提供する脆弱(ぜいじゃく)性緩和ツール「Enhanced Mitigation Experience Toolkit」(EMET)は、2014年4月の「Internet Explorer」(IE)の脆弱性に対するゼロデイ攻撃の防御策として一躍注目を集めました。

 本連載でも、EMETの導入を勧めたり、最新のEMET 5.0のバグの疑いを指摘したりで、すでに3回も取り上げています。

 これまで本連載では、「EMETの技術は難解なので推奨設定で導入しておけばよい」と説明してきました。今回はこの後の実証実験に入る前に、難解なEMETの仕組みを簡単に説明しておきたいと思います(証明書信頼の機能については説明を省きます)。

 EMETを導入すると、Windowsが備える以下の三つのシステム緩和策を、EMETを通して簡単に構成できるようになります。

  • Data Execution Prevention(DEP、データ実行防止)
  • Structured Exception Handler Overwrite Protection(SEHOP、構造化例外処理上書き保護)
  • Address Space Layout Randomization(ASLR、アドレス空間配置のランダム化)

 これらのシステム緩和策はEMETが提供するものではなく、Windowsが本来備えている機能になります。レジストリの編集が必要な設定も、EMETを導入するとGUIで簡単に構成できるようになります。また、通常ならレジストリで行うアプリケーションごとのオプトイン/オプトアウトの設定も、GUIでアプリケーションの実行ファイルを登録して設定できるようになっています。

 DEPやASLRは特別なコンパイルオプション(ただし、最新の開発環境では既定値)でコンパイルされたアプリケーションでなければ保護されませんが、EMETはWindowsのアプリケーション互換性フレームワーク(Shim)を利用して、そのようなアプリケーションに対しても再コンパイルなしで保護できるようになっています。

 また、EMETはこれらのシステム緩和策を迂回するような既知の攻撃手法に対しても、複数のアプリケーション緩和策を用いて攻撃が成功するのを阻止しようと試みます。こちらのアプリケーション緩和策はEMETが提供するものであり、EMETのバージョンアップとともに新たな緩和策が追加されてきました。

 EMET 3.0では7種類、EMET 4.xでは15種類、EMET 5.0では17種類のアプリケーション緩和策が導入されています。EMET 4.0では「ROP」(Return Oriented Programming)と呼ばれる手法を悪用した攻撃をブロックするROP緩和策が導入され、EMET 4.1でROPに対する高度な緩和策の既定値が強化(Deep Hooksの有効化)されました。EMET 5.0ではEAFの拡張版である「Export Address Table Access Filtering Plus」(EAF+)、および特定のプラグインの使用を禁止する「Attack Surface Reduction」(ASR、攻撃面の縮小)が追加されました(画面1)。

画面1
画面1 EMET 5.0のアプリケーション緩和策によってInternet ExplorerのJavaプラグインがブロックされた様子。この例は攻撃を検出したものではなく、プラグインをロードしないことで攻撃されるリスクを少なくしようとする意図した動作であることに注意

 多重の防御策でシステムやアプリケーションを保護するEMETは、実に頼りになると思えるでしょう。しかし、EMETはあくまでも脆弱性“緩和”ツールであり、攻撃を阻止してくれる“かもしれない”ツールであることを忘れてはいけません。次の実証実験を見れば、忘れることはなくなると思います。

EMETの緩和策をバイパスする実証コードが公開される

 2014年7月、ソフトウェアの脆弱性情報とエクスプロイト(Exploit、脆弱性実証コード)を公開している著名なセキュリティ情報サイトに、IEの脆弱性を利用した攻撃コードでEMET 4.xのROP緩和策を迂回し、攻撃を成功させることをデモンストレートするエクスプロイトが公開されました。2014年9月末には、EMET 5.0を対象としたエクスプロイトの修正版が公開されています。

 最初に公開されたエクスプロイトはWindows 7のIE 8をEMET 4.1で保護した環境をターゲットとしたもので、次に公開されたのはWindows 7のIE 8をEMET 5.0で保護した環境をターゲットとしたものです(画面2)。

画面2
画面2 公開されたエクスプロイトは、IE 8の古い脆弱性を利用したもの

 このエクスプロイトが利用したのは、「CVE-2012-1876」として知られるIE 6〜9に影響するリモートでコードが実行される危険がある脆弱性です。2012年に報告された古い脆弱性であり、もちろん、すでにパッチ(MS12-037のKB2699988)が提供され修正されています。

脆弱性実証コードを実証してみました

 問題の実証コードは、Javaスクリプトを含むHTMLファイルをローカルまたはWebサーバー経由で開くだけで動きます。とはいっても、古い脆弱性を利用したものなので、その脆弱性に対して未パッチの環境がないと動きません。そこで、Windows 7 Service Pack(SP)1をクリーンインストールした環境に、.NET Framework 4.0(EMETの前提)とEMET 5.0をインストールして試してみました。

 IE 8のプロセス(iexplore.exe)をEMET 5.0で保護するように構成し、可能な限り全ての緩和策を有効にします。IE 8を正常起動するためには、新しい緩和策であるEAF+を無効にする必要がありました。

 IE 8の保護設定が完了したら、エクスプロイトを記述したHTMLファイルを開きます。すると、攻撃コードが実行され、その結果、ローカルPCのTCPポート(4444)がオープンになり、リスン(待ち受け)状態になりました(画面3)。これは実証コードであるため、これ以上何もないのですが、悪意のある目的ならこの方法でバックドアを開いて、リモートから接続して……ということが容易に想像できます。

画面3
画面3 攻撃コードが成功し、IEのプロセス(プロセスID 2940)によって、TCPポート444が開いてしまった

 EMETがちゃんと仕事をしたのなら、攻撃が成功する前の段階でEMETのアプリケーション緩和策が攻撃を検出し、ブロックして前出の画面1のように通知するか、プロセスを強制終了してくれたはずです。なお、攻撃のタイプによっては、EMETは通知することなくプロセスを強制終了する場合もあります。

 続いて、この脆弱性を解決するパッチ(セキュリティ更新プログラム)を適用してから、同じことをしてみました(画面4)。今度は成功しません(画面5)。これはEMETがちゃんと仕事をしたというわけではなく、攻撃に利用する「CVE-2012-1876」の脆弱性がもう存在しないからです。IEのプロセスをEMETで保護しなくても、攻撃コードは成功しません。

画面4
画面4 「CVE-2012-1876」の脆弱性を解決するセキュリティ更新プログラムを適用
画面5
画面5 パッチ適用後に問題のHTMLファイルを開くと、今度は失敗。EMETの効果ではなく、攻撃に利用しようとしている脆弱性が存在しないから

 EMETの緩和策が攻撃を阻止できないという例ですが、EMETが未パッチの脆弱性に対する攻撃を阻止してくれる“かもしれない”ということと、セキュリティ更新プログラムの重要性を理解していただけたのではないでしょうか。

【2014年10月22日追記】

2014年10月21日(米国時間)に公開された「マイクロソフトセキュリティアドバイザリ 3010060」によると、未パッチの脆弱性に対して確認された標的型攻撃に、EMET 5.0のASRによる対策が有効だそうです。EMETは空振りすることもありますが、このようにEMETをとりあえず入れておけば、素早く対策できるという利点もあります。


「山市良のうぃんどうず日記」バックナンバー

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る