終わりのないゼロデイ報道

2012/10/02

先日、Internet Explorerのゼロデイ脅威が実際に悪用されたことが報告されました。簡単な分析を行ったところ、いくつかの興味深い点が判明しました。

今回のエクスプロイトには以下の4つの要素が含まれています。

  • Exploit.html - 第一段階の脆弱性を利用したWebページ(変数を初期化し、.swfファイルをロードします)。
  • Moh2010.swf - DoSWFを使って暗号化されたSWFに、シェルコードとヒープスプレーコードが格納されています。ヒープスプレーの実行後、脆弱性を起動するProtect.htmlをロードします。
  • Protect.html - ブラウザまたはFlashのバージョンを検出し、脆弱性を起動します。
  • 111.exe - トロイの木馬。

HTML/JavaScriptにすべてを組み込む一般的なエクスプロイトと異なり、この脅威は、シェルコード、ヒープスプレーコードといった重要な要素をすべて暗号化されたSWFファイルに隠します。実施の部分は非常にシンプルです。ターゲットにしているのはWindows XP SP3とIE8だけなので、アドレス空間配置のランダム化(ASLR)を回避する必要はありません。ROPペイロードのみを利用して、Windowsのデータ実行防止(DEP)機能を回避します。ROPガジェットはmsvcrt.dllモジュールからハードコードされます。

0:008> u 0x77c15ed5
msvcrt!_pi_by_2_to_61+0x12db:
77c15ed5 94 xchg eax,esp
77c15ed6 c3 ret

ROPペイロードはkernel32!VirtualAllocを呼び出し、メモリーを保持するシェルコードをRWXに変更します。

0c10104c 00000000 0c18fa00 00005500 00001000 kernel32!VirtualAllocEx
0:008> !address eax
0c120000 : 0c18f000 – 00006000
Type 00020000 MEM_PRIVATE
Protect 00000040 PAGE_EXECUTE_READWRITE
State 00001000 MEM_COMMIT
Usage RegionUsageIsVAD

実際のシェルコードは演算コード0xE2でXOR暗号化されており、フックホッピング(hook-hopping)技法を使って、urlmon!URLDownloadToCacheFileW、kernel32!CreateFileW、kernel32!WinExecなどのAPIを呼び出します。フックホッピングは、ウイルス対策やHIPSといった一般的なセキュリティ製品を回避するのによく使われます。脆弱性の利用に成功すると、シェルコードはリモートサーバーからトロイの木馬をダウンロードします。

マカフィーの対応

McAfee Network Security Platformは、「UDS-HTTP: Microsoft Internet Explorer Use-After-Free exCommand Heap Stray Code Execution」というUDSをリリースして、この脅威に対応します。

McAfee Host Intrusion Prevention System 8.0 P2では、以下のGeneric Buffer Overflow Protectionシグネチャーによってゼロデイエクスプロイトをブロックすることができます。

  • 6013 – Suspicious Function Invocation – CALL Not Found
  • 6048 – Suspicious Function Invocation – Different Stack

ウイルス対策については、現在提供しているBeta 版のDATでは「Exploit-IEexecCommand」という名前でこのエクスプロイトを検出しています。

関連記事

関連情報

※本ページの内容はMcAfee Blogの抄訳です。
原文:Never-Ending Zero-Day Story