巧妙化するDLL hijacking ~ CVE-2011-1991を悪用する攻撃 ~(2013-01-31)

JPCERT/CCは、マルウエアや攻撃に使用されるツールなど「アーティファクト」と呼ばれるものの体系的な収集と分析および対策技術の研究のために2006年に分析センターを開設しました。分析依頼とともに受け取ったマルウエアや、インシデント対応の中で収集したマルウエアを調査することによって、挙動や構造を解析し、どんなシステムにどんな被害を及ぼすのか、そしてそれを防ぐにはどのような対策が有効かを明らかにして、効果的なインシデント対応を可能にしています

マルウエアの分析によって得られた情報や知見、および個別の事案に直結した調査結果は、悪用される危険や機微な情報を含むことがあるため、開示が憚られることが少なくありません。しかし、開示が可能な限られた情報の中にも、マルウエアアナリストや情報セキュリティの専門家の皆様と共有することによって、背後にあるもの、あるいは、より大局的な動向が見えてくる可能性を期待して「分析センターだより」を始めることにいたしました。

初回にあたる今回は、「DLL検索パスの問題」を利用した攻撃手法「DLL hijacking」の最近の展開について、MS11-071により修正されたCVE-2011-1991の脆弱性の事例を中心に論じてみたいと思います。

 

●DLL検索パスの問題

DLL検索パスの問題とは、動的にリンクされるライブラリ(DLL)を検索する対象となっているディレクトリのうち、より優先順位の高いディレクトリに、同じ名前で不正なDLLを置くことができれば、ユーザが当該DLLを呼び出すアプリケーションを実行した時に、攻撃者が用意した不正DLLが実行されるという問題です。これは、コマンド・ライン・インタフェースにおける実行ファイルの検索パスの問題と本質的には同じです。

コマンド・ライン・インタフェースにおける実行ファイルの検索パスの問題は、OSの操作がGUIでなされることが一般的になり、オブジェクト(アイコン)を直接指定してプログラムが実行されるようになったので、ほとんど見られなくなっています。

しかし、DLL検索パスの問題を突く攻撃は「DLL hijacking」とも呼ばれて、今日でも頻繁に悪用されています(DLL hijackingの詳細解説は「参考資料1」および「参考資料2」を参照してください)。

近年のオペレーティングシステムでは、ディレクトリのアクセス権限管理を精微にする対策が進み、攻撃者が悪意のあるDLLを容易に配備できないようになっています。攻撃を成功させるには、攻撃者がDLLファイルを所定のフォルダに置く権限をもち、しかも検索パスの上位に位置するフォルダを見つけ出すことが前提となります。そして、当該DLLの実行に結び付く挙動を標的にしたユーザが取るまで待たなければなりません。

そのため、DLL hijackingは「待ち受け型」の攻撃と認識されていました。

 

●CVE-2011-1991によるDLL hijacking攻撃

単体では、成否が標的の利用者の挙動しだいで、すぐに戦果を得る保証のない「待ち受け型」攻撃手法と思われていたDLL hijackingを、他の仕組みと組合せることで、即効性のある攻撃法に仕立てる手法が編み出されました。喩えるなら、攻撃者は落とし穴の作り方に加えて、作った落とし穴に被害者を突き落とす方法を手に入れたのです。CVE-2011-1991の脆弱性は、このマジックにより攻撃される脆弱性の一つです。

CVE-2011-1991に対する攻撃は次のようにしてなされます。

攻撃者は、まず{42071714-76D4-11D1-8B24-00A0C9068FF3}という特殊な拡張子を持ったフォルダを作成します。この特殊な拡張子は、特定クラス識別子(CLSID:Class ID)と呼ばれ、プロセス内COMサーバとの対応付けを定義しています。実は、「マイコンピュータ」や「ゴミ箱」などのようなWindowsの特殊フォルダは、それぞれ固有のCLSIDをもったプロセス内COMサーバによって実現されており、任意のフォルダが拡張子を適当なCLSIDに設定することにより、CLSIDに対応する特殊フォルダとして機能するようになるのです。Windowsシェルの動作として、単なるフォルダに特殊フォルダのような機能を追加して拡張する仕組みは「シェル拡張」とも呼ばれます。これに関して注目すべきは、特殊フォルダとして拡張される機能の実現を、DLLとして定義することが可能なケースがあることです。すなわち、特殊フォルダによっては、その機能を要求した時に特定のDLLファイルが検索されて実行されるのです。攻撃者の立場から見れば、検索パス上のフォルダに攻撃コードを仕込んだDLLファイルを置いた後に、それを呼び出す特殊フォルダの機能を要求すべき状況を作ることにより、標的とした利用者を落とし穴に突き落すことができることになります。

