(57)【特許請求の範囲】
【請求項１】
エクスプロイトコードを分析する方法であって、
仮想環境で実行され、脆弱性が内包された対象プログラムによりエクスプロイトコードの分析を希望する非実行ファイルをロードするステップと、
前記対象プログラムのレジスタ値を分析し、前記レジスタ値がノーマルコード領域内を示すか否かを判断するステップと、
前記レジスタ値が前記ノーマルコード領域以外の領域を示す場合、前記対象プログラムの動作に関するログ情報を格納するステップと、
前記格納されたログ情報に基づいて前記非実行ファイルに含まれたエクスプロイトコードを抽出及び分析するステップと
を含むことを特徴とする方法。
【請求項２】
対象プログラムの動作に関するログ情報を格納するするステップは、前記レジスタ値を持続的に分析し、前記レジスタ値が前記ノーマルコード領域以外の領域を示し始めた時点で前記ログ情報を格納し始め、前記レジスタ値が前記ノーマルコード領域内を示し始めた時点で前記ログ情報の格納を終了するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
対象プログラムが終了するまで、前記対象プログラムのレジスタ値を分析し、前記レジスタ値がノーマルコード領域内を示すか否かを判断するステップ、及び前記レジスタ値が前記ノーマルコード領域以外の領域を示す場合、前記対象プログラムの動作に関するログ情報を格納するステップを反復実行することを特徴とする請求項２に記載の方法。
【請求項４】
前記エクスプロイトコードの抽出および分析後に前記仮想環境を前記対象プログラム実行以前の状態に切り換えるステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記ログ情報は、
前記対象プログラムのレジスタ値及び仮想メモリーにロードされた前記非実行ファイルの内容を含むことを特徴とする請求項１に記載の方法。
【請求項６】
エクスプロイトコードを分析する装置であって、
仮想環境で実行される脆弱性が内包された対象プログラムを通じてエクスプロイトコードの分析を希望する非実行ファイルをロードした後、前記対象プログラムのレジスタ値を持続的に外部に出力するプログラム実行部と、
前記プログラム実行部から出力されるレジスタ値を分析し、前記レジスタ値がノーマルコード領域以外の領域を示す場合、前記対象プログラムの動作に関するログ情報をログ情報データベースに格納するプログラム実行分析部と、
前記格納されたログ情報に基づいて前記非実行ファイルに含まれたエクスプロイトコードを抽出及び分析するエクスプロイトコード分析部と
を含むことを特徴とする装置。
【請求項７】
前記プログラム実行分析部は、
前記プログラム実行部から持続的に出力される前記レジスタ値を分析し、前記レジスタ値が前記ノーマルコード領域以外の領域を示し始めた時点で前記ログ情報を格納し始め、前記レジスタ値が前記ノーマルコード領域内を示し始めた時点で前記ログ情報の格納を終了することを特徴とする請求項６に記載の装置。
【請求項８】
前記エクスプロイトコード分析部は、
前記エクスプロイトコードの分析後に前記仮想環境を前記対象プログラム実行以前の状態に切り換えることを特徴とする請求項６に記載の装置。
【請求項９】
前記ログ情報は、
前記対象プログラムのレジスタ値及び仮想メモリーにロードされた前記非実行ファイルの内容を含むことを特徴とする請求項６に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エクスプロイトコード分析方法及び装置に関し、特に仮想環境を利用してエクスプロイトコードを分析するための方法及び装置に関する。
【背景技術】
【０００２】
最近、情報セキュリティの脅威は、エクスプロイトコード（exploit code，malicious code）に集中されており、このようなエクスプロイトコードは、秘密性、無欠性、可用性などに集約される情報セキュリティの目的に反して全般的な問題を起こしている。
【０００３】
エクスプロイトコードの理論的定義は、他のコンピューターに被害を与えるために製作されたすべてのプログラム及び実行可能な部分であり、実質的定義は、他人に心理的、実質的に被害を与えるために製作されたプログラム及び実行可能な部分を言う。
【０００４】
このようなエクスプロイトコードを分析するための方法として、大きく、既知のエクスプロイトコードに対する分析方法と未知のエクスプロイトコードに対する分析方法とがある。
【０００５】
既知のエクスプロイトコード分析方法としては、シグネチャ（signature）検査法、ＣＲＣ（Cyclic Redundancy Check）検査法及びヒューリスティック（heuristic）検査法が挙げられる。
【０００６】
シグネチャ検査法は、人を区別する時に指紋を見ることと同様に、ワクチンプログラムがウイルスを診断する方法の１つであって、エクスプロイトコードが有している独特の文字列を通じてエクスプロイトコードを分析する方法である。このようなシグネチャ検査法には、順次的文字列検査法と特定文字列検査法がある。順次文字列検査法は、速度は早いが、エクスプロイトコード探知率が劣化するという短所があり、特定文字列検査法は、エクスプロイトコード探知率は高いが、速度が遅いという短所がある。
【０００７】
ＣＲＣ検査法は、シリアル伝送でデータの信頼性を検証するためのエラー検出方法の一種であって、誤診率が低いという長所があるが、データが１バイトでも変形されると、エクスプロイトコードを診断することができないという短所がある。
【０００８】
ヒューリスティック検査法は、シグネチャ検査法を補完したもので、通常のプログラムで発見できない特別な命令や動作状態を探す方法である。このようなヒューリスティック検査法は、システムの実装が非常に難しいという短所がある。
【０００９】
一方、未知のエクスプロイトコード分析方法として、行為探知方法論と免疫システムが挙げられる。
【００１０】
行為探知方法論は、任意の実行プログラムが実際に実行される時に、当該プログラムが使用するシステム呼び出しをフッキング（hooking）し、探知エンジンが保有しているシステム呼び出しデータベースと比較した後、フッキング禁止されたルール（rule）を破ってシステム呼び出しを使用すれば、当該プログラムをエクスプロイトコードとして判断する。このようなアクセス方法は、ポリシー設定のエラーによって特定のシステム呼び出しに対する誤探知が発生し、正常実行コードをエクスプロイトコードとして判断する問題が発生するおそれがある。
【００１１】
免疫システムは、自然免疫体系と同様に、コンピューターシステムを保護する問題を「自分自身ではないもの」と「自分自身であるもの」とを区別する方式で解決しようとする方法である。しかし、このような免疫システムは、誤探知発生率が高くて、まだ常用化されていない。
【００１２】
したがって、前述したような従来のエクスプロイトコード分析方法の短所を克服し、安全で且つ正確にエクスプロイトコードを抽出することができる方法が要求される。
【００１３】
【特許文献１】大韓民国特許登録第１０−０６２８８６９号
【非特許文献１】2005 Workshop on the Evaluation of Software Defect Detection Tools 2005, June 2005, Michael Zhivich et al., “Dynamic Buffer Overflow Detection”
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明の目的は、仮想環境で脆弱性／セキュリティホールが内包された対象プログラムを利用して非実行ファイルに含まれたエクスプロイトコードを安全に分析するための方法及び装置を提供することにある。
【００１５】
また、本発明の他の目的は、対象プログラムを持続的にモニタリングし、エクスプロイトコードが実行される時点の情報をログとして格納した後、これを分析することによって、エクスプロイトコードを分析するための装置及び方法を提供することにある。
【００１６】
また、本発明の他の目的は、以下の説明及び本発明の一実施形態によって把握されることができる。
【課題を解決するための手段】
【００１７】
上記目的を達成するために、本発明の一態様に係るエクスプロイトコード分析方法は、仮想環境で実行され、脆弱性が内包された対象プログラムによりエクスプロイトコードの分析を希望する非実行ファイルをロード（load）するステップと、当該対象プログラムのレジスタ（register）値を分析し、当該レジスタ値がノーマルコード（normal code）領域内を示すか否かを判断するステップと、当該レジスタ値が当該ノーマルコード領域以外の領域を示す場合、当該対象プログラムの動作に関するログ（log）情報を格納するステップと、当該格納されたログ情報に基づいて当該非実行ファイルに含まれたエクスプロイトコードを抽出及び分析するステップと、を含む。
【００１８】
また、本発明の他の態様に係るエクスプロイトコード分析装置は、仮想環境で実行される脆弱性が内包された対象プログラムを通じてエクスプロイトコードの分析を希望する非実行ファイルをロード（load）した後、当該対象プログラムのレジスタ（register）値を持続的に外部に出力するプログラム実行部と、当該プログラム実行部から出力されるレジスタ値を分析し、当該レジスタ値がノーマルコード（normal code）領域以外の領域を示す場合、当該対象プログラムの動作に関するログ（log）情報をログ情報データベースに格納するプログラム実行分析部と、当該格納されたログ情報に基づいて当該非実行ファイルに含まれたエクスプロイトコードを抽出及び分析するエクスプロイトコード分析部とを含む。
【発明の効果】
【００１９】
前述したように、本発明は、仮想環境でエクスプロイトコードを分析することによって、エクスプロイトコードの実行によって発生する被害を防止することができるという利点がある。
【００２０】
また、本発明は、既知のエクスプロイトコードだけでなく、未知のエクスプロイトコードを抽出及び分析することができるという利点がある。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の好ましい実施形態を添付の図面を参照して詳しく説明する。また、発明の要旨を不明瞭にしかねない公知の機能及び構成についての詳細な説明は省略する。
【００２２】
図１は、本発明の一実施形態に係るエクスプロイトコード分析装置のブロック構成図である。以下、図１を参照して本発明の一実施形態に係るエクスプロイトコード分析装置の構成及び動作について詳しく説明する。
【００２３】
図１を参照すると、本発明の一実施形態に係るエクスプロイトコード分析装置は、仮想環境で、エクスプロイトコードが含まれた非実行ファイルを脆弱性が内包された対象プログラムを通じてロード（load）し、当該対象プログラムを実行させるためのターゲットマシン（target machine）１１０と、当該ターゲットマシン１１０から出力される情報を利用してエクスプロイトコードを抽出及び分析するためのホストマシン（host machine）１２０とを含む。
【００２４】
非実行ファイルとは、それ自体では実行されないデータファイルを意味し、エクスプロイトコードを内包した非実行ファイルを脆弱性が内包されたプログラムがロードする場合に、プログラムが正常フローから外れる場合にエクスプロイトコードが実行される。
【００２５】
エクスプロイトコードは、プログラムの脆弱性によってプログラムが正常フローから外れる時に実行され、行うべき悪意的な役目が多い場合には、非実行ファイルにあらかじめ含まれたエクスプロイトコードイメージを実行させるようになる。エクスプロイトコードイメージは、実行ファイルであり、エクスプロイトコードによって挿入されることができ、又は、挿入されないこともできる。
【００２６】
本発明の一実施形態に係るターゲットマシン１１０は、対象プログラムデータベース１１２及びプログラム実行部１１４を含む。
【００２７】
本発明の一実施形態に係る対象プログラムデータベース１１２は、エクスプロイトコードを検査するために入力される非実行ファイルを実行させるための多様な形式の脆弱性が内包されたプログラムを格納する。
【００２８】
本発明の一実施形態に係るプログラム実行部１１４は、仮想環境で実行される脆弱性が内包された対象プログラムを通じて外部から入力される非実行ファイルをロードする。この時、プログラム実行部１１４は、対象プログラムデータベース１１２を検索し、上記非実行ファイルの形式に基づいて非実行ファイルを実行させることができる対象プログラムを選択することができる。
【００２９】
また、本発明の一実施形態に係るプログラム実行部１１４は、非実行ファイルをロードして実行する対象プログラムのレジスタ値をプログラム実行分析部１２２に出力する。
【００３０】
本発明の一実施形態に係るホストマシン１２０は、プログラム実行分析部１２２、ログ情報データベース１２４及びエクスプロイトコード分析部１２６を含む。
【００３１】
本発明の一実施形態に係るプログラム実行分析部１２２は、プログラム実行部１１４から出力されるレジスタ値を分析し、当該レジスタ値が仮想メモリーのノーマルコード（normal code）領域以外の領域を示すか否かを判断する。その判断の結果、当該レジスタ値がノーマルコード領域以外の領域を示す場合、対象プログラムの動作に関するログ情報をログ情報データベース１２４に格納する。例えば、ｘ８６  ＣＰＵの場合、ＥＩＰ（Extended Instruction Pointer）レジスタ値がノーマルコード領域以外を示す時に対象プログラムの動作に関するログ情報を格納する。当該ログ情報のための対象プログラムの動作情報は、ターゲットマシン１１０のオペレーティングシステム（Ｏ／Ｓ）から得ることもできる。
【００３２】
すなわち、本発明の一実施形態に係るプログラム実行分析部１２２は、対象プログラムを持続的にモニタリングし、対象プログラムのレジスタ値を分析することによって、非実行ファイルに含まれたエクスプロイトコードが実行される時点をログ情報として格納する。したがって、本発明は、上記のように、エクスプロイトコードが実行される時点をログ情報として格納することによって、既知のエクスプロイトコードだけでなく、未知のエクスプロイトコードを抽出及び分析することができるという利点がある。
【００３３】
ノーマルコードは、ファイルをロードさせるプログラムが正常的にアクセスするコードメモリー領域をいう。一方、ログ情報は、対象プログラムのレジスタ値及び仮想メモリーにロードされた非実行ファイルの内容を含む。
【００３４】
この時、本発明の一実施形態に係るプログラム実行分析部１２２は、プログラム実行部１１４から持続的に出力されるレジスタ値を分析し、レジスタ値がノーマルコード領域以外の領域を示し始めた時点でログ情報を格納し始め、レジスタ値がノーマルコード領域内を示し始めた時点でログ情報の格納を終了することができる。
【００３５】
本発明の一実施形態に係るログ情報データベース１２４は、プログラム実行分析部１２２から出力されるログ情報を格納する。
【００３６】
本発明の一実施形態に係るエクスプロイトコード分析部１２６は、ログ情報データベース１２４に格納されたログ情報に基づいて非実行ファイルに含まれたエクスプロイトコードを抽出及び分析する。この時、エクスプロイトコード分析部１２６は、抽出されたエクスプロイトコードを逆アセンブル（disassemble）してエクスプロイトコードの動作メカニズム（mechanism）を分析することができる。
【００３７】
図２は、本発明の一実施形態に係るエクスプロイトコード分析方法を示す流れ図である。以下、図２を参照して本発明の一実施形態に係るエクスプロイトコード分析方法を説明するが、図１を参照して説明した本発明の一実施形態に係るエクスプロイトコード分析装置の説明と重複する内容は省略する。
【００３８】
ステップ２０１で、エクスプロイトコードを抽出するための非実行ファイルが入力されれば、本発明の一実施形態に係るプログラム実行部１１４は、仮想環境で実行される対象プログラムを通じて非実行ファイルをロードする。この時、本発明の一実施形態に係るプログラム実行部１１４は、対象プログラムデータベース１１２を検索し、非実行ファイルの形式に基づいて非実行ファイルを実行させることができる対象プログラムを選択することができる。
【００３９】
対象プログラムは、非実行ファイルを構文解析（parsing）して仮想メモリーにロードする。
【００４０】
ステップ２０３で、本発明の一実施形態に係るプログラム実行分析部１２２は、プログラム実行部１１４から対象プログラムの実行により持続的に出力される対象プログラムのレジスタ値を分析する。
【００４１】
ステップ２０５で、本発明の一実施形態に係るプログラム実行分析部１２２は、対象プログラムのレジスタ値が仮想メモリーのノーマルコード領域以外の領域を示すか否かを判断する。この判断の結果、対象プログラムのレジスタ値が仮想メモリーのノーマルコード以外の領域を示す場合、すなわち非実行ファイル内に含まれたエクスプロイトコードの動作が探知された場合、ステップ２０７に進行する。
【００４２】
エクスプロイトコードは、脆弱性を内包したプログラムの実行フローで行われるので、当該エクスプロイトコードが実行される時点を分析することが困難であったが、本発明は、上記したように、エクスプロイトコードが含まれた非実行ファイルがロードされたプログラムのレジスタ値を分析することによって、エクスプロイトコードが実行される時点を容易に判断することができる。
【００４３】
ステップ２０７で、本発明の一実施形態に係るプログラム実行分析部１２２は、対象プログラムの動作に関するログ情報をログ情報データベース１２４に格納し始めた後、ステップ２０９に進行する。
【００４４】
ステップ２０９で、本発明の一実施形態に係るプログラム実行分析部１２２は、対象プログラムのレジスタ値がノーマルコード領域内を示すか否かを判断し、この判断の結果、レジスタ値がノーマルコード領域内を示す場合、すなわち非実行ファイル内に含まれたエクスプロイトコードの動作が止まった場合、ステップ２１１に進行し、ログ情報の格納を終了する。
【００４５】
ステップ２１３で、本発明の一実施形態に係るプログラム実行分析部１２２は、対象プログラムの終了可否を判断し、この判断の結果、対象プログラムが終了した場合、ステップ２１５に進行し、一方、対象プログラムが終了しない場合、ステップ２０５に進行して対象プログラムのレジスタ値の分析を継続して行う。
【００４６】
ステップ２１５で、本発明の一実施形態に係るエクスプロイトコード分析部１２６は、ログ情報データベース１２４に格納されたログ情報を利用して非実行ファイル内に含まれたエクスプロイトコードを抽出及び分析する。その後、仮想環境を対象プログラムが動作する前の状態に切り換えて終了する。
【００４７】
図３は、本発明の一実施形態に係るエクスプロイトコード分析方法の例を示す図である。以下、図３を参照して本発明の一実施形態に係るエクスプロイトコード分析方法を説明する。
【００４８】
脆弱性が内包された対象プログラムが実行される場合、対象プログラムは、開始時から終了時まで正常フロー３１０で実行されることができるが、内包された脆弱性によって非正常フロー３２０で実行されることもできる。
【００４９】
対象プログラムにより非実行ファイルがロードされれば、プログラム実行分析部１２２は、対象プログラムのレジスタ値を分析し始める。区間３０１は、対象プログラムにより非実行ファイルがロードされた時点からエクスプロイトコードが実行される前までの区間を示し、この時、対象プログラムのレジスタ値は、データコード３３２が仮想メモリーのノーマルコード領域３３４を示す正常的な様相を表す。
【００５０】
対象プログラムが脆弱性によって正常フローから外れる場合（３１２）、対象プログラムにロードされた非実行ファイルに含まれたエクスプロイトコードが実行されることができる。この時、エクスプロイトコードの種類によってエクスプロイトコードイメージが実行（３１４）されることができる。
【００５１】
このようにエクスプロイトコードが実行される区間３０３では、エクスプロイトコード３４２の実行によって対象プログラムのレジスタ値が仮想メモリーのノーマルコード領域以外の領域３４４を示すようになる。このような場合、プログラム実行分析部１２２は、ログ情報を格納し始める。
【００５２】
その後、対象プログラムが非正常フロー３２０から外れることによって（３１３、３１５）、エクスプロイトコードが実行されない区間３０５では、対象プログラムのレジスタ値は、さらに正常的なデータコード３３２が仮想メモリーのノーマルコード領域３３４を示す様相を表すようになる。この時、プログラム実行分析部１２２は、ログの格納を終了し、エクスプロイトコード分析部１２６は、格納されたログに基づいてエクスプロイトコードを抽出及び分析する。
【００５３】
以上において説明した本発明は、本発明が属する技術の分野における通常の知識を有する者であれば、本発明の技術的思想を逸脱しない範囲内で、様々な置換、変形及び変更が可能であるので、上述した実施形態及び添付された図面に限定されるものではない。
【図面の簡単な説明】
【００５４】
【図１】本発明の一実施形態に係るエクスプロイトコード分析装置のブロック構成図である。
【図２】本発明の一実施形態に係るエクスプロイトコード分析方法を示す流れ図である。
【図３】本発明の一実施形態に係るエクスプロイトコード分析方法の例を示す図である。
【符号の説明】
【００５５】
１１０  ターゲットマシン
１１２  対象プログラムＤＢ
１１４  プログラム実行部
１２０  ホストマシン
１２２  プログラム実行分析部
１２４  ログ情報ＤＢ
１２６  エクスプロイトコード分析部
【図１】
0004732484.tif 000002
【図２】
0004732484.tif 000003
【図３】
0004732484.tif 000004