【レポート】

BlackHat Japan 2004 - 効率のよい脆弱性への対処と難読化したプログラムの解読方法

    佐藤晃洋  [2004/10/19]

    BlackHat Japan Briefings 2004の初日には、4つのBriefing Sessionが開かれたが、その中ではOracleの脆弱性に関する解説や、UPXのような実行ファイル圧縮ソフト等を使って「難読化」が施されたプログラムの解読方法に関するデモなどが行われた。その中から本稿では2つのセッションをご紹介する。

    脆弱性に効率よい対処を行うためにはどうすればよいか?

    まずご紹介するのは、BlackHat USAで毎年「脆弱性の法則」と題して企業システムにおける脆弱性の調査結果を発表している、QualysのGerhard Eschelbeck氏のセッション。基本的な発表内容はBlackHat USAと同様だったので、それについては山下洋一氏によるBlackHat USAのレポートを参照して欲しいが、本稿では同レポートでは触れられていなかった、どのようにすれば効率よく脆弱性に対応できるかという部分を中心にお伝えする。

    このように脆弱性が実際に見つかる件数には大きな差がある
    ©BlackHat Inc.

    同氏は個々の脆弱性ごとに、その脆弱性を持ったシステムが発見された件数についてまとめたグラフから、ほとんどそれによって影響を受けるシステムがないものから、60万件以上のシステムが影響を受けるものまで非常に幅広い分布を示すことを説明した上で、「私がワーム作者の立場だったら、明らかにTOP10に含まれるようなクリティカルな脆弱性をターゲットにする」と述べ、脆弱性に対するパッチの適用を行う際に、このTOP10に含まれるようなものから優先的に対応することで問題の発生を防ぎやすくなるという見解を示した。

    この「TOP10に含まれる脆弱性」についてはQualysのWebサイトにおいて、外部ネットワーク向け(External)・ネットワーク内部向け(Internal)の2パターンについて定期的に調査結果を発表しているほか、それらTOP10の脆弱性に対応したスキャニングツールも同社で無償提供しているとのことだが、同氏は「これらTOP10の脆弱性については1年ごとに約半分が入れ替わるため、定期的にリストを把握することが必要」と参加者に呼びかけた。

    これ以外に、脆弱性からシステムを守るために必要な要素として「脆弱性に関する問題の認知を組織内で獲得すること」「脆弱性に対し自動的にパッチを当てるようなシステムを導入すること」も重要だと同氏は述べた。

    会場からは「現在動作しているシステムにパッチを当てるのはリスクが伴うが、パッチ以外の防御手段についてはどう評価するか?」といった質問が飛んでいたが、同氏は「脆弱性に対する対策としては、パッチを当てる以外にもホストベースの侵入防止システムを入れるなどいくつか方法は考えられるが、パッチ以外の方法では十分な防御手段にはならない」と述べたほか、「3年前であればパッチを当てるのは確かにリスクの高い行為だったが、最近ではパッチの信頼性も上がってきており、今やパッチを当てることによるリスクはかなり低くなってきている」と答え、脆弱性にはとにかく早期にパッチを当てることが重要であることを重ねて参加者に訴えた。

    また、最近日本でも普及しつつある、社内ネットワークに接続するPCに適切なパッチの適用やセキュリティの設定が行われていない場合にそのPCからの接続を制限する「検疫ネットワーク」のようなシステムが、ワームの半減期に影響を与えているかという質問には、「今のところは半減期への影響は出ていないが、今後大きな鍵を握る技術であることは確か」「ウイルスやトロイの木馬・バックドアなども全て接続時にチェックが行えるようになれば、半減期にもいい影響を与えるだろう」と語り、それらの技術の開発と普及に期待する姿勢を示していた。

    難読化されたプログラムを解読する方法とは?

    Chris Eagle氏

    もう一つは、米海軍大学院でコンピュータ・サイエンス学科の準学科長を務めるChris Eagle氏によるセッションをご紹介する。同セッションでは、ベルギーのDataRescueが開発・販売している「IDA Pro」という逆アセンブラと、IDA Proに対応したx86エミュレータプラグインを利用して、実際にUPX・ASPackといったツールによって「難読化」が施されたプログラムを解読していくデモが披露された。

    難読化が施されたプログラムにおいては、多くの場合リバースエンジニアリングを難しくするために、コードを暗号化してあたかも内蔵データのように見せかけたり、命令境界を無視したジャンプを行ったりすることで逆アセンブルを困難にするような仕組みが組み込まれている。それに対しIDA Proでは、プログラムのバイナリコードをデータベース化しており、実際にエミュレータ上でプログラムをステップ実行させながら、随時データベースを再構築することで、暗号化されたプログラムの内部の状況を解析したり、命令境界を無視したジャンプを行った先の動作を調べたりすることが可能だという。

    エミュレータではスタックやヒープの状況もモニタすることが可能だが、同氏によれば今のところ浮動小数点演算に対応していない、セグメントレジスタもサポートしていないなど、完全なエミュレーションを行うには至っていないという。ただワームなどの動作を解析するには現状でも十分な機能を備えているとのこと。他にもダイナミックリンクされる関数や、静的リンクで呼び出されるシステムコールの動作など、解析対象となるバイナリの外のプログラムを呼び出すことはできないため、その部分は関数をフックするなどの手を加えてやる必要があるそうだが、一部の基本的な関数については自動的にフックが行われるという。

    実際の解読にはUPXヘッダ等の知識が必要になるとのことで、このツールを使用したからといって誰もが簡単に難読化されたプログラムを解読できるわけではないが、いわゆるポリモーフィック型のウイルスなどの挙動を解析するにはこのような技術がないと解読は不可能であることは確か。ただ今のところこれらの手順を自動化するところまでは至っていないそうで、今後の可能性についても同氏は「アンチウイルスソフトの多くは同様のエミュレータを内蔵しているが、悪意に満ちたプログラムの意図を割り出すのは難しい」と語り、パターンマッチング等による自動化は難しいとの見解を示していた。

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

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