説明

コンピュータシステム

【課題】悪意のある第三者による動的共有ライブラリの改ざんを防止するための機能を、汎用OS上で実現するコンピュータシステムを得る。
【解決手段】KEY生成プログラム32により、動的共有ライブラリ13のCRCと秘密鍵312からハッシュ計算によりKEY311を算出し、動的共有ライブラリに埋め込んで動的共有ライブラリ33とし、これを使用するアプリケーション31は、ファイル本体の改ざん検出機能301により、秘密鍵312を用いて、動的共有ライブラリ33の改ざんを検出するとともに、メモリ空間上イメージの改ざん検出機能302により、メモリ空間上にロードされた動的共有ライブラリ33のイメージと、メモリ空間上の動的共有ライブラリ13のイメージとを比較することにより、動的共有ライブラリ33のイメージに対する改ざんを検出するようにした。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、動的共有ライブラリの改ざんチェックを行うようにした、通常の汎用OSが動作するコンピュータシステムに関するものである。
【背景技術】
【0002】
近年のコンピュータシステムでは、パーソナルコンピュータ(以下、PCと呼ぶ)をはじめとして、様々なメーカーのハードウェア/ソフトウェアを組み合わせて構築されるオープンシステムが広く普及している。
オープンシステムでは、ハードウェアやその基本ソフトウェア(以下、OSと呼ぶ)の情報が、ある程度開示されており、プログラマーがこれらの情報を元に、オープンシステム上で動作する様々なアプリケーションを製作している。ところが、求められているアプリケーションの機能が高度化している背景の中で、プログラマーがそれらの機能をすべて自身で実装するのは極めて負担が大きくなっている。
そこで、現代のOSでは、共有ライブラリと呼ばれる仕組みが用意されている。共有ライブラリとは、プログラムを構成するサブルーチン(プログラムにおいて、何らかの機能を有する一まとまりの命令群)を集めたものである。プログラマーは、アプリケーションの動作に必要な機能を全て自身で実装する代わりに、一部の機能を、事前に用意された共有ライブラリに依存することができる。共通ライブラリとアプリケーションは、それぞれ別々に開発し、後で自由に組み合わせて使用することができるため、プログラマーは、アプリケーションの開発を効率化することができる。
【0003】
この共有ライブラリには、静的共有ライブラリと、動的共有ライブラリの二種類がある。
静的共有ライブラリは、アプリケーションの作成時に、アプリケーションにリンクされ、共有ライブラリは、アプリケーションの一部となって配布される。
一方、動的共有ライブラリは、アプリケーションとは別ファイルとして配布される。また、そのファイルの構造は、アプリケーションのファイルと同様の構造となっている。
動的共有ライブラリの場合、アプリケーションとのリンクは、ユーザがアプリケーションを実行する際、もしくは、アプリケーション内で、そのライブラリの機能が必要となった際に初めて行われる。
また、このリンク動作は、アプリケーションのファイルに対して行われるのではなく、アプリケーションのメモリ空間にロードされたイメージ上にて行われる。
そして、一旦、アプリケーションと動的共有ライブラリとの間でリンクが行われると、動的共有ライブラリは、静的共有ライブラリと同様に、アプリケーションから自由に呼び出して使用することができる。
【0004】
このように、動的共有ライブラリを用いることの利点は、アプリケーション本体を変更することなく、動的共有ライブラリだけを変更することができることである。その結果、アプリケーション本体に変更を加えることなく、その機能の一部を変更したり、不具合を修正したりすることが可能である。
また、アプリケーションが自動的に、使用可能な動的共有ライブラリを検索し、ロードするようにすれば、後から動的共有ライブラリを別途提供することによって、アプリケーション本体に変更を加えることなく、機能追加が可能である。このような使用形態の動的共有ライブラリは、しばしばプラグインと呼ばれる。
【0005】
しかし、このような動的共有ライブラリは、開発の効率性のみを追及したものであり、悪意のある第三者による改ざん等、セキュリティに対しては、一切考慮がなされていない。
例えば、動的共有ライブラリをロードする際に、すでにその動的共有ライブラリのファイル本体が、悪意のある第三者によって、改ざんされてしまっている恐れがある。
また、動的共有ライブラリをメモリ空間上にロードした後、実際にアプリケーションがそのライブラリの機能を使用するまでの間に、そのメモリ空間上のイメージが改ざんされてしまう恐れがある。
よって、これらの課題を解決するために、専用の耐タンパマイクロプロセッサなどを用いることによって、ハードウェア構成やOSを改良したコンピュータシステムが現在、提案されている。(特許文献1、2参照)
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2002−14871号公報(第5〜9頁、第1図)
【特許文献2】特開2004−38394号公報(第7〜17頁、第1図)
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来のコンピュータシステムでは、動的共有ライブラリをメモリ空間上にロードする際に、すでにそのライブラリのファイルが、悪意のある第三者によって改ざんされてしまっている恐れがあった。
また、動的共有ライブラリをメモリ空間上にロードした後においても、実際にアプリケーションがそのライブラリを使用するまでの間に、そのメモリ空間上のイメージが改ざんされる恐れがあった。
特許文献1、2では、この課題の解決のために、ハードウェアの構成やOS自身の改良が必要であり、一般的に普及している汎用PCや汎用OSを対象としていない。
【0008】
この発明は、上述のような課題を解決するためになされたものであり、悪意のある第三者による動的共有ライブラリの改ざんを防止するための機能を、汎用OS上で実現するコンピュータシステムを得ることを目的とする。
【課題を解決するための手段】
【0009】
この発明に係わるコンピュータシステムにおいては、動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのCRCと秘密鍵からハッシュ計算により算出したKEYを動的共有ライブラリに埋め込むKEY生成手段を備え、アプリケーションは、秘密鍵を用いて、KEYが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、メモリ空間上にロードされたKEYが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のKEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、KEYが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有するものである。
【発明の効果】
【0010】
この発明は、以上説明したように、動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのCRCと秘密鍵からハッシュ計算により算出したKEYを動的共有ライブラリに埋め込むKEY生成手段を備え、アプリケーションは、秘密鍵を用いて、KEYが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、メモリ空間上にロードされたKEYが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のKEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、KEYが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有するので、悪意のある第三者による動的共有ライブラリの改ざんを、汎用OS上で防止することができる。
【図面の簡単な説明】
【0011】
【図1】この発明の実施の形態1によるコンピュータシステムで用いられるファイル構成を示す説明図である。
【図2】この発明の実施の形態1によるコンピュータシステムで用いられる動的共有ライブラリのロード処理を示すイメージである。
【図3】この発明の実施の形態1によるコンピュータシステムのファイル構成を示す説明図である。
【図4】この発明の実施の形態1によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図5】この発明の実施の形態1によるコンピュータシステムの動的共有ライブラリのKEY生成の手順を示すフローチャートである。
【図6】この発明の実施の形態1によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図7】通常のロード処理におけるベースアドレス不一致のイメージである。
【図8】この発明の実施の形態1によるコンピュータシステムの擬似ロードの手順を示すフローチャートである。
【図9】この発明の実施の形態2によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図10】この発明の実施の形態2によるコンピュータシステムのファイル構成を示す説明図である。
【図11】この発明の実施の形態2によるコンピュータシステムの外部KEYファイル生成プログラムの動作手順を示すフローチャートである。
【図12】この発明の実施の形態2によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図13】複数のライブラリが連鎖的にロードされた場合の、悪意を持った第三者によるメモリ空間上のイメージ差し替えを示すイメージ図である。
【図14】この発明の実施の形態3によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図15】この発明の実施の形態3によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図16】この発明の実施の形態4によるコンピュータシステムの改ざん検出のイメージを示す図である。
【図17】この発明の実施の形態4によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【図18】この発明の実施の形態5によるコンピュータシステムの改ざん検出のイメージを示す図である。
【発明を実施するための形態】
【0012】
実施の形態1.
以下、この発明の実施の形態1を図に基づいて説明する。
図1は、この発明の実施の形態1によるコンピュータシステムで用いられるファイル構成を示す説明図である。
図1において、ソールファイル14と静的共有ライブラリ12をコンパイル/リンクを行ってアプリケーション11が形成される。静的共有ライブラリ12は、アプリケーション11の作成時に、アプリケーション11にリンクされ、アプリケーションの一部となって配布される。
動的共有ライブラリ13は、アプリケーション11とは別ファイルとして配布される。動的共有ライブラリ13と、アプリケーション11とのリンクは、ユーザがアプリケーション11を実行する際、もしくは、アプリケーション11内で、その動的共有ライブラリ13の機能が必要となった際に初めて行われる。
アプリケーション11と動的共有ライブラリ13は、同じファイル構造であり、ヘッダ領域101と、ネイティブコード領域102と、定数データ領域103と、データ領域104と、エクスポート関数領域105と、インポート関数領域106と、リソース情報領域107と、再配置情報領域108とを有している。
【0013】
図2は、この発明の実施の形態1によるコンピュータシステムで用いられる動的共有ライブラリのロード処理を示すイメージである。
図2において、アプリケーション11と動的共有ライブラリ13とのリンクを示すものであり、このリンク動作は、アプリケーション11のファイルに対して行われるのではなく、アプリケーション11のメモリ空間にロードされたアプリケーションイメージ21上にて行われる。すなわち、まず動的共有ライブラリ13がロードされたのちに、アプリケーションイメージ21によりリンクが行われる。
【0014】
図2は、この動的共有ライブラリ13のロード処理を示すもので、アプリケーション11のロード処理と、ほぼ同一である。
このとき、動的共有ライブラリ13がロードされる位置(ベースアドレス)が、アプリケーション11によって動的に変更されるため、以下の2つの処理を行う必要がある。
(1)ネイティブコード領域102に対して、再配置情報領域108を参考に、ベースアドレスの再配置処理を実行する。
(2)次いで、インポート関数領域106に対して、インポート関数の紐付け(バインディング)処理を実行する。
この処理により、アプリケーション11と動的共有ライブラリ13との間でリンクが行われると、動的共有ライブラリ13は、静的共有ライブラリ12と同様に、アプリケーション11から自由に呼び出して使用されるようになる。
【0015】
図3は、この発明の実施の形態1によるコンピュータシステムのファイル構成を示す説明図である。
図3において、13は図1におけるものと同一のものである。本発明におけるアプリケーション31は、そのネイティブコード領域102の中に、本来のアプリケーションの機能に加えて、ファイル本体の改ざん検出機能301(第1の検出手段)と、メモリ空間上イメージの改ざん検出機能302(第2の検出手段)を持つ。また、定数データ領域103の中に、秘密鍵312を持つ。この秘密鍵312は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態で保持する。
【0016】
KEY生成プログラム32(KEY生成手段)は、動的共有ライブラリ13を読み込み、KEY311が埋め込まれた動的共有ライブラリ33を生成する。KEY生成プログラム32は、その定数データ領域103の中に、アプリケーション31と同じ秘密鍵312と呼ぶハッシュ文字列を持つ。KEY311は、ファイル全体を表すハッシュ文字列であり、動的共有ライブラリ13のファイルCRCを計算し、それに未公開の秘密鍵312を追加して、再度、ハッシュ計算を行った文字列である。そのために、このKEY311は、動的共有ライブラリごとに値が異なることはもちろんのこと、動的共有ライブラリに変更が加わったときには、このKEY311の値も全く異なる値に変更される。
また、未公開の秘密鍵312を用いているため、悪意のある第三者が、このKEY311を算出することも不可能である。
【0017】
図4は、この発明の実施の形態1によるコンピュータシステムの改ざん検出のイメージを示す図である。
図4において、31、33、311、312は図3におけるものと同一のものである。
図4では、リンクの手順をa、bで示すとともに、改ざん検出の手順を1.2.3.で示している。改ざん検出の手順については、図6により詳述する。
【0018】
図5は、この発明の実施の形態1によるコンピュータシステムの動的共有ライブラリのKEY生成の手順を示すフローチャートである。
【0019】
図6は、この発明の実施の形態1によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【0020】
図7は、通常のロード処理におけるベースアドレス不一致のイメージである。
図7において、アプリケーションイメージ21のアプリケーションが、動的共有ライブラリ13をメモリ空間上にロードする場合、通常のロード処理では、動的共通ライブラリ13がロードされる位置(ベースアドレス)が、アプリケーションによって動的に変更され、ずれてしまうため、メモリ空間の動的共有ライブラリイメージ23は、図のように一致しない。
【0021】
図8は、この発明の実施の形態1によるコンピュータシステムの擬似ロードの手順を示すフローチャートである。
【0022】
次に、動作について説明する。
まず、図5を用いて、実施の形態1による動的共有ライブラリ34のKEY生成について説明する。
まず、本発明におけるKEY生成プログラム32は、対象となる動的共有ライブラリ13のファイルCRCを計算する(S1000)。このとき、CRCを計算する対象の領域は、動的共有ライブラリ13全体であるが、KEY領域だけは除く。また、このCRCは、いわゆるCRCの性質を持つアルゴリズムであれば、CRC32やMD5等、特にアルゴリズムの指定はない(ただし、以降、使用アルゴリズムの種類は統一させる必要がある)。
次に、KEY生成プログラム32は、計算したCRCと、自身が隠し持つ秘密鍵312から、ハッシュであるKEY311を計算する(S1010)。このハッシュ化についても、いわゆるハッシュの性質を持つアルゴリズムであれば、特にアルゴリズムの指定はない。
最後に、KEY生成プログラム32は、計算したKEY311を、元の動的共有ライブラリ13に埋め込むことによって、本発明における動的共有ライブラリ33が完成する(S1020)。
【0023】
次に、実施の形態1による改ざん検出の手順について、図6を用いて説明する。
なお、改ざん検出のイメージは図4に示している。
以下の手順は、本発明におけるアプリケーション31が、動的共有ライブラリ33をロード(リンク)し、実際にそのライブラリの機能を呼び出す直前に行う。
図6において、まず、アプリケーション31は、KEY生成プログラム32と同様に、動的共有ライブラリ33のファイルCRCを計算する(S1100)。このとき、CRCを計算する対象の領域は、動的共有ライブラリ33全体であるが、KEY領域だけは除く。
続いて、アプリケーション31は、計算したCRCと、自身が隠し持つ秘密鍵312から、ハッシュであるKEY311を計算する(S1101)。
次いで、アプリケーション31は、動的共有ライブラリ33から、KEY311を抽出する(S1102)。そして、抽出したKEY311と計算したKEY311を比較する(S1103)。この比較で、KEY311が一致しない場合は、動的共有ライブラリ33の本体ファイルが、改ざんを受けているということなので、「ファイル改ざん検知」で異常終了となる(S1130)。
【0024】
S1103の比較で、KEY311が一致したときは、アプリケーション31は、動的共有ライブラリ33をメモリ空間上に擬似ロードする(S1110)。ここで、擬似ロードとは、OSが提供するロードのシステムコールではなく、そのシステムコールの動作を擬似的に再現して行うものである。これは、通常のロード処理では、動的共通ライブラリがロードされる位置(ベースアドレス)が、アプリケーションによって動的に変更され、ずれてしまうためである(図7参照)。この擬似ロードの処理については、図8を用いて後述する。
次いで、アプリケーション31は、元の動的共有ライブラリのイメージ23と、メモリ空間上に擬似ロードした動的共有ライブラリのイメージ28(図4参照)を比較する(S1120)。ただし、データ領域104は、プロセスの状態に応じて、値(大域変数や静的局所変数)が不定であるため、比較の対象外とする。
【0025】
比較結果、イメージが一致しない場合は(S1121)、動的共有ライブラリ33のメモリ空間上のイメージが、改ざんを受けているということなので、「メモリ改ざん検知」で異常終了となる(S1130)。
最後に、比較結果のイメージが一致した場合は、アプリケーション31は、動的共有ライブラリ33に対して、ファイル/メモリの両方で改ざんを受けていないということで、正常終了となる。
その後、アプリケーション31が、動的共有ライブラリ33の機能を実際に呼び出すこととなる。
【0026】
次に、擬似ロードの処理について図8を用いて説明する。
図8において、まず、動的共有ライブラリ33のファイルの内容をそのまま、新たに確保したメモリ空間上にコピーする(S1200)。そして、再配置情報領域108を参考に、ネイティブコード領域102に対して、ベースアドレスの再配置を、自身のベースアドレスを基準にするのではなく、元の動的共有ライブラリ13のベースアドレスを基準に、実行する(S1210)。ここが、通常のロード処理と異なる点である。
最後に、インポート関数領域106に対して、元の動的共有ライブラリ13と同様に、インポート関数の紐付け(バインディング)処理を実行する(S1220)。
【0027】
実施の形態1によれば、このようにすることによって、動的共有ライブラリのメモリ空間へのロード前及びロード後の改ざんを検出することができるので、動的共有ライブラリが改ざんを受けていないことを保証できるようになる。
【0028】
実施の形態2.
実施の形態2は、実施の形態1において、動的共有ライブラリが、OS等既存の動的共有ライブラリで、内部にKEYを保持していない場合についてのものである。
実施の形態1のように、自身で製作した動的共有ライブラリの場合は、KEY生成プログラムを用いて、自由にKEYを埋め込むことができるが、動的共有ライブラリが、OS等既存の動的共有ライブラリの場合は、そのファイルを自身で変更することができないため、自由にKEYを埋め込むことができない。
実施の形態2は、このような場合に対応したものである。
【0029】
図9は、この発明の実施の形態2によるコンピュータシステムの改ざん検出のイメージを示す図である。
図9において、25、26、28、31、311は図4におけるものと同一のものである。動的共有ライブラリ16は、OS等既存の動的共有ライブラリで、KEYを保持していない。この場合には、外部KEYファイル17のKEYを用いてファイル改ざんチェックが行われる。
【0030】
図10は、この発明の実施の形態2によるコンピュータシステムのファイル構成を示す説明図である。
図10において、動的共有ファイル16のKEY311を管理するために、新たに外部KEYファイル17を用意する。外部KEYファイル17の中には、ファイル名とそれに対応するKEY311を予めリストに保存しておく。また、外部KEYファイル17は、秘密鍵312を用いて暗号化することによって、悪意のある第三者に中身がわからないようにする。
外部KEYファイル17の作成には、専用かつ非公開の外部KEYファイル生成プログラム34(外部KEYファイル生成手段)を使用する。外部KEYファイル作成プログラム34は、定数データ領域103の中に、秘密鍵312を保持している。この秘密鍵312は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態となっている。
外部KEYファイル作成プログラム34は、図3のKEY生成プログラム32と同様にしてKEYを生成する。
【0031】
図11は、この発明の実施の形態2によるコンピュータシステムの外部KEYファイル生成プログラムの動作手順を示すフローチャートである。
【0032】
図12は、この発明の実施の形態2によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【0033】
次に、動作について説明する。
まず、図11を用いて、外部KEYファイル生成プログラム34の動作手順について説明する。
外部KEYファイル生成プログラム34は、外部KEYファイル17を対象に、KEY311の追加/変更/削除に応じた処理を行う。外部KEYファイル17は、暗号化されているため、外部KEYファイル生成プログラム34は、自身の秘密鍵312を用いて、復号化/暗号化しながら、外部KEYファイル17に対して、KEY311の追加/変更/削除の編集を行うようになっている。
【0034】
図11で、KEY追加の場合は、対象となるOS等既存の動的共有ライブラリ16のCRCを計算する(S1300)。そして、自身の持つ秘密鍵312と合わせてハッシュであるKEY311を計算する(S1310)。そして、そのKEY311を外部KEYファイル17の中に、新規に埋め込む(S1320)。
【0035】
次に、KEY変更の場合は、KEY追加の場合と同様に、KEY311の計算を行う(S1300、S1310)。そして、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得する(S1330)。そして、取得したKEY311を、新しく計算したKEY311に置き換える(S1340)。
【0036】
最後に、KEY削除の場合は、KEY変更の場合と同様に、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得する(S1330)。そして、外部KEYファイル17から、そのKEY311の削除を行う(S1350)。
【0037】
次に、実施の形態2における改ざんの検出手順を図12に基づき、説明する。
図12のS1100、S1101、S1103、S1110、S1120、S1121、S1130は、実施の形態1の図6における処理と同じ処理である。
図12では、図6の処理S1102に代えて、S1360の処理を実行する。
S1360では、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得する。
なお、図12のS1100、S1101、S1360及びS1103は、第3の検出手段を構成する。
【0038】
実施の形態2によれば、このようにすることによって、OS等既存の動的共有ライブラリなど、内部にKEYを持たせることができないような動的共有ライブラリファイルに対しても、改ざんのチェックを行うことができる。
【0039】
実施の形態3.
図13は、複数のライブラリが連鎖的にロードされた場合の、悪意を持った第三者によるメモリ空間上のイメージ差し替えを示すイメージ図である。
図13において、25、26、28、31、33、311、312は図4におけるものと同一のものである。図13では、複数の動的共有ライブラリ13が同時にロードされ、一方の動的共有ライブラリ13が、内部でさらに別の動的共有ライブラリ13の機能を使用していた場合に、悪意を持った第三者1が、別の動的共有ライブラリ13を改ざんするイメージを示している。改ざんされた動的共有ライブラリイメージ24が示されている。
【0040】
図13のように、複数の動的共有ライブラリ13が同時にロードされた場合、ある動的共有ライブラリ13に対して、実施の形態1、2にような改ざんチェックを行って、問題がなかったとしても、その動的共有ライブラリ13(A)が、内部でさらに別の動的共有ライブラリ13(B)の機能を使用しており、その別の動的共有ライブラリ13(B)に対して、悪意のある第三者1がファイル/メモリ空間上の改ざんを行っていると、改ざんを検出できず、結果として、改ざんされたコードが実行されてしまう恐れがある。
そこで、実施の形態3は、実施の形態1、2において、動的共有ライブラリ13を複数ロードした時のために、連鎖的に改ざんチェックを行う機能を有するようにしたものである。
【0041】
図14は、この発明の実施の形態3によるコンピュータシステムの改ざん検出のイメージを示す図である。
図14において、25、26、28、31、33、311、312は図13におけるものと同一のものである。図14では、改ざんチェックを行う動的共有ライブラリ13のインポートテーブルを確認し、その動的共有ライブラリ13(A)が、内部でさらに別の動的共有ライブラリ13(B)を使用している場合は、その動的共有ライブラリ13に対して、連鎖的に改ざんチェックを行うようにする。アプリケーション31や各動的共有ライブラリのインポートテーブルには、呼び出す動的共有ライブラリが示されている。
【0042】
図15は、この発明の実施の形態3によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【0043】
次に、動作について説明する。
実施の形態3における改ざんの検出手順を図15に基づき、説明する。
図15において、S1100、S1101、S1103、S1110、S1120、S1121、S1130は図12におけるものと、S1102は図6におけるものとそれぞれ同一の処理である。
図15では、S1121でYESの場合に、すなわち、改ざんチェックの最後に、その動的共有ライブラリ13のインポートテーブルを確認し、内部でさらに別の動的共有ライブラリ13を使用している場合(S1400)は、その動的共有ライブラリ13に対して、再帰的に改ざんチェックを行うために、S1100へ戻るようになっている(S1410)。
【0044】
実施の形態3によれば、このようにすることによって、改ざんチェック対象の動的共有ライブラリが、さらに、内部で別の動的共有ライブラリを使用しているような場合に対しても、改ざんのチェックが行うことができる。
【0045】
実施の形態4.
例え、動的共有ライブラリの改ざんチェックを行ったとしても、アプリケーションが動的共有ライブラリを呼び出す直前、アプリケーションの中で、すでに改ざんを受けている可能性がある。
そこで、実施の形態4は、実施の形態1〜実施の形態3において、アプリケーション31は、アプリケーション31自身に対しても、改ざんのチェックを行う場合についてのものである。
【0046】
図16は、この発明の実施の形態4によるコンピュータシステムの改ざん検出のイメージを示す図である。
図16において、25、31、311、312は図4におけるものと同一のものである。図16では、アプリケーション31が擬似ロードされたアプリケーションイメージ29が示されている。アプリケーション31の中に、秘密鍵312(実施の形態1〜実施の形態3と同様のもの)と、KEY311を保持している。このKEY311は、KEY生成プログラム32によって生成され、埋め込まれている。
【0047】
図17は、この発明の実施の形態4によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。
【0048】
次に、動作について説明する。
実施の形態4では、アプリケーション31の中に、秘密鍵312とKEY311を保持している。このKEY311は、KEY生成プログラム32によって埋め込まれたものである。
次に、実施の形態4による改ざん検出の手順について、図17に基づき説明する。
アプリケーション31は、自身に対し、改ざんチェックを実施する(S1500)。このチェックは、図6、図12、図15と同様にして実施する。
改ざんを検出したら(S1510)、「ファイル改ざん検知」で異常終了する(S1520)。改ざんを検出しない場合には(S1510)、アプリケーション31が呼び出す動的共有ライブラリに対して、改ざんチェックを実施する(S1530)。このチェックは、図6、図12、図15と同様にして実施する。次いで、改ざん検出したかどうかにより(S1540)、改ざん検出した場合には、「ファイル改ざん検知」で異常終了し(S1520)、改ざん検出しない場合は正常終了する。
【0049】
実施の形態4によれば、このようにすることによって、自身であるアプリケーションに対する改ざんに対しても、改ざんを検出することが可能になる。
【0050】
実施の形態5.
実施の形態5は、実施の形態1〜実施の形態4において、擬似ロードを行うことなく、逐次的に一部分をロードすることによって、改ざんのチェックを行う場合についてのものである。
図18は、この発明の実施の形態5によるコンピュータシステムの改ざん検出のイメージを示す図である。
図18において、25、26、28、31、33、311、312は図4におけるものと同一のものである。
【0051】
図18では、改ざんチェックの対象ファイルである動的共有ライブラリ33を、メモリ空間上に擬似ロード(そのイメージの領域を全て確保)し、そのイメージと比較チェックを行うのではなく、動的共有ライブラリ33(またはアプリケーション)を、逐次的に一部分ずつメモリ空間上に確保し、それと少しずつ比較チェックを行っていくようにする。
このようにすることによって、アルゴリズムは複雑になるものの、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。
【0052】
実施の形態5によれば、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。
【符号の説明】
【0053】
1 悪意のある第三者
11 アプリケーション
12 静的共有ライブラリ
13 動的共有ライブラリ
14 ソースファイル
15 改ざんされた動的共有ライブラリ
16 OS等既存の動的共有ライブラリ
17 外部KEYファイル
21 アプリケーションのイメージ
23 動的共有ライブラリのイメージ
24 改ざんされた動的共有ライブラリのイメージ
25 アプリケーションのイメージ
26 動的共有ライブラリのイメージ
28 擬似ロードした動的共有ライブラリのイメージ
29 擬似ロードしたアプリケーションのイメージ
31 アプリケーション
32 KEY生成プログラム
33 動的共有ライブラリ
34 外部KEYファイル作成プログラム
101 ヘッダ領域
102 ネイティブコード領域
103 定数データ領域
104 データ領域
105 エクスポート関数領域
106 インポート関数領域
107 リソース情報領域
108 再配置情報領域
202 ネイティブコード領域(ベースアドレス再配置済み)
206 インポート関数領域(バインディング処理済み)
301 ファイル本体の改ざん検出機能
302 メモリ空間上イメージの改ざん検出機能
311 KEY
312 秘密鍵

