(57)【要約】【課題】悪意のある第三者による動的共有ライブラリの改ざんを防止するための機能を、汎用ＯＳ上で実現するコンピュータシステムを得る。【解決手段】ＫＥＹ生成プログラム３２により、動的共有ライブラリ１３のＣＲＣと秘密鍵３１２からハッシュ計算によりＫＥＹ３１１を算出し、動的共有ライブラリに埋め込んで動的共有ライブラリ３３とし、これを使用するアプリケーション３１は、ファイル本体の改ざん検出機能３０１により、秘密鍵３１２を用いて、動的共有ライブラリ３３の改ざんを検出するとともに、メモリ空間上イメージの改ざん検出機能３０２により、メモリ空間上にロードされた動的共有ライブラリ３３のイメージと、メモリ空間上の動的共有ライブラリ１３のイメージとを比較することにより、動的共有ライブラリ３３のイメージに対する改ざんを検出するようにした。【選択図】図３
2012185535.tif 000002
【特許請求の範囲】
【請求項１】
動的共有ライブラリを使用するアプリケーションが、汎用ＯＳ上で動作するコンピュータシステムであって、
上記アプリケーションと共通の秘密鍵を有し、上記動的共有ライブラリのＣＲＣと上記秘密鍵からハッシュ計算により算出したＫＥＹを上記動的共有ライブラリに埋め込むＫＥＹ生成手段を備え、
上記アプリケーションは、
上記秘密鍵を用いて、上記ＫＥＹが埋め込まれた上記動的共有ライブラリファイルの改ざんを検出する第１の検出手段と、
メモリ空間上にロードされた上記ＫＥＹが埋め込まれた上記動的共有ライブラリのイメージと、上記メモリ空間上の上記ＫＥＹが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、上記ＫＥＹが埋め込まれた上記動的共有ライブラリのイメージに対する改ざんを検出する第２の検出手段とを有することを特徴とするコンピュータシステム。
【請求項２】
上記アプリケーションにより使用される動的共有ライブラリが、上記ＫＥＹを埋め込めない場合に、この動的共有ライブラリのＣＲＣと上記秘密鍵からハッシュ計算により算出したＫＥＹを外部ファイルに格納する外部ＫＥＹファイル生成手段を備え、
上記アプリケーションは、
上記秘密鍵を用いて、上記ＫＥＹが格納された外部ファイルを参照して、上記ＫＥＹを埋め込めない場合の上記動的共有ライブラリファイルの改ざんを検出する第３の検出手段を有することを特徴とする請求項１記載のコンピュータシステム。
【請求項３】
上記アプリケーションの上記第２の検出手段は、
使用する動的共有ライブラリが、さらに別の動的共有ライブラリを使用する場合に、この別の動的共有ライブラリの上記メモリ空間上のイメージについても、上記改ざんを検出することを特徴とする請求項１または請求項２記載のコンピュータシステム。
【請求項４】
上記ＫＥＹ生成手段は、上記アプリケーションのＣＲＣと上記秘密鍵からハッシュ計算により算出したＫＥＹを上記アプリケーションに埋め込み、
上記アプリケーションの上記第１の検出手段は、上記秘密鍵を用いて、上記ＫＥＹが埋め込まれた自アプリケーションの改ざんを検出し、
上記アプリケーションの上記第２の検出手段は、メモリ空間上にロードされた上記ＫＥＹが埋め込まれた自アプリケーションのイメージと、上記メモリ空間上の上記ＫＥＹが埋め込まれる前の元の自アプリケーションのイメージとを比較することにより、上記ＫＥＹが埋め込まれた自アプリケーションのイメージに対する改ざんを検出することを特徴とする請求項１〜請求項３のいずれかに記載のコンピュータシステム。
【請求項５】
上記アプリケーションの上記第２の検出手段は、元の動的共有ライブラリのベースアドレスを基準として、改ざん検出対象の上記動的共有ライブラリを全てメモリ空間上に擬似ロードして、上記メモリ空間上の元の上記動的共有ライブラリのイメージと比較することにより、上記改ざんを検出することを特徴とする請求項１〜請求項４のいずれかに記載のコンピュータシステム。
【請求項６】
上記アプリケーションの上記第２の検出手段は、改ざん検出対象の上記動的共有ライブラリをメモリ空間上に逐次的に一部分ずつ確保し、この確保した部分と、上記メモリ空間上の上記ＫＥＹが埋め込まれる前の上記動的共有ライブラリのイメージとを比較することにより、上記改ざんを検出することを特徴とする請求項１〜請求項４のいずれかに記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動的共有ライブラリの改ざんチェックを行うようにした、通常の汎用ＯＳが動作するコンピュータシステムに関するものである。
【背景技術】
【０００２】
近年のコンピュータシステムでは、パーソナルコンピュータ（以下、ＰＣと呼ぶ）をはじめとして、様々なメーカーのハードウェア／ソフトウェアを組み合わせて構築されるオープンシステムが広く普及している。
オープンシステムでは、ハードウェアやその基本ソフトウェア（以下、ＯＳと呼ぶ）の情報が、ある程度開示されており、プログラマーがこれらの情報を元に、オープンシステム上で動作する様々なアプリケーションを製作している。ところが、求められているアプリケーションの機能が高度化している背景の中で、プログラマーがそれらの機能をすべて自身で実装するのは極めて負担が大きくなっている。
そこで、現代のＯＳでは、共有ライブラリと呼ばれる仕組みが用意されている。共有ライブラリとは、プログラムを構成するサブルーチン（プログラムにおいて、何らかの機能を有する一まとまりの命令群）を集めたものである。プログラマーは、アプリケーションの動作に必要な機能を全て自身で実装する代わりに、一部の機能を、事前に用意された共有ライブラリに依存することができる。共通ライブラリとアプリケーションは、それぞれ別々に開発し、後で自由に組み合わせて使用することができるため、プログラマーは、アプリケーションの開発を効率化することができる。
【０００３】
この共有ライブラリには、静的共有ライブラリと、動的共有ライブラリの二種類がある。
静的共有ライブラリは、アプリケーションの作成時に、アプリケーションにリンクされ、共有ライブラリは、アプリケーションの一部となって配布される。
一方、動的共有ライブラリは、アプリケーションとは別ファイルとして配布される。また、そのファイルの構造は、アプリケーションのファイルと同様の構造となっている。
動的共有ライブラリの場合、アプリケーションとのリンクは、ユーザがアプリケーションを実行する際、もしくは、アプリケーション内で、そのライブラリの機能が必要となった際に初めて行われる。
また、このリンク動作は、アプリケーションのファイルに対して行われるのではなく、アプリケーションのメモリ空間にロードされたイメージ上にて行われる。
そして、一旦、アプリケーションと動的共有ライブラリとの間でリンクが行われると、動的共有ライブラリは、静的共有ライブラリと同様に、アプリケーションから自由に呼び出して使用することができる。
【０００４】
このように、動的共有ライブラリを用いることの利点は、アプリケーション本体を変更することなく、動的共有ライブラリだけを変更することができることである。その結果、アプリケーション本体に変更を加えることなく、その機能の一部を変更したり、不具合を修正したりすることが可能である。
また、アプリケーションが自動的に、使用可能な動的共有ライブラリを検索し、ロードするようにすれば、後から動的共有ライブラリを別途提供することによって、アプリケーション本体に変更を加えることなく、機能追加が可能である。このような使用形態の動的共有ライブラリは、しばしばプラグインと呼ばれる。
【０００５】
しかし、このような動的共有ライブラリは、開発の効率性のみを追及したものであり、悪意のある第三者による改ざん等、セキュリティに対しては、一切考慮がなされていない。
例えば、動的共有ライブラリをロードする際に、すでにその動的共有ライブラリのファイル本体が、悪意のある第三者によって、改ざんされてしまっている恐れがある。
また、動的共有ライブラリをメモリ空間上にロードした後、実際にアプリケーションがそのライブラリの機能を使用するまでの間に、そのメモリ空間上のイメージが改ざんされてしまう恐れがある。
よって、これらの課題を解決するために、専用の耐タンパマイクロプロセッサなどを用いることによって、ハードウェア構成やＯＳを改良したコンピュータシステムが現在、提案されている。（特許文献１、２参照）
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−１４８７１号公報（第５〜９頁、第１図）
【特許文献２】特開２００４−３８３９４号公報（第７〜１７頁、第１図）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来のコンピュータシステムでは、動的共有ライブラリをメモリ空間上にロードする際に、すでにそのライブラリのファイルが、悪意のある第三者によって改ざんされてしまっている恐れがあった。
また、動的共有ライブラリをメモリ空間上にロードした後においても、実際にアプリケーションがそのライブラリを使用するまでの間に、そのメモリ空間上のイメージが改ざんされる恐れがあった。
特許文献１、２では、この課題の解決のために、ハードウェアの構成やＯＳ自身の改良が必要であり、一般的に普及している汎用ＰＣや汎用ＯＳを対象としていない。
【０００８】
この発明は、上述のような課題を解決するためになされたものであり、悪意のある第三者による動的共有ライブラリの改ざんを防止するための機能を、汎用ＯＳ上で実現するコンピュータシステムを得ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係わるコンピュータシステムにおいては、動的共有ライブラリを使用するアプリケーションが、汎用ＯＳ上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのＣＲＣと秘密鍵からハッシュ計算により算出したＫＥＹを動的共有ライブラリに埋め込むＫＥＹ生成手段を備え、アプリケーションは、秘密鍵を用いて、ＫＥＹが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第１の検出手段と、メモリ空間上にロードされたＫＥＹが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のＫＥＹが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、ＫＥＹが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第２の検出手段とを有するものである。
【発明の効果】
【００１０】
この発明は、以上説明したように、動的共有ライブラリを使用するアプリケーションが、汎用ＯＳ上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのＣＲＣと秘密鍵からハッシュ計算により算出したＫＥＹを動的共有ライブラリに埋め込むＫＥＹ生成手段を備え、アプリケーションは、秘密鍵を用いて、ＫＥＹが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第１の検出手段と、メモリ空間上にロードされたＫＥＹが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のＫＥＹが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、ＫＥＹが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第２の検出手段とを有するので、悪意のある第三者による動的共有ライブラリの改ざんを、汎用ＯＳ上で防止することができる。
【図面の簡単な説明】
【００１１】
【図１】この発明の実施の形態１によるコンピュータシステムで用いられるファイル構成を示す説明図である。
【図２】この発明の実施の形態１によるコンピュータシステムで用いられる動的共有ライブラリのロード処理を示すイメージである。
【図３】この発明の実施の形態１によるコンピュータシステムのファイル構成を示す説明図である。
【図４】この発明の実施の形態１によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図５】この発明の実施の形態１によるコンピュータシステムの動的共有ライブラリのＫＥＹ生成の手順を示すフローチャートである。
【図６】この発明の実施の形態１によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図７】通常のロード処理におけるベースアドレス不一致のイメージである。
【図８】この発明の実施の形態１によるコンピュータシステムの擬似ロードの手順を示すフローチャートである。
【図９】この発明の実施の形態２によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図１０】この発明の実施の形態２によるコンピュータシステムのファイル構成を示す説明図である。
【図１１】この発明の実施の形態２によるコンピュータシステムの外部ＫＥＹファイル生成プログラムの動作手順を示すフローチャートである。
【図１２】この発明の実施の形態２によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図１３】複数のライブラリが連鎖的にロードされた場合の、悪意を持った第三者によるメモリ空間上のイメージ差し替えを示すイメージ図である。
【図１４】この発明の実施の形態３によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図１５】この発明の実施の形態３によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図１６】この発明の実施の形態４によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図１７】この発明の実施の形態４によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図１８】この発明の実施の形態５によるコンピュータシステムの改ざん検出のイメージを示す図である。
【発明を実施するための形態】
【００１２】
実施の形態１．
以下、この発明の実施の形態１を図に基づいて説明する。
図１は、この発明の実施の形態１によるコンピュータシステムで用いられるファイル構成を示す説明図である。
図１において、ソールファイル１４と静的共有ライブラリ１２をコンパイル／リンクを行ってアプリケーション１１が形成される。静的共有ライブラリ１２は、アプリケーション１１の作成時に、アプリケーション１１にリンクされ、アプリケーションの一部となって配布される。
動的共有ライブラリ１３は、アプリケーション１１とは別ファイルとして配布される。動的共有ライブラリ１３と、アプリケーション１１とのリンクは、ユーザがアプリケーション１１を実行する際、もしくは、アプリケーション１１内で、その動的共有ライブラリ１３の機能が必要となった際に初めて行われる。
アプリケーション１１と動的共有ライブラリ１３は、同じファイル構造であり、ヘッダ領域１０１と、ネイティブコード領域１０２と、定数データ領域１０３と、データ領域１０４と、エクスポート関数領域１０５と、インポート関数領域１０６と、リソース情報領域１０７と、再配置情報領域１０８とを有している。
【００１３】
図２は、この発明の実施の形態１によるコンピュータシステムで用いられる動的共有ライブラリのロード処理を示すイメージである。
図２において、アプリケーション１１と動的共有ライブラリ１３とのリンクを示すものであり、このリンク動作は、アプリケーション１１のファイルに対して行われるのではなく、アプリケーション１１のメモリ空間にロードされたアプリケーションイメージ２１上にて行われる。すなわち、まず動的共有ライブラリ１３がロードされたのちに、アプリケーションイメージ２１によりリンクが行われる。
【００１４】
図２は、この動的共有ライブラリ１３のロード処理を示すもので、アプリケーション１１のロード処理と、ほぼ同一である。
このとき、動的共有ライブラリ１３がロードされる位置（ベースアドレス）が、アプリケーション１１によって動的に変更されるため、以下の２つの処理を行う必要がある。
（１）ネイティブコード領域１０２に対して、再配置情報領域１０８を参考に、ベースアドレスの再配置処理を実行する。
（２）次いで、インポート関数領域１０６に対して、インポート関数の紐付け（バインディング）処理を実行する。
この処理により、アプリケーション１１と動的共有ライブラリ１３との間でリンクが行われると、動的共有ライブラリ１３は、静的共有ライブラリ１２と同様に、アプリケーション１１から自由に呼び出して使用されるようになる。
【００１５】
図３は、この発明の実施の形態１によるコンピュータシステムのファイル構成を示す説明図である。
図３において、１３は図１におけるものと同一のものである。本発明におけるアプリケーション３１は、そのネイティブコード領域１０２の中に、本来のアプリケーションの機能に加えて、ファイル本体の改ざん検出機能３０１（第１の検出手段）と、メモリ空間上イメージの改ざん検出機能３０２（第２の検出手段）を持つ。また、定数データ領域１０３の中に、秘密鍵３１２を持つ。この秘密鍵３１２は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態で保持する。
【００１６】
ＫＥＹ生成プログラム３２（ＫＥＹ生成手段）は、動的共有ライブラリ１３を読み込み、ＫＥＹ３１１が埋め込まれた動的共有ライブラリ３３を生成する。ＫＥＹ生成プログラム３２は、その定数データ領域１０３の中に、アプリケーション３１と同じ秘密鍵３１２と呼ぶハッシュ文字列を持つ。ＫＥＹ３１１は、ファイル全体を表すハッシュ文字列であり、動的共有ライブラリ１３のファイルＣＲＣを計算し、それに未公開の秘密鍵３１２を追加して、再度、ハッシュ計算を行った文字列である。そのために、このＫＥＹ３１１は、動的共有ライブラリごとに値が異なることはもちろんのこと、動的共有ライブラリに変更が加わったときには、このＫＥＹ３１１の値も全く異なる値に変更される。
また、未公開の秘密鍵３１２を用いているため、悪意のある第三者が、このＫＥＹ３１１を算出することも不可能である。
【００１７】
図４は、この発明の実施の形態１によるコンピュータシステムの改ざん検出のイメージを示す図である。
図４において、３１、３３、３１１、３１２は図３におけるものと同一のものである。
図４では、リンクの手順をａ、ｂで示すとともに、改ざん検出の手順を１．２．３．で示している。改ざん検出の手順については、図６により詳述する。
【００１８】
図５は、この発明の実施の形態１によるコンピュータシステムの動的共有ライブラリのＫＥＹ生成の手順を示すフローチャートである。
【００１９】
図６は、この発明の実施の形態１によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【００２０】
図７は、通常のロード処理におけるベースアドレス不一致のイメージである。
図７において、アプリケーションイメージ２１のアプリケーションが、動的共有ライブラリ１３をメモリ空間上にロードする場合、通常のロード処理では、動的共通ライブラリ１３がロードされる位置（ベースアドレス）が、アプリケーションによって動的に変更され、ずれてしまうため、メモリ空間の動的共有ライブラリイメージ２３は、図のように一致しない。
【００２１】
図８は、この発明の実施の形態１によるコンピュータシステムの擬似ロードの手順を示すフローチャートである。
【００２２】
次に、動作について説明する。
まず、図５を用いて、実施の形態１による動的共有ライブラリ３４のＫＥＹ生成について説明する。
まず、本発明におけるＫＥＹ生成プログラム３２は、対象となる動的共有ライブラリ１３のファイルＣＲＣを計算する（Ｓ１０００）。このとき、ＣＲＣを計算する対象の領域は、動的共有ライブラリ１３全体であるが、ＫＥＹ領域だけは除く。また、このＣＲＣは、いわゆるＣＲＣの性質を持つアルゴリズムであれば、ＣＲＣ３２やＭＤ５等、特にアルゴリズムの指定はない（ただし、以降、使用アルゴリズムの種類は統一させる必要がある）。
次に、ＫＥＹ生成プログラム３２は、計算したＣＲＣと、自身が隠し持つ秘密鍵３１２から、ハッシュであるＫＥＹ３１１を計算する（Ｓ１０１０）。このハッシュ化についても、いわゆるハッシュの性質を持つアルゴリズムであれば、特にアルゴリズムの指定はない。
最後に、ＫＥＹ生成プログラム３２は、計算したＫＥＹ３１１を、元の動的共有ライブラリ１３に埋め込むことによって、本発明における動的共有ライブラリ３３が完成する（Ｓ１０２０）。
【００２３】
次に、実施の形態１による改ざん検出の手順について、図６を用いて説明する。
なお、改ざん検出のイメージは図４に示している。
以下の手順は、本発明におけるアプリケーション３１が、動的共有ライブラリ３３をロード（リンク）し、実際にそのライブラリの機能を呼び出す直前に行う。
図６において、まず、アプリケーション３１は、ＫＥＹ生成プログラム３２と同様に、動的共有ライブラリ３３のファイルＣＲＣを計算する（Ｓ１１００）。このとき、ＣＲＣを計算する対象の領域は、動的共有ライブラリ３３全体であるが、ＫＥＹ領域だけは除く。
続いて、アプリケーション３１は、計算したＣＲＣと、自身が隠し持つ秘密鍵３１２から、ハッシュであるＫＥＹ３１１を計算する（Ｓ１１０１）。
次いで、アプリケーション３１は、動的共有ライブラリ３３から、ＫＥＹ３１１を抽出する（Ｓ１１０２）。そして、抽出したＫＥＹ３１１と計算したＫＥＹ３１１を比較する（Ｓ１１０３）。この比較で、ＫＥＹ３１１が一致しない場合は、動的共有ライブラリ３３の本体ファイルが、改ざんを受けているということなので、「ファイル改ざん検知」で異常終了となる（Ｓ１１３０）。
【００２４】
Ｓ１１０３の比較で、ＫＥＹ３１１が一致したときは、アプリケーション３１は、動的共有ライブラリ３３をメモリ空間上に擬似ロードする（Ｓ１１１０）。ここで、擬似ロードとは、ＯＳが提供するロードのシステムコールではなく、そのシステムコールの動作を擬似的に再現して行うものである。これは、通常のロード処理では、動的共通ライブラリがロードされる位置（ベースアドレス）が、アプリケーションによって動的に変更され、ずれてしまうためである（図７参照）。この擬似ロードの処理については、図８を用いて後述する。
次いで、アプリケーション３１は、元の動的共有ライブラリのイメージ２３と、メモリ空間上に擬似ロードした動的共有ライブラリのイメージ２８（図４参照）を比較する（Ｓ１１２０）。ただし、データ領域１０４は、プロセスの状態に応じて、値（大域変数や静的局所変数）が不定であるため、比較の対象外とする。
【００２５】
比較結果、イメージが一致しない場合は（Ｓ１１２１）、動的共有ライブラリ３３のメモリ空間上のイメージが、改ざんを受けているということなので、「メモリ改ざん検知」で異常終了となる（Ｓ１１３０）。
最後に、比較結果のイメージが一致した場合は、アプリケーション３１は、動的共有ライブラリ３３に対して、ファイル／メモリの両方で改ざんを受けていないということで、正常終了となる。
その後、アプリケーション３１が、動的共有ライブラリ３３の機能を実際に呼び出すこととなる。
【００２６】
次に、擬似ロードの処理について図８を用いて説明する。
図８において、まず、動的共有ライブラリ３３のファイルの内容をそのまま、新たに確保したメモリ空間上にコピーする（Ｓ１２００）。そして、再配置情報領域１０８を参考に、ネイティブコード領域１０２に対して、ベースアドレスの再配置を、自身のベースアドレスを基準にするのではなく、元の動的共有ライブラリ１３のベースアドレスを基準に、実行する（Ｓ１２１０）。ここが、通常のロード処理と異なる点である。
最後に、インポート関数領域１０６に対して、元の動的共有ライブラリ１３と同様に、インポート関数の紐付け（バインディング）処理を実行する（Ｓ１２２０）。
【００２７】
実施の形態１によれば、このようにすることによって、動的共有ライブラリのメモリ空間へのロード前及びロード後の改ざんを検出することができるので、動的共有ライブラリが改ざんを受けていないことを保証できるようになる。
【００２８】
実施の形態２．
実施の形態２は、実施の形態１において、動的共有ライブラリが、ＯＳ等既存の動的共有ライブラリで、内部にＫＥＹを保持していない場合についてのものである。
実施の形態１のように、自身で製作した動的共有ライブラリの場合は、ＫＥＹ生成プログラムを用いて、自由にＫＥＹを埋め込むことができるが、動的共有ライブラリが、ＯＳ等既存の動的共有ライブラリの場合は、そのファイルを自身で変更することができないため、自由にＫＥＹを埋め込むことができない。
実施の形態２は、このような場合に対応したものである。
【００２９】
図９は、この発明の実施の形態２によるコンピュータシステムの改ざん検出のイメージを示す図である。
図９において、２５、２６、２８、３１、３１１は図４におけるものと同一のものである。動的共有ライブラリ１６は、ＯＳ等既存の動的共有ライブラリで、ＫＥＹを保持していない。この場合には、外部ＫＥＹファイル１７のＫＥＹを用いてファイル改ざんチェックが行われる。
【００３０】
図１０は、この発明の実施の形態２によるコンピュータシステムのファイル構成を示す説明図である。
図１０において、動的共有ファイル１６のＫＥＹ３１１を管理するために、新たに外部ＫＥＹファイル１７を用意する。外部ＫＥＹファイル１７の中には、ファイル名とそれに対応するＫＥＹ３１１を予めリストに保存しておく。また、外部ＫＥＹファイル１７は、秘密鍵３１２を用いて暗号化することによって、悪意のある第三者に中身がわからないようにする。
外部ＫＥＹファイル１７の作成には、専用かつ非公開の外部ＫＥＹファイル生成プログラム３４（外部ＫＥＹファイル生成手段）を使用する。外部ＫＥＹファイル作成プログラム３４は、定数データ領域１０３の中に、秘密鍵３１２を保持している。この秘密鍵３１２は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態となっている。
外部ＫＥＹファイル作成プログラム３４は、図３のＫＥＹ生成プログラム３２と同様にしてＫＥＹを生成する。
【００３１】
図１１は、この発明の実施の形態２によるコンピュータシステムの外部ＫＥＹファイル生成プログラムの動作手順を示すフローチャートである。
【００３２】
図１２は、この発明の実施の形態２によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【００３３】
次に、動作について説明する。
まず、図１１を用いて、外部ＫＥＹファイル生成プログラム３４の動作手順について説明する。
外部ＫＥＹファイル生成プログラム３４は、外部ＫＥＹファイル１７を対象に、ＫＥＹ３１１の追加／変更／削除に応じた処理を行う。外部ＫＥＹファイル１７は、暗号化されているため、外部ＫＥＹファイル生成プログラム３４は、自身の秘密鍵３１２を用いて、復号化／暗号化しながら、外部ＫＥＹファイル１７に対して、ＫＥＹ３１１の追加／変更／削除の編集を行うようになっている。
【００３４】
図１１で、ＫＥＹ追加の場合は、対象となるＯＳ等既存の動的共有ライブラリ１６のＣＲＣを計算する（Ｓ１３００）。そして、自身の持つ秘密鍵３１２と合わせてハッシュであるＫＥＹ３１１を計算する（Ｓ１３１０）。そして、そのＫＥＹ３１１を外部ＫＥＹファイル１７の中に、新規に埋め込む（Ｓ１３２０）。
【００３５】
次に、ＫＥＹ変更の場合は、ＫＥＹ追加の場合と同様に、ＫＥＹ３１１の計算を行う（Ｓ１３００、Ｓ１３１０）。そして、外部ＫＥＹファイル１７から対応する動的共有ライブラリファイルのＫＥＹ３１１を検索し、取得する（Ｓ１３３０）。そして、取得したＫＥＹ３１１を、新しく計算したＫＥＹ３１１に置き換える（Ｓ１３４０）。
【００３６】
最後に、ＫＥＹ削除の場合は、ＫＥＹ変更の場合と同様に、外部ＫＥＹファイル１７から対応する動的共有ライブラリファイルのＫＥＹ３１１を検索し、取得する（Ｓ１３３０）。そして、外部ＫＥＹファイル１７から、そのＫＥＹ３１１の削除を行う（Ｓ１３５０）。
【００３７】
次に、実施の形態２における改ざんの検出手順を図１２に基づき、説明する。
図１２のＳ１１００、Ｓ１１０１、Ｓ１１０３、Ｓ１１１０、Ｓ１１２０、Ｓ１１２１、Ｓ１１３０は、実施の形態１の図６における処理と同じ処理である。
図１２では、図６の処理Ｓ１１０２に代えて、Ｓ１３６０の処理を実行する。
Ｓ１３６０では、外部ＫＥＹファイル１７から対応する動的共有ライブラリファイルのＫＥＹ３１１を検索し、取得する。
なお、図１２のＳ１１００、Ｓ１１０１、Ｓ１３６０及びＳ１１０３は、第３の検出手段を構成する。
【００３８】
実施の形態２によれば、このようにすることによって、ＯＳ等既存の動的共有ライブラリなど、内部にＫＥＹを持たせることができないような動的共有ライブラリファイルに対しても、改ざんのチェックを行うことができる。
【００３９】
実施の形態３．
図１３は、複数のライブラリが連鎖的にロードされた場合の、悪意を持った第三者によるメモリ空間上のイメージ差し替えを示すイメージ図である。
図１３において、２５、２６、２８、３１、３３、３１１、３１２は図４におけるものと同一のものである。図１３では、複数の動的共有ライブラリ１３が同時にロードされ、一方の動的共有ライブラリ１３が、内部でさらに別の動的共有ライブラリ１３の機能を使用していた場合に、悪意を持った第三者１が、別の動的共有ライブラリ１３を改ざんするイメージを示している。改ざんされた動的共有ライブラリイメージ２４が示されている。
【００４０】
図１３のように、複数の動的共有ライブラリ１３が同時にロードされた場合、ある動的共有ライブラリ１３に対して、実施の形態１、２にような改ざんチェックを行って、問題がなかったとしても、その動的共有ライブラリ１３（Ａ）が、内部でさらに別の動的共有ライブラリ１３（Ｂ）の機能を使用しており、その別の動的共有ライブラリ１３（Ｂ）に対して、悪意のある第三者１がファイル／メモリ空間上の改ざんを行っていると、改ざんを検出できず、結果として、改ざんされたコードが実行されてしまう恐れがある。
そこで、実施の形態３は、実施の形態１、２において、動的共有ライブラリ１３を複数ロードした時のために、連鎖的に改ざんチェックを行う機能を有するようにしたものである。
【００４１】
図１４は、この発明の実施の形態３によるコンピュータシステムの改ざん検出のイメージを示す図である。
図１４において、２５、２６、２８、３１、３３、３１１、３１２は図１３におけるものと同一のものである。図１４では、改ざんチェックを行う動的共有ライブラリ１３のインポートテーブルを確認し、その動的共有ライブラリ１３（Ａ）が、内部でさらに別の動的共有ライブラリ１３（Ｂ）を使用している場合は、その動的共有ライブラリ１３に対して、連鎖的に改ざんチェックを行うようにする。アプリケーション３１や各動的共有ライブラリのインポートテーブルには、呼び出す動的共有ライブラリが示されている。
【００４２】
図１５は、この発明の実施の形態３によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【００４３】
次に、動作について説明する。
実施の形態３における改ざんの検出手順を図１５に基づき、説明する。
図１５において、Ｓ１１００、Ｓ１１０１、Ｓ１１０３、Ｓ１１１０、Ｓ１１２０、Ｓ１１２１、Ｓ１１３０は図１２におけるものと、Ｓ１１０２は図６におけるものとそれぞれ同一の処理である。
図１５では、Ｓ１１２１でＹＥＳの場合に、すなわち、改ざんチェックの最後に、その動的共有ライブラリ１３のインポートテーブルを確認し、内部でさらに別の動的共有ライブラリ１３を使用している場合（Ｓ１４００）は、その動的共有ライブラリ１３に対して、再帰的に改ざんチェックを行うために、Ｓ１１００へ戻るようになっている（Ｓ１４１０）。
【００４４】
実施の形態３によれば、このようにすることによって、改ざんチェック対象の動的共有ライブラリが、さらに、内部で別の動的共有ライブラリを使用しているような場合に対しても、改ざんのチェックが行うことができる。
【００４５】
実施の形態４．
例え、動的共有ライブラリの改ざんチェックを行ったとしても、アプリケーションが動的共有ライブラリを呼び出す直前、アプリケーションの中で、すでに改ざんを受けている可能性がある。
そこで、実施の形態４は、実施の形態１〜実施の形態３において、アプリケーション３１は、アプリケーション３１自身に対しても、改ざんのチェックを行う場合についてのものである。
【００４６】
図１６は、この発明の実施の形態４によるコンピュータシステムの改ざん検出のイメージを示す図である。
図１６において、２５、３１、３１１、３１２は図４におけるものと同一のものである。図１６では、アプリケーション３１が擬似ロードされたアプリケーションイメージ２９が示されている。アプリケーション３１の中に、秘密鍵３１２（実施の形態１〜実施の形態３と同様のもの）と、ＫＥＹ３１１を保持している。このＫＥＹ３１１は、ＫＥＹ生成プログラム３２によって生成され、埋め込まれている。
【００４７】
図１７は、この発明の実施の形態４によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【００４８】
次に、動作について説明する。
実施の形態４では、アプリケーション３１の中に、秘密鍵３１２とＫＥＹ３１１を保持している。このＫＥＹ３１１は、ＫＥＹ生成プログラム３２によって埋め込まれたものである。
次に、実施の形態４による改ざん検出の手順について、図１７に基づき説明する。
アプリケーション３１は、自身に対し、改ざんチェックを実施する（Ｓ１５００）。このチェックは、図６、図１２、図１５と同様にして実施する。
改ざんを検出したら（Ｓ１５１０）、「ファイル改ざん検知」で異常終了する（Ｓ１５２０）。改ざんを検出しない場合には（Ｓ１５１０）、アプリケーション３１が呼び出す動的共有ライブラリに対して、改ざんチェックを実施する（Ｓ１５３０）。このチェックは、図６、図１２、図１５と同様にして実施する。次いで、改ざん検出したかどうかにより（Ｓ１５４０）、改ざん検出した場合には、「ファイル改ざん検知」で異常終了し（Ｓ１５２０）、改ざん検出しない場合は正常終了する。
【００４９】
実施の形態４によれば、このようにすることによって、自身であるアプリケーションに対する改ざんに対しても、改ざんを検出することが可能になる。
【００５０】
実施の形態５．
実施の形態５は、実施の形態１〜実施の形態４において、擬似ロードを行うことなく、逐次的に一部分をロードすることによって、改ざんのチェックを行う場合についてのものである。
図１８は、この発明の実施の形態５によるコンピュータシステムの改ざん検出のイメージを示す図である。
図１８において、２５、２６、２８、３１、３３、３１１、３１２は図４におけるものと同一のものである。
【００５１】
図１８では、改ざんチェックの対象ファイルである動的共有ライブラリ３３を、メモリ空間上に擬似ロード（そのイメージの領域を全て確保）し、そのイメージと比較チェックを行うのではなく、動的共有ライブラリ３３（またはアプリケーション）を、逐次的に一部分ずつメモリ空間上に確保し、それと少しずつ比較チェックを行っていくようにする。
このようにすることによって、アルゴリズムは複雑になるものの、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。
【００５２】
実施の形態５によれば、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。
【符号の説明】
【００５３】
１  悪意のある第三者
１１  アプリケーション
１２  静的共有ライブラリ
１３  動的共有ライブラリ
１４  ソースファイル
１５  改ざんされた動的共有ライブラリ
１６  ＯＳ等既存の動的共有ライブラリ
１７  外部ＫＥＹファイル
２１  アプリケーションのイメージ
２３  動的共有ライブラリのイメージ
２４  改ざんされた動的共有ライブラリのイメージ
２５  アプリケーションのイメージ
２６  動的共有ライブラリのイメージ
２８  擬似ロードした動的共有ライブラリのイメージ
２９  擬似ロードしたアプリケーションのイメージ
３１  アプリケーション
３２  ＫＥＹ生成プログラム
３３  動的共有ライブラリ
３４  外部ＫＥＹファイル作成プログラム
１０１  ヘッダ領域
１０２  ネイティブコード領域
１０３  定数データ領域
１０４  データ領域
１０５  エクスポート関数領域
１０６  インポート関数領域
１０７  リソース情報領域
１０８  再配置情報領域
２０２  ネイティブコード領域（ベースアドレス再配置済み）
２０６  インポート関数領域（バインディング処理済み）
３０１  ファイル本体の改ざん検出機能
３０２  メモリ空間上イメージの改ざん検出機能
３１１  ＫＥＹ
３１２  秘密鍵
【図１】
2012185535.tif 000003
【図２】
2012185535.tif 000004
【図３】
2012185535.tif 000005
【図４】
2012185535.tif 000006
【図５】
2012185535.tif 000007
【図６】
2012185535.tif 000008
【図７】
2012185535.tif 000009
【図８】
2012185535.tif 000010
【図９】
2012185535.tif 000011
【図１０】
2012185535.tif 000012
【図１１】
2012185535.tif 000013
【図１２】
2012185535.tif 000014
【図１３】
2012185535.tif 000015
【図１４】
2012185535.tif 000016
【図１５】
2012185535.tif 000017
【図１６】
2012185535.tif 000018
【図１７】
2012185535.tif 000019
【図１８】
2012185535.tif 000020