(57)【要約】  揮発メモリにロードされた共有ライブラリが改竄された場合の影響を抑制することができる情報処理装置を提供する。情報処理装置は、揮発メモリ内の共有ライブラリが改竄されているか否かを判定する改竄判定部（２５０１）と、共有ライブラリとプロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部（２５０４）と、揮発メモリ内の共有ライブラリが改竄されていると判定された場合、共有ライブラリ情報を参照することにより、揮発メモリ内の共有ライブラリを利用するプロセスを特定し、特定されたプロセスを停止させるプロセス制御部（２５０２）と、揮発メモリ内の共有ライブラリが改竄されていると判定された場合、不揮発メモリ内の共有ライブラリを揮発メモリに再ロードすることにより、揮発メモリ内の共有ライブラリを回復させる共有ライブラリ回復部（２５０５）とを備える。
2011142095.tif 000002
【特許請求の範囲】
【請求項１】
不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる情報処理装置であって、
前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定部と、
前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部と、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御部と、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復部とを備える
情報処理装置。
【請求項２】
前記プロセス制御部は、さらに、前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセスを再開させる
請求項１に記載の情報処理装置。
【請求項３】
前記プロセス制御部は、
前記プロセスを停止させる時に、前記プロセスを再開させる時に用いられる情報である停止プロセス情報を生成し、
前記揮発メモリ内の前記共有ライブラリが回復した後、前記停止プロセス情報を用いて前記プロセスを再開させる
請求項２に記載の情報処理装置。
【請求項４】
前記プロセス制御部は、
前記プロセスを停止させる時に、前記プロセスの進行状態を示す進行状態情報を含む前記停止プロセス情報を生成し、
前記揮発メモリ内の前記共有ライブラリが回復した後、前記停止プロセス情報によって示される前記進行状態に依存させて、前記プロセスを再開させる
請求項３に記載の情報処理装置。
【請求項５】
前記プロセス制御部は、前記プロセスに用いられるプログラムカウンタの情報を前記進行状態情報として含む前記停止プロセス情報を生成する
請求項４に記載の情報処理装置。
【請求項６】
前記プロセス制御部は、前記共有ライブラリが回復した後、
前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用前である場合、前記進行状態で前記プロセスを再開させ、
前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用中または利用後である場合、前記共有ライブラリの利用前の状態で前記プロセスを再開させる
請求項４または５に記載の情報処理装置。
【請求項７】
前記プロセス制御部は、
前記プロセスを停止させる時に、前記プロセスの動作履歴を示す動作履歴情報を含む前記停止プロセス情報を生成し、
前記共有ライブラリが回復した後、前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用中または利用後である場合、前記停止プロセス情報に含まれる前記動作履歴情報を参照して、前記共有ライブラリの利用前の状態で、前記プロセスを再開させる
請求項６に記載の情報処理装置。
【請求項８】
前記プロセス制御部は、前記プロセスに用いられるスタックの情報を前記動作履歴情報として含む前記停止プロセス情報を生成する
請求項７に記載の情報処理装置。
【請求項９】
前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、
前記改竄判定部は、前記プロセス動作情報を参照することにより、動作している前記プロセスを特定し、特定された前記プロセスが利用する前記共有ライブラリが改竄されているか否かを判定する
請求項１〜８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、
前記プロセス制御部は、
前記プロセスを停止させる時に、前記プロセスが動作していないことを示すように、前記プロセス動作情報を更新し、
前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセス動作情報を参照することにより、動作していない前記プロセスを特定し、特定された前記プロセスを再開させる
請求項２〜８のいずれか１項に記載の情報処理装置。
【請求項１１】
前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、
前記改竄判定部は、前記プロセス動作情報を参照することにより、動作している前記プロセスを特定し、特定された前記プロセスが利用する前記共有ライブラリが改竄されているか否かを判定し、
前記プロセス制御部は、
前記プロセスを停止させる時に、前記プロセスが動作していないことを示すように、前記プロセス動作情報を更新し、
前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセス動作情報を参照することにより、動作していない前記プロセスを特定し、特定された前記プロセスを再開させる
請求項２〜８のいずれか１項に記載の情報処理装置。
【請求項１２】
前記改竄判定部は、前記共有ライブラリが前記揮発メモリにロードされる前に、前記共有ライブラリから予め抽出された情報と、前記共有ライブラリが前記揮発メモリにロードされた後に、前記揮発メモリ内の前記共有ライブラリから抽出された情報とを比較することにより、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する
請求項１〜１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記改竄判定部は、さらに、前記不揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定し、
前記共有ライブラリ回復部は、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、かつ、前記不揮発メモリ内の前記共有ライブラリが改竄されていないと判定された場合、前記揮発メモリ内の前記共有ライブラリを回復させる
請求項１〜１２のいずれか１項に記載の情報処理装置。
【請求項１４】
前記共有ライブラリ情報保持部には、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かが判定されたか否かを示す情報を含む前記共有ライブラリ情報が保持され、
前記改竄判定部は、前記共有ライブラリ情報を参照することにより、改竄されているか否かが判定されていない前記共有ライブラリを特定し、特定された前記共有ライブラリが改竄されているか否かを判定する
請求項１〜１３のいずれか１項に記載の情報処理装置。
【請求項１５】
前記共有ライブラリ回復部は、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードし、前記揮発メモリに再ロードされた前記共有ライブラリの物理アドレスと、前記プロセスのプロセス空間における前記共有ライブラリの仮想アドレスとをマッピングすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる
請求項１〜１４のいずれか１項に記載の情報処理装置。
【請求項１６】
不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる情報処理方法であって、
前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定ステップと、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部に保持される前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御ステップと、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復ステップとを含む
情報処理方法。
【請求項１７】
請求項１６に記載の情報処理方法に含まれるステップをコンピュータに実行させるための
プログラム。
【請求項１８】
請求項１６に記載の情報処理方法に含まれるステップをコンピュータに実行させるための
プログラムが記録された非一時的なコンピュータ読み取り可能な記録媒体。
【請求項１９】
不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる集積回路であって、
前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定部と、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部に保持される前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御部と、
前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復部とを備える
集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有ライブラリを利用するプロセスを動作させる情報処理装置および情報処理方法に関する。
【背景技術】
【０００２】
近年、オープンプラットフォームを採用した民生機器が急速に普及してきている。現在の民生機器向けオープンプラットフォーム環境では、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）と同様にアプリケーション（アプリとも呼ばれる）のダウンロードが可能になっている。将来的には、ＰＣと同様に多種多様なハードウェアを追加することで機能拡張が可能となる民生機器が登場することが考えられる。この機能拡張を可能にするために、デバイスドライバのインストールが必要となる。【０００３】
デバイスドライバのインストールが可能なＰＣおよび民生機器等では、アプリケーションソフトのみがインストールできる環境と比較すると脅威が増大する。従来のアプリケーションソフトは、ユーザ空間で動作するソフトウェアであるが、デバイスドライバは、カーネル空間で動作するソフトウェアである。【０００４】
そのため、悪意のあるユーザが、カーネルモードで動作するマルウェアを作成し、そのマルウェアをデバイスドライバとして配布し、正当なユーザの端末にインストールさせることが可能になる。マルウェアがカーネルモードで動作すれば、プロセス空間のメモリを自由に改竄することが可能になってしまうという脅威が生じる。【０００５】
一般のプロセスは、所望の動作を実行するために、そのプロセス空間に共有ライブラリをロードしている。共有ライブラリは、複数のプロセスで利用できるように提供されたライブラリである。【０００６】
共有ライブラリは、不揮発メモリ上に静的なファイルとして存在している。そして、共有ライブラリを利用するプロセスが実行される時に、リンカ・ローダ（ｌｉｎｋｅｒ  ｌｏａｄｅｒ）が、不揮発メモリ上の静的なファイルを揮発メモリ上へロードする。そして、ロードされたファイルが、プロセス空間に実行可能な状態として物理アドレスと仮想アドレスのページにマップされる。【０００７】
このようにプロセス空間上の共有ライブラリは、ある仮想アドレスにマップされている。もし、複数のプロセスで利用される同一の共有ライブラリについて、その共有ライブラリのマップ先の仮想アドレスがプロセス毎に異なっていている場合でも、その仮想アドレスに対応する物理アドレスは、複数のプロセスで同じ領域を指すことになる。この仕組みにより、複数のプロセスで共有ライブラリをロードしても、メモリが浪費されない。【０００８】
しかし、この仕組みが逆に不正に利用される場合がある。具体的には、カーネルモードで動作するマルウェアが、不正インストールされ、あるプロセス空間の共有ライブラリを改竄する。その後、改竄された共有ライブラリを利用している全てのプロセスが、改竄の影響を受けることになる。例えば、揮発メモリにロードされたファイルにアクセスするための標準ライブラリが改竄された場合、ファイルから音楽、映像および写真等を再生するアプリプロセスが、改竄の影響を受ける。【０００９】
従来、改竄されたソフトウェアを検出し、回復する方法として、特許文献１に記載された方法がある。特許文献１に記載された方法では、機器は、フラッシュメモリ等の不揮発メモリであるＲＯＭに記憶されたプログラムを、揮発メモリであるＲＡＭにダウンロードして、実行する。【００１０】
そして、当該機器は、ＲＡＭのプログラムにエラーがあった場合、ＲＯＭから再度ＲＡＭにプログラムをダウンロードする。当該機器は、ダウンロードしたプログラムがさらにエラーだった場合、ＲＯＭに記憶されたプログラムを直接実行するようにメモリバンクを切り替える。【００１１】
なお、従来の技術として、非特許文献１、非特許文献２および非特許文献３には、プロセスの制御方法等が記載されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００４−７８８４７号公報
【非特許文献】
【００１３】
【非特許文献１】ＴＣＧ  Ｍｏｂｉｌｅ  Ｔｒｕｓｔｅｄ  Ｍｏｄｕｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｖｅｒｓｉｏｎ１．０  Ｒｅｖｉｓｉｏｎ６（２００８年）
【非特許文献２】Ｊｏｈｎ  Ｒ．Ｌｅｖｉｎｅ（著）、榊原一矢（翻訳）、ポジティブエッジ（翻訳）「Ｌｉｎｋｅｒｓ＆Ｌｏａｄｅｒｓ」オーム社（２００１年）
【非特許文献３】Ｊｏｎａｔｈａｎ  Ｂ．Ｒｏｓｅｎｂｅｒｇ著、吉川邦夫訳、「デバッガの理論と実装」、株式会社アスキー（１９９８年）
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、従来の特許文献１に記載の構成では、プログラムによって利用される共有ライブラリが改竄されていた場合、プログラムは、正常動作する状態に回復されない可能性がある。【００１５】
上述の通り、共有ライブラリは、揮発メモリにロードされる。また、共有ライブラリを利用するプログラムも、プログラムを実行するプロセスとして、揮発メモリにロードされる。そして、そのプロセスのプロセス空間に、共有ライブラリがマップされる。【００１６】
ここで、揮発メモリにロードされた共有ライブラリにエラーがあった場合、不揮発メモリのプログラムが揮発メモリに再ロードされても、揮発メモリにロードされている共有ライブラリは、回復されない。【００１７】
また、共有ライブラリの再ロードが、共有ライブラリを利用するプロセスの動作に影響を与える可能性がある。そして、プロセスが想定外の動作を実行する可能性がある。さらに、共有ライブラリが再ロードされても、プロセス空間の情報が変更されず、プロセスの動作に支障が生じる可能性もある。【００１８】
また、不揮発メモリに記憶されている全ての共有ライブラリ、および、全てのプログラムが揮発メモリに再ロードされた場合、全てのプログラムが正常に動作する状態になる。しかし、改竄の影響を受けないプログラムを含む全てのプログラムの再ロードは、効率が悪い。【００１９】
そこで、本発明は、揮発メモリにロードされた共有ライブラリが改竄された場合の影響を抑制することができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
上記課題を解決するために、本発明に係る情報処理装置は、不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる情報処理装置であって、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定部と、前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部と、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御部と、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復部とを備える。【００２１】
これにより、共有ライブラリの改竄により影響を受けるプロセスのみが停止される。そして、揮発メモリの共有ライブラリは、不揮発メモリからの再ロードにより、回復される。したがって、本発明に係る情報処理装置は、改竄の影響を抑制することができる。【００２２】
また、前記プロセス制御部は、さらに、前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセスを再開させてもよい。【００２３】
これにより、停止されたプロセスが、再開される。したがって、本発明に係る情報処理装置は、システム全体を継続して動作させることができる。【００２４】
また、前記プロセス制御部は、前記プロセスを停止させる時に、前記プロセスを再開させる時に用いられる情報である停止プロセス情報を生成し、前記揮発メモリ内の前記共有ライブラリが回復した後、前記停止プロセス情報を用いて前記プロセスを再開させてもよい。【００２５】
これにより、プロセスが停止される際、プロセスの再開に必要な情報が生成される。したがって、プロセスが適切に再開される。【００２６】
また、前記プロセス制御部は、前記プロセスを停止させる時に、前記プロセスの進行状態を示す進行状態情報を含む前記停止プロセス情報を生成し、前記揮発メモリ内の前記共有ライブラリが回復した後、前記停止プロセス情報によって示される前記進行状態に依存させて、前記プロセスを再開させてもよい。【００２７】
これにより、停止されたプロセスが、停止前の進行状態に応じて、再開される。したがって、プロセスが適切な状態で再開される。【００２８】
また、前記プロセス制御部は、前記プロセスに用いられるプログラムカウンタの情報を前記進行状態情報として含む前記停止プロセス情報を生成してもよい。【００２９】
これにより、プログラムカウンタの情報が、進行状態としてプロセスの再開時に用いられる。したがって、プロセスが適切な状態で再開される。【００３０】
また、前記プロセス制御部は、前記共有ライブラリが回復した後、前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用前である場合、前記進行状態で前記プロセスを再開させ、前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用中または利用後である場合、前記共有ライブラリの利用前の状態で前記プロセスを再開させてもよい。【００３１】
これにより、改竄された共有ライブラリが利用された後にプロセスが停止された場合でも、改竄された共有ライブラリが利用される前の状態で、プロセスが再開される。したがって、本発明に係る情報処理装置は、改竄の影響を受けていない状態で、プロセスを再開させることができる。【００３２】
また、前記プロセス制御部は、前記プロセスを停止させる時に、前記プロセスの動作履歴を示す動作履歴情報を含む前記停止プロセス情報を生成し、前記共有ライブラリが回復した後、前記停止プロセス情報によって示される前記進行状態が前記共有ライブラリの利用中または利用後である場合、前記停止プロセス情報に含まれる前記動作履歴情報を参照して、前記共有ライブラリの利用前の状態で、前記プロセスを再開させてもよい。【００３３】
これにより、本発明に係る情報処理装置は、プロセスの動作履歴を用いて、改竄の影響を受けていない状態で、プロセスを再開させることができる。【００３４】
また、前記プロセス制御部は、前記プロセスに用いられるスタックの情報を前記動作履歴情報として含む前記停止プロセス情報を生成してもよい。【００３５】
これにより、スタックの情報が、動作履歴としてプロセスの再開時に用いられる。したがって、プロセスが適切な状態で再開される。【００３６】
また、前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、前記改竄判定部は、前記プロセス動作情報を参照することにより、動作している前記プロセスを特定し、特定された前記プロセスが利用する前記共有ライブラリが改竄されているか否かを判定してもよい。【００３７】
これにより、動作しているプロセスが利用する共有ライブラリが回復される。よって、システム全体への影響が大きい共有ライブラリが、より効率的に回復される。【００３８】
また、前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、前記プロセス制御部は、前記プロセスを停止させる時に、前記プロセスが動作していないことを示すように、前記プロセス動作情報を更新し、前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセス動作情報を参照することにより、動作していない前記プロセスを特定し、特定された前記プロセスを再開させてもよい。【００３９】
これにより、再開されるべきプロセスが、確実に特定される。したがって、プロセスが適切に再開される。【００４０】
また、前記情報処理装置は、さらに、前記プロセスが動作しているか否かを示すプロセス動作情報を保持するためのプロセス動作情報保持部を備え、前記改竄判定部は、前記プロセス動作情報を参照することにより、動作している前記プロセスを特定し、特定された前記プロセスが利用する前記共有ライブラリが改竄されているか否かを判定し、前記プロセス制御部は、前記プロセスを停止させる時に、前記プロセスが動作していないことを示すように、前記プロセス動作情報を更新し、前記揮発メモリ内の前記共有ライブラリが回復した後、前記プロセス動作情報を参照することにより、動作していない前記プロセスを特定し、特定された前記プロセスを再開させてもよい。【００４１】
これにより、動作しているプロセスが利用する共有ライブラリが回復される。また、再開されるべきプロセスが、確実に特定される。したがって、効率的な回復動作が実行される。【００４２】
また、前記改竄判定部は、前記共有ライブラリが前記揮発メモリにロードされる前に、前記共有ライブラリから予め抽出された情報と、前記共有ライブラリが前記揮発メモリにロードされた後に、前記揮発メモリ内の前記共有ライブラリから抽出された情報とを比較することにより、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定してもよい。【００４３】
これにより、現在の共有ライブラリの状態と、正常な共有ライブラリの状態とが比較される。そして、共有ライブラリの改竄が適切に検出される。【００４４】
また、前記改竄判定部は、さらに、前記不揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定し、前記共有ライブラリ回復部は、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、かつ、前記不揮発メモリ内の前記共有ライブラリが改竄されていないと判定された場合、前記揮発メモリ内の前記共有ライブラリを回復させてもよい。【００４５】
これにより、不揮発メモリから共有ライブラリを回復させることが有効な場合に限って、共有ライブラリが回復される。【００４６】
また、前記共有ライブラリ情報保持部には、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かが判定されたか否かを示す情報を含む前記共有ライブラリ情報が保持され、前記改竄判定部は、前記共有ライブラリ情報を参照することにより、改竄されているか否かが判定されていない前記共有ライブラリを特定し、特定された前記共有ライブラリが改竄されているか否かを判定してもよい。【００４７】
これにより、改竄の検出動作の重複が排除される。したがって、効率的に、改竄が検出される。【００４８】
また、前記共有ライブラリ回復部は、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードし、前記揮発メモリに再ロードされた前記共有ライブラリの物理アドレスと、前記プロセスのプロセス空間における前記共有ライブラリの仮想アドレスとをマッピングすることにより、前記揮発メモリ内の前記共有ライブラリを回復させてもよい。【００４９】
これにより、再ロード前とは異なる物理アドレスに再ロードされた場合でも、共有ライブラリがプロセス空間に適切にマッピングされる。したがって、共有ライブラリが、適切に回復される。【００５０】
また、本発明に係る情報処理方法は、不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる情報処理方法であって、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定ステップと、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部に保持される前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御ステップと、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復ステップとを含む情報処理方法でもよい。【００５１】
これにより、本発明に係る情報処理装置が情報処理方法として実現される。【００５２】
また、本発明に係るプログラムは、前記情報処理方法に含まれるステップをコンピュータに実行させるためのプログラムでもよい。【００５３】
これにより、本発明に係る情報処理方法がプログラムとして実現される。【００５４】
また、本発明に係る記録媒体は、前記情報処理方法に含まれるステップをコンピュータに実行させるためのプログラムが記録された非一時的なコンピュータ読み取り可能な記録媒体でもよい。【００５５】
これにより、本発明に係る情報処理方法が記録媒体として実現される。【００５６】
また、本発明に係る集積回路は、不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、前記揮発メモリにロードされた前記共有ライブラリを利用するプロセスを動作させる集積回路であって、前記揮発メモリ内の前記共有ライブラリが改竄されているか否かを判定する改竄判定部と、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記揮発メモリ内の前記共有ライブラリと、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスとの対応関係を示す情報を含む共有ライブラリ情報を保持するための共有ライブラリ情報保持部に保持される前記共有ライブラリ情報を参照することにより、前記揮発メモリ内の前記共有ライブラリを利用する前記プロセスを特定し、特定された前記プロセスを停止させるプロセス制御部と、前記揮発メモリ内の前記共有ライブラリが改竄されていると判定された場合、前記不揮発メモリ内の前記共有ライブラリを前記揮発メモリに再ロードすることにより、前記揮発メモリ内の前記共有ライブラリを回復させる共有ライブラリ回復部とを備える集積回路でもよい。【００５７】
これにより、本発明に係る情報処理装置が集積回路として実現される。【００５８】
なお、上述の通り、本発明は、このような情報処理装置として実現できるだけでなく、情報処理装置に含まれる特徴的な手段をステップとする方法として実現できる。また、本発明は、そのような特徴的なステップをコンピュータに実行させるプログラムとして実現できる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体およびインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。【００５９】
さらに、本発明は、このような情報処理装置の機能の一部または全てを実現する半導体集積回路（ＬＳＩ）として実現できる。
【発明の効果】
【００６０】
本発明により、共有ライブラリの改竄により影響を受けるプロセスのみが停止される。したがって、揮発メモリにロードされた共有ライブラリが改竄された場合の影響が抑制される。
【図面の簡単な説明】
【００６１】
【図１】図１は、本発明の実施の形態１に係る情報処理装置の全体構成図である。
【図２】図２は、本発明の実施の形態１に係る情報処理装置の起動時のシーケンス図である。
【図３】図３は、本発明の実施の形態１に係るプロセス空間を示す図である。
【図４】図４は、本発明の実施の形態１に係るプロセス空間における共有ライブラリのマップを示す図である。
【図５】図５は、本発明の実施の形態１に係るハッシュリスト生成の概要を示す図である。
【図６】図６は、本発明の実施の形態１に係る共有ライブラリのファイルフォーマットを示す図である。
【図７】図７は、本発明の実施の形態１に係るＰｒｅｌｉｎｋマップを示す図である。
【図８】図８は、本発明の実施の形態１に係るハッシュリスト生成のフローチャートである。
【図９】図９は、本発明の実施の形態１に係る不揮発メモリ用共有ライブラリハッシュリストを示す図である。
【図１０】図１０は、本発明の実施の形態１に係る揮発メモリ用共有ライブラリハッシュリストを示す図である。
【図１１】図１１は、本発明の実施の形態１に係る情報処理装置の構成図である。
【図１２】図１２は、本発明の実施の形態１に係る情報処理装置において複数のプロセスが起動している状態を示す図である。
【図１３】図１３は、本発明の実施の形態１に係るプロセス管理情報を示す図である。
【図１４】図１４は、本発明の実施の形態１に係る改竄検出後のプロセス管理情報を示す図である。
【図１５】図１５は、本発明の実施の形態１に係る共有ライブラリ管理情報を示す図である。
【図１６】図１６は、本発明の実施の形態１に係る停止プロセスコンテキスト情報を示す図である。
【図１７】図１７は、本発明の実施の形態１に係る共有ライブラリの回復動作のシーケンス図である。
【図１８】図１８は、本発明の実施の形態１に係る共有ライブラリの回復動作のシーケンス図である。
【図１９】図１９は、本発明の実施の形態１に係る改竄検出時のプロセス空間とプログラムカウンタの状態を示す図である。
【図２０】図２０は、本発明の実施の形態１に係るアプリと共有ライブラリの呼出関係を示す図である。
【図２１】図２１は、本発明の実施の形態１に係るスタックの伸張を示す図である。
【図２２】図２２は、本発明の実施の形態１に係るプロセス再開動作を示すフローチャートである。
【図２３】図２３は、本発明の実施の形態２に係る共有ライブラリ管理情報を示す図である。
【図２４】図２４は、本発明の実施の形態２に係る共有ライブラリの改竄チェックのフローチャートである。
【図２５】図２５は、本発明の実施の形態３に係る情報処理装置の構成図である。
【図２６】図２６は、本発明の実施の形態３に係る情報処理装置の動作を示すフローチャートである。
【発明を実施するための形態】
【００６２】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００６３】
（実施の形態１）
本発明の実施の形態１に係る情報処理装置は、アプリケーションのプロセス空間にロードされた共有ライブラリに対して、プロセス実行中に共有ライブラリの改竄検出を行う。
【００６４】
共有ライブラリの改竄が検出された場合、情報処理装置は、改竄された共有ライブラリを利用しているプロセスの実行を停止する。そして、情報処理装置は、不揮発メモリにある共有ライブラリを再ロードして回復する。また、情報処理装置は、回復後に停止していたプロセスを再開させる。これにより、改竄された共有ライブラリを利用している複数のプロセスが、回復される。
【００６５】
まず、図１を用いて、情報処理装置の全体構成について説明する。
【００６６】
図１は、本発明の実施の形態１に係る情報処理装置の全体構成図である。図１では、情報処理装置１０が電源起動し、第１アプリプロセス２１０と第２アプリプロセス２２０が実行している状態の情報処理装置１０の全体構成が示されている。
【００６７】
情報処理装置１０は、不揮発メモリ１００と、揮発メモリ２００と、システムＬＳＩ３００とを備える。
【００６８】
システムＬＳＩ３００は、外部バスを介して、不揮発メモリ１００および揮発メモリ２００に接続されている。
【００６９】
また、システムＬＳＩ３００は、ＣＰＵ４１０と、ＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）４２０と、切替え管理部４３０と、保護メモリ４００とを備える。
【００７０】
保護メモリ４００には、ロードされたセキュアブート部４４０と、セキュアＯＳ４５０と、セキュアアプリ４６０とが記憶されている。セキュアブート部４４０と、セキュアＯＳ４５０と、セキュアアプリ４６０とは、ＣＰＵ４１０により、機能部として、動作する。
【００７１】
不揮発メモリ１００には、第１アプリ１１０と、第２アプリ１２０と、リンカ・ローダ１３０と、第１共有ライブラリ１４１と、第２共有ライブラリ１４２と、第３共有ライブラリ１４３とが記憶されている。さらに、不揮発メモリ１００には、ＯＳ１５０と、検出回復部１６０と、ハッシュリスト保持部１７０と、鍵保持部１８０とが記憶されている。
【００７２】
揮発メモリ２００には、第１アプリプロセス２１０と、第２アプリプロセス２２０と、ＯＳ２５０と、検出回復部２６０とが記憶されている。第１アプリプロセス２１０と、第２アプリプロセス２２０と、ＯＳ２５０と、検出回復部２６０とは、ＣＰＵ４１０により、機能部として、動作する。
【００７３】
検出回復部１６０は、揮発メモリ２００上にロードされた第１アプリプロセス２１０、第２アプリプロセス２２０、第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３の改竄を検出する機能を有する。そして、検出回復部１６０は、改竄された共有ライブラリを利用しているアプリプロセスを一時停止する機能を有する。
【００７４】
また、共有ライブラリの改竄が検出された場合、検出回復部１６０は、不揮発メモリ１００にある共有ライブラリを揮発メモリ２００へ再度ロードしなおす機能を有する。これにより、検出回復部１６０は、揮発メモリ２００の共有ライブラリを回復させる機能を有する。そして、検出回復部１６０は、回復後に一時停止していたアプリプロセスを再開させる。検出回復部２６０の詳細な動作については図１１〜図１８を用いて後述する。
【００７５】
不揮発メモリ１００のＯＳ１５０および検出回復部１６０は、それぞれ、揮発メモリ２００のＯＳ２５０および検出回復部２６０として、ロードされ、ＣＰＵ４１０により機能部として動作する。また、不揮発メモリ１００のリンカ・ローダ１３０は、図３に示すように揮発メモリ２００のアプリプロセス空間にロードされ、ＣＰＵ４１０により機能する。
【００７６】
不揮発メモリ１００の第１アプリ１１０および第２アプリ１２０は、それぞれ、揮発メモリ２００へロードされ、第１アプリプロセス２１０および第２アプリプロセス２２０として動作する。
【００７７】
リンカ・ローダ１３０は、第１アプリプロセス２１０のプロセス空間に、第１アプリプロセス２１０の動作に必要な、第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３をロードする。同様に、リンカ・ローダ１３０は、第２アプリプロセス２２０のプロセス空間に、第２アプリプロセス２２０の動作に必要な、第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３をロードする。プロセス空間の説明は、図３を用いて後述する。
【００７８】
ハッシュリスト保持部１７０は、揮発メモリ用共有ライブラリハッシュリストを保持している。揮発メモリ用共有ライブラリハッシュリストには、揮発メモリ２００にロードされた第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３の参照ハッシュ値がリスト化されている。このリストは、図１０を用いて後述する。
【００７９】
また、ハッシュリスト保持部１７０は、不揮発メモリ用共有ライブラリハッシュリストも保持している。不揮発メモリ用共有ライブラリハッシュリストは、不揮発メモリ１００の第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３の参照ハッシュ値がリスト化されている。このリストは、図９を用いて後述する。
【００８０】
また、ハッシュリスト保持部１７０は、電源起動後からアプリ起動まで各ソフトウェア（セキュアブート部４４０、セキュアＯＳ４５０、セキュアアプリ４６０、ＯＳ１５０および検出回復部１６０）の参照ハッシュ値を記録したリスト（図示しない）も保持している。ハッシュリスト保持部１７０が保持しているこれらのハッシュリストは、ハッシュリスト自身の完全性を検証するため、署名が付与されている。
【００８１】
鍵保持部１８０は、ハッシュリストの署名を検証するために利用される署名検証鍵を保持している。ここでの署名は、公開鍵暗号方式に基づくデジタル署名方式を利用する。鍵保持部１８０は、公開鍵暗号方式における公開鍵に相当する鍵を保持している。
【００８２】
続いて、図２を用いて情報処理装置１０の電源投入後からアプリが起動するまでのセキュアブートについて説明する。
【００８３】
図２は、図１に示された情報処理装置１０の起動時のシーケンス図であって、電源投入からアプリ起動までの動作を示す。
【００８４】
情報処理装置１０は、電源が投入された後、システムＬＳＩ３００内部にあるＩＰＬ４２０を起動する。
【００８５】
ＩＰＬ４２０は、セキュアブート用ハッシュリスト（図示しない）を用いて、ＩＰＬ４２０自身の改竄検証を行い、その後、情報処理装置１０内の保護メモリ４００、切替え管理部４３０、および、周辺回路（図示しない）を初期化する（Ｓ１０１）。初期化後、ＩＰＬ４２０は、セキュアブート用ハッシュリストを用いて、セキュアブート部４４０が改竄されていないか検証する。改竄されていなければ、ＩＰＬ４２０は、セキュアブート部４４０をロードする（Ｓ１０２）。
【００８６】
次に、セキュアブート部４４０は、セキュアブート用ハッシュリストを用いて、セキュアＯＳ４５０が改竄されていないか検証する（Ｓ１０３）。検証（Ｓ１０３）の結果、セキュアＯＳ４５０が改竄されていなければ、セキュアブート部４４０は、セキュアＯＳ４５０をロードする（Ｓ１０４）。
【００８７】
ここで図示しないが、ＯＳ２５０から切替え管理部４３０を介してセキュアアプリ４６０の起動要求があれば、セキュアＯＳ４５０は、セキュアアプリ４６０をロードする。セキュアＯＳ４５０は、セキュアアプリ４６０のロード前に、セキュアブート用ハッシュリストを用いて、セキュアアプリ４６０が改竄されていないか検証する。改竄されていなければ、セキュアＯＳ４５０は、セキュアアプリ４６０をロードする。
【００８８】
セキュアＯＳ４５０のロード後、セキュアブート部４４０は、セキュアブート用ハッシュリストを用いて、不揮発メモリ１００のＯＳ１５０が改竄されていないか検証する（Ｓ１０５）。検証（Ｓ１０５）の結果、不揮発メモリ１００のＯＳ１５０が改竄されていなければ、セキュアブート部４４０は、不揮発メモリ１００のＯＳ１５０を揮発メモリ２００のＯＳ２５０としてロードする（Ｓ１０６）。
【００８９】
次に、揮発メモリ２００へロードされたＯＳ２５０は、アプリ起動要求時、セキュアブート用ハッシュリストを用いて、不揮発メモリ１００の第１アプリ１１０、第２アプリ１２０が改竄されていないか検証する（Ｓ１０７）。
【００９０】
検証（Ｓ１０７）の結果、不揮発メモリ１００の第１アプリ１１０、第２アプリ１２０が改竄されていなければ、ＯＳ２５０は、不揮発メモリ１００の第１アプリ１１０を揮発メモリ２００の第１アプリプロセス２１０としてロードする。また、同様に、ＯＳ２５０は、不揮発メモリ１００の第２アプリ１２０を揮発メモリ２００の第２アプリプロセス２２０としてロードする（Ｓ１０８）。ここで、プロセス内で利用される共有ライブラリは、プロセス起動時にロードされてもよいし、動的にロードされてもよい。
【００９１】
第１アプリ１１０および第２アプリ１２０が第１アプリプロセス２１０および第２アプリプロセス２２０としてロードされた後、第１アプリプロセス２１０および第２アプリプロセス２２０が実行される（Ｓ１０９）。
【００９２】
なお、図示していないが、ＯＳ２５０は、第１アプリ１１０および第２アプリ１２０と同様に、検出回復部１６０も改竄されているか否かを検証する。
【００９３】
また、検証（Ｓ１０３、Ｓ１０５、Ｓ１０７）で改竄されたと判定された場合、ブートは中止される。
【００９４】
また、セキュアブート用ハッシュリストは、鍵保持部１８０に保持している公開鍵で署名検証される。そして、署名検証された結果が正常の時のみ、ＩＰＬ４２０、セキュアブート部４４０およびセキュアＯＳ４５０は、改竄を検証する。一方、ハッシュリストの署名検証された結果が正常でない場合、ＩＰＬ４２０等は、ブートを中止する。
【００９５】
また、上述の手順に含まれるセキュアブートには、非特許文献１のＴＣＧ（Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒｏｕｐ）のＭＰＷＧ（Ｍｏｂｉｌｅ  Ｐｈｏｎｅ  Ｗｏｒｋ  Ｇｒｏｕｐ）で規定されたセキュアブートが用いられてもよい。
【００９６】
また、セキュアブート部４４０、セキュアＯＳ４５０およびセキュアアプリ４６０は、ロード前に、システムＬＳＩ３００内に静的なデータとして保持されていてもよい。もしくは、そのような静的なデータは、情報処理装置１０で生成されるシステム固有鍵で暗号化され、不揮発メモリ１００に記録されていてもよい。そして、そのデータは、システム固有鍵で復号されて、保護メモリ４００にロードされてもよい。
【００９７】
以上で、電源起動後からアプリ起動までのフローチャートの説明を終わる。
【００９８】
図３は、図１に示された第１アプリプロセス２１０のプロセス空間を示す図である。
【００９９】
プロセス空間には、一般にカーネル空間とユーザ空間が存在するが、図３では、ユーザ空間のみが示されている。
【０１００】
図３に示された例では、第１アプリプロセス２１０が、第１共有ライブラリ１４１（ｌｉｂ１．ｓｏ）、第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）、および、第３共有ライブラリ１４３（ｌｉｂ３．ｓｏ）の機能を利用する。
【０１０１】
このような場合、第１アプリ１１０、第１共有ライブラリ１４１（ｌｉｂ１．ｓｏ）、第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）、第３共有ライブラリ１４３（ｌｉｂ３．ｓｏ）、および、リンカ・ローダ１３０が、揮発メモリ２００にロードされる。そして、それらが、第１アプリプロセス２１０の仮想アドレス空間にマップされる。
【０１０２】
リンカ・ローダ１３０は、第１アプリプロセス２１０が所望の動作をするのに必要な共有ライブラリをロードする機能を有する。リンカ・ローダ１３０の詳細な動作については、非特許文献２の「Ｌｉｎｋｅｒｓ＆Ｌｏａｄｅｒｓ」の書籍に詳しく説明されている。
【０１０３】
なお、第１アプリプロセス２１０の仮想アドレス空間には、不揮発メモリ１００上の第１アプリ１１０、および、第１共有ライブラリ１４１（ｌｉｂ１．ｓｏ）等が、マップされてもよい。
【０１０４】
図４は、第１アプリプロセス２１０および第２アプリプロセス２２０の各プロセス空間における仮想アドレスと物理アドレスとの関係を示す図である。
【０１０５】
共有ライブラリは、複数のプロセスで共有して利用できるように作成されたライブラリである。図４のように第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３は、複数のプロセスで利用される。リンカ・ローダ１３０は、不揮発メモリ１００にファイルとして存在する第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３を揮発メモリ２００の物理アドレスのページにロードする。
【０１０６】
第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３は、後述のコンパイラおよびリンカによって、オブジェクトファイル形式になっている。各共有ライブラリの実行コードであるｔｅｘｔセクションは、実行可能な属性が付与されたページにロードされる。各共有ライブラリの読み書き可能なデータ領域であるｄａｔａセクションは、読み書き可能な属性が付与されたページにロードされる。オブジェクトファイル形式については、図６を用いて後述する。
【０１０７】
図４の場合、第１アプリプロセス２１０および第２アプリプロセス２２０の両方の仮想アドレス空間に、第１共有ライブラリ１４１（ｌｉｂ１．ｓｏ）および第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）がある。これらの仮想アドレス空間の第１共有ライブラリ１４１（ｌｉｂ１．ｓｏ）および第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）に、物理アドレス上にあるｌｉｂ１．ｓｏおよびｌｉｂ２．ｓｏがマップされている。
【０１０８】
そのため、マルウェアにより物理アドレス上のｌｉｂ１．ｓｏとｌｉｂ２．ｓｏが改竄されると、第１アプリプロセス２１０と第２アプリプロセス２２０に改竄の影響が及ぶ。改竄された共有ライブラリの回復については、図１１から図１８を用いて後述する。
【０１０９】
図５は、ハッシュリスト保持部１７０によって保持されている不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９の生成動作の概要を示す図である。
【０１１０】
コンパイラ５０２は、共有ライブラリ５０４のソースコード５０１をコンパイルすることにより、オブジェクトコードを生成する。リンカ５０３は、生成されたオブジェクトコードに必要なライブラリをリンクする。つまり、リンカ５０３は、オブジェクトコードに必要なライブラリを付け加える。そして、リンカ５０３は、必要なライブラリが付け加えられたオブジェクトコードを共有ライブラリ５０４として出力する。
【０１１１】
ハッシュリスト生成ツール５０７は、開発マシン上で動作するツールである。ハッシュリスト生成ツール５０７は、共有ライブラリ５０４、秘密鍵５０５およびＰｒｅｌｉｎｋマップ５０６を入力とし、不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９を出力する。
【０１１２】
より具体的には、ハッシュリスト生成ツール５０７は、共有ライブラリ５０４の参照ハッシュ値を生成する。そして、ハッシュリスト生成ツール５０７は、参照ハッシュ値をリスト化することにより、不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９を生成する。その後、ハッシュリスト生成ツール５０７は、秘密鍵５０５で不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９に署名を付与する。
【０１１３】
ハッシュリスト生成ツール５０７内の詳細動作は、図８を用いて後述する。
【０１１４】
なお、図１に示された情報処理装置１０が、図５に示された各機能部を備えることにより、不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９を生成してもよい。または、開発マシン等の他の装置が、不揮発メモリ用共有ライブラリハッシュリスト５０８および揮発メモリ用共有ライブラリハッシュリスト５０９を生成してもよい。
【０１１５】
図６は、図５に示された共有ライブラリ５０４のファイルフォーマットを示す図である。図６では、共有ライブラリ５０４が、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ）形式のオブジェクトファイル形式で示されている。詳細は、非特許文献２の「Ｌｉｎｋｅｒｓ＆Ｌｏａｄｅｒｓ」で説明されている。
【０１１６】
共有ライブラリ５０４は、複数のセクションから構成され、各セクションには読み出し属性、書き込み属性、または、読み出し属性および書き込み属性の両方が付与されている。読み出し属性のみが付与されたセクションは、読み出し専用のセクションである。読み出し属性および書き込み属性の両方が付与されたセクションは、読み書き可能なセクションである。
【０１１７】
図６に示された複数のセクションのうち、ヘッダ、ｈａｓｈ、ｄｙｎｓｙｍ、ｄｙｎｓｔｒ、ｐｌｔ、ｔｅｘｔおよびｒｏｄａｔａの各セクションは、読み出し専用のセクションである。一方、図６に示された複数のセクションのうち、ｄａｔａ、ｇｏｔ、ｄｙｎａｍｉｃおよびｂｓｓの各セクションは、読み書き可能なセクションである。
【０１１８】
図１の第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３のファイル形式は、図６で示すファイル形式で記憶されている。読み出し専用セクションは、揮発メモリ２００にロードされる際に、読み出し専用属性が付与されて物理ページおよび仮想ページにマップされる。また、読み書き可能なセクションは、揮発メモリ２００にロードされる際に、読み出し属性および書き込み属性が付与されて物理ページおよび仮想ページにマップされる。
【０１１９】
図７は、図５に示されたハッシュリスト生成ツール５０７に入力されるＰｒｅｌｉｎｋマップ５０６を示す図である。
【０１２０】
Ｐｒｅｌｉｎｋマップ５０６は、ライブラリ名とマップアドレスが記載されたファイルである。図７の例で説明すると、第１共有ライブラリ１４１は、ｌｉｂ１．ｓｏというファイル名である。そして、ｌｉｂ１．ｓｏのマップアドレスは、０ｘＡ０００００００である。したがって、ｌｉｂ１．ｓｏは、プロセスの仮想アドレス空間の０ｘＡ０００００００にマップされる。
【０１２１】
第１共有ライブラリ１４１と同様に、第２共有ライブラリ１４２のｌｉｂ２．ｓｏは、仮想アドレス空間の０ｘＡ０００４０００にマップされる。また、第３共有ライブラリ１４３のｌｉｂ３．ｓｏは、仮想アドレス空間の０ｘＡ０００８０００にマップされる。
【０１２２】
図８は、ハッシュリスト生成ツール５０７における入力から出力までの動作を示すフローチャートである。ここで、入力は、共有ライブラリ５０４、秘密鍵５０５およびＰｒｅｌｉｎｋマップ５０６である。出力は、不揮発メモリ用共有ライブラリハッシュリスト５０８または揮発メモリ用共有ライブラリハッシュリスト５０９である。
【０１２３】
まず、ハッシュリスト生成ツール５０７は、不揮発メモリ用共有ライブラリハッシュリスト５０８を生成するモードなのか、揮発メモリ用共有ライブラリハッシュリスト５０９を生成するモードなのかを判断する（Ｓ８０１）。図示していないが、この判断には、生成モードが、ハッシュリスト生成ツール５０７に入力パラメータとして与えられてもよい。
【０１２４】
ハッシュリスト生成ツール５０７は、判断（Ｓ８０１）の結果、不揮発メモリ用共有ライブラリハッシュリスト５０８を生成する場合、不揮発メモリ１００において改竄をチェックする対象になる共有ライブラリ５０４を読み込む（Ｓ８０２）。
【０１２５】
次に、ハッシュリスト生成ツール５０７は、前段のステップ（Ｓ８０２）で読み込んだ共有ライブラリ５０４のハッシュ値を算出する。そして、ハッシュリスト生成ツール５０７は、算出したハッシュ値を参照ハッシュ値として不揮発メモリ用共有ライブラリハッシュリスト５０８に登録する（Ｓ８０３）。
【０１２６】
次に、ハッシュリスト生成ツール５０７は、不揮発メモリ用共有ライブラリハッシュリスト５０８に、入力された秘密鍵５０５で署名を付与する（Ｓ８０４）。
【０１２７】
最後に、ハッシュリスト生成ツール５０７は、不揮発メモリ用共有ライブラリハッシュリスト５０８を出力する（Ｓ８０５）。
【０１２８】
ここで、モードを判断するステップ（Ｓ８０１）に戻って説明を再開する。
【０１２９】
ハッシュリスト生成ツール５０７は、判断（Ｓ８０１）の結果、揮発メモリ用共有ライブラリハッシュリスト５０９を生成する場合、揮発メモリ２００において改竄をチェックする対象になる共有ライブラリ５０４を読み込む（Ｓ８０６）。
【０１３０】
次に、ハッシュリスト生成ツール５０７は、前段のステップ（Ｓ８０６）で読み込んだ共有ライブラリ５０４を、ファイルフォーマットに従って解析し、読み出し専用領域のハッシュ値を参照ハッシュ値として算出する（Ｓ８０７）。
【０１３１】
実施の形態１では、ハッシュリスト生成ツール５０７は、図６に示すＥＬＦ形式のオブジェクトファイルを解析し、ＥＬＦ形式の読み出し専用領域に対してハッシュ値を算出する。
【０１３２】
次に、ハッシュリスト生成ツール５０７は、Ｐｒｅｌｉｎｋマップ５０６を読み込む（Ｓ８０８）。
【０１３３】
次に、ハッシュリスト生成ツール５０７は、共有ライブラリ名と、マップアドレスと、ハッシュ値とを揮発メモリ用共有ライブラリハッシュリスト５０９に登録する（Ｓ８０９）。ここで、共有ライブラリ名は、改竄チェック対象の共有ライブラリ名である。マップアドレスは、仮想アドレスにおいて共有ライブラリ５０４がマップされるマップアドレスである。ハッシュ値は、参照ハッシュ値として算出されたハッシュ値である。
【０１３４】
次に、ハッシュリスト生成ツール５０７は、揮発メモリ用共有ライブラリハッシュリスト５０９に、入力された秘密鍵５０５で署名を付与する（Ｓ８１０）。
【０１３５】
最後に、ハッシュリスト生成ツール５０７は、揮発メモリ用共有ライブラリハッシュリスト５０９を出力する（Ｓ８１１）。
【０１３６】
なお、ハッシュ値算出に利用するハッシュアルゴリズムは、ＳＨＡ１、ＳＨＡ２、ＭＤ４またはＭＤ５など一方向性関数であるハッシュ関数を利用してもよい。
【０１３７】
また、署名生成に利用する署名方式は、ＲＳＡ署名、ＥｌＧｍａｌ署名またはＤＳＡ署名など一般に広く利用されるデジタル署名方式でもよい。
【０１３８】
また、ハッシュリスト生成ツール５０７は、揮発メモリ用のハッシュ値生成のステップ（Ｓ８０７）において読み出し専用領域のハッシュ値を算出する際に、リロケーション部分をスキップするようにしてハッシュ値を算出するようにしてもよい。
【０１３９】
また、ハッシュリスト生成ツール５０７は、各ハッシュリストを登録する際（Ｓ８０３、Ｓ８０９）、共有ライブラリ５０４のサイズを登録してもよい。そして、ハッシュリスト生成ツール５０７は、揮発メモリ用共有ライブラリハッシュリスト５０９には、共有ライブラリ５０４のサイズとして、読み出し専用領域のサイズを登録してもよい。
【０１４０】
図９は、図５に示された不揮発メモリ用共有ライブラリハッシュリスト５０８を具体的に示す図である。図９に示された不揮発メモリ用共有ライブラリハッシュリスト５０８には、チェック対象の共有ライブラリのファイル名、および、参照ハッシュ値が登録されている。ここで、参照ハッシュ値は、図８のハッシュ値生成のステップ（Ｓ８０３）で算出されたハッシュ値である。
【０１４１】
そして、不揮発メモリ用共有ライブラリハッシュリスト５０８には、秘密鍵５０５によって署名が付与されている。
【０１４２】
図１０は、図５に示された揮発メモリ用共有ライブラリハッシュリスト５０９を具体的に示す図である。図１０に示された揮発メモリ用共有ライブラリハッシュリスト５０９は、チェック対象の共有ライブラリのファイル名、共有ライブラリの仮想アドレス、共有ライブラリのサイズ、および、参照ハッシュ値が登録されている。ここで、参照ハッシュ値は、図８のハッシュ値生成のステップ（Ｓ８０７）で算出されたハッシュ値である。
【０１４３】
そして、揮発メモリ用共有ライブラリハッシュリスト５０９には、秘密鍵５０５によって署名が付与されている。
【０１４４】
図９に示された不揮発メモリ用共有ライブラリハッシュリスト５０８と、不揮発メモリ１００内の共有ライブラリから得られる情報との比較によって、不揮発メモリ１００内の共有ライブラリの改竄が検出される。同様に、図１０に示された揮発メモリ用共有ライブラリハッシュリスト５０９と、揮発メモリ２００内の共有ライブラリから得られる情報との比較によって、揮発メモリ２００内の共有ライブラリの改竄が検出される。
【０１４５】
すなわち、予め共有ライブラリから抽出されるハッシュ値等の情報と、不揮発メモリ１００内または揮発メモリ２００内の共有ライブラリから抽出されるハッシュ値等の情報とが比較されることにより、改竄が検出される。
【０１４６】
図１１は、図１に示された情報処理装置１０の構成を示す図である。図１１では、特に、図１に示された検出回復部１６０の構成が示されている。
【０１４７】
検出回復部１６０は、改竄検出部（「改竄判定部」とも称される）１６１、プロセス制御部１６２および共有ライブラリ回復部１６５を備える。また、検出回復部１６０は、プロセス管理情報保持部（「プロセス動作情報保持部」とも称される）１６３および共有ライブラリ管理情報保持部（単に「共有ライブラリ情報保持部」とも称される）１６４を備える。
【０１４８】
改竄検出部１６１は、アプリケーションのプロセス空間にロードされた揮発メモリ２００上の共有ライブラリに対して、プロセス実行中に共有ライブラリの改竄検出を行う。
【０１４９】
プロセス制御部１６２は、改竄検出部１６１によって改竄されていると判定された共有ライブラリを利用しているプロセスを特定する。そして、プロセス制御部１６２は、特定したプロセスを一時停止させる。その後、共有ライブラリ回復部１６５は、不揮発メモリ１００から揮発メモリ２００へ共有ライブラリを再ロードする。これにより、共有ライブラリが、改竄された状態から回復される。回復後、プロセス制御部１６２は、一時停止していたプロセスを再開させる。
【０１５０】
プロセス管理情報保持部１６３は、図１３に示すプロセス管理情報（「プロセス動作情報」とも称される）１６３０、および、図１６に示す停止プロセスコンテキスト情報（単に「停止プロセス情報」とも称される）１６３１を保持する。なお、停止プロセスコンテキスト情報は、プロセス管理情報保持部１６３とは別の保持部に保持されてもよい。
【０１５１】
共有ライブラリ管理情報保持部１６４は、図１５に示す共有ライブラリ管理情報（単に「共有ライブラリ情報」とも称される）１６４０を保持する。
【０１５２】
共有ライブラリ回復部１６５は、不揮発メモリ１００から揮発メモリ２００へ共有ライブラリを再ロードすることにより、改竄された共有ライブラリを回復する。
【０１５３】
なお、不揮発メモリ１００上の検出回復部１６０は、図１に示された検出回復部２６０として、揮発メモリ２００にロードされる。したがって、図１に示された検出回復部２６０は、不揮発メモリ１００上の検出回復部１６０と同等の機能部として動作する。
【０１５４】
なお、実施の形態１において、不揮発メモリ１００内の検出回復部１６０が揮発メモリ２００にロードされ、揮発メモリ２００内の検出回復部２６０が、検出および回復の動作を実行する。しかし、検出回復部１６０は、情報処理装置１０における電子回路であってもよい。
【０１５５】
例えば、改竄検出部１６１、プロセス制御部１６２、プロセス管理情報保持部１６３、共有ライブラリ管理情報保持部１６４および共有ライブラリ回復部１６５は、集積回路として実装されてもよい。また、これらのうち、演算を実行する改竄検出部１６１、プロセス制御部１６２および共有ライブラリ回復部１６５のみが集積回路として実装されてもよい。
【０１５６】
また、ＣＰＵ４１０は、不揮発メモリ１００内の検出回復部１６０を、揮発メモリ２００にロードせず、直接実行してもよい。
【０１５７】
また、情報処理装置１０は、プロセスの動作情報を管理することなく共有ライブラリを回復させてもよい。この場合、プロセスの情報を保持しているプロセス管理情報保持部１６３は、無くてもよい。
【０１５８】
また、プロセス管理情報保持部１６３および共有ライブラリ管理情報保持部１６４は、情報を保持するための記憶部である。これらの保持部は、情報を保持するための記憶部をハードウェアとして有し、さらに、当該記憶部に情報を格納する機能を有していてもよい。また、これらの保持部は実質的に１個の記憶部であって、当該記憶部に複数の情報が区分して格納されてもよい。
【０１５９】
図１２は、図１に示された情報処理装置１０内で複数のプロセスが起動している状態を示す図である。
【０１６０】
図１２では、各種初期化を行うＩｎｉｔプロセス２０５、第１アプリプロセス２１０、第２アプリプロセス２２０、第３アプリプロセス２３０および第４アプリプロセス２４０が起動した状態が示されている。各アプリプロセスは、図１２のように、第１共有ライブラリ１４１、第２共有ライブラリ１４２および第３共有ライブラリ１４３のうち少なくとも１つを利用する。
【０１６１】
以降、図１２のような複数プロセスが起動している状態を前提に説明する。
【０１６２】
図１３は、図１１に示されたプロセス管理情報保持部１６３が保持するプロセス管理情報を示す図である。
【０１６３】
図１３に示されたプロセス管理情報１６３０は、プロセスを識別するためのプロセスＩＤと、その親プロセスを示す親プロセスＩＤと、プロセスが起動中なのか停止中なのかを示すステータスを含む。
【０１６４】
図１３は、図１２のような、複数プロセスが起動している状態を示している。図１２に示されたプロセスの全てが起動中であるため、全てのプロセスのステータスは「ＲＵＮ」として保持されている。
【０１６５】
図１４は、図１１に示されたプロセス管理情報保持部１６３が保持するプロセス管理情報を示す図であって、改竄検出後のプロセス管理情報を示す図である。
【０１６６】
例えば、改竄検出部１６１は、プロセスＩＤ１００とプロセスＩＤ２００のプロセスにロードされているｌｉｂ２．ｓｏの改竄を検出する。そして、プロセス制御部１６２は、プロセスＩＤ１００とプロセスＩＤ２００のプロセスを一時停止させる。図１４には、プロセスＩＤ１００とプロセスＩＤ２００のプロセスが一時停止された後のプロセス管理情報１６３０が示されている。
【０１６７】
停止したプロセスのステータスには、プロセスが一時停止状態であることを示す「ＳＴＯＰ」が記録される。なお、プロセスが、一時停止ではなく、完全に停止した場合、プロセス管理情報１６３０から情報が削除されてもよい。これにより、一時的な停止と、完全な停止とが区別される。
【０１６８】
プロセス制御部１６２は、一時停止させたプロセスのステータスを「ＳＴＯＰ」に更新する。また、プロセス制御部１６２は、共有ライブラリの回復後、プロセス管理情報１６３０を参照することにより、一時停止させたプロセスを特定することができる。そして、プロセス制御部１６２は、特定されたプロセスを再開することができる。
【０１６９】
改竄検出部１６１は、プロセス管理情報１６３０から、動作しているプロセスを特定し、特定されたプロセスが利用する共有ライブラリが改竄されているか否かを判定してもよい。
【０１７０】
図１５は、図１１に示された共有ライブラリ管理情報保持部１６４が保持する共有ライブラリ管理情報を示す図である。
【０１７１】
図１５に示された共有ライブラリ管理情報１６４０は、共有ライブラリのファイルパスと、共有ライブラリがロードされている仮想アドレスと、共有ライブラリを利用しているプロセスのプロセスＩＤとを含む。
【０１７２】
例えば、図１５に示された共有ライブラリ管理情報１６４０は、／ｓｙｓｔｅｍ／ｌｉｂ／ｌｉｂ１．ｓｏが仮想アドレスの０ｘＡ０００００００から０ｘＡ０００１０００にロードされていることを示している。また、共有ライブラリ管理情報１６４０は、プロセスＩＤが１００、２００、３００である各プロセスで／ｓｙｓｔｅｍ／ｌｉｂ／ｌｉｂ１．ｓｏが利用されていることを示している。
【０１７３】
なお、共有ライブラリ管理情報１６４０は、共有ライブラリがロードされたタイミングで生成される。
【０１７４】
また、本実施の形態では、共有ライブラリは、Ｐｒｅｌｉｎｋされるライブラリとして説明されている。しかし、非Ｐｒｅｌｉｎｋのライブラリが、改竄チェックされる対象であってもよい。
【０１７５】
非Ｐｒｅｌｉｎｋのライブラリは、ロードされる仮想アドレスが固定ではない。そのため、非Ｐｒｅｌｉｎｋのライブラリが改竄チェックされる対象に含まれる場合、共有ライブラリ管理情報保持部１６４は、Ｐｒｅｌｉｎｋのライブラリと非Ｐｒｅｌｉｎｋのライブラリとを区別するための情報を仮想アドレスフィールドに登録してもよい。例えば、共有ライブラリ管理情報保持部１６４は、共有ライブラリ管理情報１６４０において、非Ｐｒｅｌｉｎｋのライブラリについての仮想アドレスフィールドをＮＵＬＬにしてもよい。
【０１７６】
また、共有ライブラリ管理情報保持部１６４は、仮想アドレスフィールドのない共有ライブラリ管理情報１６４０を、別途生成することにより、保持してもよい。
【０１７７】
図１６は、図１１に示されたプロセス管理情報保持部１６３が保持する停止プロセスコンテキスト情報を示したものである。
【０１７８】
図１６に示された停止プロセスコンテキスト情報１６３１は、停止したプロセスが再開するために必要な情報を有する。停止プロセスコンテキスト情報１６３１は、停止したプロセスを識別するプロセスＩＤと、プロセス停止時のプログラムカウンタ（ＰＣ）と、スタックポインタ（ＳＰ）と、フレームポインタ（ＦＰ）とを含む。また、図示していないが、停止プロセスコンテキスト情報１６３１は、プロセスを再開させるために必要な情報であるＣＰＵ４１０の各種レジスタ情報を含んでもよい。
【０１７９】
停止プロセスコンテキスト情報１６３１は、上記のような、プロセスの動作状態を示す動作状態情報を含んでもよい。また、停止プロセスコンテキスト情報１６３１は、プロセスの動作過程であるスタックの情報を含んでもよい。
【０１８０】
また、停止プロセスコンテキスト情報１６３１は、プロセスの進行状態を示す進行状態情報を含んでもよい。上述のように、停止プロセスコンテキスト情報１６３１は、プログラムカウンタ（ＰＣ）の情報を進行状態情報として含んでもよい。また、停止プロセスコンテキスト情報１６３１は、プロセスの動作履歴を示す動作履歴情報を含んでもよい。上述のように、停止プロセスコンテキスト情報１６３１は、スタックの情報を動作履歴情報として含んでもよい。
【０１８１】
そして、プロセス制御部１６２は、停止プロセスコンテキスト情報１６３１によって示される進行状態に依存させて、プロセスを再開させてもよい。また、プロセス制御部１６２は、停止プロセスコンテキスト情報１６３１に含まれる動作履歴情報を参照して、共有ライブラリの利用前の状態で、プロセスを再開させてもよい。
【０１８２】
図１７および図１８は、本発明の実施の形態１に係る共有ライブラリ回復動作のシーケンス図である。
【０１８３】
ここから、図１７と図１８を用いて揮発メモリ２００上の共有ライブラリの改竄検出および回復について説明する。
【０１８４】
まず、改竄検出部１６１は、プロセス空間の揮発メモリ２００上にロードされている共有ライブラリのハッシュ値を算出する（Ｓ２００１）。
【０１８５】
次に、改竄検出部１６１は、前段のステップ（Ｓ２００１）で算出したハッシュ値と、揮発メモリ用共有ライブラリハッシュリスト５０９の参照ハッシュ値とを比較し、揮発メモリ２００上の共有ライブラリが改竄されているか否かを判定する（Ｓ２００２）。
【０１８６】
次に、改竄検出部１６１は、判定（Ｓ２００２）の結果、改竄ありと判定された場合、プロセス制御部１６２へ、改竄されたライブラリを利用しているプロセスを停止するよう要求する（Ｓ２００３）。
【０１８７】
ここで、判定（Ｓ２００２）の結果、改竄なしと判定された場合は、プロセスは停止されず継続される。改竄検出部１６１は、別のプロセス空間にロードされている別の共有ライブラリを改竄チェック対象として選択して、ハッシュ値算出のステップ（Ｓ２００１）に戻る。
【０１８８】
なお、改竄検出部１６１による共有ライブラリの改竄チェックは、プロセス実行中に定期的に行われてもよいし、プロセスの特定の動作タイミングで行われてもよい。改竄検出部１６１は、プロセスが行うべき所望の動作に支障がないような形で共有ライブラリの改竄チェックを行う。
【０１８９】
次に、プロセス制御部１６２は、共有ライブラリ管理情報保持部１６４に保持されている共有ライブラリ管理情報１６４０を参照する（Ｓ２００４）。そして、プロセス制御部１６２は、改竄と判定された共有ライブラリを利用しているプロセスを特定する（Ｓ２００５）。
【０１９０】
次に、プロセス制御部１６２は、前段のステップ（Ｓ２００５）で特定したプロセスを停止する（Ｓ２００６）。
【０１９１】
次に、プロセス制御部１６２は、前段のステップ（Ｓ２００６）で停止したプロセスを再開するのに必要な情報を、停止プロセスコンテキスト情報１６３１として生成する。そして、プロセス管理情報保持部１６３は、生成された停止プロセスコンテキスト情報１６３１を記録する（Ｓ２００７）。
【０１９２】
次に、プロセス制御部１６２は、プロセス管理情報保持部１６３が保持するプロセス管理情報１６３０によって記録されているステータスであって、停止したプロセスのステータスを「ＳＴＯＰ」に更新する（Ｓ２００８）。
【０１９３】
次に、改竄検出部１６１は、判定のステップ（Ｓ２００２）で改竄と判定された揮発メモリ２００上の共有ライブラリに対応する不揮発メモリ１００上の共有ライブラリのハッシュ値を算出する（Ｓ２００９）。
【０１９４】
次に、前段のステップ（Ｓ２００９）で算出したハッシュ値と、不揮発メモリ用共有ライブラリハッシュリスト５０８の参照ハッシュ値とを比較し、不揮発メモリ１００上の共有ライブラリが改竄されているか否かを判定する（Ｓ２０１０）。ここで、判定（Ｓ２０１０）の結果、改竄ありと判定された場合、情報処理装置１０は、後続のステップを中止してもよい。
【０１９５】
次に、共有ライブラリ回復部１６５に対し、改竄された共有ライブラリの回復を要求する（Ｓ２０１１）。
【０１９６】
次に、共有ライブラリ回復部１６５は、改竄された共有ライブラリを利用しているプロセスに対し、改竄された共有ライブラリをアンマップし、回復対象の共有ライブラリを不揮発メモリ１００から揮発メモリ２００へロードする（Ｓ２０１２）。その後、共有ライブラリ回復部１６５は、共有ライブラリをプロセス空間に再マップすることにより、共有ライブラリを回復する（Ｓ２０１３）。
【０１９７】
ここで、共有ライブラリが再ロード前の物理アドレスとは異なる物理アドレスにロードされた場合でも、再マップによって、プロセスが共有ライブラリを利用することができる。一方、共有ライブラリが再ロード前の物理アドレスと同じ物理アドレスにロードされた場合、再マップなしで、プロセスが共有ライブラリを利用することができる。したがって、共有ライブラリ回復部１６５は、共有ライブラリをプロセス空間に再マップしなくてもよい。
【０１９８】
次に、プロセス制御部１６２は、プロセス管理情報保持部１６３に記録されている停止プロセスコンテキスト情報１６３１を参照し、停止プロセスを再開するために必要な情報を読み込む（Ｓ２０１４）。
【０１９９】
次に、プロセス制御部１６２は、プロセス管理情報保持部１６３が保持しているプロセス管理情報１６３０内の「ＳＴＯＰ」を「ＲＵＮ」に更新する（Ｓ２０１５）。
【０２００】
最後に、プロセス制御部１６２は、読み込みステップ（Ｓ２０１４）で読み込んだ情報を利用し、一時停止していたプロセスを再開させる（Ｓ２０１６）。
【０２０１】
なお、改竄検出部１６１は、回復前に、不揮発メモリ１００上の共有ライブラリの改竄チェックを行っている（Ｓ２００９、Ｓ２０１０）。しかし、改竄検出部１６１は、改竄がないことが明らかであれば、改竄チェックを必ずしも実施する必要がない。
【０２０２】
また、本実施の形態では、改竄検出部１６１は、プロセス実行中に揮発メモリ２００上の共有ライブラリの改竄チェックを行っている。しかし、具体的な改竄チェックのタイミングは、プロセス実行中の定期的なタイミング、プロセスの起動時、または、特定の動作のタイミング等でも良い。改竄チェックのタイミングは、これらの例に限定されない。
【０２０３】
このように、改竄された共有ライブラリを利用するプロセスのみが一時停止されるため、改竄された共有ライブラリを利用していないプロセスは継続動作できる。
【０２０４】
また、情報処理装置１０は、改竄検出後に、改竄された共有ライブラリを利用するプロセスを一時停止させるため、改竄の影響を最小限に抑えることができる。
【０２０５】
また、情報処理装置１０は、改竄された共有ライブラリを回復することにより、改竄された共有ライブラリを利用しているプロセスを回復することもできる。
【０２０６】
図１９、図２０を用いて、改竄された共有ライブラリを検出し、プロセスを一時停止したタイミングが異なる場合について説明する。
【０２０７】
図１９は、第１アプリプロセス２１０の第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）の改竄が検出された時におけるプロセス空間とプログラムカウンタ（ＰＣ）の状態を示す図である。図２０は、アプリと共有ライブラリの呼出関係を示す図である。
【０２０８】
この例では、図１９の（ａ）から（ｃ）までの各状態におけるＡｐｐ＿Ａ．ｅｘｅ、および、Ａｐｐ＿Ａ．ｅｘｅが利用する各共有ライブラリ（ｌｉｂ１．ｓｏ、ｌｉｂ２．ｓｏ、ｌｉｂ３．ｓｏ）には、図２０のような呼出関係がある。
【０２０９】
図１９の（ａ）は、第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）が実行される前に、ｌｉｂ２．ｓｏの改竄が検出された場合の状態を示している。図１９の（ｂ）は、第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）が実行されている間に、ｌｉｂ２．ｓｏの改竄が検出された場合の状態を示している。図１９の（ｃ）は、第２共有ライブラリ１４２（ｌｉｂ２．ｓｏ）が実行された後に、ｌｉｂ２．ｓｏの改竄が検出された場合を示している。
【０２１０】
図２１は、図２０のような呼出関係がある場合において、スタックの伸張を示す図である。
【０２１１】
一般に、スタックは、スタックフレーム単位で管理される。各スタックフレームには、関数に必要なローカル変数、関数呼出時の戻り先アドレス、関数呼出時に渡すべき引数、上位のフレームポインタのアドレス、および、ここに図示しないＣＰＵ４１０のレジスタの値等が含まれる。
【０２１２】
図２２は、停止したプロセスの再開動作を示すフローチャートである。また、図２２は、図１８に示された読み込みステップ（Ｓ２０１４）以降の動作に対応した図である。図２２に示されたように、改竄が検出されることにより停止したプロセスは、プロセスのＰＣが示すアドレスに応じて、再開される。
【０２１３】
まず、プロセス制御部１６２は、プロセス管理情報保持部１６３が保持している停止プロセスコンテキスト情報１６３１を読み込む（Ｓ２２０１）。
【０２１４】
次に、プロセス制御部１６２は、停止時のプログラムカウンタ（ＰＣ）の位置を判定する（Ｓ２２０２）。
【０２１５】
判定（Ｓ２２０２）の結果、停止プロセスコンテキスト情報１６３１によって示されるＰＣが、改竄されたライブラリ実行前のアドレスであれば、プロセス制御部１６２は、停止時のＰＣからプロセスを再開させる（Ｓ２２０３）。
【０２１６】
また、判定（Ｓ２２０２）の結果、停止プロセスコンテキスト情報１６３１によって示されるＰＣが、改竄されたライブラリ実行中のアドレスであれば、プロセス制御部１６２は、改竄された共有ライブラリが実行される前の状態で、プロセスを再開させる。そのため、プロセス制御部１６２は、共有ライブラリが実行される前の状態になるまでスタックフレームを巻き戻して、プロセスを再開させる（Ｓ２２０４）。
【０２１７】
また、判定（Ｓ２２０２）の結果、停止プロセスコンテキスト情報１６３１によって示されるＰＣが、改竄されたライブラリ実行後のアドレスであれば、プロセス制御部１６２は、改竄された共有ライブラリが実行される前の状態で、プロセスを再開させる。そのため、プロセス制御部１６２は、共有ライブラリが実行される前の状態になるまでスタックフレームを巻き戻して、プロセスを再開させる（Ｓ２２０５）。
【０２１８】
プロセス制御部１６２は、図２１に示すスタックポインタ（ＳＰ）とフレームポインタ（ＦＰ）を参照しながら、スタックフレームを巻き戻すことができる。スタックの巻き戻しの具体的な方法は、非特許文献３の「デバッガ理論と実装」に詳しく記載されているので説明を省略する。
【０２１９】
これにより、改竄された共有ライブラリの実行中もしくは実行後であっても、プロセス制御部１６２は、改竄のない状態までスタックを巻き戻してプロセスを再開させることができる。したがって、改竄のない状態でプロセスの実行が保証される。
【０２２０】
以上で実施の形態１の説明を終わる。
【０２２１】
（実施の形態２）
続いて、本発明の実施の形態２に係る情報処理装置について説明する。
【０２２２】
複数のプロセス空間にロードされている共有ライブラリは、各プロセスにマップされている仮想アドレスが異なっても同じ物理アドレスに対応している。したがって、プロセス毎に独立して改竄検出が行われた場合、同一の共有ライブラリに対して、複数回、改竄チェックが行われることになる。つまり、同一の物理アドレスに対して、重複して改竄チェックが行われることになるため、改竄チェックの効率が悪くなる。
【０２２３】
そこで、実施の形態２は、改竄チェックの方法を効率的かつ網羅的に実施する形態である。実施の形態２における改竄検出と回復の動作は、実施の形態１と同様なので説明を省略する。
【０２２４】
以降、図２３と図２４を用いて、実施の形態２における改竄チェックについて実施の形態１と異なる部分のみを説明する。
【０２２５】
図２３は、実施の形態２における共有ライブラリ管理情報を示す図である。図２３に示された共有ライブラリ管理情報２３００では、図１５に示された実施の形態１の共有ライブラリ管理情報１６４０と比較して、チェックプロセスのフィールドが増えている。このフィールドには、プロセス空間にマップされた共有ライブラリの改竄がチェックされたプロセスのプロセスＩＤが記録される。
【０２２６】
図２３の例では、ｌｉｂ１．ｓｏは、プロセスＩＤが１００、２００、３００である３つのプロセスに、それぞれ、ロードされている。そして、プロセスＩＤが１００であるプロセスの共有ライブラリがチェックされることにより、ｌｉｂ１．ｓｏの改竄がチェックされている。
【０２２７】
また、ｌｉｂ２．ｓｏは、プロセスＩＤが１００、２００である２つのプロセスに、それぞれ、ロードされている。そして、プロセスＩＤが２００であるプロセスの共有ライブラリがチェックされることにより、ｌｉｂ２．ｓｏの改竄がチェックされている。また、ｌｉｂ３．ｓｏは、プロセスＩＤが１００、３００、４００である３つのプロセスに、それぞれ、ロードされている。そして、ｌｉｂ３．ｓｏの改竄チェックは、どのプロセスでも未実行である。
【０２２８】
図２４は、実施の形態２における改竄チェックのフローチャートである。
【０２２９】
まず、改竄検出部１６１は、揮発メモリ２００上の共有ライブラリの改竄チェックを開始する（Ｓ２４０１）。
【０２３０】
次に、改竄検出部１６１は、共有ライブラリ管理情報２３００を参照する（Ｓ２４０２）。
【０２３１】
次に、改竄検出部１６１は、改竄チェック対象の共有ライブラリが他のプロセスでチェックされたか否かを、共有ライブラリ管理情報２３００を参照することで、判断する（Ｓ２４０３）。
【０２３２】
判断（Ｓ２４０３）の結果、改竄チェック対象の共有ライブラリが、他のどのプロセスでも改竄チェックされていないと判断されれば、改竄検出部１６１は、共有ライブラリ管理情報２３００にプロセスＩＤを書き込む（Ｓ２４０５）。その後、改竄検出部１６１は、共有ライブラリの改竄をチェックする（Ｓ２４０６）。
【０２３３】
一方、判断（Ｓ２４０３）の結果、改竄チェック対象の共有ライブラリが、他のプロセスでチェック済みであると判定されれば、改竄検出部１６１は、別の共有ライブラリを選択する（Ｓ２４０４）。この場合、改竄検出部１６１は、プロセス空間にロード済みで、かつ、共有ライブラリ管理情報２３００において改竄チェックが未実行である共有ライブラリを改竄チェック対象として選択する（Ｓ２４０４）。
【０２３４】
次に、改竄検出部１６１は、共有ライブラリ管理情報２３００のチェックプロセスのフィールドに、共有ライブラリのチェックが行われているプロセスのプロセスＩＤを書き込む（Ｓ２４０５）。
【０２３５】
次に、改竄検出部１６１は、前段のステップ（Ｓ２４０４）で選択した改竄チェック対象の共有ライブラリが揮発メモリ２００上で改竄されていないかをチェックする（Ｓ２４０６）。改竄があれば、共有ライブラリ回復部１６５は、共有ライブラリを回復する。
【０２３６】
次に、改竄検出部１６１は、プロセス空間上にロードされている共有ライブラリを改竄チェック対象として選択する（Ｓ２４０７）。そして、改竄検出部１６１は、再度、共有ライブラリ管理情報２３００を参照する（Ｓ２４０２）。
【０２３７】
これにより、複数のプロセス空間にロードされた共有ライブラリに対して、効率的に改竄をチェックすることが可能となる。
【０２３８】
以上で実施の形態２の説明を終わる。
【０２３９】
（実施の形態３）
以下、実施の形態１および実施の形態２の特徴的な構成要素を実施の形態３として、説明する。実施の形態３に係る情報処理装置は、不揮発メモリに記憶されている共有ライブラリを揮発メモリにロードして、揮発メモリにロードされた共有ライブラリを利用するプロセスを動作させる。そして、実施の形態３に係る情報処理装置は、以下に示す構成および動作によって、揮発メモリにロードされた共有ライブラリが改竄された場合の影響を抑制する。
【０２４０】
図２５は、実施の形態３に係る情報処理装置の構成図である。図２５に示された情報処理装置１０は、改竄判定部２５０１、共有ライブラリ情報保持部２５０４、プロセス制御部２５０２および共有ライブラリ回復部２５０５を備える。
【０２４１】
改竄判定部２５０１は、揮発メモリ内の共有ライブラリが改竄されているか否かを判定する。
【０２４２】
共有ライブラリ情報保持部２５０４は、共有ライブラリ情報を保持する。共有ライブラリ情報は、揮発メモリ内の共有ライブラリと、揮発メモリ内の共有ライブラリを利用するプロセスとの対応関係を示す情報を含む。
【０２４３】
プロセス制御部２５０２は、揮発メモリ内の共有ライブラリが改竄されていると判定された場合、共有ライブラリ情報を参照することにより、揮発メモリ内の共有ライブラリを利用するプロセスを特定する。そして、プロセス制御部２５０２は、特定されたプロセスを停止させる。
【０２４４】
共有ライブラリ回復部２５０５は、揮発メモリ内の共有ライブラリが改竄されていると判定された場合、不揮発メモリ内の共有ライブラリを揮発メモリに再ロードすることにより、揮発メモリ内の共有ライブラリを回復させる。
【０２４５】
図２５に示された情報処理装置１０のうち、改竄判定部２５０１、プロセス制御部２５０２および共有ライブラリ回復部２５０５が、集積回路で構成されてもよい。そして、情報を保持するための共有ライブラリ情報保持部２５０４は、別のメモリで構成されてもよい。
【０２４６】
図２６は、図２５に示された情報処理装置１０の動作を示すフローチャートである。まず、改竄判定部２５０１は、揮発メモリ内の共有ライブラリが改竄されているか否かを判定する（Ｓ２６０１）。揮発メモリ内の共有ライブラリが改竄されていない場合（Ｓ２６０１でＮｏ）、情報処理装置１０は、動作を終了する。
【０２４７】
一方、揮発メモリ内の共有ライブラリが改竄されている場合（Ｓ２６０１でＹｅｓ）、プロセス制御部２５０２は、共有ライブラリ情報保持部２５０４の共有ライブラリ情報を参照することにより、揮発メモリ内の共有ライブラリを利用するプロセスを特定する。そして、プロセス制御部２５０２は、特定されたプロセスを停止させる（Ｓ２６０２）。
【０２４８】
次に、共有ライブラリ回復部２５０５は、不揮発メモリ内の共有ライブラリを揮発メモリに再ロードすることにより、揮発メモリ内の共有ライブラリを回復させる（Ｓ２６０３）。
【０２４９】
上述の動作により、共有ライブラリの改竄により影響を受けるプロセスが停止される。これにより、実施の形態３に係る情報処理装置１０は、改竄の影響を抑制することができる。また、揮発メモリの共有ライブラリは、不揮発メモリから回復される。これにより、改竄された共有ライブラリが再度利用される危険性が低減される。
【０２５０】
以上の通り、実施の形態１、実施の形態２および実施の形態３に示された情報処理装置１０は、揮発メモリ２００にロードされた共有ライブラリの改竄を検出した場合に、改竄が検出された共有ライブラリを利用するプロセスを一時停止させる。そして、情報処理装置１０は、不揮発メモリ１００にある共有ライブラリを揮発メモリ２００へ再ロードする。これにより、共有ライブラリが回復される。
【０２５１】
また、プロセス空間の共有ライブラリが、改竄検出および回復の対象になる。そのため、保護された状態でプロセスが実行される。したがって、情報処理装置１０は、プロセスの実行について完全性を保証することが必要な状況において有用である。例えば、情報処理装置１０は、様々なプログラムを実行するＰＣ、タブレットＰＣ、テレビジョン受像機、携帯電話および民生機器等にも適用できる。
【０２５２】
なお、情報処理装置１０は、プロセスを停止させずに、不揮発メモリ１００にある共有ライブラリを揮発メモリ２００へ再ロードし、再マップしてもよい。
【０２５３】
また、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０２５４】
（１）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、および、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。
【０２５５】
ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０２５６】
（２）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、および、ＲＡＭなどを含むコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。
【０２５７】
前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０２５８】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部または全てを含むように１チップ化されてもよい。
【０２５９】
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路または汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、または、ＬＳＩ内部の回路セルの接続および設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０２６０】
さらには、半導体技術の進歩または派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積回路化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
【０２６１】
（３）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、および、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。
【０２６２】
マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０２６３】
（４）本発明は、上記に示す方法であるとしてもよい。また、本発明は、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０２６４】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を非一時的なコンピュータ読み取り可能な記録媒体に記録されることにより実現されてもよい。記録媒体は、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）または半導体メモリなどでもよい。また、本発明は、このような記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０２６５】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線通信回線、有線通信回線、インターネットを代表とするネットワーク、または、データ放送等を経由して伝送する態様としてもよい。
【０２６６】
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０２６７】
また、前記コンピュータプログラムまたは前記デジタル信号が、記録媒体に記録され移送されることにより、あるいは、ネットワーク等を経由して移送されることにより、独立した他のコンピュータシステムに設定されてもよい。そして、他のコンピュータシステムが、前記コンピュータプログラムまたは前記デジタル信号に基づいて、本発明に係る方法を実施してもよい。
【０２６８】
（５）本発明は、上記実施の形態、および、上記変形例を組み合わせて実現されてもよい。
【産業上の利用可能性】
【０２６９】
本発明は、保護された状態でプログラムを実行できるため、プログラムを実行するＰＣ、タブレットＰＣ、テレビジョン受像機、携帯電話および民生機器等に有用である。
【符号の説明】
【０２７０】
１０  情報処理装置
１００  不揮発メモリ
１１０  第１アプリ
１２０  第２アプリ
１３０  リンカ・ローダ
１４１  第１共有ライブラリ
１４２  第２共有ライブラリ
１４３  第３共有ライブラリ
１５０、２５０  ＯＳ
１６０、２６０  検出回復部
１６１、２５０１  改竄検出部（改竄判定部）
１６２、２５０２  プロセス制御部
１６３  プロセス管理情報保持部（プロセス情報保持部）
１６４、２５０４  共有ライブラリ管理情報保持部（共有ライブラリ情報保持部）
１６５、２５０５  共有ライブラリ回復部
１７０  ハッシュリスト保持部
１８０  鍵保持部
２００  揮発メモリ
２０５  Ｉｎｉｔプロセス
２１０  第１アプリプロセス
２２０  第２アプリプロセス
２３０  第３アプリプロセス
２４０  第４アプリプロセス
３００  システムＬＳＩ
４００  保護メモリ
４１０  ＣＰＵ
４２０  ＩＰＬ
４３０  切替え管理部
４４０  セキュアブート部
４５０  セキュアＯＳ
４６０  セキュアアプリ
５０１  ソースコード
５０２  コンパイラ
５０３  リンカ
５０４  共有ライブラリ
５０５  秘密鍵
５０６  Ｐｒｅｌｉｎｋマップ
５０７  ハッシュリスト生成ツール
５０８  不揮発メモリ用共有ライブラリハッシュリスト
５０９  揮発メモリ用共有ライブラリハッシュリスト
１６３０  プロセス管理情報（プロセス動作情報）
１６３１  停止プロセスコンテキスト情報（停止プロセス情報）
１６４０、２３００  共有ライブラリ管理情報（共有ライブラリ情報）
【図１】
2011142095.tif 000003
【図２】
2011142095.tif 000004
【図３】
2011142095.tif 000005
【図４】
2011142095.tif 000006
【図５】
2011142095.tif 000007
【図６】
2011142095.tif 000008
【図７】
2011142095.tif 000009
【図８】
2011142095.tif 000010
【図９】
2011142095.tif 000011
【図１０】
2011142095.tif 000012
【図１１】
2011142095.tif 000013
【図１２】
2011142095.tif 000014
【図１３】
2011142095.tif 000015
【図１４】
2011142095.tif 000016
【図１５】
2011142095.tif 000017
【図１６】
2011142095.tif 000018
【図１７】
2011142095.tif 000019
【図１８】
2011142095.tif 000020
【図１９】
2011142095.tif 000021
【図２０】
2011142095.tif 000022
【図２１】
2011142095.tif 000023
【図２２】
2011142095.tif 000024
【図２３】
2011142095.tif 000025
【図２４】
2011142095.tif 000026
【図２５】
2011142095.tif 000027
【図２６】
2011142095.tif 000028
【国際調査報告】
2011142095.tif 000029
2011142095.tif 000030