(57)【特許請求の範囲】
【請求項１】
例外処理を発生させたプログラムモジュールを識別する識別情報と、当該プログラムモジュールが発生させた例外処理の発生回数とを対応付けて記憶する回数記憶部と、
実行されたプログラムで例外処理が発生した場合に、前記例外処理を発生させたプログラムが実行するプログラムモジュールを特定する特定部と、
前記特定部が特定したプログラムモジュールの識別情報に対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下か否かを判定する判定部と、
を有し、
前記回数記憶部は、安全性が保障されたＷｅｂサイトにアクセスした際に例外処理を発生させたプログラムモジュールを識別する識別情報と、前記例外処理の発生回数とを対応付けて記憶し、
前記特定部は、コンテンツビューアを用いてアクセスした、安全性が保障されていないＷｅｂサイトで例外処理が発生した場合に、前記例外処理を発生させたコンテンツビューアが実行するプログラムモジュールを特定し、
前記判定部は、前記特定部が特定したプログラムモジュールの識別情報に対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下の場合に、前記Ｗｅｂサイトを悪質なサイトとして検出することを特徴とするバグ判定装置。
【請求項２】
前記判定部は、前記悪質なサイトとして検出した各ＷｅｂサイトのＵＲＬを収集し、収集したＵＲＬからブラックリストを生成することを特徴とする請求項１に記載のバグ判定装置。
【請求項３】
前記回数記憶部は、前記プログラムモジュールがロードされる先頭アドレスから例外処理が発生したアドレスまでのオフセットをさらに対応付けて記憶し、
前記特定部は、前記例外処理が発生した場合に、前記例外処理を発生させたプログラムモジュールの前記オフセットをさらに特定し、
前記判定部は、前記特定部が特定したプログラムモジュールの識別情報と前記オフセットとの組合せに対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下か否かを判定することを特徴とする請求項１又は２に記載のバグ判定装置。
【請求項４】
情報処理装置で実行されるバグ判定方法であって、
実行されたプログラムで例外処理が発生した場合に、例外処理を発生させたプログラムが実行するプログラムモジュールを特定する特定工程と、
前記例外処理を発生させたプログラムモジュールを識別する識別情報と、当該プログラムモジュールが発生させた例外処理の発生回数とを対応付けて記憶する回数記憶部を参照し、前記特定工程が特定したプログラムモジュールの識別情報に対応付けられる前記例外処理の発生回数が所定値以下か否かを判定する判定工程と、
を含み、
前記回数記憶部は、安全性が保障されたＷｅｂサイトにアクセスした際に例外処理を発生させたプログラムモジュールを識別する識別情報と、前記例外処理の発生回数とを対応付けて記憶し、
前記特定工程は、コンテンツビューアを用いてアクセスした、安全性が保障されていないＷｅｂサイトで例外処理が発生した場合に、前記例外処理を発生させたコンテンツビューアが実行するプログラムモジュールを特定し、
前記判定工程は、前記特定工程が特定したプログラムモジュールの識別情報に対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下の場合に、前記Ｗｅｂサイトを悪質なサイトとして検出することを特徴とするバグ判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バグ判定装置およびバグ判定方法に関する。
【背景技術】
【０００２】
プログラム実行時に、プログラムの欠陥であるバグが顕在化すると、プログラムが意図しない動作を引き起こし、異常終了する事がある。また、悪意のあるユーザは、このバグを悪用してプログラムに任意の動作を実行させる。従来から、このようなプログラムのバグは、試験工程によって自動的に検出され、発見したバグの修正がプログラムのリリース前に行われる。
【０００３】
例えば、プログラムの試験工程では、ホワイトボックステストとして、命令網羅や分岐網羅、条件網羅などを行うことでバグを予め発見する技術が利用される。また、ランダムな入力データを生成してプログラムに入力することでバグを発見するファジングなどによって、ブラックボックスとしてバグを発見する技術なども知られている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Barton  Miller、「Fuzz  Testing  of  Application  Reliability」、［平成２４年７月３日検索］、インターネット＜URL：http://pages.cs.wisc.edu/〜bart/fuzz/＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記技術では、プログラムのリリース後に発生した例外処理の原因を特定することができないという問題がある。具体的には、プログラムを実際に利用する段階において発生した例外処理が、バグや脆弱性なのか、マルウェア等の攻撃によるものなのかを判断することができない。
【０００６】
例えば、攻撃者は、標的のＷｅｂブラウザの脆弱性を攻撃することでマルウェアに感染させようと試みる。攻撃者は、脆弱性を攻撃するＷｅｂコンテンツを攻撃者が用意したＷｅｂサイトに配置し、標的となるユーザを他サイトのハイパーリンクやメールのリンク等でＷｅｂブラウザへ誘導してアクセスさせる。一方で、一般のＷｅｂサイトであっても、Ｗｅｂコンテンツの誤った記述によって、Ｗｅｂブラウザのバグを誘発する事がある。このように、例外が発生しただけでは、Ｗｅｂブラウザの脆弱性を攻撃するサイトかどうかを判断することはできない。
【０００７】
特に、Ｗｅｂブラウザは、入力として様々なＷｅｂコンテンツの読み込み処理を行うので、様々な処理モジュールを搭載している。このため、Ｗｅｂブラウザで種々の実行時例外が発生したとしても正常動作に復帰するような例外動作の場合、それぞれのモジュールのバグが脆弱性として混入しているかどうかを事前に検査することが難しい。このようなことから、多くの潜在的に脆弱性を持ったバグがプログラムのリリース後に発見され、その後パッチによって修正されている。Ｗｅｂブラウザのバグは、コンピュータウィルス等の悪意のあるプログラムの感染に悪用されていることから、脆弱性につながるバグを早期に発見することの重要度が高い。
【０００８】
開示の技術は、上記に鑑みてなされたものであって、プログラムのリリース後に発生した例外処理の原因を特定することができるバグ判定装置およびバグ判定方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示するバグ判定装置およびバグ判定方法は、一つの態様において、例外処理を発生させたプログラムモジュールを識別する識別情報と、当該プログラムモジュールが発生させた例外処理の発生回数とを対応付けて記憶する回数記憶部と、実行されたプログラムで例外処理が発生した場合に、前記例外処理を発生させたプログラムが実行するプログラムモジュールを特定する特定部と、前記特定部が特定したプログラムモジュールの識別情報に対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下か否かを判定する判定部と、を有し、前記回数記憶部は、安全性が保障されたＷｅｂサイトにアクセスした際に例外処理を発生させたプログラムモジュールを識別する識別情報と、前記例外処理の発生回数とを対応付けて記憶し、前記特定部は、コンテンツビューアを用いてアクセスした、安全性が保障されていないＷｅｂサイトで例外処理が発生した場合に、前記例外処理を発生させたコンテンツビューアが実行するプログラムモジュールを特定し、前記判定部は、前記特定部が特定したプログラムモジュールの識別情報に対応付けられて前記回数記憶部に記憶される前記例外処理の発生回数が所定値以下の場合に、前記Ｗｅｂサイトを悪質なサイトとして検出することを特徴とする。
【発明の効果】
【００１０】
本願の開示するバグ判定装置およびバグ判定方法の一つの態様によれば、プログラムのリリース後に発生した例外処理の原因を特定することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施形態に係るシステムの全体構成例を示す図である。
【図２】図２は、第１の実施形態に係る情報処理装置の機能構成を示す機能ブロック図である。
【図３】図３は、モジュール読込情報ＤＢが記憶する情報の例を示す図である。
【図４】図４は、例外パターンＤＢが記憶する情報の例を示す図である。
【図５】図５は、モジュール名とオフセットとの関係を説明する図である。
【図６】図６は、悪質なバグの判定例を示す図である。
【図７】図７は、第１の実施形態に係る例外パターン収集処理の流れを示すフローチャートである。
【図８】図８は、第１の実施形態に係る例外処理の原因特定処理の流れを示すフローチャートである。
【図９】図９は、バグ判定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するバグ判定装置およびバグ判定方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１３】
［第１の実施形態］
［全体構成］
図１は、第１の実施形態に係るシステムの全体構成例を示す図である。図１に示すように、このシステムは、Ｗｅｂサーバ１、Ｗｅｂサーバ２、Ｗｅｂサーバ３、情報処理装置１０が相互に通信可能に接続されて構成される。なお、各サーバ等の台数は、あくまで例示であり、これに限定されるものではない。
【００１４】
Ｗｅｂサーバ１とＷｅｂサーバ２は、Ｗｅｂコンテンツを含むＷｅｂサイトをユーザに提供するサーバであり、安全性が保障されている。Ｗｅｂサーバ３は、Ｗｅｂコンテンツを含むＷｅｂサイトをユーザに提供するサーバであり、安全性が保障されていない。安全性が保障されているとは、例えば第３者機関によってセキュリティが高いと認定されていたり、過去のウィルス検出回数や障害回数が所定値以下であったり、任意の方法で認定することができる。
【００１５】
情報処理装置１０は、各ＷｅｂサーバへアクセスするＷｅｂクライアントであり、例えばパーソナルコンピュータやサーバなどの装置である。この情報処理装置１０は、例外処理を発生させたプログラムモジュールを識別する識別情報と、当該プログラムモジュールが発生させた例外処理の発生回数とを対応付けて記憶する。そして、情報処理装置１０は、実行されたプログラムで例外処理が発生した場合に、例外処理を発生させたプログラムが実行するプログラムモジュールを特定する。続いて、情報処理装置１０は、特定したプログラムモジュールの識別情報に対応付けられて記憶される例外処理の発生回数が所定値以下か否かを判定する。
【００１６】
つまり、情報処理装置１０は、一般のＷｅｂサイトで発生していることを根拠に、集計された発生回数が上位の例外処理を単なるバグと判定する。一方で、情報処理装置１０は、一般のＷｅｂサイトでは発生している回数が少ないことを根拠に、集計された発生回数が下位の例外処理を悪質なバグとして検出する。
【００１７】
このように、情報処理装置１０は、アクセスしたＷｅｂコンテンツで発生した例外処理の発生回数が少ない場合には、悪用される可能性の高いバグであると判定することができる。この結果、プログラムのリリース後に発生した例外情報の原因を特定することができる。
【００１８】
［情報処理装置の構成］
次に、情報処理装置の構成を説明する。なお、各Ｗｅｂサーバは、一般的なＷｅｂサーバと同様の構成を有するので、詳細な説明は省略する。図２は、第１の実施形態に係る情報処理装置の機能構成を示す機能ブロック図である。
【００１９】
図２に示すように、情報処理装置１０は、通信部１１、記憶部１３、制御部１４を有する。なお、ここで示した制御部等は、あくまで例示であり、マウスなどの入力部やディスプレイなどの表示部等を有していてもよい。
【００２０】
通信部１１は、他の装置と通信を実行する処理部である。例えば、通信部１１は、各Ｗｅｂサーバとのコネクションを確立し、Ｗｅｂブラウザ等を用いた通信を制御する。
【００２１】
記憶部１３は、監視対象プログラム１３ａ、プログラムモジュール１３ｂ、モジュール読込情報ＤＢ（DataBase）１３ｃ、例外パターンＤＢ１３ｄ、悪性サイトＤＢ１３ｅを保持する記憶装置である。例えば、記憶部１３には、半導体素子やＨＤＤ（Hard  Disk  Drive）などの記憶装置を用いることができる。
【００２２】
監視対象プログラム１３ａは、例外処理の発生の監視対象となるプログラムであり、例えば第１の実施形態では、Ｗｅｂブラウザを実行するプログラムである。なお、ここでは、コンテンツビューアの一例としてＷｅｂブラウザを例示したが、システム専用のビューアなど他のビューアを用いることもできる。
【００２３】
プログラムモジュール１３ｂは、監視対象プログラム１３ａが実行するプログラムモジュールである。例えば、ＷｅｂブラウザがＷｅｂサイトやＷｅｂサイト上のＷｅｂコンテンツを読み込む際に実行する処理モジュールである。
【００２４】
モジュール読込情報ＤＢ１３ｃは、メモリにロードされたプログラムモジュール１３ｂの情報を記憶する。ここで記憶される情報は、後述するモジュール読込監視部１７等によって更新される。図３は、モジュール読込情報ＤＢが記憶する情報の例を示す図である。図３に示すように、モジュール読込情報ＤＢ１３ｃは、「モジュール名、先頭アドレス、末尾アドレス」を対応付けて記憶する。
【００２５】
ここで記憶される「モジュール名」は、メモリにロードされたモジュールの名称、すなわち実行されたプログラムモジュールの名称である。「先頭アドレス」は、ロードされる先頭のアドレス、すなわち、プログラムモジュールがロードされた先のメモリの先頭アドレスである。「末尾アドレス」は、ロードされる末尾のアドレス、すなわち、プログラムモジュールがロードされた先のメモリの末尾アドレスである。図３の場合、モジュールＡの名称であるプログラムモジュールが、メモリ上のアドレス「100000」からアドレス「110000」にロードされたことを示す。
【００２６】
例外パターンＤＢ１３ｄは、例外処理が発生したプログラムモジュールの情報を記憶する。ここで記憶される情報は、後述する例外監視部１８等によって更新される。図４は、例外パターンＤＢが記憶する情報の例を示す図である。図４に示すように、例外パターンＤＢ１３ｄは、「モジュール名、オフセット、例外の種類、出現回数」を対応付けて記憶する。
【００２７】
ここで記憶される「モジュール名」は、例外処理を発生させたプログラムモジュールの名称である。「オフセット」は、プログラムモジュールがロードされた先頭アドレスから例外処理が発生したアドレスまでの距離（バイト数）である。「例外の種類」は、発生した例外処理の種類を示す。「出現回数」は、当該モジュール名の当該オフセットで発生した例外処理の発生回数である。図４の場合、モジュールＡにおいて、先頭アドレスからオフセット「1000」のアドレスで、例外処理「例外Ａ」が1000回発生していることを示す。
【００２８】
悪性サイトＤＢ１３ｅは、悪性なバグを発生させたＷｅｂサイトのＵＲＬ（Uniform  Resource  Locator）を記憶する。すなわち、悪性サイトＤＢ１３ｅは、Ｗｅｂサイトのブラックリストである。この悪性サイトＤＢ１３ｅに記憶される情報は、後述するバグ検出部２０によって更新される。なお、悪性なバグを発生させたＷｅｂサイトのＵＲＬではなく、ＩＰ（Internet  Protocol）アドレスやホスト名など、Ｗｅｂサイトを一意に特定できる情報であればよい。
【００２９】
制御部１４は、収集部１５とバグ検出部２０とを有し、これらによって、潜在的に脆弱性を有するバグを検出する処理部である。制御部１４は、例えばプロセッサなどであり、制御部１４が有する各処理部は、プロセッサなどが実行する処理部である。
【００３０】
収集部１５は、Ｗｅｂアクセス部１６、モジュール読込監視部１７、例外監視部１８を有し、これらによって、例外処理の発生を監視し、例外処理の情報を収集する処理部である。Ｗｅｂアクセス部１６は、記憶部１３に記憶される監視対象プログラム１３ａを実行し、Ｗｅｂブラウザを用いてＷｅｂサーバへアクセスする処理部である。Ｗｅｂアクセス部１６は、監視対象プログラムをメモリにロードして実行する。このＷｅｂアクセス部１６は、アクセスしたＷｅｂサイトやＷｅｂコンテンツに応じて、必要なプログラムモジュール１３ｂを実行する。また、Ｗｅｂアクセス部１６がアクセスするＷｅｂサイトは、安全性が保障されているいないに関わらず、管理者等によって予め指定されていてもよく、ランダムに実行してもよい。
【００３１】
モジュール読込監視部１７は、Ｗｅｂアクセス部１６がロードしたプログラムモジュールを監視する処理部である。具体的には、モジュール読込監視部１７は、Ｗｅｂアクセス部１６がプログラムモジュールをメモリにロードしたことを検知すると、ロードされたプログラムモジュールの名称、ロードされた先頭アドレス、ロードされた末尾アドレスを検出する。そして、モジュール読込監視部１７は、取得したプログラムモジュールの名称、先頭アドレス、末尾アドレスを対応付けてモジュール読込情報ＤＢ１３ｃに格納する。
【００３２】
例えば、モジュールＡがメモリ上のアドレス「100000」から「110000」にロードされた場合には、モジュール読込監視部１７は、モジュールＡ、先頭アドレス「100000」、末尾アドレス「110000」を検出して、モジュール読込情報ＤＢ１３ｃに格納する。このように、モジュール読込監視部１７は、プログラムモジュールがロードされるイベントを監視しておき、当該イベントが発生した場合に、プログラムモジュール名（例えば、kernel32.dllなど）と当該プログラムモジュールがロードされた先頭アドレスおよび末尾アドレスを取得してモジュール読込情報ＤＢ１３ｃに格納する。
【００３３】
例外監視部１８は、特定部１８ａと計数部１８ｂとを有し、これらによって、例外処理の発生を監視する処理部である。特定部１８ａは、Ｗｅｂアクセス部１６によって実行されたＷｅｂブラウザで例外処理が発生した場合に、例外処理を発生させたＷｅｂブラウザが実行するプログラムモジュールおよびメモリアドレスを特定する処理部である。具体的には、特定部１８ａは、例外処理が発生したメモリのアドレスにロードされているプログラムモジュール名と、発生した例外の種類と、当該プログラムモジュールの先頭アドレスから例外発生アドレスまでのオフセットとを例外パターンＤＢ１３ｄに格納する。なお、プログラムモジュール名としては、ＤＬＬ（Dynamic  Load  Library）名などがある。
【００３４】
ここで、メモリの絶対アドレスではなくプログラムモジュールの先頭からのオフセットを利用する理由として、プログラムモジュールのロード先アドレスがプログラムの実行毎に異なる場合があるためである。よって、あるプログラムモジュールの特定個所に存在するバグが発症する場合、プログラムモジュールのロードアドレスによって、例外発生のアドレスが変化するからである。一方で、あるプログラムモジュールの特定個所で例外が発生した場合、プログラムモジュールのロードされるアドレスが変化したとしても、プログラムモジュール名とそのオフセットは変化しない。
【００３５】
図５は、モジュール名とオフセットとの関係を説明する図である。図５の左図に示すように、Ｗｅｂアクセス部１６があるＷｅｂサイトＡにアクセスした場合に、モジュールＡは、メモリのアドレス「5000」を先頭としてロードされ、先頭アドレスからオフセット「1000」すなわちアドレス「6000」で例外処理が発生した。一方で、図５の右図に示すように、Ｗｅｂアクセス部１６があるＷｅｂサイトＢにアクセスした場合には、モジュールＡは、メモリのアドレス「15000」を先頭としてロードされ、先頭アドレスからオフセット「1000」すなわちアドレス「16000」で例外処理が発生した。
【００３６】
図５に示すように、プログラムモジュールはプログラムが実行される最初にメモリにロードされる場合もあるし、プログラムが実行中に動的にメモリにロードされる場合もある。これらの場合、ロードされる先頭アドレスが変わるが、オフセットは変わらないので、オフセットを特定することで、例外処理の発生位置を正確に特定できる。
【００３７】
特定部１８ａは、例外が発生したアドレスにロードされているプログラムモジュールを特定するために、例外が発生したアドレスについて、モジュール読込情報ＤＢ１３ｃに記録された各プログラムモジュールに関して先頭アドレスから末尾アドレスの間に含まれるものを検索し、プログラムモジュール名を取得する。このとき、特定部１８ａは、発生した例外処理に応じて例外の種類を特定する。次に、特定部１８ａは、取得したプログラムモジュール名について、当該プログラムモジュールの先頭アドレスから例外発生アドレスを減算することで当該プログラムモジュールからのオフセットを求める。この手順により、例外が発生した場合に、特定部１８ａは、プログラムモジュール名、オフセットおよび例外の種類を組みとする「例外パターン」を取得する。そして、特定部１８ａは、これらを例外パターンＤＢ１３ｄへ格納する。
【００３８】
なお、プログラムモジュール名が取得できない場合がある。例えば、例外発生アドレスにプログラムモジュールがロードされていない場合である。バグの種類によっては、命令ポインタが、プログラムモジュールがロードされていないアドレスを示すことにより、例外を発生させ異常終了する事がある。この場合、例外の原因となった直前の個所の情報を遡って特定することはできない。この場合、特定部１８ａは、モジュール名をnull（空という意味）とし、オフセットを例外が発生したアドレスとして、例外パターンＤＢ１３ｄへ格納する。
【００３９】
計数部１８ｂは、特定部１８ａが特定した例外パターンの発生回数を計数する処理部である。例えば、計数部１８ｂは、例外処理が発生すると、特定部１８ａから例外パターン「モジュール名、オフセット、例外の種類」を取得する。そして、計数部１８ｂは、取得した例外パターンが例外パターンＤＢ１３ｄに記憶されている場合には、当該例外パターンに対応する出現回数をインクリメントする。一方、計数部１８ｂは、取得した例外パターンが例外パターンＤＢ１３ｄに記憶されていない場合には、当該例外パターンのレコードを生成して出現回数を１にする。
【００４０】
バグ検出部２０は、Ｗｅｂアクセス部２０ａと判定部２０ｂと検出部２０ｃとを有し、これらによって、リリース後にアクセスしたＷｅｂサイトで発生した例外処理の原因を特定する処理部である。
【００４１】
Ｗｅｂアクセス部２０ａは、プログラムがリリースされた後に、ユーザの操作によってＷｅｂアクセスを実行する処理部である。具体的には、Ｗｅｂアクセス部２０ａは、例外パターンＤＢ１３ｄへの情報格納が終了し、Ｗｅｂサイトへのアクセスを示すユーザ操作を受け付けると、記憶部１３に記憶されるＷｅｂブラウザのプログラムを実行する。そして、Ｗｅｂアクセス部２０ａは、ユーザによって指定されたＵＲＬへアクセスする。なお、アクセス先のＵＲＬは、ユーザによる指定だけではなく、予め管理者等によって指定されていてもよい。
【００４２】
判定部２０ｂは、Ｗｅｂアクセス部２０ａが実行したＷｅｂブラウザで例外処理が発生した場合に、例外処理を発生させたプログラムが実行するプログラムモジュールを特定し、特定したプログラムモジュールの識別情報に対応付けられて例外パターンＤＢ１３ｄに記憶される例外処理の発生回数が所定値以下か否かを判定する処理部である。
【００４３】
例えば、判定部２０ｂは、Ｗｅｂアクセス部２０ａが実行したＷｅｂブラウザで例外処理が発生した場合に、例外を発生させたモジュール名、オフセット、例外の種別を特定する。なお、各内容を特定する方法は、モジュール読込監視部１７などと同様の手法を用いることができる。そして、判定部２０ｂは、特定したモジュール名、オフセット、例外の種別の組合せに対応する出現回数を例外パターンＤＢ１３ｄから特定する。その後、判定部２０ｂは、特定した出現回数が例えば５００回以下か否かを判定する。
【００４４】
検出部２０ｃは、判定部２０ｂによって出現回数が所定値以下か否かによって、プログラムのリリース後に発生した例外処理の原因を特定する。具体的には、検出部２０ｃは、出現回数が所定値より大きい場合には、単なるバグと決定し、出現回数が所定値以下の場合には、悪質なバグとして検出する。また、検出部２０ｃは、例外処理を悪質なバグと決定した場合には、該当するＷｅｂサイトのＵＲＬを抽出して悪性サイトＤＢ１３ｅに格納する。すなわち、検出部２０ｃは、悪質なバグを発生させたモジュールを実行したＷｅｂサイトのＵＲＬをブラックリストとして保存する。
【００４５】
ここで、悪質なバグを検出する例を説明する。図６は、悪質なバグの判定例を示す図である。図６に示すように、Ｗｅｂアクセス部２０ａは、プログラムリリース後、安全性が保障されていない、信頼できない疑わしいＷｅｂサイトへアクセスする。そして、判定部２０ｂは、当該ＷｅｂサイトであるＷｅｂコンテンツを読み込むためにモジュールＡを実行した際に、オフセット「1000」で例外Ａが発生したことを検知する。この場合、判定部２０ｂは、「モジュールＡ、1000、例外Ａ」に対応する「出現回数」が「500」であり、所定数である「300」より大きいと判定する。この結果、検出部２０ｃは、例外内容である「モジュールＡ、1000、例外Ａ」を単なるバグ、すなわち、一般的なバグでありパッチによって修復可能と判断する。
【００４６】
さらに、判定部２０ｂは、当該ＷｅｂサイトであるＷｅｂコンテンツを読み込むためにモジュールＹを実行した際に、オフセット「1000」で例外Ｙが発生したことを検知する。この場合、判定部２０ｂは、「モジュールＹ、1000、例外Ｙ」に対応する「出現回数」が「1」であり、所定数である「300」以下であると判定する。この結果、検出部２０ｃは、例外内容である「モジュールＹ、1000、例外Ｙ」を悪質なバグと判断する。
【００４７】
さらに、判定部２０ｂは、当該ＷｅｂサイトであるＷｅｂコンテンツを読み込むためにモジュールＺを実行した際に、オフセット「2000」で例外Ｚが発生したことを検知する。この場合、判定部２０ｂは、「モジュールＺ、2000、例外Ｚ」に対応する「出現回数」が例外パターンＤＢ１３ｄに存在しない。この結果、検出部２０ｃは、例外内容である「モジュールＺ、2000、例外Ｚ」を悪質なバグと判断する。
【００４８】
このように、例外パターンＤＢ１３ｄに格納される集計結果の上位は、多くの一般サイトに含まれるものであり、集計結果の下位は、ある特定のサイトにのみ含まれることを意味する。この例外情報の集計結果を用いて、集計結果の上位に含まれるものを、多くの一般のサイトでよく発生する単なる記述ミスに基づくバグであると判断できる。
【００４９】
つまり、上位のバグは、Ｗｅｂコンテンツ等が脆弱性を突くようには作成されていない例外である可能性が高い、このような例外は脆弱性を持たないように開発時に考慮されている可能性が高い。一方で、下位のバグは、Ｗｅｂコンテンツ等が脆弱性を突く可能性が高いことが考えられ、このような例外は開発段階で考慮することが難しく、悪用される可能性が高い。そこで、バグ検出部２０は、例外処理を発生させているものの出現回数が少ない例外を悪質なバグとして検出する。なお、集計結果の上位や下位と判断する閾値は任意に設定できる。
【００５０】
［例外パターン収集処理の流れ］
図７は、第１の実施形態に係る例外パターン収集処理の流れを示すフローチャートである。図７に示すように、情報処理装置１０のＷｅｂアクセス部１６は、監視対象プログラム１３ａをメモリにロードしてＷｅｂブラウザを起動する（Ｓ１０１）。
【００５１】
そして、Ｗｅｂアクセス部１６は、所定のＷｅｂサイトへアクセスする（Ｓ１０２）。このとき、Ｗｅｂアクセス部１６は、Ｗｅｂサイトで様々なＷｅｂコンテンツを読み込むために、適宜プログラムモジュール１３ｂをメモリにロードして、該当モジュールを実行する。一方で、モジュール読込監視部１７は、プログラムモジュールのイベント実行を監視し、プログラムモジュールがロードされたメモリ上の先頭アドレスや末尾アドレスやモジュール名を取得して、モジュール読込情報ＤＢ１３ｃに格納する。
【００５２】
その後、例外処理が発生すると（Ｓ１０３：Ｙｅｓ）、例外監視部１８の特定部１８ａは、例外処理が発生したアドレス情報を取得し（Ｓ１０４）、例外処理を発生させたモジュールがメモリにロードされているか否かを判定する（Ｓ１０５）。なお、例外処理が発生せずにＷｅｂサイトの閲覧が終了した場合には（Ｓ１０３：Ｎｏ）、Ｓ１１３が実行される。
【００５３】
そして、特定部１８ａは、例外処理を発生させたモジュールがメモリにロードされていると判定した場合（Ｓ１０５：Ｙｅｓ）、モジュール名を取得するとともに例外の種類を特定し（Ｓ１０６）、オフセットを算出する（Ｓ１０７）。一方、特定部１８ａは、例外処理を発生させたモジュールがメモリにロードされていないと判定した場合（Ｓ１０５：Ｎｏ）、モジュール名をｎｕｌｌに決定するとともに例外の種類を特定し（Ｓ１０８）、オフセットを例外が発生したアドレスである例外発生アドレスに決定する（Ｓ１０９）。なお、例外の種類は、例外処理の内容等から特定できるものであり、Ｓ１０４で特定してもよい。
【００５４】
続いて、例外監視部１８の計数部１８ｂは、取得または決定されたモジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されているか否かを判定する（Ｓ１１０）。
【００５５】
そして、計数部１８ｂは、モジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されていると判定した場合（Ｓ１１０：Ｙｅｓ）、対応する出現回数をインクリメントする（Ｓ１１１）。一方、計数部１８ｂは、モジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されていないと判定した場合（Ｓ１１０：Ｎｏ）、出現回数を１に設定した、対応するレコードを生成する（Ｓ１１２）。
【００５６】
その後、Ｗｅｂアクセス部１６は、例外パターン収集のために指定された対象サイトが他にもある場合（Ｓ１１３：Ｙｅｓ）、Ｓ１０２以降の処理を繰り返す。一方、例外パターン収集のために指定された対象サイトが他にない場合（Ｓ１１３：Ｎｏ）、処理を終了する。
【００５７】
［例外処理の原因特定処理の流れ］
図８は、第１の実施形態に係る例外処理の原因特定処理の流れを示すフローチャートである。図８に示すように、情報処理装置１０のＷｅｂアクセス部２０ａは、監視対象プログラム１３ａをメモリにロードしてＷｅｂブラウザを起動する（Ｓ２０１）。
【００５８】
そして、Ｗｅｂアクセス部２０ａは、安全性が保障されていない所定のＷｅｂサイトへアクセスする（Ｓ２０２）。このとき、Ｗｅｂアクセス部２０ａは、Ｗｅｂサイトで様々なＷｅｂコンテンツを読み込むために、適宜プログラムモジュール１３ｂをメモリにロードして、該当モジュールを実行する。
【００５９】
その後、例外処理が発生すると（Ｓ２０３：Ｙｅｓ）、判定部２０ｂは、例外処理が発生したアドレス情報を取得し（Ｓ２０４）、例外処理を発生させたモジュールがメモリにロードされているか否かを判定する（Ｓ２０５）。なお、例外処理が発生せずにＷｅｂサイトの閲覧が終了した場合には（Ｓ２０３：Ｎｏ）、処理を終了する。
【００６０】
そして、判定部２０ｂは、例外処理を発生させたモジュールがメモリにロードされていると判定した場合（Ｓ２０５：Ｙｅｓ）、モジュール名を取得するとともに例外の種類を特定し（Ｓ２０６）、オフセットを算出する（Ｓ２０７）。一方、判定部２０ｂは、例外処理を発生させたモジュールがメモリにロードされていないと判定した場合（Ｓ２０５：Ｎｏ）、モジュール名をｎｕｌｌに決定するとともに例外の種類を特定し（Ｓ２０８）、オフセットを例外が発生したアドレスである例外発生アドレスに決定する（Ｓ２０９）。
【００６１】
続いて、判定部２０ｂは、取得または決定されたモジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されているか否かを判定する（Ｓ２１０）。
【００６２】
そして、判定部２０ｂは、モジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されていると判定した場合（Ｓ２１０：Ｙｅｓ）、対応する出現回数が所定値以上か否かを判定する（Ｓ２１１）。
【００６３】
続いて、検出部２０ｃは、例外処理「モジュール名とオフセットと例外の種類との組合せ」に対応する出現回数が所定値以上であると判定した場合（Ｓ２１１：Ｙｅｓ）、当該例外処理を通常のバグとして決定する（Ｓ２１２）。
【００６４】
一方、検出部２０ｃは、例外処理「モジュール名とオフセットと例外の種類との組合せ」に対応する出現回数が所定値未満であると判定した場合（Ｓ２１１：Ｎｏ）、当該例外処理を悪質なバグとして決定する（Ｓ２１３）。そして、検出部２０ｃは、当該例外処理を発生させた、アクセス中のＷｅｂサイトのＵＲＬを取得し（Ｓ２１４）、取得したＵＲＬを悪性サイトＤＢ１３ｅに登録する（Ｓ２１５）。なお、判定部２０ｂが、モジュール名とオフセットと例外の種類との組み合わせが、例外パターンＤＢ１３ｄに記憶されていないと判定した場合も（Ｓ２１０：Ｎｏ）、Ｓ２１３以降が実行される。
【００６５】
［効果］
このように、第１の実施形態では、一般のＷｅｂサイトをＷｅｂブラウザでアクセスし、例外発生時の情報を収集する。集計結果の上位は多くの一般サイトに含まれるものであり、集計結果の下位はある特定のサイトにのみ含まれることを意味する。この例外情報の集計結果を用いて、集計結果の上位に含まれるものを、多くの一般サイトでよく発生する単なる記述ミスに基づくバグであると判断できる。なお、集計結果の上位や下位と判断する閾値は任意に設定できる。
【００６６】
プログラムリリース後、安全性が保障されていない疑わしいＷｅｂサイトにＷｅｂブラウザでアクセスして、例外発生時の情報を収集する。この時発生した例外情報が、一般サイトの例外情報の集計結果に含まれないもしくは集計結果に含まれていたとしても上位には含まれない場合は、脆弱性を悪用した攻撃に繋がる例外であると判断できる。この結果、Ｗｅｂブラウザに関してマルウェア感染等の攻撃に繋がるバグを効率的に発見することができる。
【００６７】
また、Ｗｅｂブラウザに対して、膨大なテストデータ作成とそれを入力してテストを行う必要なく、プログラムリリース後に、一般サイトのコンテンツを読み込ませることで現実的に存在するコンテンツに起因する例外によりバグを発見することができる。また、その集計結果に基づいて信頼できない疑わしいＷｅｂサイトで発生した例外が前述の一般サイトでは発生しない、もしくは発生したとしてもその件数が著しく少ない場合において、当該例外が攻撃に繋がるバグであることを効率的に判断する事ができる。
【００６８】
したがって、ＷｅｂブラウザでＷｅｂサイトにアクセスし、その時に発生した例外情報を、予め集計した例外発生情報と比較し、攻撃に悪用される脆弱性と判断できた場合は、Ｗｅｂブラウザが読み込んでいるＷｅｂコンテンツのＵＲＬを悪性サイトとして発見することができる。これにより、攻撃を受けた瞬間にリアルタイムで検知する事ができる。したがって、数時間や数日間隔でバッチ処理を集計する場合と比べて、バッチの間隔だけ早く対処可能である。
【００６９】
また、攻撃に繋がる脆弱性であると判断した場合にＷｅｂブラウザがアクセスしていたＵＲＬについては、悪性なＷｅｂコンテンツを配布していることから、これらのＵＲＬをブラックリストとしてリスト化できる。このブラックリストは、悪性サイトからＷｅｂクライアントを保護するためのファイルタリングや、当該Ｗｅｂサイトの運営者に対する注意喚起等に活用できる。
【００７０】
また、例外が発生したメモリアドレスはバグとなるプログラムの付近である事が言えるため、この箇所を特定することでバグを迅速に修正するための情報として活用できる。例えば、プログラムモジュール名がmshtml.dllでオフセットが1000バイトの場合、mshtml.dllの先頭から1000バイト近辺にバグの原因個所が存在すると推測できる。
【００７１】
［第２の実施形態］
さて、これまで本発明の実施形態について説明したが、本発明は上述した第１の実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施形態を説明する。
【００７２】
（対象プログラム）
第１の実施形態では、監視対象プログラムの一例としてＷｅｂブラウザを例にして説明したが、これに限定されるものではない。例えば、モジュールを読み込んで処理するプログラムなど、プロセッサが実行する様々なプログラムについても同様に処理することができる。
【００７３】
（例外パターンの収集先）
例えば、例外パターンＤＢ１３ｄに記憶される例外パターンの情報を収集するために、安全性が保障されたＷｅｂサイトにアクセスして収集することもできる。このようにすることで、安全性が保障されているＷｅｂサイトで発生する通常のバグを収集できる。また、例外パターンＤＢ１３ｄに記憶される例外パターンの情報を収集するために、安全性が保障されたＷｅｂサイトと安全性が保障されていないＷｅｂサイトの両方にアクセスして収集することもできる。
【００７４】
また、情報処理装置１０は、安全性が保障されたＷｅｂサイトにアクセスして例外パターンを集計し、同様に、安全性が保障されていないＷｅｂサイトにアクセスして例外パターンを集計し、これらの集計結果を突合させる。そして、情報処理装置１０は、安全性が保障されていないＷｅｂサイトで発生した例外パターンが、安全性が保障されたＷｅｂサイトを用いて集計した結果において上位に位置する場合には、当該例外パターンを単なるバグとして検出する。一方で、情報処理装置１０は、安全性が保障されていないＷｅｂサイトで発生した例外パターンが、安全性が保障されたＷｅｂサイトを用いて集計した結果において下位に位置する場合、または、安全性が保障されたＷｅｂサイトを用いて集計した結果に含まれない場合には、悪質なバグとして検出することもできる。
【００７５】
（例外パターンの項目）
第１の実施形態で説明した例外パターンの項目は、あくまで一例であり、任意に設定変更することができる。例えば、オフセットではなくメモリの絶対アドレスを用いてもよい。また、例外の種類を例外パターンの項目から除外することで、例外パターンをマクロな視点で収集することができる。また、例外パターンの項目を増やすことで、例外パターンをミクロな視点で収集することができる。
【００７６】
例外発生時にモジュール名が取得できない場合、つまり、例外発生場所がモジュールが読み込まれたアドレスではない場合や例外パターンのモジュール名がｎｕｌｌの場合がある。これらの場合、このようにバグの種類によっては、命令ポインタが、プログラムモジュールがロードされていないアドレスを示すことにより、例外を発生させ異常終了する事がある。この際、示すアドレスは毎回変化する場合があり、同一原因のバグであったとしても、例外パターンとしては毎回異なることがあり、統計的に下位に出現してしまう。よって、このような同一原因のバグに起因するが毎回例外発生アドレスが異なる例外パターンについて、モジュール名がｎｕｌｌであることを条件として集計から除外してもよい。
【００７７】
（適用システム）
攻撃からホストシステムを保護するためのホスト型侵入検知システムや、おとりのホストシステムとして動作するハニーポット、特にＷｅｂブラウザとして動作するＷｅｂクライアントハニーポットにおいて、第１の実施形態で説明した手法を用いることで攻撃を検知できる。
【００７８】
第１の実施形態で説明した手法を搭載したホスト型侵入検知システム上では、実際にユーザがＷｅｂブラウザを利用して様々なＷｅｂサイトにアクセスしているため、ホスト型侵入検知システムに例外情報が蓄積される。同様に、第１の実施形態で説明した手法を搭載したＷｅｂクライアントハニーポットでは、検査対象のＷｅｂサイトについての例外情報が蓄積される。この時、Ｗｅｂブラウザを標的とする攻撃コードがＷｅｂブラウザに含まれた場合は、その例外情報が、今まで集計した例外情報に含まれるか否か、もしくは含まれる件数の少なさによって、攻撃である可能性が高いと判断できる。
【００７９】
特に、ゼロデイ攻撃のような未知の脆弱性を利用した攻撃では、発生した例外情報が今までに蓄積した例外情報に全く含まれないことが想定できるため、ある程度蓄積した例外情報に対して、まったく新しい例外情報が出現した場合は、ゼロデイ攻撃の可能性があるとして特定できる。
【００８０】
（システム構成等）
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示された構成要素と同一であることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００８１】
また、実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８２】
（プログラム）
また、実施形態に係る情報処理装置が実行する処理をコンピュータが実行可能な言語で記述したバグ判定プログラムを作成することもできる。この場合、コンピュータがバグ判定プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるバグ判定プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたバグ検出プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図２等に示した情報処理装置と同様の機能を実現するバグ判定プログラムを実行するコンピュータの一例を説明する。
【００８３】
図９は、バグ判定プログラムを実行するコンピュータを示す図である。図９に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００８４】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００８５】
ここで、図９に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した各ＤＢは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００８６】
また、バグ判定プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１０９３として、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施形態で説明したＷｅｂアクセス部１６と同様の情報処理を実行するＷｅｂアクセス手順と、モジュール読込監視部１７と同様の情報処理を実行するモジュール読込監視手順と、例外監視部１８と同様の情報処理を実行する例外監視手順と、バグ検出部２０と同様の情報処理を実行するバグ検出手順とが記述されたプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。
【００８７】
また、バグ検出プログラムによる情報処理に用いられるデータは、プログラムデータ１０９４として、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００８８】
なお、バグ検出プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、バグ検出プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８９】
１、２、３  Ｗｅｂサーバ
１０  情報処理装置
１１  通信部
１３  記憶部
１３ａ  監視対象プログラム
１３ｂ  プログラムモジュール
１３ｃ  モジュール読込情報ＤＢ
１３ｄ  例外パターンＤＢ
１３ｅ  悪性サイトＤＢ
１４  制御部
１５  収集部
１６  Ｗｅｂアクセス部
１７  モジュール読込監視部
１８  例外監視部
１８ａ  特定部
１８ｂ  計数部
２０  バグ検出部
２０ａ  Ｗｅｂアクセス部
２０ｂ  判定部
２０ｃ  検出部
１０００  コンピュータ
１０１０  メモリ
１０１１  ＲＯＭ
１０１２  ＲＡＭ
１０２０  ＣＰＵ
１０３０  ハードディスクドライブインタフェース
１０４０  ディスクドライブインタフェース
１０５０  シリアルポートインタフェース
１０６０  ビデオアダプタ
１０７０  ネットワークインタフェース
１０８０  バス
１０９０  ハードディスクドライブ
１０９１  ＯＳ
１０９２  アプリケーションプログラム
１０９３  プログラムモジュール
１０９４  プログラムデータ
１１００  ディスクドライブ
１１１０  マウス
１１２０  キーボード
１１３０  ディスプレイ
【図１】
0005425980.tif 000002
【図２】
0005425980.tif 000003
【図３】
0005425980.tif 000004
【図４】
0005425980.tif 000005
【図５】
0005425980.tif 000006
【図６】
0005425980.tif 000007
【図７】
0005425980.tif 000008
【図８】
0005425980.tif 000009
【図９】
0005425980.tif 000010