Windows カーネルモードの脆弱性「CVE-2014-4113」を検証

2014年 10月 14日(現地時間)、3つのゼロデイ脆弱性「CVE-2014-4114」、「CVE-2014-4148」、「CVE-2014-4113」が報告され、Microsoft は 10月の月例セキュリティ情報でこれらのゼロデイ脆弱性に対応する更新プログラムを公開しました。「Sandworm」としても知られる脆弱性「CVE-2014-4114」は、利用されると、攻撃者は容易に不正プログラムを作成することができます。

この問題の脆弱性は、欧州の機関および企業を対象とした標的型攻撃に関連しています。さらに、トレンドマイクロは、この脆弱性は SCADA(産業制御システム)を標的した攻撃でも利用されたことを確認しました。

「CVE-2014-4148」および「CVE-2014-4113」は、Windows のカーネル部分の Win32k.sys に存在する脆弱性を利用したもので、ほとんどの Windows のバージョンに影響を与えます。2013年に確認されたカーネルに存在するゼロデイ脆弱性は 1つだけで、Windows XP と Windows 2003 のいくつかのバージョンに影響を与えるのみでした。これらのゼロデイ脆弱性は、攻撃者が標的をカーネルに存在する脆弱性に戻している兆候である可能性があります。

脆弱性「CVE-2014-4113」の利用に成功すると、権限昇格が可能となります。Microsoftは、「MS14-058」でこの脆弱性に対応しています。問題の脆弱性は、Windows XP から Windows 8.1 までのデスクトップ版、および Server 2003 から Server 2012 R2 までのサーバ版の Windows OS に影響を与えます。しかし、現在確認されているエクスプロイドコードは、Windows 8 以降のバージョンに影響を与えません。

エクスプロイドコードは、コマンドラインのパラメータを利用して、割り当てられたプログラムのシステム権限で、新規のプロセスを作成することができます。権限昇格の脆弱性はまた、標的型攻撃で利用されると考えられています。なぜなら脆弱性を利用できるアプリケーションが、攻撃者の必要とする権限を持っていないためです。権限昇格の脆弱性利用は、「STUXNET(スタクスネット)」で確認されました。スタクスネットは、他の脆弱性を利用し PC に感染した後に、Win32k.sys に存在する脆弱性「CVE-2010-2743」を利用して、権限の昇格を行いました。

以下の MD5 ハッシュ値を持つ検体に基いて問題の脆弱性および脆弱性利用を解析します。

  • 70857e02d60c66e27a173f8f292774f1
  • f9f01ce747679b82723b989d01c4d927

弊社は、これらの不正プログラムを「TROJ_APOLMY.A」および「TROJ64_APOLMY.A」として検出します。「TROJ64_APOLMY.A」は 64ビット版のシステムで確認されたバージョンです。

■Win32k.sys に存在する脆弱性について知っておくべきこと

Win32k.sys は、ウィンドウ管理および Win32k.sys を使用するグラフィカル・ユーザ・インタフェース(GUI)のプロセスやスレッドの制御を担っています。関連するユーザモードのモジュールは、”user32.dll” および”GDI32.dll”です。ユーザモードのアプリケーション間の相互作用が複雑なため、Win32k.sys には多くの問題が存在します。

この脆弱性の利用について詳しく考察していきます。問題の核心は、関数の戻り値が正しく検証されないことです。開発者はこれを見過ごす傾向にありますが、深刻なセキュリティ上の危険となります。

Win32k.sys には、「xxxHandleMenuMessages()」 と呼ばれる関数があります。この関数は、階層「win32k!tagWND」のアドレスまたはハードコードのエラーコード 「-1」、「-5」を返します。別の関数「xxxHandleMenuMessages()」は、「xxxHandleMenuMessages()」 を呼び出し、その戻り値を「xxxSendMessage()」のパラメータとして使用します。以下は擬似コードです。

xxxHandleMenuMessages()

{

tagWnd* pWnd = xxxMNFindWindowFromPoint(…);
… //without checking if the return value is a valid address
xxxSendMessage(pwnd,…);

}

当然ながら、エラーコード 「-1」または「-5」 が「xxxSendMessage() 」でアドレスとして使用された場合は、致命的なエラーが発生し青い画面が表示されます。ユーザモードのコードでは、この脆弱性は利用できません。次に、この検体がカーネルモードで問題の脆弱性をどのように利用するのか検証します。

