SPN通信 2011年1月24日

IEの脆弱性攻撃とEMETによる防御


みなさん、こんにちは。 SPNの塩月です。

先月のSPN通信「ゼロデイ攻撃の脅威とその予防」でInternet Explorer(IE)のゼロデイ脆弱性のお話をしました。今月の定例セキュリティ更新では該当するパッチは提供されませんでしたが、マイクロソフトのセキュリティアドバイザリが更新され、今回の脆弱性を回避するための「Fix itソリューション」へのリンクが追加されています。

  マイクロソフト サポート技術情報 2488013
  Internet Explorerの脆弱性により、リモートでコードが実行される
  http://support.microsoft.com/kb/2488013/ja
この「Fix it」はマイクロソフトが提供する一時的な回避策ですので、後日、セキュリティ更新が公開された際には、きちんとそれを適用する必要があります。

さて先のSPN通信では、このような脆弱性に対する攻撃を極力困難にするツール「EMET」についてご紹介しましたが、今回はEMETがIEの脆弱性攻撃に対してどのように有効に働くかをお話したいと思います。

今、問題となっているIEの脆弱性は、CSS(カスケード・スタイルシート)を再帰的にロードした際にメモリ破壊が発生し、その結果、プロセス内部で特定のメモリアドレスへのジャンプが行われてしまうというものです。一般的にこのような脆弱性があった場合、攻撃者は動的に確保されるデータ用のメモリ領域(ヒープ領域)に不正コードを送り込み、そこへジャンプさせることで不正コードの実行を行います。

一方でWindows OSには、このような不正コードの実行を防止するためのさまざまな機能が標準で実装されています。その中の一つ、XPSP2で導入された「DEP(データ実行防止)」は、上記のように送り込まれたデータ領域内での不正コードの実行を阻止する機能を持つため、単純に不正コードを送り込んでそこへジャンプさせても攻撃は成功しません。つまり攻撃者としては、まずはどうにかしてDEPによる防御を回避する必要があるわけです。

DEPを回避する代表的な手法として、対象プロセスのメモリ中に存在するEXEやDLLのファンクションを直接呼び出す方法(Return-to-Libc)や、プロセス内のプログラムコードの断片を巧みに次々と実行させる方法(ROP: Return-Oriented Programming)があります。これらの手法は、ジャンプ先としてメモリ中のプログラムコードのアドレスを正確に指定する必要があるのですが、XPまでのWindowsはEXEやDLLを常に同じアドレスにロードするため、これらの攻撃手法を利用したDEPの回避が比較的容易に実現できてしまいます。

  Return-Oriented Programming: Exploits Without Code Injection
  http://cseweb.ucsd.edu/~hovav/talks/blackhat08.html
マイクロソフトはこのような攻撃手法に対抗すべく、Vista以降、「ASLR(Address Space Layout Randomization)」という防御策を導入しました。ASLRの機能によりプロセス中のEXEやDLLはランダムなアドレス位置に配置されますので、攻撃者はジャンプ先のコードのアドレスをあらかじめ知ることができなくなります。このように不正コード実行の防止のためには、DEPとASLRが組み合わさって有効に働くことが重要になるわけですね。

ところが標準状態のASLRは、すべてのプログラムやDLLモジュールのアドレス位置をランダム化するわけではありません。ASLRがランダム化する対象は、作成する際に特定のオプションを付けてリンクしたものに限られます。今回のIE脆弱性を悪用する攻撃プログラムとして公開されたMetasploitモジュールでは、ASLRの適用対象となっていないDLLの一つであるmscorie.dllに対して前述のROP手法を用い、DEPを回避することが行われています。

  Metasploit: Internet Explorer CSS Recursive Import Use After Free
  http://www.metasploit.com/modules/exploit/windows/browser/ms11_xxx_ie_css_import
そこでEMETの登場です。マイクロソフトが提供するEMETには、Vista以降に導入されたASLRをさらに補強する「Mandatory ASLR」という機能が含まれています。この機能により、通常はASLRの適用対象とならないプログラムやDLLについても強制的にASLRを適用させることが可能になります。例えばEMETでIEを保護対象に設定することにより、IEがロードするすべてのDLLは強制的にASLRが適用されるようになるため、上記のような攻撃手法からIEを効果的に守ることができます。

ちなみにXPにはそもそもASLRの機能がありませんので、XPにEMETを導入してもMandatory ASLRは有効になりません。しかし、EMETには他にもさまざまな不正コード実行防止機能がありますので、XP上においてもEMETを有効に活用することが推奨されます。EMETの詳細については、EMETに含まれるユーザガイドをご参照ください。

  The Enhanced Mitigation Experience Toolkit
  http://support.microsoft.com/kb/2458544
それではみなさん、またお会いしましょう。

合同会社セキュリティ・プロフェッショナルズ・ネットワーク
代表社員 塩月誠人