(57)【要約】【課題】実際に実行中のプログラムコードの改ざんを監視すること。改ざんの監視を行うための負荷を分散させること。【解決手段】監視対象であるプログラムコードに１つ以上のチェッカコード４１を挿入したソフトウェアコードを作成し、監視装置１を接続したＰＣ（パーソナルコンピュータ）等がそのソフトウェアコードを実行している最中に、監視装置１によりチェッカコード４１を活性化させる。ソフトウェアコードを実行中のＰＣ等が、活性化されたチェッカコード４１により指定された処理を実行すると（ステップＳ５）、監視装置１は、そのチェッカコード４１により指定された処理が実行されたことを確認し、プログラムコードの一部または全部について改ざんの有無を検出する。【選択図】図５
2008084275.tif 000002
【特許請求の範囲】
【請求項１】
他の装置に接続されて、該他の装置により実行されているソフトウェアコードを監視するソフトウェアの改ざん監視装置であって、
主プログラムコードと、
前記主プログラムコードに挿入されるチェッカコードに関するチェッカ挿入情報と、
前記チェッカ挿入情報に基づいて前記主プログラムコードに１つ以上の前記チェッカコードが挿入されたソフトウェアコードを前記他の装置のメインメモリに展開し、同他の装置が実行中の前記ソフトウェアコードを監視する監視装置と、
を備え、
前記ソフトウェアコードは、少なくとも、
前記他の装置のメモリ領域に格納されている起動判定データに基づいて、前記チェッカコードにより指定された処理を実行して前記主プログラムコードの実行に戻る第１の実行パスと、
前記チェッカコードにより指定された処理を実行しないで前記主プログラムコードの実行に戻る第２の実行パスと、
を含み、
前記監視装置は、
前記起動判定データを書き換える起動管理手段と、
前記他の装置が前記第１の実行パスを実行したことを確認する実行確認手段と、
を備えることを特徴とするソフトウェアの改ざん監視装置。
【請求項２】
他の装置に接続されて、該他の装置により実行されているソフトウェアコードを監視するソフトウェアの改ざん監視装置であって、
主プログラムコードに１つ以上のチェッカコードが挿入されたソフトウェアコードと、
前記ソフトウェアコードを前記他の装置のメインメモリに展開し、同他の装置が実行中の前記ソフトウェアコードを監視する監視装置と、
を備え、
前記ソフトウェアコードは、少なくとも、
前記他の装置のメモリ領域に格納されている起動判定データに基づいて、前記チェッカコードにより指定された処理を実行して前記主プログラムコードの実行に戻る第１の実行パスと、
前記チェッカコードにより指定された処理を実行しないで前記主プログラムコードの実行に戻る第２の実行パスと、
を含み、
前記監視装置は、
前記起動判定データを書き換える起動管理手段と、
前記他の装置が前記第１の実行パスを実行したことを確認する実行確認手段と、
を備えることを特徴とするソフトウェアの改ざん監視装置。
【請求項３】
前記ソフトウェアコードは、前記起動判定データに基づいて、前記ソフトウェアコードの改ざんを検出するための処理を実行して前記主プログラムコードの実行に戻る第３の実行パス、をさらに含み、
前記監視装置は、前記他の装置が前記第３の実行パスを実行したときに、前記ソフトウェアコードの一部または全部について改ざんの有無を検出する改ざん検出手段、をさらに備えることを特徴とする請求項１または２に記載のソフトウェアの改ざん監視装置。
【請求項４】
前記起動管理手段は、チェッカコードの実行状況に応じて、当該チェッカコードを実行させるための前記起動判定データの書き換え頻度を調節することを特徴とする請求項１〜３のいずれか一つに記載のソフトウェアの改ざん監視装置。
【請求項５】
実行中のソフトウェアコードを監視するソフトウェアの改ざん監視方法において、
主プログラムコードに１つ以上のチェッカコードを挿入する工程と、
前記チェッカコードが挿入されたソフトウェアコードの実行中に、前記チェッカコードを活性化させる工程と、
活性化された前記チェッカコードにより指定された処理を実行する工程と、
前記チェッカコードにより指定された処理が実行されたことを確認し、前記ソフトウェアコードの一部または全部について改ざんの有無を検出する工程と、
を含むことを特徴とするソフトウェアの改ざん監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアの改ざん監視装置および改ざん監視方法に関し、例えばＰＣ（パーソナルコンピュータ）等の仕様が公開された計算機システムにおいて実行されるソフトウェアの改ざんを監視する技術に関する。
【背景技術】
【０００２】
従来、ＰＣ上のプログラムコードにより実現した監視プログラムや、ＰＣの汎用バス等に設置した監視装置からＰＣのメインメモリを監視することにより、ソフトウェアの改ざんを検出する装置が公知である。このような装置では、改ざんを防止する対象であるソフトウェアがＰＣで実行されているときにメインメモリに動的に生成されるデータ領域を外部から監視するのは困難であるため、静的なプログラムコードと静的なデータを監視している。
【０００３】
例えば、次のようなソフトウェアの改ざん検出装置が公知である。少なくともプログラムコードを含む当該プログラムコードに係る処理を実行する前に確定した情報が記憶され当該情報の改ざんが定期的に検査される静的記憶領域と、プログラムコードに係る処理の実行に伴って変更され得る情報が記憶される動的記憶領域とを有する記憶手段と、上記記憶手段における静的記憶領域の範囲を示すアドレス情報を記憶する領域情報記憶手段と、上記動的記憶領域に記憶されたアドレス情報を参照して、上記静的記憶領域に記憶された情報に基づく処理を実行する場合に、上記動的記憶領域から参照したアドレス情報が上記領域情報記憶手段に記憶されたアドレス情報で示される静的記憶領域の範囲内を指定するものであるか否かを判定し、上記動的記憶領域に記憶された情報の改ざんを検出する検出手段とを備えることを特徴とする（例えば、特許文献１参照。）。
【０００４】
【特許文献１】特開２００６−１０６９５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述したように静的なプログラムコードと静的なデータを監視しているだけでは、その監視しているプログラムコードやデータが実際にＰＣで実行されているコードやデータであることを識別するのは困難である。そのため、ソフトウェアの改ざん技術がますます高度化した場合に、監視プログラムや監視装置に、改ざんされていないプログラムコードを監視させながら、実際にＰＣで実行されるプログラムコードを改ざんして別のコード領域で実行するというようなことが考えられる。この場合には、監視プログラムや監視装置に気づかれないように、ソフトウェアの改ざんを行うことが可能となってしまう。
【０００６】
また、上記特許文献１に開示された装置では、ソースコード上で分岐や復帰の場所にマクロなどで不正コード検出機構を挿入して改ざんの有無を検出する。しかし、ソースコードに分岐や復帰の箇所が多い場合、すべての分岐や復帰の箇所で改ざんの有無を検出すると、その分、主となるプログラムの実行に要する時間が増えてしまい、ソフトウェアの処理性能の低下を招くという問題点がある。
【０００７】
この発明は、上述した従来技術による問題点を解消するため、実際に実行中のプログラムコードの改ざんを監視することができるソフトウェアの改ざん監視装置および改ざん監視方法を提供することを目的とする。また、この発明は、実行中のプログラムコードの改ざんを監視する際に、改ざんの監視を行うための負荷を分散させることができるソフトウェアの改ざん監視装置および改ざん監視方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明にかかるソフトウェアの改ざん監視装置および改ざん監視方法は、ＰＣ等の他の装置に監視装置を接続する。また、監視対象であるプログラムコードに１つ以上のチェッカコードを挿入したソフトウェアコードを作成し、ＰＣ等がそのソフトウェアコードを実行している最中に、監視装置によりチェッカコードを活性化させる。ソフトウェアコードを実行中のＰＣ等が、活性化されたチェッカコードにより指定された処理を実行すると、監視装置は、そのチェッカコードにより指定された処理が実行されたことを確認し、プログラムコードの一部または全部について改ざんの有無を検出する。監視装置がチェッカコードを活性化させる際、チェッカコードの実行状況に応じて活性化の頻度を調節するようにしてもよい。
【０００９】
この発明によれば、監視対象であるプログラムコードに挿入されたチェッカコードをＰＣ等が実行したことを確認することによって、ＰＣ等で実際に実行中のプログラムコードを監視することができる。また、実行頻度の高いチェッカコードについては、その活性化の頻度を下げることによって、実行中のプログラムコードを監視するための負荷を分散させることができる。
【発明の効果】
【００１０】
本発明にかかるソフトウェアの改ざん監視装置および改ざん監視方法によれば、ＰＣ等で実際に実行中のプログラムコードの改ざんを監視することができるという効果を奏する。また、この発明によれば、ＰＣ等で実行中のプログラムコードの改ざんを監視する際に、改ざんの監視を行うための負荷を分散させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１１】
以下に添付図面を参照して、この発明にかかるソフトウェアの改ざん監視装置および改ざん監視方法の好適な実施の形態を詳細に説明する。
【００１２】
（ソフトウェア改ざん監視装置のハードウェア構成）
まず、この発明の実施の形態にかかるソフトウェア改ざん監視装置のハードウェア構成について説明する。図１は、この発明の実施の形態にかかるソフトウェア改ざん監視装置のハードウェア構成を示すブロック図である。
【００１３】
ソフトウェア改ざん監視装置は、図１に示す監視装置１と、図示しないソフトウェアコードから構成される。監視装置１は、監視装置１以外の図示しない他の装置、例えばＰＣ等に接続される。ＰＣ等は、この監視装置１とともに提供されるソフトウェアコードを実行する。例えば、監視装置１は、ＰＣ等のＰＣＩバス等の汎用バスに接続されて用いられる。そして、監視装置１は、ＰＣ等が実行中のプログラムコードを監視する。ソフトウェアコードは、この監視装置１が監視する対象であるプログラムコードに１つ以上のチェッカコードが挿入されたものである。
【００１４】
図１に示すように、監視装置１は、ＣＰＵ１１、ＤＭＡＣ（ダイレクト・メモリ・アクセス・コントローラ）１２、Ｉ／Ｏ（入出力インタフェース）１３、ＲＯＭ１４およびＲＡＭ１５を備えている。これらの各構成部は、バス１０によって互いに接続されている。ＣＰＵ１１は、監視装置１の全体の制御を司る。ＤＭＡＣ１２は、監視装置１と、ＰＣ等の後述する起動判定データの格納メモリとの間で、ＰＣ等のＣＰＵを介さずに行うデータ転送を制御する。なお、監視装置１がバスマスタ方式でない場合には、監視装置１にＤＭＡＣ１２がないので、監視装置１とＰＣ等の間のデータ転送は、ＰＣ等のＤＭＡＣにより制御される。
【００１５】
ＲＯＭ１４は、ＣＰＵ１１が監視装置１を制御する際に実行するプログラムを記憶している。ＲＡＭ１５は、ＣＰＵ１１のワークエリアとして使用される。また、ＲＡＭ１５は、後述するチェッカ位置／頻度データベースを記憶する。Ｉ／Ｏ１３は、ＰＣ等の例えばＰＣＩバスに接続され、ＰＣ等と監視装置１の内部とのインタフェースを司り、ＰＣ等との間のデータの入出力を制御する。
【００１６】
なお、図１には、ＰＣ等で実行中のソフトウェアコードを監視するのに必要な構成のみが示されており、その他の構成は省略されている。例えば、監視装置１およびその監視対象であるプログラムコードがデジタル・テレビジョン放送の受信システムである場合、監視装置１には、図１に示す構成以外に、エンコーダ機能やチューナ機能などを実現する回路などが設けられる。
【００１７】
（ソフトウェア改ざん監視装置の機能的構成）
次に、この発明の実施の形態にかかるソフトウェア改ざん監視装置の機能的構成について説明する。図２は、この発明の実施の形態にかかるソフトウェア改ざん監視装置の機能的構成を示すブロック図である。図２に示すように、監視装置１は、入出力部２１、復号処理部２２、変換処理部２３、起動管理部２４、ＤＭＡ部２５、実行確認部２６、頻度管理部２７および改ざん検出部２８を備えている。
【００１８】
入出力部２１は、ＰＣ等から暗号化されたソフトウェアコードを受け取り、それを復号処理部２２に渡す。復号処理部２２は、入出力部２１から渡されたソフトウェアコードを復号化し、それを変換処理部２３に渡す。変換処理部２３は、復号処理部２２から渡されたソフトウェアコードを、ＰＣ等の実行可能な形式に変換する。実行形式に変換されたソフトウェアコードは、入出力部２１を介してＰＣ等へ転送され、ＰＣ等のメインメモリに展開される。つまり、ＰＣ等で実行されるソフトウェアコードは、暗号化されてＰＣ等のハードディスクなどにインストールされており、起動時に監視装置１において復号化され、ＰＣ等のメインメモリに展開されて初めて実行可能な状態になる。
【００１９】
また、変換処理部２３は、ソフトウェアコードの展開時に、チェッカコードの挿入位置を抽出し、チェッカ位置／頻度データベース２９を作成する。このときのチェッカ位置／頻度データベース２９には、各チェッカコードの挿入位置情報と、各チェッカコードを活性化させる頻度の初期値（設計値）が格納される。なお、チェッカ位置／頻度データベース２９として、予め、ソフトウェアコードの設計段階において、各チェッカコードの挿入位置と活性化頻度の初期値を格納したデータベースを用意しておいてもよい。このチェッカ位置／頻度データベース２９は、上述したようにＲＡＭ１５に記憶されるが、このＲＡＭ１５の記憶容量が少ない場合には、チェッカ位置／頻度データベース２９を暗号化してＰＣ等のハードディスクなどに記憶させてもよい。
【００２０】
起動管理部２４は、チェッカ位置／頻度データベース２９の情報に基づいて、起動判定データの書き換え要求を出力する。起動判定データは、ＰＣ等の所定のメモリ領域に格納されている。ＤＭＡ部２５は、起動管理部２４から書き換え要求を受け取ると、入出力部２１を介して、ＰＣ等の所定のメモリ領域に直接アクセスし、起動判定データの書き換えを行う。監視装置１により起動判定データが書き換えられると、その書き換えられた起動判定データに対応するチェッカコードが活性化されたことになる。起動判定データとしては、例えばフラグが用いられる。チェッカコードは、そのチェッカコードに対応するフラグが立っていれば活性化状態にあり、フラグが寝ていれば非活性化状態にある。
【００２１】
実行確認部２６は、入出力部２１を介して、活性化されたチェッカコードがＰＣ等で実行されたことを確認する。頻度管理部２７は、各チェッカコードの活性化頻度を管理する。改ざん検出部２８は、ＰＣ等でチェッカコードが実行されたときに、その実行結果に基づいてプログラムコードの一部または全部について改ざんの有無を検出する。
【００２２】
上述した復号処理部２２、変換処理部２３、起動管理部２４、実行確認部２６、頻度管理部２７および改ざん検出部２８は、具体的には、例えば、図１に示したＲＯＭ１４やＲＡＭ１５に記録されたプログラムを、ＣＰＵ１１が実行することによって、その機能を実現する。また、入出力部２１およびＤＭＡ部２５は、それぞれ、Ｉ／Ｏ１３およびＤＭＡＣ１２により、その機能を実現する。
【００２３】
（製品開発時からアプリケーション実行時までの流れの概略の第１の例）
次に、この発明の実施の形態にかかるソフトウェア改ざん監視装置の製品開発時からアプリケーション実行時までの流れの概略について説明する。図３は、この発明の実施の形態にかかるソフトウェア改ざん監視装置の製品開発時からアプリケーション実行時までの流れの概略の第１の例を示す説明図である。
【００２４】
図３に示すように、まず、製品開発時に、開発者が、主プログラムコード３１にチェッカ挿入情報としてチェッカ挿入位置・頻度指示情報３２を埋め込む処理を行い、暗号化して、暗号化ソフトウェアコード３３を作成する。ここで、主プログラムコード３１は、監視装置１により監視する対象のプログラムコードである。チェッカ挿入位置・頻度指示情報３２は、主プログラムコード３１に挿入される各チェッカコードの挿入位置と、各チェッカコードを活性化させる頻度を指示する情報である。
【００２５】
チェッカ挿入位置・頻度指示情報３２の埋め込み処理によって、主プログラムコード３１の、チェッカ挿入位置・頻度指示情報３２により指定された位置に、指定された頻度で活性化されるチェッカコードが挿入される。ソフトウェア改ざん監視装置のユーザには、この暗号化ソフトウェアコード３３と監視装置１がセットにされて提供される。
【００２６】
次いで、ユーザが、主プログラムコード３１を実行するＰＣ等に監視装置１を接続し、暗号化ソフトウェアコード３３をＰＣ等のハードディスク等の記憶装置３４にインストールする。ユーザがＰＣ等を操作してアプリケーションを起動すると、監視装置１は、ＰＣ等の記憶装置３４から暗号化ソフトウェアコード３３を読み出して復号化する。そして、監視装置１は、復号化したソフトウェアコードを実行形式に変換し、ＰＣ等のメインメモリ３５に実行形式のソフトウェアコード３６を展開する。また、監視装置１は、実行形式のソフトウェアコード３６を展開する際に、埋め込まれたチェッカコードを抽出し、チェッカ位置／頻度データベース２９として、チェッカ位置／初期頻度リストを作成する。
【００２７】
ここで、初期頻度とは、各チェッカコードを活性化させる頻度の初期値（設計値）のことである。なお、図３では、便宜上、チェッカ位置／頻度データベース２９が監視装置１の外に置かれているが、実際には、チェッカ位置／頻度データベース２９は、監視装置１の内部に構築される。ただし、監視装置１の内部に十分な記憶容量がない場合には、チェッカ位置／頻度データベース２９がＰＣ等のハードディスク等に格納される場合もある。
【００２８】
次いで、アプリケーションの実行時には、監視装置１は、チェッカ位置／頻度データベース２９の情報に基づいて、ＰＣ等に対して、ＰＣ等で実行中のソフトウェアコード３６に埋め込まれているチェッカコードの起動指示を与え、そのチェッカコードを活性化する。ＰＣ等が、活性化されたチェッカコードを実行し、そのチェッカコードにより指定された処理を実行すると、監視装置１にチェック結果が通知される。従って、監視装置１は、ＰＣ等で実際に実行中のプログラムコードを監視し、そのプログラムコードの改ざんを検出することができる。また、監視装置１は、チェック結果に基づいて、チェッカ位置／頻度データベース２９の頻度に関する情報を更新する。
【００２９】
ここで、監視装置１へチェック結果を通知する手段としては、ＰＣ等がデバイスドライバ等を通じて監視装置１に実行通知を渡す構成としてもよい。あるいは、チェッカコードの実行によってＰＣ等の特定のメモリ領域の値が書き換わり、そのメモリ領域の値を監視装置１がポーリングにより定期的に監視することによって、監視装置１がチェッカコードの実行を知るようにしてもよい。この場合、チェッカコードの実行により値が書き換わるメモリ領域として、例えば起動判定データとは異なるフラグを用いることができる。
【００３０】
（製品開発時からアプリケーション実行時までの流れの概略の第２の例）
図４は、この発明の実施の形態にかかるソフトウェア改ざん監視装置の製品開発時からアプリケーション実行時までの流れの概略の第２の例を示す説明図である。図４に示すように、この第２の例が、上述した第１の例と異なるのは、製品開発時に、主プログラムコード３１にチェッカ挿入位置・頻度指示情報３２を埋め込む処理を行わないことである。
【００３１】
つまり、製品開発時には、主プログラムコード３１とチェッカ挿入情報・頻度指示情報３７を別々に暗号化して、暗号化主プログラムコード３８と暗号化チェッカ挿入情報・頻度指示情報３９を作成する。チェッカ挿入情報・頻度指示情報３７は、第１の例のチェッカ挿入位置・頻度指示情報３２に相当する。第２の例では、暗号化主プログラムコード３８と暗号化チェッカ挿入情報・頻度指示情報３９と監視装置１がセットにされてソフトウェア改ざん監視装置のユーザに提供される。
【００３２】
従って、ユーザは、暗号化主プログラムコード３８と暗号化チェッカ挿入情報・頻度指示情報３９をＰＣ等の記憶装置３４にインストールすることになる。ユーザがアプリケーションを起動すると、監視装置１は、ＰＣ等の記憶装置３４から読み出した暗号化主プログラムコード３８と暗号化チェッカ挿入情報・頻度指示情報３９を復号化し、主プログラムコード３１にチェッカコードを埋め込み、それを実行形式に変換してＰＣ等のメインメモリ３５に展開する。これ以降は、上述した第１の例と同じである。
【００３３】
なお、アプリケーションの実行時にチェッカコードの挿入位置が毎回異なるように、監視対象のプログラムコードにチェッカコードを挿入するようにしてもよい。この場合には、監視対象のプログラムコードにおける絶対アドレス参照および相対アドレス参照を予め抽出したデータベースを作成しておく。そして、そのデータベースに基づいて命令コードレベルのリロケートを可能にしておき、任意のコード列の挿入によって生じるアドレス参照のズレを解決する手段を用いて、アプリケーションの起動時にプログラムコードの任意の場所にチェッカコードを挿入しながら、ＰＣ等のメインメモリに展開する。このようなことを可能とする具体的な技術については、詳細な説明を省略するが、本発明者が先に出願した特開２００５−８５１８８号公報に開示された技術を適用することにより実現できる。
【００３４】
（チェッカコードの構造）
次に、チェッカコードの構造について説明する。図５は、この発明の実施の形態にかかるソフトウェア改ざん監視装置のチェッカコードのプログラムコードを示す説明図である。図５に示すように、チェッカコード４１は、起動判定データ（起動判定フラグ）を調査する工程（ステップＳ１）と、その調査結果に基づいて起動判定処理を行う工程（ステップＳ２）と、起動判定処理の結果、フラグが寝ている場合（ステップＳ２：Ｎｏ）に何もしない、すなわちスルーして（ステップＳ３）、チェッカコード４１の実行を終了する工程（ステップＳ４）を有する。
【００３５】
また、チェッカコード４１は、起動判定処理の結果、フラグが立っている場合（ステップＳ２：Ｙｅｓ）にこのチェッカコード４１において指定された処理を行い（ステップＳ５）、その後チェッカコードの実行を終了する工程（ステップＳ４）を有する。ステップＳ５を経るパスが第１または第３の実行パスに相当し、ステップＳ３を経るパスが第２の実行パスに相当する。
【００３６】
ここで、ステップＳ５の処理を実行するためのプログラムは、（１）チェッカコード４１が実行されたことを監視装置１へ通知するための処理を行うプログラム、（２）監視対象のプログラムコードの一部または全部が改ざんされていないか否かを検出するための処理を行うプログラム、（３）チェッカコード自体が改ざんされていないか否かを検出するための処理を行うプログラム、などのいずれかである。上記（１）の場合が第１の実行パスに相当し、上記（２）の場合が第３の実行パスに相当する。上記（３）の場合は、さらに別の実行パスに相当する。このように、起動判定フラグに応じて実行される実行パスは、４つ以上あってもよい。ステップＳ２からステップＳ５を経てステップＳ４へ至る実行パスのどこかで、起動判定フラグが寝かされ、チェッカコードが不活性化される。
【００３７】
上記ステップＳ５では、活性化されたチェッカコードが１回の起動指示によって処理する量を分割し、チェックする項目を少しずつ実行して複数回の実行によりチェックを完了するようにしてもよい。この場合には、上記ステップＳ５の処理の実行によって、監視対象のプログラムコードの実行に悪影響が及ぶのを避けることができる。
【００３８】
また、上記ステップＳ５で（２）のプログラムを実行する場合、監視装置１のＤＭＡ部２５（ない場合には、ＰＣ等のＤＭＡ部）により、ＰＣ等のメインメモリ３５に展開されているプログラムコードを読み出し、そのプログラムコードと元のプログラムコードを比較するようにしてもよい。その際、プログラムコード自体を比較してもよいし、例えばプログラムコードのチェックサムやハッシュ値など、プログラムコードを要約したデータ同士を比較するようにしてもよい。
【００３９】
元のプログラムコードとしては、アプリケーション起動時に復号されたプログラムコードを監視装置１のＲＡＭ１５に記憶しておき、これを読み出して用いることができる。監視装置１のＲＡＭ１５の容量が十分でない場合には、アプリケーション起動時に復号されたプログラムコードを監視装置１において暗号化し、それを再びＰＣ等の記憶装置３４に記憶させておけばよい。上記ステップＳ５で（３）のプログラムを実行する場合も同様である。
【００４０】
（チェッカコードの活性化方式）
チェッカコードの数が少ない場合には、すべてのチェッカコードを常に活性化させてもよい。しかし、チェッカコードの数が多い場合には、すべてのチェッカコードを常に活性化させると、チェッカコードが次々に実行されることになり、それによる負荷が大きくなって、監視対象のプログラムコードの処理速度が低下してしまう。これを避けるため、監視装置１側でチェッカコードの活性化頻度を制御したり、活性化させるチェッカコードを動的に変化させる必要がある。
【００４１】
例えば、監視装置１側で、チェッカコードの起動指示後にそのチェッカコードの実行通知を受け取るまでの時間を測定するなどして、チェッカコードの実行頻度を観測する。そして、実行頻度が高いチェッカコードの起動間隔を長くし、実行頻度が低いチェッカコードの起動間隔を短くするような制御を動的に行って負荷を分散させる。このようにする場合、製品の開発中に十分な調査を行い、頻度の範囲を予め決定してデータベースを作成しておき、ある程度の指針に基づいて実行時の負荷を動的に変更しながらチェッカコードを活性化させることが可能となる。チェッカコードの活性化方式としては、（１）巡回方式、（２）頻度均一化方式、（３）頻度固定方式、のいずれかまたはそれらの組み合わせが考えられる。
【００４２】
上記（１）巡回方式について説明する。図６は、この発明の実施の形態にかかるソフトウェア改ざん監視装置においてチェッカコードを巡回方式で活性化させる場合の流れを示すフローチャートである。図６に示すように、まず、監視装置１は、１つのチェッカコードを活性化させる（ステップＳ１１）。そして、この活性化させたチェッカコードが実行されるのを待機する（ステップＳ１２：実行通知なし）。この間、別のチェッカコードは活性化されない。
【００４３】
ステップＳ１１で活性化させたチェッカコード４１が実行され、監視装置１に実行通知が渡されたら（ステップＳ１２：実行通知あり）、監視装置１は、活性化させる対象を、次のチェッカコードに切り替える（ステップＳ１３）。そして、新たなチェッカコードに対して同様の処理を行う。これを、すべてのチェッカコードに対して順次、行い、すべてのチェッカコードの活性化と実行を行う。
【００４４】
上記（２）頻度均一化方式について説明する。この方式では、チェッカコードの活性化頻度を制御するために、頻度制御用データベースが構築される。頻度制御用データベースは、例えば監視装置１のＲＡＭ１５に記憶される。図７は、頻度均一化方式を適用する場合に監視装置に構築される頻度制御用データベースの構成を示す説明図である。図７に示すように、頻度制御用データベース５１は、各チェッカコードに対応するレコード５２ａ，５２ｂ，５２ｎを有する。
【００４５】
各レコード５２ａ，５２ｂ，５２ｎは、チェッカコードに関する各種情報を格納するチェッカの各種情報フィールド５３、現在の状態が活性化状態であるか非活性化状態であるかを示す状態フィールド５４、第１のカウンタの規定回数を示すカウンタ１規定回数フィールド５５、第１のカウンタのカウンタ値を示すカウンタ１フィールド５６、第２のカウンタの規定回数を示すカウンタ２規定回数フィールド５７、および第２のカウンタのカウンタ値を示すカウンタ２フィールド５８を有する。第１のカウンタおよび第２のカウンタは、監視装置１の起動管理部２４や頻度管理部２７などに設けられている。
【００４６】
図８は、この発明の実施の形態にかかるソフトウェア改ざん監視装置においてチェッカコードを頻度均一化方式で活性化させる場合の流れを示すフローチャートである。まず、タイマーイベントや実行通知イベントが発生すると、その発生したイベントをキューに入れる。ここで、タイマーイベントは、各チェッカコードに対して定期的に発生する。また、実行通知イベントは、活性化したチェッカコードからの実行通知に対して発生する。
【００４７】
監視装置１は、イベントキューからイベントを取得し（ステップＳ２１）、イベントの種類を判定する（ステップＳ２２）。その結果、タイマーイベントである場合（ステップＳ２２：タイマーイベント）には、頻度制御用データベース５１の該当するチェッカコードの状態フィールド５４を参照し、チェッカコードの状態を判定する（ステップＳ２３）。その結果、非活性化状態である場合（ステップＳ２３：状態＝非活性化）には、該当するチェッカコードのカウンタ１規定回数フィールド５５を参照し、第１のカウンタの規定回数を調べる（ステップＳ２４）。
【００４８】
その結果、該当するチェッカコードのカウンタ１フィールド５６のカウンタ値が第１のカウンタの規定回数に達していない場合（ステップＳ２４：回数未到達）には、そのカウンタ１フィールド５６のカウンタ値をインクリメントして（ステップＳ２５）、終了する。一方、ステップＳ２４で第１のカウンタの規定回数を調べた結果、カウンタ１フィールド５６のカウンタ値が第１のカウンタの規定回数に達している場合（ステップＳ２４：回数到達）には、該当するチェッカコードのチェッカコードを活性化させ、そのチェッカコードの状態フィールド５４を活性化状態に切り替えて（ステップＳ２６）、終了する。
【００４９】
また、ステップＳ２３で該当するチェッカコードの状態を判定した結果、活性化状態である場合（ステップＳ２３：状態＝活性化）には、該当するチェッカコードのカウンタ２規定回数フィールド５７を参照し、第２のカウンタの規定回数を調べる（ステップＳ２７）。その結果、該当するチェッカコードのカウンタ２フィールド５８のカウンタ値が第２のカウンタの規定回数に達していない場合（ステップＳ２７：回数未到達）には、そのカウンタ２フィールド５８のカウンタ値をインクリメントして（ステップＳ２８）、終了する。一方、ステップＳ２７で第２のカウンタの規定回数を調べた結果、カウンタ２フィールド５８のカウンタ値が第２のカウンタの規定回数に達している場合（ステップＳ２７：回数到達）には、必要であればタイムオーバー処理を行い（ステップＳ２９）、終了する。
【００５０】
また、ステップＳ２２でイベントの種類を判定した結果、実行通知イベントである場合（ステップＳ２２：実行通知イベント）には、カウンタ２フィールド５８のカウンタ値に基づいてカウンタ１規定回数フィールド５５の規定回数を更新する（ステップＳ３０）。例えば、カウンタ２フィールド５８のカウンタ値が小さい場合には、カウンタ１規定回数フィールド５５の規定回数を大きくし、カウンタ２フィールド５８のカウンタ値が大きい場合には、カウンタ１規定回数フィールド５５の規定回数を小さくする。そして、カウンタ１フィールド５６とカウンタ２フィールド５８の各カウンタ値を初期化して（ステップＳ３１）、終了する。
【００５１】
このようにすれば、単位時間当たりの実行確認回数が多いチェッカコードについては、活性化の頻度を下げ、単位時間当たりの実行確認回数が少ないチェッカコードについては、活性化の頻度を上げるという動作を、プログラムコードの実行時に動的に調整することができる。なお、図８に示す例は、第１および第２のカウンタがアップカウンタである場合の例であるが、ダウンカウンタを用いる場合も同様である。また、カウンタを用いずに、実タイマー時間を記録し、現在時と比較して時間間隔を得るようにすることもできる。さらに、イベントキューを用いずに、イベント発生により直接、図８に示す制御へ移行するようにすることもできる。
【００５２】
上記（３）頻度固定方式について説明する。この方式は、上記（２）頻度均一化方式と同様の頻度制御用データベース５１を用意し、チェッカ位置／頻度データベース２９に基づいて、すべてのチェッカコード４１を、予め設定された時間単位で、順次、活性化する。チェッカコードを頻度固定方式で活性化させる場合の流れは、図８に示すフローチャートにおいてステップＳ３０を省略した流れとなる。
【００５３】
また、すべてのチェッカコードを１つずつ活性化させる代わりに、すべてのチェッカコードを複数のグループに分け、上述した（１）巡回方式、（２）頻度均一化方式、（３）頻度固定方式、のいずれかまたはそれらを組み合わせて、グループ単位でチェッカコードを活性化させるようにしてもよい。この場合、属するチェッカコードの数が１つであるグループがあってもよい。また、複数のチェッカコードを有するグループの場合、グループ内の各チェッカコードを、上述した（１）巡回方式、（２）頻度均一化方式、（３）頻度固定方式、のいずれかまたはそれらを組み合わせて、活性化させてもよい。また、グループごとに異なる方式で活性化させてもよい。このように複数のチェッカコードをグループ化することによって、チェッカコードの実行による負荷を分散させることができる。
【００５４】
（付記１）他の装置に接続されて、該他の装置により実行されているソフトウェアコードを監視するソフトウェアの改ざん監視装置であって、
主プログラムコードと、
前記主プログラムコードに挿入されるチェッカコードに関するチェッカ挿入情報と、
前記チェッカ挿入情報に基づいて前記主プログラムコードに１つ以上の前記チェッカコードが挿入されたソフトウェアコードを前記他の装置のメインメモリに展開し、同他の装置が実行中の前記ソフトウェアコードを監視する監視装置と、
を備え、
前記ソフトウェアコードは、少なくとも、
前記他の装置のメモリ領域に格納されている起動判定データに基づいて、前記チェッカコードにより指定された処理を実行して前記主プログラムコードの実行に戻る第１の実行パスと、
前記チェッカコードにより指定された処理を実行しないで前記主プログラムコードの実行に戻る第２の実行パスと、
を含み、
前記監視装置は、
前記起動判定データを書き換える起動管理手段と、前記他の装置が前記第１の実行パスを実行したことを確認する実行確認手段と、
を備えることを特徴とするソフトウェアの改ざん監視装置。
【００５５】
（付記２）前記監視装置は、前記チェッカ挿入情報に基づいて前記主プログラムコードに１つ以上の前記チェッカコードを挿入しながら、前記他の装置のメインメモリに同チェッカコードが挿入されたソフトウェアコードを展開するとともに、同チェッカコードの挿入位置の情報を記録し、該位置情報に基づいて、前記起動判定データを書き換えることを特徴とする付記１に記載のソフトウェアの改ざん監視装置。
【００５６】
（付記３）他の装置に接続されて、該他の装置により実行されているソフトウェアコードを監視するソフトウェアの改ざん監視装置であって、
主プログラムコードに１つ以上のチェッカコードが挿入されたソフトウェアコードと、
前記ソフトウェアコードを前記他の装置のメインメモリに展開し、同他の装置が実行中の記ソフトウェアコードを監視する監視装置と、
を備え、
前記ソフトウェアコードは、少なくとも、
前記他の装置のメモリ領域に格納されている起動判定データに基づいて、前記チェッカコードにより指定された処理を実行して前記主プログラムコードの実行に戻る第１の実行パスと、
前記チェッカコードにより指定された処理を実行しないで前記主プログラムコードの実行に戻る第２の実行パスと、
を含み、
前記監視装置は、
前記起動判定データを書き換える起動管理手段と、前記他の装置が前記第１の実行パスを実行したことを確認する実行確認手段と、
を備えることを特徴とするソフトウェアの改ざん監視装置。
【００５７】
（付記４）前記監視装置は、前記他の装置のメインメモリに前記ソフトウェアコードを展開する際に、同ソフトウェアコードに挿入されているチェッカコードを検出しながら、同チェッカコードの挿入位置の情報を記録し、該位置情報に基づいて、前記起動判定データを書き換えることを特徴とする付記３に記載のソフトウェアの改ざん監視装置。
【００５８】
（付記５）前記監視装置は、前記他の装置のメインメモリに前記ソフトウェアコードを展開する際に、同ソフトウェアコードに挿入されているチェッカコードの挿入位置の情報を取得し、該位置情報に基づいて、前記起動判定データを書き換えることを特徴とする付記３に記載のソフトウェアの改ざん監視装置。
【００５９】
（付記６）前記ソフトウェアコードは、前記起動判定データに基づいて、前記ソフトウェアコードの改ざんを検出するための処理を実行して前記主プログラムコードの実行に戻る第３の実行パス、をさらに含み、
前記監視装置は、前記他の装置が前記第３の実行パスを実行したときに、前記ソフトウェアコードの一部または全部について改ざんの有無を検出する改ざん検出手段、をさらに備えることを特徴とする付記１〜５のいずれか一つに記載のソフトウェアの改ざん監視装置。
【００６０】
（付記７）前記ソフトウェアコードは、前記他の装置が前記第３の実行パスを実行する際に、同第３の実行パスを実行させるために前記監視装置により書き換えられた前記起動判定データを元のデータに書き換えることを特徴とする付記６に記載のソフトウェアの改ざん監視装置。
【００６１】
（付記８）前記ソフトウェアコードは、前記他の装置が前記第１の実行パスを実行する際に、同第１の実行パスを実行させるために前記監視装置により書き換えられた前記起動判定データを元のデータに書き換えることを特徴とする付記１〜７のいずれか一つに記載のソフトウェアの改ざん監視装置。
【００６２】
（付記９）前記起動管理手段は、複数のチェッカコードを実行させるために、それぞれのチェッカコードに対応した前記起動判定データを順次、書き換えることを特徴とする付記１〜８のいずれか一つに記載のソフトウェアの改ざん監視装置。
【００６３】
（付記１０）前記起動管理手段は、複数のチェッカコードを実行させるために、それぞれのチェッカコードに対応した前記起動判定データを予め設定された間隔で書き換えることを特徴とする付記１〜８のいずれか一つに記載のソフトウェアの改ざん監視装置。
【００６４】
（付記１１）前記起動管理手段は、チェッカコードの実行状況に応じて、当該チェッカコードを実行させるための前記起動判定データの書き換え頻度を調節することを特徴とする付記１〜８のいずれか一つに記載のソフトウェアの改ざん監視装置。
【００６５】
（付記１２）実行中のソフトウェアコードを監視するソフトウェアの改ざん監視方法において、
主プログラムコードに１つ以上のチェッカコードを挿入する工程と、
前記チェッカコードが挿入されたソフトウェアコードの実行中に、前記チェッカコードを活性化させる工程と、
活性化された前記チェッカコードにより指定された処理を実行する工程と、
前記チェッカコードにより指定された処理が実行されたことを確認し、前記ソフトウェアコードの一部または全部について改ざんの有無を検出する工程と、
を含むことを特徴とするソフトウェアの改ざん監視方法。
【産業上の利用可能性】
【００６６】
以上のように、本発明にかかるソフトウェアの改ざん監視装置および改ざん監視方法は、監視対象のプログラムコードの改ざん防止に有用であり、特に、デジタル・テレビジョン放送の受信システムにおいて知的財産権を保護するための装置に適している。
【図面の簡単な説明】
【００６７】
【図１】この発明の実施の形態にかかるソフトウェア改ざん監視装置のハードウェア構成を示すブロック図である。
【図２】この発明の実施の形態にかかるソフトウェア改ざん監視装置の機能的構成を示すブロック図である。
【図３】この発明の実施の形態にかかるソフトウェア改ざん監視装置の製品開発時からアプリケーション実行時までの流れの概略の第１の例を示す説明図である。
【図４】この発明の実施の形態にかかるソフトウェア改ざん監視装置の製品開発時からアプリケーション実行時までの流れの概略の第２の例を示す説明図である。
【図５】この発明の実施の形態にかかるソフトウェア改ざん監視装置のチェッカコードのプログラムコードを示す説明図である。
【図６】この発明の実施の形態にかかるソフトウェア改ざん監視装置においてチェッカコードを巡回方式で活性化させる場合の流れを示すフローチャートである。
【図７】この発明の実施の形態にかかるソフトウェア改ざん監視装置においてチェッカコードを頻度均一化方式で活性化させる場合の頻度制御用データベースの構成を示す説明図である。
【図８】この発明の実施の形態にかかるソフトウェア改ざん監視装置においてチェッカコードを頻度均一化方式で活性化させる場合の流れを示すフローチャートである。
【符号の説明】
【００６８】
１  監視装置
２４  起動管理部
２６  実行確認部
２８  改ざん検出部
２９  チェッカ位置／頻度データベース
３１  主プログラムコード
３２  チェッカ挿入位置・頻度指示情報
３５  ＰＣ等のメインメモリ
３６  ソフトウェアコード
３７  チェッカ挿入情報・頻度指示情報
４１  チェッカコード
【図１】
2008084275.tif 000003
【図２】
2008084275.tif 000004
【図３】
2008084275.tif 000005
【図４】
2008084275.tif 000006
【図５】
2008084275.tif 000007
【図６】
2008084275.tif 000008
【図７】
2008084275.tif 000009
【図８】
2008084275.tif 000010