以下はどのようにして問題の脆弱性が利用されるのか示した主要な手順です。

  • NULLページに準備したメモリ領域をマッピングします。NULLページには、偽の階層「win32k!tagWND 」およびその階層内の権限昇格のシェルコードへのポインタが含まれます。
  • 問題の脆弱性を利用して、「xxxMNFindWindowFromPoint()」 の戻り値(pWnd)が「-5」 (0xfffffffb).になるように作成します。偽の階層内のすべての検証される領域は、アクセス可能であり適切な値にあるため、「xxxSendMessage()」は、「-5」を有効なアドレスとして処理します。そして「xxxSendMessage()」が階層内の関数ポインタを呼び出すと、シェルコードへのポインタとなります。
  • EPROCESS内のトークンを交換し、シェルコード内のシステム権限を昇格させます。
  • 割り当てられたプログラムのシステム権限を用いて、子プロセスを作成します。

問題の検体は、「SetWindowsHookEx()」を利用し、「xxxMNFindWindowFromPoint() 」を制御し、「-5」を返します。

    1. ウインドウと 2レベルのポップアップメニュを作成する。
    2. そのウインドウのコールバック関数「wndproc」のコールをフックする。
    3. ウインドウ上のポップアップメニュを追跡し、フックしたコールバックに入る。
    4. フックしたコールバックで、メニュの「wndproc」を別のコールバックに変更する。
    5. メニュのコールバック内で、メニュを壊す。
    6. 壊されたメニュ上の「xxxMNFindWindowFromPoint() 」が「-5」を返す。

さらに、検体のシェルコードは以下のコードの断片から確認できるように単純で直接的なものです。弊社は、この検体がシステムプロセスの EPROCESS (PID=4)を取得し、権限トークンを現在のプロセスの EPROCESS にコピーするのを確認することができました。

図1:検体のコード断片
図1:検体のコード断片

解析により、弊社は、カーネルに存在する脆弱性は、Internet Explorer(IE)などに存在する「Use After Free(解放後使用)」の脆弱性よりも簡単に利用できることを確認しました。「データ実行防止(DEP)」といったユーザモードでは効果的なセキュリティ機能は、カーネルモードでは簡単に回避され、脆弱性が利用されます。これは、脆弱性利用に用いられるのが、入力した情報またはスクリプトではなくプログラムであるためです。エクスプロイトコードは、最初からすでに実行可能になっています。

OS で用いられるアプリケーションの動作確認をするサンドボックスが増加すると、カーネルに存在する脆弱性は、権限昇格のためにより重要になってきます。こうした脆弱性を利用した攻撃手法は新しいものではありませんが、特に脆弱性「CVE-2014-4113」が公開された後は、攻撃者の目に留まることになるでしょう。

検体の収集時に、弊社は、エクスプロイトコードを作成するツールのソースコードが流出しているのを確認しました。そのため、この脆弱性を利用する不正プログラムの亜種がさらに攻撃者によって作成されることが予想されます。権限昇格の脆弱性を利用した攻撃を実行し、アプリケーションの動作確認をするサンドボックスを回避し侵入するために、攻撃者はカーネルに存在する脆弱性を必要としていると弊社は考えています。今回の脆弱性利用の攻撃手法がさらに広まれば、今回のカーネルに存在するゼロデイ脆弱性のような脆弱性利用を今後確認することになるかもしれません。

Windows 7およびWindows XPは、今回の脆弱性を利用した攻撃に最も危険にさらされやすい Windows のバージョンです。企業は、両方のバージョンを多く使用しており、この脅威の影響を受ける可能性があります。一般ユーザおよび IT管理者は関連する更新プログラムを適用し、システムを最新の状態に保つことを強く推奨します。

Windows 8 以降のバージョンでは、現在確認されているエクスプロイトコードが阻止されるため、セキュリティ上の危険は低いです。これは、新たなセキュリティ機能として知られる「Supervisor Mode Execution Prevention (SMEP)」が、カーネルモードでのユーザモードのメモリページの読み取り、書き取り、実行といったアクセスを防ぐためです。そのため、nullページやシェルコードへのアクセスは、機能の停止を起こすことはあっても、コードの実行を引き起こすことはありません。

トレンドマイクロ製品をご利用のユーザは、弊社のクラウド型セキュリティ基盤「Trend Micro Smart Protection Network」によって守られています。特に「ファイルレピュテーション」技術により、上述の不正プログラムを検出し、削除します。

トレンドマイクロでは、引き続き「Sandworm」を含む、これらのゼロデイ脆弱性に関する脅威状況を監視していきます。この脆弱性を利用した攻撃に関する詳細については、以下の記事をご参照下さい。

関連記事:

  • サイバー攻撃「Sandworm」が「Blacken」へ誘導。産業制御システムが標的?
    /archives/10130
  • Windowsゼロデイ脆弱性「CVE-2014-4114」利用したサイバー攻撃「Sandworm」を解析
    /archives/10092
  • 現行Windows OSのゼロデイ脆弱性「CVE-2014-4114」、諜報目的のサイバー攻撃に利用される
    /archives/10085

参考記事:

 翻訳:臼本 将貴(Core Technology Marketing, TrendLabs)