(57)【要約】【課題】監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出し得る、改ざん検出装置、監視システム、改ざん検出方法、およびプログラムを提供する。【解決手段】ソフトウェアプログラムを実行する端末装置１００における改ざんを検出する改ざん検出装置２０は、ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、端末装置１００の記憶装置１０のスタック領域に格納されているアドレスが、記憶装置１０の動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部２５を備えている。【選択図】図１
2012185547.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、
前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、
ことを特徴とする改ざん検出装置。
【請求項２】
前記改ざん検出部が、
前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、
判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、
請求項１に記載の改ざん検出装置。
【請求項３】
前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、不正利用検出部を、更に備えている、請求項１または２に記載の改ざん検出装置。
【請求項４】
前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、
前記不正利用検出部が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、
請求項３に記載の改ざん検出装置。
【請求項５】
前記不正利用検出部が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、請求項３または４に記載の改ざん検出装置。
【請求項６】
改ざん検出装置を有する端末装置と、監視装置とを備え、
前記改ざん検出装置は、
前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、
更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、
前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、
ことを特徴とする監視システム。
【請求項７】
ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、
ことを特徴とする改ざん検出方法。
【請求項８】
コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、
前記コンピュータに、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータなどの端末装置におけるプログラム実行時の改ざんを防止するための、改ざん検出装置、それを用いた監視システム、更には、改ざん検出方法、およびこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
従来から、ソフトウェアの改ざんなどの不正使用を防止する方法（以下、「不正使用防止方法」という。）が提案されている。不正使用防止方法の一つとしては、ソフトウェアの契約管理と利用者管理とを対応付け、正規の使用者を特定することによって、ソフトウェアの使用を管理する方法が知られている。
【０００３】
また、ソフトウェアのインストール時等にパスワードの入力を要求して権限のない者による使用を防止する不正使用防止方法は、現在、最も一般的に用いられている方法である。但し、この不正使用防止方法には、パスワードが非正規のソフトウェア使用者に対して流出した場合に、不正使用を防ぐことができないという問題がある。
【０００４】
また、不正使用防止方法としては、パーソナルコンピュータ（以下「ＰＣ」とする。）にインストールした監視プログラムまたはＰＣに設置した監視装置を用いて、ＰＣのメインメモリを監視することにより、ソフトウェアの改ざんを検出する方法も知られている。
【０００５】
但し、改ざんの防止対象であるソフトウェアプログラムがＰＣで実行されている場合に、記録装置（メインメモリ）に動的に確保されるデータ領域を監視することは、困難である。これは、監視対象となるデータ領域を認知することが難しいためである。従って、このような場合には、静的に割り当てられたプログラム領域または共有使用領域にあるプログラムコードおよびデータのみが監視対象となる。この問題について具体例を挙げて説明する。
【０００６】
例えば、特許文献１は、このようなソフトウェアの改ざんを検出する検出装置を開示している。特許文献１に開示の検出装置では、プログラムコードなどを記憶する静的記憶領域と、プログラムコードに係る処理の実行に伴って変更される情報を記憶する動的記憶領域とが、記憶装置の記憶領域に構築されている。
【０００７】
そして、検出装置は、動的記憶領域に記憶され、且つ静的記憶領域の範囲を示すアドレス情報を参照して、静的記憶領域に記憶された情報に基づく処理が実行される場合に、動的記憶領域から参照したアドレス情報が静的記憶領域の範囲内を指定するものであるか否かを判定する。その後、検出装置は、判定の結果、アドレス情報が静的記憶領域の範囲内を指定するものでない場合は、動的記憶領域に記憶された情報を改ざんされた情報として検出する。
【０００８】
このように、特許文献1に開示の検出装置では、静的なプログラムコードと静的なデータとを監視しているだけであり、その監視しているプログラムコードまたはデータが実際にＰＣで実行されているコードまたはデータであることを判別することは、困難である。即ち、特許文献1に開示の検出装置では、動的に確保されるデータ領域を監視することは、困難である。
【０００９】
また、動的記憶領域から参照したアドレス情報が、静的記憶領域の範囲内を指定する場合であっても、その範囲内のアドレス情報が改ざんされていないという確証はなく、場合によっては、処理は正常でも、不正な処理が実行されている場合が想定される。よって、特許文献１に開示の検出装置では、改ざんの検出は不十分である。
【００１０】
また、特許文献１に開示された検出装置は、ソースコード上で分岐および復帰の場所に、マクロなどによって不正コード検出機構を挿入して、改ざんの有無を検出する。しかし、ソースコードに分岐および復帰の箇所が多い場合、すべての分岐および復帰の箇所において改ざんの有無を検出しようとすると、その分、主となるプログラムの実行に要する時間が増えてしまうことになる。上記特許文献１に開示された検出装置には、ソフトウェアの処理性能の低下を招くという問題もある。
【００１１】
特許文献１の問題を解決するため、例えば、特許文献２は、ＰＣ等に接続され、これを監視する監視装置を開示している。特許文献２に開示された監視装置は、監視対象であるプログラムコードに１つ以上のチェッカコードを挿入して、ソフトウェアコードを作成し、ＰＣ等がそのソフトウェアコードを実行している最中に、チェッカコードを活性化させる。
【００１２】
このため、特許文献２に開示された監視装置は、ソフトウェアコードを実行中のＰＣ等が、活性化されたチェッカコードにより指定された処理を実行すると、そのチェッカコードによって、指定された処理が実行されたことを確認することができる。そして、この結果、特許文献２に開示された監視装置は、ＰＣ等で実際に実行中のプログラムコードを監視することができる。このように、特許文献２に開示された監視装置によれば、記録装置（メインメモリ）に動的に確保されるデータ領域を監視することができ、プログラムコードの一部または全部について、改ざんの有無を検出できる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００６−１０６９５６号公報
【特許文献２】特開２００８−８４２７５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、特許文献２に開示された監視装置を用いる場合は、不正使用の監視対象となるソフトウェアプログラムに対して、事前にチェッカコードを挿入することが必要になる。特許文献２に開示された監視装置には、不正使用の監視対象が限定されるという問題点がある。
【００１５】
本発明の目的の一例は、上記問題を解消し、監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出し得る、改ざん検出装置、監視システム、改ざん検出方法、およびプログラムを提供することにある。
【課題を解決するための手段】
【００１６】
上記目的を達成するため、本発明の一側面における改ざん検出装置は、ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、
前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、ことを特徴とする。
【００１７】
上記目的を達成するため、本発明の一側面における監視システムは、改ざん検出装置を有する端末装置と、監視装置とを備え、
前記改ざん検出装置は、
前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、
更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、
前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、ことを特徴とする。
【００１８】
また、上記目的を達成するため、本発明の一側面における改ざん検出方法は、ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、
ことを特徴とする。
【００１９】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、
前記コンピュータに、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、ことを特徴とする。
【発明の効果】
【００２０】
以上のように、本発明によれば、監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、本発明の実施形態における監視システムの全体構成を示す図である。
【図２】図２は、本発明の実施の形態における改ざん検出装置の構成を示すブロック図である。
【図３】図３は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの一例を示す図である。
【図４】図４は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの他の例を示す図である。
【図５】図５は、本実施の形態において、環境情報として利用される、利用者管理情報、装置識別情報、契約情報、および製品情報の一例を示す図である。
【図６】図６は、本実施の形態において、環境情報として利用される、利用者管理情報およびアクセス管理情報の一例を示す図である。
【図７】図７は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われていない場合を説明する図である。
【図８】図８は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われている場合を説明する図である。
【図９】図９は、本発明の実施の形態における改ざん検出装置の動作を示すフロー図である。
【図１０】図１０は、本発明の実施の形態で利用される端末装置の具体例を示すブロック図である。
【発明を実施するための形態】
【００２２】
（実施の形態）
以下、本発明の実施の形態における、改ざん検出装置、監視システム、改ざん検出方法、およびプログラムについて、図１〜図１０を参照しながら説明する。
【００２３】
[システム構成]
最初に、図１を用いて、本発明の実施の形態における監視システムの全体構成を説明する。図１は、本発明の実施の形態における監視システムの全体構成を示す図である。図１に示すように、本実施の形態における監視システム３００は、端末装置１００と、これらを監視する監視装置２００とを備えている。端末装置１００と監視装置２００とは、イントラネット、インターネットといったネットワーク８０を介して接続されている。
【００２４】
また、図１に示すように、端末装置１００は、その内部において、改ざん検出装置２０を備えている。改ざん検出装置２０は、ソフトウェアプログラムを実行する際の端末１００での改ざんを検出し、検出した改ざんを特定する改ざん情報を監視装置２００に送信する。なお、図１の例では、単一の端末装置１００のみが図示されているが、実際には、複数個の端末装置１００が監視装置２００に接続されていても良い。本実施の形態において、端末装置１００の数は特に限定されるものではない。
【００２５】
更に、図１に示すように、監視装置２００は、監視部７０と、格納部７１とを備えている。このうち、監視部７０は、端末装置１００から送信されてきた改ざん情報６１を用いて、端末装置１００を監視する。格納部７１は、送信されてきた改ざん情報６１を、監視情報６０として格納する。
【００２６】
また、本実施の形態では、改ざん検出装置２０は、更に、利用者管理情報４１、装置識別情報４２、およびアクセス管理情報４５も、監視装置２００に送信する。このため、格納部７１は、これらの情報も監視情報６０として格納する。更に、監視部７０は、端末装置１００の監視に、利用者管理情報４１、装置識別情報４２、およびアクセス管理情報４５も利用する。なお、利用者管理情報４１、装置識別情報４２、およびアクセス管理情報４５の内容については、後述する。
【００２７】
また、監視装置２００において、監視部７０は、予め設定された時間間隔をおいて、監視対象となる端末装置１００の監視を行うことができる。なお、不定期で監視が実行されていても良く、例えば、監視装置２００の管理者が、監視装置２００を起動させたタイミングで、監視部７０が監視を行っていても良い。
【００２８】
［端末装置の構成］
ここで、本実施の形態において監視対象となる端末装置の構成について説明する。図２は、本発明の実施の形態における改ざん検出装置の構成を示すブロック図である。図２に示すように、本実施の形態における改ざん検出装置２０は、端末装置１００に備えられている。具体的には、改ざん検出装置２０は、端末装置１００のＯＳ上で動作する改ざん検出プログラムによって構築される。なお、改ざん検出プログラムについては後述する。
【００２９】
また、図２に示すように、端末装置１００は、改ざん検出装置２０以外に、記憶装置１０と、ＣＰＵ（Central Processing Unit）１１とを備えている。このうち、記憶装置１０は、主記憶装置(メインメモリ)であり、端末装置１００が、ソフトウェアプログラムを実行する際に必要となる情報（図２において図示せず）を記憶している。更に、記憶装置１０は、端末装置１００で実行するソフトウェアプログラムでの改ざん検出、および当該ソフトウェアプログラムの不正利用の判定を行うために必要な情報として、記憶領域管理情報３０、環境情報４０、状態情報５０も記憶している。
【００３０】
また、ソフトウェアプログラムは、ＣＰＵ１１によって、ハードディスクドライブ等の二次記憶装置から読み出され、記憶装置１０に書き込まれてから、実行される。よって、端末装置１００が実行するソフトウェアプログラムが、その実行時に改ざんされているかどうかは、記憶装置１０の記憶領域において判断される。記憶装置１０は、改ざん検出の対象となる装置である。
【００３１】
図２に示すように、改ざん検出装置２０は、主に、改ざん検出部２５を備えている。改ざん検出部２５は、ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、端末装置１００の記憶装置１０のスタック領域に格納されているアドレスが、記憶装置１０の動的領域及び静的領域のいずれのアドレスであるかを判定する。そして、改ざん検出部２５は、判定結果に基づいて、記憶領域に格納されているデータに対する改ざんを検出する。
【００３２】
このように、本実施の形態では、ソフトウェアプログラムの実行時に利用される記憶領域を調べることによって、改ざんの検出が行われている。よって、本実施の形態によれば、監視対象となるソフトウェアプログラムに、チェッカコード、関数などを埋め込むといった加工を行う必要がなく、このような加工を行わなくても、ソフトウェアプログラムにおける改ざんが確実に検出される。
【００３３】
ここで、記憶装置１０に格納されている情報と、改ざん検出装置２０の構成および機能について図３〜図６を用いて更に具体的に説明する。
【００３４】
［記憶領域管理情報］
記憶領域管理情報３０は、記憶装置１０の記憶領域を管理するために設定された開始アドレス及び終了アドレスを含む情報である。また、記憶領域は、静的に確保されているメモリ領域（静的領域）、即ち、プログラム領域、共有ライブラリとして活用される領域、または共有メモリとして活用される領域を含み、開始アドレス及び終了アドレスは、これら静的領域に設定されている。具体的には、図２に示すように、記憶領域管理情報３０は、Static-area-pointer ３１と、共有ライブラリpointer３２とを含む。
【００３５】
ここで、図３および図４を用いて、記憶装置１０の記憶領域について具体的に説明する。図３は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの一例を示す図である。図４は、本実施の形態で用いられる端末装置の記憶装置におけるメモリマップの他の例を示す図である。
【００３６】
具体的には、図３は、端末装置１００が３２ビットマシンである場合のメモリマップを示し、図４は、端末装置１００が６４ビットマシンである場合のメモリマップを示している。オペレーティングシステムの違いによってメモリマップは変わるが、一般的な仕様においては、動的に確保されるメモリ領域（動的領域）は高位の位置にアロケーションされる。一方、上述したように、プログラム領域、共通して使用される領域は、ソフトウェアプログラムの実行前にアロケーションされ、且つ、終了まで位置が変わらない、静的領域として確保される。そして、図３および図４に示すように、記憶領域管理情報３０、即ち、Static-area-pointer３１と共有ライブラリpointer３２とは、メモリ領域における静的領域の開始アドレスと終了アドレスとを規定している。
【００３７】
［環境情報］
環境情報４０は、利用者を特定するために必要となる利用者管理情報４１、装置識別情報４２、使用する製品のライセンス契約に関する契約情報４３、製品情報４４、及びアクセス管理情報４５を含む。図５および図６を用いて、これらについて説明する。
【００３８】
図５は、本実施の形態において、環境情報として利用される、利用者管理情報、装置識別情報、契約情報、および製品情報の一例を示す図であり、これらの互いの関連性についても示している。図６は、本実施の形態において、環境情報として利用される、利用者管理情報およびアクセス管理情報の一例を示す図であり、両者の関連性についても示している。
【００３９】
[環境情報：利用者管理情報]
図５に示すように、利用者管理情報４１は、端末装置１００の使用が許可される利用者を管理するための情報であり、不正な利用者の排除に活用される。そして、利用者管理情報４１は、当該利用者が利用できる端末装置に関する情報として端末装置のコンピュータＩＤを登録しており、コンピュータＩＤによって、装置識別情報４２と対応付けられている。これにより、利用者は複数の装置を使用することができる。また、同様に、利用者管理情報４１は、当該利用者が使用できるソフトウェアプログラムに関する情報としてプロダクトＩＤも登録している。
【００４０】
[環境情報：装置識別情報]
図５に示すように、装置識別情報４２は、端末装置１００を一意に識別するための情報である。端末装置１００は、装置識別情報が含むコンピュータＩＤによって管理されている。また、装置識別情報４２は、コンピュータＩＤに加え、管理部門、使用者、コンピュータ資源情報、ハードウェア情報、契約情報（契約）なども含んでいる。装置識別情報４２は、コンピュータＩＤと契約ＩＤとによって、端末装置１００に使用できるソフトウェアプログラムを特定する契約情報４３に対応付けられている。
【００４１】
[環境情報：契約情報]
図５に示すように、契約情報４３は、インストールされている各ソフトウェアプログラムの、ライセンス契約に関する情報である。契約情報４３は、ライセンス契約により使用が認められている装置、すなわちソフトウェアプログラムをインストールできる装置のＩＤ（コンピュータＩＤ）によって、装置識別情報４２に対応付けられている。また、契約情報４３は、ライセンス契約されているソフトウェアプログラム（製品）のプロダクトＩＤおよびライセンスコードによって、後述する製品情報４４にも対応づけられている。
【００４２】
[環境情報：製品情報]
図５に示すように、製品情報４４は、ライセンス契約されているソフトウェアプログラム（製品）を特定する情報であり、ライセンス契約されている製品に関する情報、例えば、製品の世代情報（バージョン）、保守情報などを含む。製品情報４４は、プロダクトＩＤとライセンスコードとによって、契約情報４３に対応付けられている。
【００４３】
また、保守情報は、プログラムの不具合を改善する修正プログラムのＩＤ（パッチ情報ＩＤ）を含んでいる。よって、端末装置１００の管理者は、当該ソフトウェアプログラムについて、セキュリテイホールなどの問題が生じた場合は、保守情報に基づいて適切な修正プログラムを適用する。
【００４４】
[環境情報：アクセス管理情報]
図６に示すように、アクセス管理情報４５は、ソフトウェアプログラムにアクセス可能な利用者（利用者ＩＤ）と、ソフトウェアプログラムを実行可能な端末装置（コンピュータＩＤ）と、ソフトウェアプログラム（またはコンテンツ）が端末装置にインストールされた日時とを、互いに対応付けて管理するための情報である。
【００４５】
また、アクセス管理情報４５には、利用者ＩＤ、コンピュータＩＤに加え、端末装置１００にインストールされたソフトウェアプログラムの履歴情報が、インストール情報として含まれている。インストール情報は、契約ＩＤ、プロダクトＩＤ、タイムスタンプ、インストールコードによって構成されている。アクセス管理情報４５によれば、利用者が使用する端末装置１００と、その端末装置１００で使用するソフトウェアプログラムと、の利用環境が、アクセスの頻度またはアクセスの範囲として管理されることによる。そして、この結果、利用者が使用できるソフトウェアプログラムの世代管理も含めた適切なアクセス管理が可能となる。
【００４６】
［状態情報］
状態情報５０は、クライアント端末１００のソフトウェアプログラムが、その実行に割り当てられた記憶領域（スタックまたはヒープと呼ばれる）を参照して、分岐処理または復帰処理を実行した際の、改ざんの検出に用いられる情報である。具体的には、状態情報５０は、ＣＰＵの動作状態を示す状態信号５１と、メモリ関数の動作を制御する環境変数５２とを含む。
【００４７】
［改ざん検出装置の詳細構造］
続いて、改ざん検出装置２０の構成について、具体的に説明する。図２に示すように、改ざん検出装置２０は、改ざん検出部２５に加えて、利用者管理部２１と、端末装置管理部２２と、タスク管理部２３と、不正利用検出部２４と、利用アクセス暗号化部２６とを更に備えている。
【００４８】
利用者管理部２１は、端末装置１００の利用者が、自身を特定するために必要な管理情報として、利用者管理情報４１を登録すると、監視装置２００に、当該利用者管理情報を送出する。
【００４９】
端末装置管理部２２は、端末装置１００の利用者が、自身が使用する端末装置１００を特定するために必要な管理情報として、装置識別情報４２を登録すると、監視装置２００に、当該装置識別情報４２を送出する。
【００５０】
タスク管理部２３は、端末装置の稼働状況（稼動プロセス）を管理する。タスク管理部２３は、改ざん検出部２５が改ざんを検出すると、その時点において実行しているタスク（プロセス）を実行時間と共に記録する。タスク管理部２３が、記録を監視装置２００に送出すると、この記録は、監視装置２００における改ざんの分析において、処理中のタスクの確認と、改ざんしたタスクの表出とに利用される。
【００５１】
不正利用検出部２４は、利用者が端末装置１００を用いてソフトウェアプログラムを利用する場合に、利用者管理情報４１及び装置識別情報４２を、アクセス管理情報４５に照らし合わせて、そのことが許可されているかどうかを判定する。そして、不正利用検出部２４は、判定結果、許可されていない場合は、端末装置１００によるソフトウェアプログラムの利用を不正利用として検出する。また、不正利用検出部２４は、検出結果を監視装置２００に送出する。送出された検出結果は、監視装置２００の監視部７０によって参照される。
【００５２】
改ざん検出部２５は、上述したように、ソフトウェアプログラムに、その実行時に割り当てられた記憶領域のデータ（アドレス情報）に対して改ざんが行われている場合に、それを検出する。
【００５３】
本実施の形態では、改ざん検出部２５は、ソフトウェアプログラムが、分岐処理または復帰処理を実行すると、先ず、端末装置１００のＣＰＵ（プロセッサ）１１の動作を示す状態信号の出力と、環境変数の設定によって記憶装置１０の異常検出機能を起動させたときの出力とを取得する。環境変数の設定は、具体的には、環境変数（MALLOC_CHECK）に所定の値を設定することによって行われる。
【００５４】
そして、改ざん検出部２５は、状態信号の出力からスタック操作命令（メモリの動的領域確保malloc、解放free）が実行されていると判断できる場合、および異常検出機能の起動により診断メッセージが出力されている場合のいずれかに該当するかどうかを判定する。
【００５５】
続いて、改ざん検出部２５は、いずれかに該当すると判定する場合に、スタック領域またはヒープ領域に格納されているアドレスが、記憶装置１０の動的領域及び静的領域のいずれのアドレスであるかを判定する。そして、判定の結果、動的領域である場合は、改ざん検出部２５は、改ざんが行われていると判断し、このことを改ざんとして検出する。また、改ざん検出部２５は、検出結果を記憶し、更に、検出結果を特定する改ざん情報を、監視装置２００に送出する。
【００５６】
利用アクセス暗号化部２６は、端末装置１００で利用するソフトウェアプログラムおよびコンテンツがインストールされると、インストール時定数として取得したタイムスタンプを用いて、アクセス管理情報４５を生成する。利用アクセス暗号化部２６は、生成したアクセス管理情報４５を監視装置２００に送出する。
【００５７】
［装置動作］
次に、本発明の実施の形態における改ざん検出装置２０の動作について図７〜図９を用いて説明する。図７は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われていない場合を説明する図である。図８は、ソフトウェアプログラムによる分岐処理または復帰処理によって改ざんが行われている場合を説明する図である。図９は、本発明の実施の形態における改ざん検出装置の動作を示すフロー図である。
【００５８】
なお、以下の説明においては、適宜図１〜図６を参酌する。また、本実施の形態では、改ざん検出装置２０を動作させることによって、改ざん検出方法が実施される。よって、本実施の形態における改ざん検出方法の説明は、以下の改ざん検出装置２０の動作説明に代える。
【００５９】
まず、図７を用いて、改ざんが行われていない正常な状態のメモリマップを示す。図７に示すように、分岐処理または復帰処理では、スタック領域（またはヒープ領域）が使用される。改ざんがない正常な処理では、スタック領域に設定された分岐先アドレスは、分岐先のプログラムにおける正しいアドレスを保持している。
【００６０】
続いて、図８を用いて、改ざんが行われている状態のメモリマップを示す。図８に示すように、正常な分岐処理での流れと異なり、スタック領域に設定された分岐先アドレスが第三者により改ざんされているため、スタック領域に設定された分岐先アドレスは、不正なアドレス、即ち、動的領域にあるアドレスを保持している。
【００６１】
続いて、図９を用いて、改ざん検出装置２０の動作の流れを説明する。図９に示すように、まず、改ざん検出部２５は、端末装置１００のＣＰＵ（プロセッサ）１１の動作を示す状態信号の出力を取得し、ソフトウェアプログラムが分岐処理または復帰処理を実行しているかどうかを判定する（ステップＡ１）。具体的には、改ざん検出部２５は、記憶装置１０から状態情報５０を取得し、状態情報５０に基づいて判定を行う。
【００６２】
ステップＡ１の判定の結果、ソフトウェアプログラムが分岐処理または復帰処理を実行していない場合は、改ざん検出部２５は、待機状態となる。一方、ステップＡ１の判定の結果、ソフトウェアプログラムが分岐処理または復帰処理を実行している場合は、改ざん検出部２５は、ステップＡ２を実行する。
【００６３】
ステップＡ２では、改ざん検出部２５は、更に、状態信号の出力に基づき、スタック操作命令が実行されているかどうかを判定する。ステップＡ２の判定の結果、スタック操作命令が実行されている場合は、改ざん検出部２５は、ステップＡ５を実行する。
【００６４】
一方、ステップＡ２の判定の結果、スタック操作命令が実行されていない場合は、改ざん検出部２５は、環境変数（MALLOC_CHECK）に所定の値を設定し、記憶装置１０の異常検出機能を起動させる（ステップＡ３）。
【００６５】
ステップＡ３が実行されると、更に、改ざん検出部２５は、記憶装置１０から診断メッセージが出力されているかどうかを判定する（ステップＡ４）。ステップＡ４の結果、診断メッセージが出力されていない場合は、改ざん検出部２５は、改ざんが行われていないと判断し、処理を終了する。一方、ステップＡ４の結果、診断メッセージが出力されている場合は、改ざん検出部２５は、ステップＡ５を実行する。
【００６６】
このように、ステップＡ１〜Ａ４では、（ａ）ＣＰＵの動作状態を示す状態信号に異常はないかどうか、（ｂ）環境変数（MALLOC＿CHECK）の設定後に、診断メッセージが出力されていないかどうか、が確認される。そして、（ａ）による異常、または（ｂ）による診断メッセージの出力がなされている場合に、ステップＡ５が実行される。
【００６７】
ステップＡ５では、改ざん検出部２５は、スタック領域またはヒープ領域に格納されているアドレスが、記憶装置１０の静的領域のアドレスであるかどうかを判定する。具体的には、改ざん検出部２５は、分岐処理または復帰処理で利用したスタック領域の値（アドレス）を読み込み、この値がプログラム領域または共有ライブラリ領域にあるかどうかを、Static-area-pointer３１の値と共有ライブラリpointer３２の値とに基づいて判定する。
【００６８】
ステップＡ５の判定の結果、アドレスが静的領域にない場合、即ち、動的領域にある場合は、改ざんが行われていると判断し、改ざんを特定する改ざん情報を、監視装置２００に対して送信する（ステップＡ６）。
【００６９】
一方、ステップＡ５の判定の結果、アドレスが静的領域にある場合は、改ざん検出部２５は、改ざんは行われていないと判定する。但し、この場合、改ざん検出部２５は、プログラムに不具合が発生している、または実行時における設定値に不正があった、と判断し、ソフトウェアプログラムの不具合を監視装置２００に通知する（ステップＡ７）。
【００７０】
ステップＡ６またはステップＡ７が実行されると、改ざん検出部２５は、再度ステップＡ１を実行し、再び改ざんの検出処理を実行する。なお、図９には、利用者管理部２１、端末装置管理部２２、タスク管理部２３、不正利用検出部２４、および利用アクセス暗号化部２６それぞれによる処理ステップは、図示されていないが、これらによる処理ステップも適宜実行される。
【００７１】
［本実施の形態における効果］
以上のように、本実施の形態によれば、ソフトウェアプログラムの利用にあたり、事前に、ソフトウェアプログラムに、チェッカコード、検出用のマクロ、またか関数を埋め込むこともなく、改ざんされたかどうかを判定できる。また、改ざんが行われた場合は、迅速に適切な対応処置を実行することが可能となる。
【００７２】
本実施の形態におけるプログラムは、コンピュータに、図９に示すステップＡ１〜〜Ａ７を実行させるプログラムであれば良く、更に、コンピュータは、端末装置１００自体であっても良い。この場合、改ざん検出装置２０は、本実施の形態におけるプログラムによって、端末装置１００のオペレーティングシステム上に構築される。そして、端末装置１００のＣＰＵ１１が、利用者管理部２１、装置管理部２２、タスク管理部２３、不正利用検出部２４、改ざん検出部２５、利用アクセス暗号化部２６として機能し、処理を実行する。
【００７３】
ここで、実施の形態における端末装置１００の具体例について図１０を用いて説明する。図１０は、本発明の実施の形態で利用される端末装置の具体例を示すブロック図である。
【００７４】
図１０に示すように、端末装置（コンピュータ）１００は、記憶装置１０およびＣＰＵ１１に加えて、二次記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００７５】
ＣＰＵ１１は、二次記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【００７６】
また、二次記憶装置１１３の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００７７】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash）及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【００７８】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記１９）によって表現することができるが、以下の記載に限定されるものではない。
【００７９】
（付記１）
ソフトウェアプログラムを実行する端末装置における改ざんを検出する改ざん検出装置であって、
前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、改ざん検出部を備えている、
ことを特徴とする改ざん検出装置。
【００８０】
（付記２）
前記改ざん検出部が、
前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、
判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、
付記１に記載の改ざん検出装置。
【００８１】
（付記３）
前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、不正利用検出部を、更に備えている、付記１または２に記載の改ざん検出装置。
【００８２】
（付記４）
前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、
前記不正利用検出部が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、
付記３に記載の改ざん検出装置。
【００８３】
（付記５）
前記不正利用検出部が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、付記３または４に記載の改ざん検出装置。
【００８４】
（付記６）
改ざん検出装置を有する端末装置と、監視装置とを備え、
前記改ざん検出装置は、
前記端末装置で実行されるソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出し、
更に、検出した前記改ざんを特定する改ざん情報を前記監視装置に送信し、
前記監視装置は、前記改ざん検出装置から送信されてきた前記改ざん情報を用いて、前記端末装置を監視する、
ことを特徴とする監視システム。
【００８５】
（付記７）
前記改ざん検出装置が、
前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、
判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、
付記６に記載の改ざん監視システム。
【００８６】
（付記８）
前記改ざん検出装置が、
前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、
付記６または７に記載の監視システム。
【００８７】
（付記９）
前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶しており、
前記改ざん検出装置が、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、
付記８に記載の監視システム。
【００８８】
（付記１０）
前記端末装置が、使用が許可される利用者を管理するための利用者管理情報と、端末装置を一意に識別するための装置識別情報とを記憶しており、
前記改ざん検出装置が、前記利用者管理情報、及び前記装置識別情報を、前記監視装置に送信し、
前記監視装置が、前記改ざん検出装置から送信されてきた、前記利用者管理情報、及び前記装置識別情報を更に用いて、前記端末装置を監視する、付記６〜９のいずれかに記載の監視システム。
【００８９】
（付記１１）
前記改ざん検出装置が、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、付記８または９に記載の監視システム。
【００９０】
（付記１２）
ソフトウェアプログラムを実行する端末装置における改ざんを検出するための方法であって、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記端末装置のメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを有している、
ことを特徴とする改ざん検出方法。
【００９１】
（付記１３）
前記（ａ）のステップにおいて、
前記分岐処理または前記復帰処理が行われた場合に、前記端末装置のプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、
判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、
付記１２に記載の改ざん検出方法。
【００９２】
（付記１４）
（ｂ）前記ソフトウェアプログラムを利用することが、前記端末装置に対して許可されているかどうかを判定し、許可されていない場合に、前記端末装置による前記ソフトウェアプログラムの利用を不正利用として検出する、ステップを、更に有している、付記１２または１３に記載の改ざん検出方法。
【００９３】
（付記１５）
前記端末装置が、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能な端末装置と、前記ソフトウェアプログラムが前記端末装置にインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶している場合に、
前記（ｂ）のステップにおいて、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、
付記１４に記載の改ざん検出方法。
【００９４】
（付記１６）
（ｃ）前記（ｂ）のステップで、前記不正利用を検出した場合に、前記端末装置に対して、不正利用の検出を通知する、ステップを更に有している、
付記１４または１５に記載の改ざん検出方法。
【００９５】
（付記１７）
コンピュータがソフトウェアプログラムを実行している場合における改ざんの検出を、前記コンピュータによって行うためのプログラムであって、
前記コンピュータに、
（ａ）前記ソフトウェアプログラムが、分岐処理または復帰処理を行った場合に、前記コンピュータのメモリのスタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定し、判定結果に基づいて、前記記憶領域に格納されているデータに対する改ざんを検出する、ステップを実行させる、プログラム。
【００９６】
（付記１８）
前記（ａ）のステップにおいて、
前記分岐処理または前記復帰処理が行われた場合に、前記コンピュータのプロセッサの動作を示す前記状態信号の出力と、環境変数の設定による前記メモリの異常検出機能を起動させたときの出力とが、設定条件を満たすかどうかを判定し、
判定の結果、設定条件を満たす場合に、前記スタック領域に格納されているアドレスが、前記メモリの動的領域及び静的領域のいずれのアドレスであるかを判定する、
付記１７に記載の改ざんプログラム。
【００９７】
（付記１９）
（ｂ）前記ソフトウェアプログラムを利用することが、前記コンピュータに対して許可されているかどうかを判定し、許可されていない場合に、前記コンピュータによる前記ソフトウェアプログラムの利用を不正利用として検出する、ステップを、更に前記コンピュータに実行させる、付記１７または１８に記載の改ざんプログラム。
【００９８】
（付記２０）
前記コンピュータが、前記ソフトウェアプログラムにアクセス可能な利用者と、前記ソフトウェアプログラムを実行可能なコンピュータと、前記ソフトウェアプログラムが前記コンピュータにインストールされた日時とを、互いに対応付けて管理するためのアクセス管理情報を記憶している場合に、
前記（ｂ）のステップにおいて、前記アクセス管理情報に基づいて、許可されているかどうかを判定する、
付記１９に記載のプログラム。
【産業上の利用可能性】
【００９９】
以上のように、本発明によれば、監視対象となるソフトウェアプログラムを加工することなく、当該ソフトウェアプログラムにおける改ざんを確実に検出することができる。本発明は、端末装置のセキュリティの確保が必要なコンピュータネットワークに有用である。
【符号の説明】
【０１００】
１０  記憶装置
１１  ＣＰＵ
２０  改ざん検出装置
２１  利用者管理部
２２  端末装置管理部
２３  タスク管理部
２４  不正利用検出部
２５  改ざん検出部
２６  利用アクセス暗号化部
３０  記憶領域管理情報
３１  Static-area-pointer
３２  共有ライブラリpointer
４０  環境情報
４１  利用者管理情報
４２  装置識別情報
４３  契約情報
４４  製品情報
４５  アクセス管理情報
５０  状態情報
５１  状態信号
５２  環境変数
６０  監視情報
６１  改ざん情報
７０  監視部
７１  格納部
８０  ネットワーク
１００  端末装置
１１３  二次記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
２００  監視装置
３００  監視システム
【図１】
2012185547.tif 000003
【図２】
2012185547.tif 000004
【図３】
2012185547.tif 000005
【図４】
2012185547.tif 000006
【図５】
2012185547.tif 000007
【図６】
2012185547.tif 000008
【図７】
2012185547.tif 000009
【図８】
2012185547.tif 000010
【図９】
2012185547.tif 000011
【図１０】
2012185547.tif 000012