【レポート】

BlackHat Japan 2004 - OSの共通点をつくワーム、その防御法とは

    佐藤晃洋  [2004/10/19]

    BlackHat Japan Briefings・2日目となった15日には、セキュリティ業界のリサーチ企業として有名なeEye Digital Securityにおいて、日本人で唯一研究員を務める鵜飼裕司氏が登場し、「WindowsシステムのExploitにおける環境依存性」と題し、異なるマイナーバージョンやサービスパックのOSにおいてどの程度環境依存を回避し、脆弱性を利用したワーム等が動作することが可能になるのか、またそれらのワームの動作を封じ込めるにはどのような手段が有効なのかといった点について解説を行った。

    鵜飼裕司氏

    脆弱性悪用に利用されるリターンアドレスはどの程度環境に依存するのか?

    今回同氏が取り上げたのは、Windows環境でのスタックベースのBuffer Overflowにおいて、脆弱性を悪用するために使われるDLLのリターンアドレスが、どの程度サービスパックレベルや言語によって共通しているのかという点。

    ワームがこれらのリターンアドレスを利用する場合は、大きく分けて「サービスパックや言語に関わらず共通のリターンアドレスを利用する」「何らかの方法でマイナーバージョンや言語を検出し、ワーム内部に持つアドレステーブルと照合して得られたリターンアドレスを使う」「バージョン検出等は行わず、内部テーブルに持つリターンアドレスを手当たり次第に試していく」という3つのパターンがよく見られると同氏は語ったが、中でも共通リターンアドレスが利用可能な場合は、多くの環境において無条件にワームに侵入される可能性が高まるため、果たしてそのようなアドレスが本当に存在するのかという点について、同氏は今回同社で開発した「EEREAP(eEye Emulating Return Address Purveyor)」というツールを使って調査した結果を披露した。

    EEREAPは内部にIA32エミュレータと仮想記憶マネージャを持ち、実際にコードを実行させながらレジスタ情報などを監視し、スタックポインタが示すアドレス(ESP)へのジャンプだけでなく、特定バッファへのジャンプを行おうとした場合の全てについて、そのリターンアドレスをリストアップするという構造になっているという。このため従来のバイトコードによる検索に比べて格段に高い精度でリターンアドレスを検出できると同氏は語った。このほか実行後のメモリスナップショットの取得や、無限ループを避けるために最大実行命令数を設定してのエミュレーションなども可能になっているとのこと。

    従来のバイトコード検索と、EEREAPによる検索結果の比較
    ©BlackHat Inc.

    今回同氏はMS04-011(LSASSの脆弱性)について、Windows 2000 Advanced Server SP0~4の英語版と日本語版を対象に、EEREAPを使ってリターンアドレスをリストアップ、そのうちどの程度のアドレスが共通しているかを調査した。その結果、調査対象となったOS全てに共通するリターンアドレスは見つからなかったものの、英語版・日本語版それぞれについてSP0~4で共通なリターンアドレスが19~24個見つかったほか、英語版SP4と日本語版SP4の2つで共通のリターンアドレスは207個見つかったという。

    EEREAPによって検出された共通リターンアドレス
    ©BlackHat Inc.

    リターンアドレスを変更すればワームにはやられにくくなるものの……

    さて、この共通リターンアドレスを利用した攻撃を回避するためには、どのような手段が考えられるだろうか。今回同氏は「自分の環境のリターンアドレスが(ワーム等の持つ)テーブルに存在しないなら、少なくとも自分自身は(ワームに)やられない」として、リターンアドレスを変更するためにDLLのベースアドレスを操作する手法を紹介した。

    特にユーザ側では、脆弱性に対してどのDLLのリターンアドレスが攻撃者に狙われるのかをEEREAPを使って特定した上で、Visual C++の付属ユーティリティであるrebase.exeを利用して対象となるDLLのベースアドレスを変更するという手法が有効だと同氏は語った。これにより、ワームが共通リターンアドレスにジャンプしようとしてもそこにはターゲットが存在しないために攻撃は失敗するという。

    ベースアドレスの変更の具体的な方法
    ©BlackHat Inc.

    ただむやみやたらにDLL、それもOS付属の標準DLLのベースアドレスを変更することは、DLLのベースアドレスの衝突を招き、OSの起動時間が長くなったりパフォーマンスが低下したりするという副作用を招くという問題があり、質疑応答でも「現実のサーバ環境ではこの手法を利用するのは無理ではないか」との意見が出ていた。またEEREAP自体がまだ一般に公開されていないユーティリティであるため、今後は使いやすさを改良した上でセキュリティ関係者に配布を行いたいとの意向を同氏は示していたが、逆に言えばワーム開発者にとってもこのユーティリティを使えば容易に共通リターンアドレスの有無を調査できるため「いかにワーム開発者に悪用されないようにするか、その仕組みづくりが課題だ」とも述べていた。

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン