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