【特許請求の範囲】
【請求項1】
動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、
上記アプリケーションと共通の秘密鍵を有し、上記動的共有ライブラリのCRCと上記秘密鍵からハッシュ計算により算出したKEYを上記動的共有ライブラリに埋め込むKEY生成手段を備え、
上記アプリケーションは、
上記秘密鍵を用いて、上記KEYが埋め込まれた上記動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、
メモリ空間上にロードされた上記KEYが埋め込まれた上記動的共有ライブラリのイメージと、上記メモリ空間上の上記KEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、上記KEYが埋め込まれた上記動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有することを特徴とするコンピュータシステム。
【請求項2】
上記アプリケーションにより使用される動的共有ライブラリが、上記KEYを埋め込めない場合に、この動的共有ライブラリのCRCと上記秘密鍵からハッシュ計算により算出したKEYを外部ファイルに格納する外部KEYファイル生成手段を備え、
上記アプリケーションは、
上記秘密鍵を用いて、上記KEYが格納された外部ファイルを参照して、上記KEYを埋め込めない場合の上記動的共有ライブラリファイルの改ざんを検出する第3の検出手段を有することを特徴とする請求項1記載のコンピュータシステム。
【請求項3】
上記アプリケーションの上記第2の検出手段は、
使用する動的共有ライブラリが、さらに別の動的共有ライブラリを使用する場合に、この別の動的共有ライブラリの上記メモリ空間上のイメージについても、上記改ざんを検出することを特徴とする請求項1または請求項2記載のコンピュータシステム。
【請求項4】
上記KEY生成手段は、上記アプリケーションのCRCと上記秘密鍵からハッシュ計算により算出したKEYを上記アプリケーションに埋め込み、
上記アプリケーションの上記第1の検出手段は、上記秘密鍵を用いて、上記KEYが埋め込まれた自アプリケーションの改ざんを検出し、
上記アプリケーションの上記第2の検出手段は、メモリ空間上にロードされた上記KEYが埋め込まれた自アプリケーションのイメージと、上記メモリ空間上の上記KEYが埋め込まれる前の元の自アプリケーションのイメージとを比較することにより、上記KEYが埋め込まれた自アプリケーションのイメージに対する改ざんを検出することを特徴とする請求項1〜請求項3のいずれかに記載のコンピュータシステム。
【請求項5】
上記アプリケーションの上記第2の検出手段は、元の動的共有ライブラリのベースアドレスを基準として、改ざん検出対象の上記動的共有ライブラリを全てメモリ空間上に擬似ロードして、上記メモリ空間上の元の上記動的共有ライブラリのイメージと比較することにより、上記改ざんを検出することを特徴とする請求項1〜請求項4のいずれかに記載のコンピュータシステム。
【請求項6】
上記アプリケーションの上記第2の検出手段は、改ざん検出対象の上記動的共有ライブラリをメモリ空間上に逐次的に一部分ずつ確保し、この確保した部分と、上記メモリ空間上の上記KEYが埋め込まれる前の上記動的共有ライブラリのイメージとを比較することにより、上記改ざんを検出することを特徴とする請求項1〜請求項4のいずれかに記載のコンピュータシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2012−185535(P2012−185535A)
【公開日】平成24年9月27日(2012.9.27)
【国際特許分類】
【出願番号】特願2011−46280(P2011−46280)
【出願日】平成23年3月3日(2011.3.3)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】