CVE-2011-1991では、上述のような攻撃に使える特殊フォルダとして合計で5種類が特定されています。現在、「Display Panning CPL Extension」と呼ばれるWindows XPにおける画像表示に関連するシェル拡張を悪用した攻撃が確認されています。Display Panning CPL Extensionを規定するのはdeskpan.dllというDLLです。実際にはdeskpan.dllはシステムには存在しないファイルなのですが、当該特殊フォルダ内に置かれた文書を開くと、システム既定の検索パスに従って探索・ロードが行われます。

攻撃者は、この仕組みを利用してマルウエアを実行させますが、これだけでは、特殊フォルダに悪意のあるDLLを配置しただけで、従来の待ち受け型攻撃の域をでません。CVE-2011-1991では、特殊フォルダ中に格納した文書ファイルを標的である利用者に開かせます。特殊フォルダの中で文書を開く際、シェル拡張の機能を実行させるシステム側の動作によってdeskpan.dllがロードされ実行されます。

このとき検索パスにカレントディレクトリが含まれていれば(Windowsの既定の設定では含まれています)、カレントディレクトリである特殊フォルダにdeskpan.dllの名前で保存されたマルウエアが実行されてしまいます。なお、deskpan.dllをロードしてしまうのは、 verclsid.exeというモジュールであることがわかっていますが、特殊フォルダ内でアプリケーションがクリックされてからdeskpan.dllが実行されるまでの詳細なプロセスは、残念ながらここでは解説しきれません。

なお、被害者に特殊フォルダに格納された文書ファイルなどを開かせるためには、メールの添付ファイルとして、またはWebページ上に、特殊フォルダとして展開されるような名前をもつ圧縮形式のフォルダの中に、利用者に開かせる文書ファイルと悪意あるDLLファイルを仕込んでおくシナリオが考えられます。

 

●古くて新しいDLL検索パスの問題

伝統的な検索パスの問題を利用した攻撃は、本物がシステム内に実在するようなファイルに対して、検索パスの順序を悪用して、他のフォルダに置いた偽物のファイルに組み込んだコードを実行させるように仕組む手口によっていました。しかしながら、CVE-2011-1991のような近年報告されている検索パスの問題では、本物がシステム中のどこにも存在していない、いわば影武者ファイルに対応する偽物ファイルに実行させたいコードを組み込んで検索パスに含まれるフォルダに設置して攻撃がなされます。偽物ファイルが存在しない本来の状態の場合には、実行すべきファイルが存在しないことを確認した上で、システムが既定の処理を行います。こうした影武者ファイルが生まれた理由は、過去のバーションではシステム内に実在するファイルとして存在していたものが、その後の改版の中で実現法がファイルからシステム本体内のコードに置き換えられたものの、互換性を維持するために検索パスはそのまま残されたためだと推測されます。

こうした近年報告されている検索パスの問題を引き起こす影武者ファイルが、どのくらい存在しているのか明らかではありません。攻撃に使える新たなファイル名を見つけることも難しければ、それを悪用した新たな攻撃の仕組みを解明することも難しいと言えましょう。分析技術者にとって、頭痛の種であると同時に、腕の見せ所なのかも知れません。

 

参考資料1
    ・CodeZine:「WindowsのDLLだけが危ないのか? ― DLL hijacking vulnerability概説(前編)」
     https://codezine.jp/article/detail/5441
参考資料2
    ・CodeZine:「WindowsのDLLだけが危ないのか? ― DLL hijacking vulnerability概説(後編)」
     https://codezine.jp/article/detail/5442
参考資料3
    ・マイクロソフトセキュリティアドバイザリ(#2269637)
     セキュリティで保護されていないライブラリのロードにより、リモートでコードが実行される
     https://technet.microsoft.com/ja-jp/security/advisory/2269637
参考資料4
    ・マイクロソフト セキュリティ情報 MS11-071 - 重要
     Windows コンポーネントの脆弱性により、リモートでコードが実行される (2570947)
     https://technet.microsoft.com/ja-jp/security/bulletin/ms11-071
参考資料5
    ・DLL 検索パス アルゴリズムを制御する新しい CWDIllegalInDllSearch レジストリ エントリについて
     https://support.microsoft.com/kb/2264107/ja

トップに戻る
次へ ≫