(57)【要約】      （修正有）【課題】プログラムの起動前にプログラムの検証を実施する情報処理装置において、プログラムの改ざんを検知した場合に、情報処理装置の可用性を確保する。【解決手段】機能を提供するための複数のプログラムを記憶部に保持し、当該複数のプログラムを実行可能な情報処理装置であって、プログラムの実行要求を受け付けた際に、記憶部に保持された当該プログラムに対する改ざんの有無を検証し、検証の結果、改ざんされたものであると判定された際に、当該プログラムの情報をログとして記録するプログラム検証部３１９と、記録されたログを定期的に監視するログファイル監視部３１２と、ログの更新が行われたことを検知した場合、当該更新にて示されるプログラムの種類を解析し、解析されたプログラムの種類に応じて、前記情報処理装置にて利用可能な機能に対する制限およびユーザへの通知を行うシステム制御部３１４とを有する。【選択図】図３
2020086469.tif 000002
【特許請求の範囲】
【請求項１】
機能を提供するための複数のプログラムを記憶部に保持し、当該複数のプログラムを実行可能な情報処理装置であって、
プログラムの実行要求を受け付けた際に、前記記憶部に保持された当該プログラムに対する改ざんの有無を検証する検証手段と、
前記検証手段による検証の結果、当該プログラムが改ざんされたものであると判定された際に、当該プログラムの情報をログとして記録する記録手段と、
前記記録手段にて記録されたログを定期的に監視する監視手段と、
前記監視手段にて前記ログの更新が行われたことを検知した場合、当該更新にて示されるプログラムの種類を解析する解析手段と、
前記解析手段にて解析されたプログラムの種類に応じて、前記情報処理装置にて利用可能な機能に対する制限およびユーザへの通知を行う制御手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記更新にて示されたプログラムの種類が、前記記憶部に保持されていたプログラムでないと前記解析手段にて解析された場合、前記情報処理装置にて利用可能な機能を制限せず、未知のプログラムがあることを通知することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、前記更新にて示されたプログラムの種類が、第１のプログラムであると前記解析手段にて解析された場合、前記情報処理装置にて利用可能なすべての機能を制限し、前記情報処理装置の再起動をユーザに促す通知を行い、
前記第１のプログラムは、前記記憶部とは異なる保護領域にコピーが保持されており、再起動により改ざん前の状態に復旧可能であることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記情報処理装置は、前記情報処理装置の機能を拡張するための第２のプログラムを実行可能であり、
前記制御手段は、前記更新にて示されたプログラムの種類が、前記第２のプログラムであると前記解析手段にて解析された場合、当該第２のプログラムの機能を制限し、当該第２のプログラムの再インストールをユーザに促す通知を行うことを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記制御手段は、前記更新にて示されたプログラムの種類が、第３のプログラムであると前記解析手段にて解析された場合、前記情報処理装置にて利用可能なすべての機能を制限し、当該第３のプログラムの再インストールをユーザに促す通知を行い、
前記第３のプログラムは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムおよび／または機能を提供する基本ソフトウェアであることを特徴とする請求項１乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
前記第３のプログラムは、ファームウェアであることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記プログラムの種類に応じて優先度が定義され、
前記解析手段は、前記監視手段にて複数のログが記録されたことを検知した場合、当該複数のログのうち、最も優先度が高いプログラムの種類を示すログを特定し、
前記制御手段は、前記特定されたログが示すプログラムの種類に基づいて、前記情報処理装置にて利用可能な機能の制限および通知を行うことを特徴とする請求項１乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
前記監視手段は、前記ログを定期的に監視する際のポーリング時間をユーザのログインの有無に応じて切り替えることを特徴とする請求項１乃至７のいずれか一項に記載の情報処理装置。
【請求項９】
前記監視手段は、ユーザがログインしている場合には前記ポーリング時間を第１の間隔に設定し、ログインしていない場合には前記第１の間隔よりも長い第２の間隔に設定することを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記監視手段は、前記ログを定期的に監視する際のポーリング時間を前記記録手段にて記録されたログの数に応じて切り替えることを特徴とする請求項１乃至７のいずれか一項に記載の情報処理装置。
【請求項１１】
前記監視手段は、前回のポーリングの後、前記記録手段にて記録されたログの数が所定の数よりも大きい場合、前記ポーリング時間を現時点のポーリング時間よりも短く設定することを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
前記監視手段は、前記解析手段により解析されていないログが消去されたか否かを判定し、
前記制御手段は、解析されていないログが消去されたと前記監視手段にて判定された場合、前記情報処理装置にて利用可能なすべての機能を制限することを特徴とする請求項１乃至１１のいずれか一項に記載の情報処理装置。
【請求項１３】
前記検証手段は、実行要求を受け付けたプログラムのハッシュ値を算出し、当該算出されたハッシュ値と、予め保持された前記プログラムのハッシュ値とを比較することにより、改ざんの有無を検証することを特徴とする請求項１乃至１２のいずれか一項に記載の情報処理装置。
【請求項１４】
前記記憶部に保持される複数のプログラムそれぞれのハッシュ値を算出し、当該複数のプログラムと対応づけた一覧を管理する管理手段を更に有し、
前記検証手段は、前記一覧を用いて検証を行うことを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記管理手段は更に、前記記憶部に保持される複数のプログラムそれぞれの種類を管理し、
前記解析手段は、前記管理手段にて管理された種類に基づき、前記ログにて示されるプログラムの種類を特定することを特徴とする請求項１４に記載の情報処理装置。
【請求項１６】
前記記憶部に保持された複数のプログラムのうちのいずれかのプログラムを更新する更新手段を更に有し、
前記管理手段は、前記更新手段にてプログラムの更新が行われた際に、前記一覧を更新することを特徴とする請求項１４または１５に記載の情報処理装置。
【請求項１７】
前記情報処理装置は、複合機であることを特徴とする請求項１乃至１６のいずれか一項に記載の情報処理装置。
【請求項１８】
機能を提供するための複数のプログラムを記憶部に保持し、当該複数のプログラムを実行可能な情報処理装置の制御方法であって、
プログラムの実行要求を受け付けた際に、前記記憶部に保持された当該プログラムに対する改ざんの有無を検証する検証工程と、
前記検証工程による検証の結果、当該プログラムが改ざんされたものであると判定された際に、当該プログラムの情報をログとして記録する記録工程と、
前記記録工程にて記録されたログを定期的に監視する監視工程と、
前記監視工程にて前記ログの更新が行われたことを検知した場合、当該更新にて示されるプログラムの種類を解析する解析工程と、
前記解析工程にて解析されたプログラムの種類に応じて、前記情報処理装置にて利用可能な機能に対する制限およびユーザへの通知を行う制御工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項１９】
機能を提供するための複数のプログラムを記憶部に保持し、当該複数のプログラムを実行可能なコンピュータを、
プログラムの実行要求を受け付けた際に、前記記憶部に保持された当該プログラムに対する改ざんの有無を検証する検証手段、
前記検証手段による検証の結果、当該プログラムが改ざんされたものであると判定された際に、当該プログラムの情報をログとして記録する記録手段、
前記記録手段にて記録されたログを定期的に監視する監視手段、
前記監視手段にて前記ログの更新が行われたことを検知した場合、当該更新にて示されるプログラムの種類を解析する解析手段、
前記解析手段にて解析されたプログラムの種類に応じて、前記コンピュータにて利用可能な機能に対する制限およびユーザへの通知を行う制御手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
情報処理装置を制御するプログラムを第三者が不正な方法で改ざんし、情報処理装置内の情報資産を盗む攻撃や、プログラムが改ざんされた情報処理装置を踏み台に利用する攻撃が問題になっている。このような攻撃を防止するために、情報処理装置内にプログラムが第三者によって改ざんされていないことを検証する方法が考案されている。ユーザが情報処理装置によって実現される機能を利用するときに情報処理装置内のプログラムが改ざんされていないことを保証するためには、その機能を実現するプログラムの実行の直前に検証する必要がある。これは、プログラムの検証と実行の間に時間差があると、その間に改ざんされる場合に対応できないためである。
【０００３】
特許文献１では、プログラムの実行要求をフックするフッキングプログラムを用いて、プログラムを起動する前に、プログラムのハッシュ値を計算してホワイトリストと比較し、一致する場合のみプログラムの起動を行う方法が提案されている。ホワイトリストとは、起動が許可されたプログラムの一覧を示すリストである。この方法では、プログラムを実行する各プロセスがプログラムを実行する度にプログラムの検証を行う必要がなく、フッキングプログラムに検証を任せることができる。プログラムの検証に失敗した場合、プログラムの実行要求に対してエラーを返す。この時、プログラムの実行要求に対する一般的なエラーによりプロセスにエラーを返す。特許文献１では検証失敗時には検証プログラムが検証に失敗したことを外部記憶装置上にログファイルとして記録する方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２５９１６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１では、プログラムの実行要求が備えているエラーを利用しているため、そのエラーを返す他のケースが存在する。そのため、プログラムの実行要求元がエラーを通知されても、通知されたエラーがプログラムの改ざん検知による通知か、それ以外の原因による通知か、プログラムの実行要求元が判別できない。結果として、エラーを通知されたプロセスが情報処理装置を正常に動作するために必要な制御を決定できない。また、必要な制御を決定できないままにすると、改ざんを検知したプログラムによって実現される情報処理装置の機能をユーザが利用できなくなってしまう。
【０００６】
また、実行要求の結果エラーを受信した場合に、一律に「プログラムが改ざんされているので情報処理装置の機能をすべて停止する」処理にしてしまうと情報処理装置の可用性が下がる。例えば、第三者によって情報処理装置内に未知のプログラムが配置されそのプログラムを起動させる要求があった場合に、未知のプログラムはホワイトリストに含まれないため実行要求の結果エラーが返る。その際、情報処理装置の機能をすべて停止させてしまうと、通常の動作に必要なプログラムは改ざんされていないため情報処理装置は正常に動作するが、未知のプログラムのために情報処理装置が使えないという状況に陥ってしまう。
【０００７】
以上のことから、プログラムの改ざんの発生時には改ざんされたプログラムは改ざん検知プログラムによって実行できないためセキュリティ面の問題はない一方で、ユーザが正常に情報処理装置を利用できなくなり可用性が低下する問題がある。
【０００８】
本願発明は、プログラムの起動前にプログラムの検証を実施する情報処理装置において、プログラムの改ざんを検知した場合に、情報処理装置の可用性を確保することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、機能を提供するための複数のプログラムを記憶部に保持し、当該複数のプログラムを実行可能な情報処理装置であって、プログラムの実行要求を受け付けた際に、前記記憶部に保持された当該プログラムに対する改ざんの有無を検証する検証手段と、前記検証手段による検証の結果、当該プログラムが改ざんされたものであると判定された際に、当該プログラムの情報をログとして記録する記録手段と、前記記録手段にて記録されたログを定期的に監視する監視手段と、前記監視手段にて前記ログの更新が行われたことを検知した場合、当該更新にて示されるプログラムの種類を解析する解析手段と、前記解析手段にて解析されたプログラムの種類に応じて、前記情報処理装置にて利用可能な機能に対する制限およびユーザへの通知を行う制御手段とを有する。
【発明の効果】
【００１０】
本願発明により、プログラムを実行可能な情報処理装置において、プログラムの改ざんを検知した場合でも、情報処理装置の可用性を確保しつつ、セキュリティの維持が可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明に係る装置間の接続形態を示すブロック構成図。
【図２】本発明に係るＭＦＰのハードウェア構成の例を示す図。
【図３】本発明に係るＭＦＰのソフトウェア構成の例を示す図。
【図４】本発明に係るＦｌａｓｈＲＯＭに配置されるデータの例を示す図。
【図５】本発明に係るホワイトリストの例を示す図。
【図６】本発明に係るアプリケーション管理テーブルの例を示す図。
【図７】本発明に係るＭＦＰによる検証処理のフローチャート。
【図８】本発明に係るＭＦＰによる監視処理のフローチャート。
【図９】本発明に係るＭＦＰによるプログラムの種類の特定処理のフローチャート。
【図１０】本発明に係るＭＦＰによるアプリケーション管理テーブルの生成処理のフローチャート。
【図１１】本発明に係るＭＦＰによるアプリケーション管理テーブルの更新処理のフローチャート。
【図１２】本発明に係るＭＦＰによるアプリケーション管理テーブルの更新処理のフローチャート。
【図１３】本発明に係る画面の構成例を示す図。
【図１４】本発明に係る画面の構成例を示す図。
【図１５】本発明に係る画面の構成例を示す図。
【図１６】本発明に係る画面の構成例を示す図。
【図１７】本発明に係る画面の構成例を示す図。
【図１８】第２の実施形態に係るＭＦＰによる監視処理のフローチャート。
【図１９】第３の実施形態に係るＭＦＰによる監視処理のフローチャート。
【図２０】第４の実施形態に係るＭＦＰによる監視処理のフローチャート。
【図２１】第５の実施形態に係るＭＦＰによる監視処理のフローチャート。
【発明を実施するための形態】
【００１２】
＜第１の実施形態＞
以下、本発明の実施の形態を図面に基づいて解説する。本実施形態では、情報処理装置がプログラムを実行するときの実行時検証処理、及び検証失敗時の情報処理装置の制御処理について説明する。本実施形態では情報処理装置の例としてＭＦＰ（Ｍｕｌｔｉ−Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ：複合機）について記述するが、本発明は複合機以外の情報処理装置にも適用可能な技術である。
【００１３】
［システム構成］
図１は、本実施形態に係るＭＦＰとクライアントＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）の接続形態の例を示すブロック図である。ＭＦＰ１００とクライアントＰＣ１１０はＬＡＮ１２０を介して通信可能に接続されている。ＭＦＰ１００は、ユーザとの入出力を行う操作部１０２、電子データを紙媒体に出力する画像形成部１０３、および、紙媒体を読み込み電子データに変換する画像読取部１０４を有する。操作部１０２、画像形成部１０３、および画像読取部１０４は、コントローラ部１０１に接続され、コントローラ部１０１の制御に従い複合機としての機能を実現する。クライアントＰＣ１１０はＭＦＰ１００に対してプリントジョブの送信といった処理を行う。クライアントＰＣ１１０は例えば、デスクトップＰＣ、ノートＰＣ、タブレット端末、スマートフォンなどが適用可能であるが、特に限定するものではない。
【００１４】
（コントローラ部）
図２は、ＭＦＰ１００のコントローラ部１０１の詳細を示すブロック図である。ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１は、コントローラ内の主な演算処理を行う。ＣＰＵ２０１は、バスを介してＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、およびＩ／Ｏコントローラ２０３と接続される。ＤＲＡＭ２０２は、ＣＰＵ２０１が演算する過程で演算命令を表すプログラムデータや、処理対象のデータを一時的に配置するための作業メモリとしてＣＰＵ２０１によって使用される。Ｉ／Ｏコントローラ２０３は、ＣＰＵ２０１の指示に従い各種デバイスに対する入出力を行う。Ｉ／Ｏコントローラ２０３には、ネットワークＩ／Ｆ２０４、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）  Ｉ／Ｆ２０５、パネルＩ／Ｆ２０６、プリンタＩ／Ｆ２０７、スキャナＩ／Ｆ２０８、ＵＳＢ  Ｉ／Ｆ２０９が接続される。
【００１５】
ＳＡＴＡ  Ｉ／Ｆ２０５にはＦｌａｓｈＲＯＭ２１１が接続され、ＣＰＵ２０１はＦｌａｓｈＲＯＭ２１１をＭＦＰ１００の機能を実現するためのプログラム、およびドキュメントファイルを永続的に記憶するために使用する。ネットワークＩ／Ｆ２０４には有線ＬＡＮデバイス２１０が接続され、ＣＰＵ２０１はネットワークＩ／Ｆ２０４を介して有線ＬＡＮデバイス２１０を制御することで、ＬＡＮ１２０上の通信を実現する。ＣＰＵ２０１は、パネルＩ／Ｆ２０６を介して操作部１０２に対するユーザ向けの入出力を実現する。ＣＰＵ２０１は、プリンタＩ／Ｆ２０７を介して画像形成部１０３を利用した紙媒体の出力処理を実現する。ＣＰＵ２０１は、スキャナＩ／Ｆ２０８を介して画像読取部１０４を利用した原稿の読み込み処理を実現する。ＣＰＵ２０１は、ＵＳＢ  Ｉ／Ｆ２０９に接続された任意の機器の制御を行う。ＲＯＭ２２０にはＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）を実現する制御プログラムが記憶されている。
【００１６】
コピー機能を実施する場合は、ＣＰＵ２０１がＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈＲＯＭ２１１からプログラムデータをＤＲＡＭ２０２に読み込む。ＣＰＵ２０１がＤＲＡＭ２０２に読み込まれたプログラムに従いパネルＩ／Ｆ２０６を介して操作部１０２に対するユーザからのコピー指示を検出する。ＣＰＵ２０１は、コピー指示を検出するとスキャナＩ／Ｆ２０８を介して画像読取部１０４から原稿を電子データ（画像データ）として受け取り、その電子データをＤＲＡＭ２０２に格納する。ＣＰＵ２０１は、ＤＲＡＭ２０２に格納した画像データに対して出力に適した色変換処理などを実施する。ＣＰＵ２０１は、ＤＲＡＭ２０２に格納した画像データをプリンタＩ／Ｆ２０７を介して画像形成部１０３に転送し、紙媒体への出力処理を指示する。
【００１７】
ＰＤＬ印刷を実施する場合は、クライアントＰＣ１１０がＬＡＮ１２０を介して印刷指示を行う。ＣＰＵ２０１は、ＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈＲＯＭ２１１からプログラムデータをＤＲＡＭ２０２に読み込み、ＤＲＡＭ２０２に読み込まれたプログラムに従いネットワークＩ／Ｆ２０４を介して印刷指示を検出する。ＣＰＵ２０１は、ＰＤＬ送信指示を検出するとネットワークＩ／Ｆ２０４を介して印刷データを受信し、ＳＡＴＡ  Ｉ／Ｆ２０５を介してＦｌａｓｈＲＯＭ２１１に印刷データを保存する。ＣＰＵ２０１は印刷データの保存が完了すると、ＦｌａｓｈＲＯＭ２１１に保存した印刷データをＤＲＡＭ２０２に画像データとして展開する。ＣＰＵ２０１はＤＲＡＭ２０２に格納した画像データに対して出力に適した色変換処理などを実施する。ＣＰＵ２０１は、ＤＲＡＭ２０２に格納した画像データをプリンタＩ／Ｆ２０７を介して画像形成部１０３に転送し、紙媒体への出力処理を指示する。
【００１８】
（ソフトウェア構成）
図３は、ＭＦＰ１００のコントローラ部１０１で実行されるソフトウェアの構造の概要を示すブロック図である。コントローラ部１０１で実行されるソフトウェアは全て、ＣＰＵ２０１が実行する。コントローラ部１０１のソフトウェアは、カーネル３１８とコントローラソフト３０１から構成される。
【００１９】
カーネル３１８は、カーネルの制御ソフトとしてプログラム検証部３１９を有する。プログラム検証部３１９は、プログラム実行要求部３１１からのＦｌａｓｈＲＯＭ２１１上に配置されるプログラム４０１の実行要求をカーネル空間でフックし、実行要求されたプログラムファイルの検証を行う。ここでの検証は、プログラムに対する改ざんの有無を判定するものであり、プログラムの正当性を判定する。プログラム検証部３１９が実行要求されたプログラムの検証に成功した場合は、ＭＦＰ１００が実行要求された、検証済みのプログラムが実行される。プログラム検証部３１９が実行要求されたプログラムの検証に失敗した場合は、プログラム検証部３１９は、検証に失敗したことと、検証に失敗したプログラムに関する情報をＦｌａｓｈＲＯＭ２１１のログファイル４０７に記録する。
【００２０】
コントローラソフト３０１の構成要素について説明する。操作制御部３０２は、操作部１０２にユーザ向けの画面イメージの表示、およびユーザ操作の検知と画面上に表示したボタン等の画面部品に関連付けられた処理を実行する。データ記憶部３０３は、他の制御部からの要求に応じてデータをＦｌａｓｈＲＯＭ２１１に記憶、および読み出しを行う。例えば、ユーザが何らかの機器設定を変更したい場合は、操作制御部３０２は操作部１０２にユーザが入力した内容を検知し、操作制御部３０２からの要求にて示された設定値をデータ記憶部３０３がＦｌａｓｈＲＯＭ２１１に保存する。ネットワーク制御部３０８は、データ記憶部３０３に記憶された設定値に従い、システム起動時や、設定変更検出時にＩＰアドレスなどネットワーク設定をＴＣＰ／ＩＰ制御部３０９に行う。
【００２１】
ＴＣＰ／ＩＰ制御部３０９は、他の制御部からの指示に従い、ネットワークＩ／Ｆ２０４を介して、ネットワークパケットの送受信処理を行う。ジョブ制御部３０４は、他の制御部からの指示に従って、ジョブ実行の制御を行う。画像処理部３０５は、ジョブ制御部３０４からの指示に従って、画像データを用途ごとに適した形式に加工する。印刷処理部３０６は、ジョブ制御部３０４からの指示に従い、プリンタＩ／Ｆ２０７を介して、画像形成部１０３により紙媒体への画像の印刷を指示する。読み取り処理部３０７は、ジョブ制御部３０４からの指示に従い、スキャナＩ／Ｆ２０８を介して、画像読取部１０４により設置された原稿を読み込む。ＵＳＢ制御部３１０は、ＵＳＢ  Ｉ／Ｆ２０９を制御し、ＵＳＢ接続された任意の機器の制御を行う。プログラム実行要求部３１１は、ＦｌａｓｈＲＯＭ２１１上のプログラム４０１を実行することをカーネル３１８に対して要求する。プログラム更新部３１６は、コントローラソフト３０１を構成するプログラム４０１を、設置環境で更新する処理を行う。
【００２２】
ログファイル監視部３１２は、ＦｌａｓｈＲＯＭ２１１上に配置されるログファイル４０７の更新をポーリングによって常時監視する。ログファイル監視部３１２は、ログファイル４０７の更新を検知した際には更新を検知したことをログファイル解析部３１３に通知する。ログファイル解析部３１３は、ログファイル監視部３１２からのログファイル４０７の更新通知を受信するまで待機する。ログファイル解析部３１３は、ログファイル４０７の更新通知を受信した時は、ログファイル４０７の更新されたログファイル４０７の内容を確認し、その内容をホワイトリスト４０５とアプリケーション管理テーブル４０６を利用して解析する。ログファイル４０７の解析の詳細については後述する。
【００２３】
ログファイル解析部３１３は、ログファイル４０７の内容の解析結果をシステム制御部３１４に通知する。システム制御部３１４は、ログファイル解析部３１３からの解析結果を受信するまで待機し、解析結果を受信すると、コントローラソフト３０１の処理によって実現される機能を制限する範囲を決定し、決定内容に応じて利用可能な機能を制限する。システム制御部３１４は、利用可能な機能が制限されたことと、制限された機能を再度利用可能にするために必要な動作をＭＦＰ１００の操作部１０２の画面上に表示する。ホワイトリスト管理部３１５は、ユーザがプログラムの実行時検証機能の有効化／無効化する際に、ホワイトリスト４０５の生成／更新、アプリケーション管理テーブル４０６の生成／更新を行う。
【００２４】
アプリケーション管理部３１７は、ユーザの指示等に基づいて、ＭＦＰ１００で動作するアプリケーションの動作状態やアプリケーションの起動／停止を管理する。本実施形態では、ＯＳＧＩ（Ｏｐｅｎ  Ｓｅｒｖｉｃｅｓ  Ｇａｔｅｗａｙ  Ｉｎｉｔｉａｔｉｖｅ）フレームワークを用いて動作するアプリケーションの管理を行う。ＯＳＧＩは、Ｊａｖａ（登録商標）モジュールの動的インストール／アンインストールや、アプリケーションの更新・実行を管理する。尚、ＭＦＰ１００には操作部１０２を用いてコントローラソフト３０１に含まれない拡張ＪＡＶＡアプリケーション４０４を更に追加することが可能である。アプリケーションの管理の詳細については後述する。
【００２５】
例えば、コピー機能を実行する場合は、アプリケーション管理部３１７がコピー機能を有するＪＡＶＡアプリケーション４０３を起動して操作制御部３０２にコピー画面の表示を指示する。操作制御部３０２がコピー機能の開始要求を検知し、ジョブ制御部３０４にコピーを指示する。ジョブ制御部３０４は読み取り処理部３０７に原稿読み取りを指示し、スキャン画像を取得する。ジョブ制御部３０４は、画像処理部３０５に指示し、スキャン画像を印刷に適した形式に変換する。ジョブ制御部３０４は、印刷処理部３０６に印刷を指示し、コピー結果を出力する。
【００２６】
（データ構成）
図４は、本実施形態に係るＦｌａｓｈＲＯＭ２１１に配置されるデータの例を示す。なお、本実施形態では、アプリケーションを記述するプログラム言語として、Ｊａｖａ（登録商標）を例に挙げて説明するが、これに限定するものではない。
【００２７】
プログラム４０１には、実行可能プログラム４０２、ＪＡＶＡアプリケーション４０３、および拡張ＪＡＶＡアプリケーション４０４の３種類が含まれる。実行可能プログラム４０２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムおよび／または機能を提供する基本ソフトウェアが含まれる。例えば、実行可能プログラム４０２として、ファームウェアが挙げられる。ＪＡＶＡアプリケーション４０３には、ＭＦＰ１００上で動作するアプリケーション機能を実現するプログラムが含まれる。また、ＪＡＶＡアプリケーション４０３は、ＦｌａｓｈＲＯＭ２１１内の保護領域４０８にＪＡＶＡアプリケーション４０３のコピーが配置されている。ＭＦＰ１００の起動時に、アプリケーション管理部３１７が保護領域４０８からＪＡＶＡアプリケーション４０３をコピーして上書きすることが可能である。通常、保護領域４０８に配置されたＪＡＶＡアプリケーション４０３に対する変更は制限されている。また、保護領域４０８のＪＡＶＡアプリケーション４０３と、プログラム４０１内のＪＡＶＡアプリケーション４０３は、改ざん等が無ければ同じものとなる。
【００２８】
拡張ＪＡＶＡアプリケーション４０４にはユーザがＭＦＰ１００上で動作するアプリケーション機能を追加する際にユーザがインストールするアプリケーションのプログラムが含まれる。拡張ＪＡＶＡアプリケーション４０４は、実行可能プログラム４０２やＪＡＶＡアプリケーション４０３が提供する機能を拡張したり、新たな機能を提供したりするための拡張アプリケーションである。ホワイトリスト４０５は、プログラム検証部３１９がプログラムを検証するときに参照する一覧である。アプリケーション管理テーブル４０６は、ログファイル解析部３１３がログファイル４０７の内容を解析するときに参照するテーブルである。ログファイル４０７は、プログラム検証部３１９がプログラムの検証に失敗した場合に、検証に失敗したことと、検証に失敗したプログラムの情報を含むログが記載されているファイルである。
【００２９】
（ホワイトリスト）
図５は、本実施形態に係るホワイトリスト４０５の例を示す。ホワイトリスト４０５は、コントローラソフト３０１に含まれる全てのプログラム４０１に対して、ファイルパス５０１とハッシュ値５０２の組み合わせをリスト化したものである。データの内容としては、少なくともファイル名称、ファイルの配置場所（ディレクトリ上の位置）、ファイルから計算したハッシュ値を含むものとし、ハッシュ値等の情報がリスト化される。ユーザが操作部１０２からプログラムの実行時検証を有効化したときに、ホワイトリスト管理部３１５がホワイトリスト４０５を生成する。プログラム更新部３１６がプログラム４０１を更新したときと、アプリケーション管理部３１７が拡張ＪＡＶＡアプリケーション４０４を更新したときに、ホワイトリスト管理部３１５がホワイトリスト４０５を更新する。ここで用いるハッシュ値を算出するためのハッシュ関数は特に限定するものではなく、任意のハッシュ関数が用いられてよい。ファイルパス５０１は、絶対パスが指定されてもよいし、所定の位置からの相対パスが指定されてもよい。
【００３０】
（アプリケーション管理テーブル）
図６は、本実施形態に係るアプリケーション管理テーブル４０６の例を示す。アプリケーション管理テーブル４０６は、ＭＦＰ１００上で動作するアプリケーションのファイルパス６０１とアプリケーションのタイプ６０２が含まれる。アプリケーションのタイプ６０２には、ＪＡＶＡアプリケーション４０３と拡張ＪＡＶＡアプリケーション４０４のいずれかが指定される。ユーザが操作部１０２からプログラムの実行時検証を有効化した場合に、ホワイトリスト管理部３１５がアプリケーション管理テーブル４０６を生成する。アプリケーション管理部３１７が拡張ＪＡＶＡアプリケーション４０４の更新を行ったときに、ホワイトリスト管理部３１５がアプリケーション管理テーブル４０６を更新する。ファイルパス６０１は、絶対パスが指定されてもよいし、所定の位置からの相対パスが指定されてもよい。
【００３１】
（操作画面）
図１３は、操作部１０２に表示される、メニュー画面１３０１の構成例を示す。メニュー画面１３０１は、ＭＦＰ１００が備える様々な機能の実行をユーザが指示するためのものである。ボタン１３０２は、コピー機能を指示する際に用いられる。ボタン１３０３は、原稿等をスキャンして保存する機能を指示する際に用いられる。ボタン１３０４は、原稿等をスキャンして送信する機能を指示する際に用いられる。ボタン１３０５は、機器の設定変更を指示する際に用いられる。ボタン１３０５が押下されると、図１４に示す設定画面１４０１が表示される。メッセージ表示領域１３０６は、機器の動作中に発生した様々ンユーザ向けのメッセージを表示する。
【００３２】
図１４は、操作部１０２に表示される、設定画面１４０１の構成例を示し、様々な設定をユーザが指示するためのものである。この設定画面１４０１自体に具体的な設定項目はなく、詳細な設定項目へのガイドとなる中間階層である。ボタン１４０２が押下されると、図１５に示すセキュリティ設定画面１５０１が表示される。ボタン１４０３が押下されると、機器設定画面（不図示）が表示される。ボタン１４０４が押下されると、ユーザ設定画面（不図示）が表示される。ボタン１４０５が押下されると、ネットワーク設定画面（不図示）が表示される。メッセージ表示領域１３０６は、機器の動作中に発生した様々なユーザ向けのメッセージを表示する。機器設定画面、ユーザ設定画面、およびネットワーク設定画面については、本実施形態には直接関係しないため詳細な説明は省略するが、これらは、関連する設定項目を設定可能な画面である。
【００３３】
図１５は、セキュリティ設定画面１５０１の構成例を示し、ＭＦＰ１００に対するセキュリティ設定を行う際に用いられる。プログラムの実行時検証設定１５０２が選択されると、機能実行時に行うプログラム検証機能が有効化される。ボタン１５０３が押下されると、セキュリティ設定画面１５０１の選択状態が機器設定としてデータ記憶部３０３に記憶される。
【００３４】
［処理フロー］
（生成処理）
図１０を用いて、ユーザがプログラムの実行時検証機能を有効化するときのホワイトリスト４０５とアプリケーション管理テーブル４０６の生成処理フローを説明する。この処理は、ＭＦＰ１００において、ユーザが改ざん検知機能の有効化を要求するときに行われる。以下の説明で、ＭＦＰ１００が実施する図１０の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラム４０１をＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施されることで実現される。
【００３５】
ユーザがプログラムの実行時検証機能を有効化する要求をＭＦＰ１００の操作部１０２から行う。ここでの要求は、図１５に示したセキュリティ設定画面１５０１にてプログラムの実行時検証設定１５０２が選択された場合に相当する。操作制御部３０２は、ユーザからのプログラムの実行時検証機能の有効化要求を受信する。これにより、本処理フローが開始される。
【００３６】
Ｓ１００１にて、ホワイトリスト管理部３１５は、操作制御部３０２から改ざん検知機能の有効化要求を受信する。
【００３７】
Ｓ１００２にて、ホワイトリスト管理部３１５は、ＭＦＰ１００内のＦｌａｓｈＲＯＭ２１１に配置されている全てのプログラム４０１を検索する。そして、ホワイトリスト管理部３１５は、検索したプログラムのハッシュ値を計算し、プログラムのファイルパス５０１とハッシュ値５０２をホワイトリスト４０５に記載する。
【００３８】
Ｓ１００３にて、ホワイトリスト管理部３１５は、アプリケーション管理部３１７にＭＦＰ１００に存在するアプリケーションのファイルパス６０１とアプリケーションのタイプ６０２を要求する。
【００３９】
Ｓ１００４にて、ホワイトリスト管理部３１５は、ＭＦＰ１００内のアプリケーションのファイルパス６０１とそのアプリケーションのタイプ６０２の通知をアプリケーション管理部３１７から受け付ける。
【００４０】
Ｓ１００５にて、ホワイトリスト管理部３１５は、通知されたアプリケーションのファイルパス６０１とそのアプリケーションのタイプ６０２をアプリケーション管理テーブル４０６に記載してアプリケーション管理テーブル４０６を生成する。そして、本処理フローを終了する。
【００４１】
（プログラム更新時の更新処理）
図１１を用いて、プログラム更新部３１６がプログラムを更新する時のホワイトリスト４０５とアプリケーション管理テーブル４０６の更新処理フローを説明する。この処理は、プログラム更新部３１６がＭＦＰ１００内のプログラム４０１を更新するときに行われる。以下の説明で、ＭＦＰ１００が実施する図１１の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラム４０１をＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施されることで実現される。
【００４２】
Ｓ１１０１にて、プログラム更新部３１６は、プログラム４０１を更新する。
【００４３】
Ｓ１１０２にて、プログラム更新部３１６は、更新したプログラムの情報をホワイトリスト管理部３１５に通知する。ホワイトリスト管理部３１５に通知するプログラムの情報としては、少なくともファイル名称が含まれるものとする。
【００４４】
Ｓ１１０３にて、ホワイトリスト管理部３１５は、プログラム更新部３１６から通知されたプログラムのハッシュ値を計算し、ホワイトリスト４０５に記載されているプログラムのハッシュ値５０２を更新する。
【００４５】
Ｓ１１０４にて、ホワイトリスト管理部３１５は、プログラム更新部３１６から通知されたプログラムがｊａｒファイルか否かを判定する。具体的には、プログラムの拡張子が「．ｊａｒ」であるか否かを確認し、「．ｊａｒ」である場合はプログラムがｊａｒファイルであると判定される。ｊａｒファイルとはＪａｖａ（登録商標）で開発されたプログラムのファイル群をひとつにまとめて格納するファイル形式になっているファイルである。ｊａｒファイルであると判定された場合は（Ｓ１１０４にてＹＥＳ）Ｓ１１０５へ進み、ｊａｒファイルでないと判定された場合は（Ｓ１１０４にてＮＯ）本処理フローを終了する。
【００４６】
Ｓ１１０５にて、ホワイトリスト管理部３１５は、アプリケーション管理テーブル４０６を更新する。そして、本処理フローを終了する。
【００４７】
（拡張ＪＡＶＡアプリケーション更新時の更新処理）
図１２を用いて、ユーザが拡張ＪＡＶＡアプリケーション４０４を更新する時のホワイトリスト４０５とアプリケーション管理テーブル４０６の更新処理フローを説明する。この処理は、アプリケーション管理部３１７が、ユーザの指示に基づいてＭＦＰ１００内のアプリケーションを更新するときに行われる。以下の説明で、ＭＦＰ１００が実施する図１２の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラム４０１をＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施されることで実現される。
【００４８】
Ｓ１２０１にて、アプリケーション管理部３１７は、ユーザの指示に基づいて、拡張ＪＡＶＡアプリケーション４０４を更新する。
【００４９】
Ｓ１２０２にて、アプリケーション管理部３１７は、更新したアプリケーションの情報をホワイトリスト管理部３１５に通知する。ホワイトリスト管理部３１５に通知するプログラムの情報としては、少なくともアプリケーションのファイルパス、アプリケーションのタイプが含まれる。
【００５０】
Ｓ１２０３にて、ホワイトリスト管理部３１５は、アプリケーション管理部３１７から通知された拡張ＪＡＶＡアプリケーション４０４のハッシュ値を計算し、ホワイトリスト４０５を更新する。
【００５１】
Ｓ１２０４にて、ホワイトリスト管理部３１５は、アプリケーション管理部３１７から通知されたアプリケーションのファイルパス６０１と、そのアプリケーションのタイプ６０２を用いてアプリケーション管理テーブル４０６を更新する。そして、本処理フローを終了する。
【００５２】
（検証処理）
図７を用いて、プログラム検証部３１９がプログラム４０１を検証する処理フローを説明する。この処理は、プログラム実行要求部３１１がプログラム４０１の実行要求を行うたびに行われる。以下の説明で、ＭＦＰ１００が実施する図７の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施することで実現される。
【００５３】
Ｓ７０１にて、プログラム実行要求部３１１は、ＦｌａｓｈＲＯＭ２１１上に配置されたプログラム４０１の実行要求をカーネル３１８に対して行う。
【００５４】
Ｓ７０２にて、プログラム検証部３１９は、プログラム実行要求部３１１によるプログラムの実行要求をフックする。Ｓ７０３以降の処理にて、プログラム検証部３１９は、ホワイトリスト４０５を用いて、実行要求されているプログラムの検証を行う。
【００５５】
Ｓ７０３にて、プログラム検証部３１９は、ホワイトリスト４０５に記載されているプログラムのファイルパス５０１の中に、実行要求されたプログラムのファイルパスと一致するものがあるか否かを判定する。例えば、実行要求されたプログラムのファイルパスが「／ｂｉｎ／ｃａｔ」であった場合、図５に示されるホワイトリスト４０５の例のファイルパス５０１の中に一致するものがある。そのため、プログラム検証部３１９は、「／ｂｉｎ／ｃａｔ」の検証は成功したと判定する。実行要求されたプログラムのファイルパスと一致するものがあると判定された場合（Ｓ７０３にてＹＥＳ）Ｓ７０４へ進み、一致するものがないと判定された場合（Ｓ７０３にてＮＯ）Ｓ７０７へ進む。
【００５６】
Ｓ７０４にて、プログラム検証部３１９は、実行要求されたプログラムのハッシュ値を計算する。
【００５７】
Ｓ７０５にて、プログラム検証部３１９は、ホワイトリスト４０５上に記載されている、実行要求されたプログラムのハッシュ値５０２と、Ｓ７０４にて計算されたハッシュ値との比較を行う。ここでハッシュ値が一致する場合とは、プログラムに対する改ざん等が行われておらず、そのプログラムが正当なものであると判定できる。一方、ハッシュ値が一致しない場合とは、改ざん等が行われ、プログラムに何らかの変更が生じていると判定できる。ハッシュ値が一致した場合（Ｓ７０５にてＹＥＳ）Ｓ７０６へ進み、一致しない場合（Ｓ７０５にてＮＯ）Ｓ７０７へ進む。
【００５８】
Ｓ７０６にて、ＭＦＰ１００は、実行要求されたプログラムを実行する。そして、本処理フローを終了する。
【００５９】
Ｓ７０７にて、プログラム検証部３１９は、プログラム実行要求部３１１に対してエラーを通知し、プログラムを実行しないように指示する。
【００６０】
Ｓ７０８にて、プログラム検証部３１９は、ログファイル４０７に検証に失敗したことと、検証に失敗したプログラムの情報を書き込む。検証失敗したプログラムの情報には、少なくともファイルパス、ファイルの配置場所が含まれる。ログファイル４０７に記録されるログの例を挙げると、「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！  ／ｂｉｎ／ｌｓ」である。ここでの文字列「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！」は検証に失敗したことを示す文字列である。この文字列は一例であり、他の文字列が用いられてもよい。
【００６１】
（監視処理）
図８を用いて、ＭＦＰ１００における一連の監視処理の処理フローを説明する。以下の説明で、ＭＦＰ１００が実施する図８の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施することで実現される。
【００６２】
Ｓ８０１にて、ログファイル監視部３１２は、ログファイル４０７の監視を開始する。
【００６３】
Ｓ８０２にて、ログファイル監視部３１２は、ログファイル４０７の更新をポーリングによって定期的に監視する。ここでの定期的な期間は、特に限定するものではなく、予め規定されているものとする。
【００６４】
Ｓ８０３にて、ログファイル監視部３１２は、ポーリングの結果、ログファイル４０７が更新されたか否かを判定する。ログファイル４０７の更新を検知した場合（Ｓ８０３にてＹＥＳ）、ログファイル監視部３１２は、ログファイル解析部３１３にログファイル４０７の解析を依頼し、Ｓ８０４へ進む。ログファイル４０７の更新を検知しなかった場合（Ｓ８０３にてＮＯ）Ｓ８０２へ戻り、次のポーリングまで待機する。
【００６５】
Ｓ８０４にて、ログファイル解析部３１３は、ログファイル４０７の更新されたログを検出する。ログファイル解析部３１３は、検出されたログの中から検証に失敗したプログラムのファイルパスを取得する。ログファイル４０７に記録されるログの例を挙げると、「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！  ／ｂｉｎ／ｌｓ」といったログが記載されている。ログファイル解析部３１３は、ログから検証に失敗したプログラムのファイルパスを抽出する場合、文字列「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！」の後のファイルパスを抽出する。
【００６６】
Ｓ８０５にて、ログファイル解析部３１３は、取得したプログラムのファイルパスに基づき、プログラムの種類を、未知のプログラム、ＪＡＶＡアプリケーション、拡張ＪＡＶＡアプリケーション、機知の実行可能プログラムのいずれであるかを特定する。プログラムの種類を特定する方法については図９を用いて後述する。ログファイル解析部３１３が特定したプログラムの種類は、システム制御部３１４に通知される。
【００６７】
Ｓ８０６以降の処理にて、システム制御部３１４は、ログファイル解析部３１３から通知されたプログラムの種類に応じてＭＦＰ１００の利用可能な機能を制限する。そして、システム制御部３１４は、利用を制限された機能を再度利用可能にするために必要なユーザの作業をＭＦＰ１００の操作部１０２の画面上に表示してユーザに通知する。
【００６８】
Ｓ８０６にて、システム制御部３１４は、ログファイル解析部３１３から通知されたプログラムの種類が「未知のプログラム」か否かを判定する。未知のプログラムであった場合（Ｓ８０６にてＹＥＳ）Ｓ８０７へ進み、未知のプログラムでない場合（Ｓ８０６にてＮＯ）Ｓ８０９へ進む。
【００６９】
Ｓ８０７にて、システム制御部３１４は、機能を制限しないように制御を行う。
【００７０】
Ｓ８０８にて、システム制御部３１４は、ＭＦＰ１００の操作部１０２の画面上に未知のプログラムが検出されたことをユーザに対して通知する。これは、ＭＦＰ１００に必要な要素ではないプログラムが検出された状態であり、ＭＦＰ１００の通常動作には影響がないためである。そして、本処理フローを終了する。
【００７１】
Ｓ８０９にて、システム制御部３１４は、ログファイル解析部３１３から通知されたプログラムの種類が「ＪＡＶＡアプリケーション」であるか否かを判定する。ＪＡＶＡアプリケーションであった場合（Ｓ８０９にてＹＥＳ）Ｓ８１０へ進み、ＪＡＶＡアプリケーションでない場合（Ｓ８０９にてＮＯ）Ｓ８１２へ進む。
【００７２】
Ｓ８１０にて、システム制御部３１４は、ＭＦＰ１００の機能を全て停止するように制御を行う。
【００７３】
Ｓ８１１にて、システム制御部３１４は、ＭＦＰ１００の操作部１０２の画面上に、ＪＡＶＡアプリケーション４０３が改ざんされたことと再起動を促す画面を表示する。ここでの状態は、ＭＦＰ１００に必要な要素であるプログラムが改ざんされた状態である。しかし、ＭＦＰ１００内の保護された領域（保護領域４０８）にＪＡＶＡアプリケーション４０３のコピーが存在しており、ユーザがＭＦＰ１００の再起動することでＭＦＰ１００が起動途中にそのコピーを基にした復旧が可能であるため再起動を促している。この時、ユーザがＭＦＰ１００を再起動させれば、ＭＦＰ１００は自動的にＪＡＶＡアプリケーション４０３の復旧を行い、ＭＦＰ１００が全機能を再び利用可能となる。
【００７４】
図１７は、Ｓ８１１にて操作部１０２に表示される、ＪＡＶＡアプリケーション４０３の改ざんを検知した場合に表示されるエラー画面１７０１の例である。エラー画面１７０１は、システム停止エラーとしてユーザにＪＡＶＡアプリケーション４０３が改ざんされ、システムを停止したことを通知している。また、エラー画面１７０１から通常の機能実行画面に遷移することはできず、ユーザはＭＦＰ１００を利用することはない。再起動ボタン１７０２が押下されると、ＭＦＰ１００の再起動が実施される。その結果、ＭＦＰ１００において、改ざん前のＪＡＶＡアプリケーション４０３を用いて復旧される。
【００７５】
Ｓ８１２にて、システム制御部３１４は、ログファイル解析部３１３から通知されたプログラムの種類が「拡張ＪＡＶＡアプリケーション」か否かを判定する。拡張ＪＡＶＡアプリケーションであった場合（Ｓ８１２にてＹＥＳ）Ｓ８１３へ進み、拡張ＪＡＶＡアプリケーションでない場合（Ｓ８１２にてＮＯ）Ｓ８１５へ進む。
【００７６】
Ｓ８１３にて、システム制御部３１４は、ログファイル解析部３１３から通知されたプログラム（拡張ＪＡＶＡアプリケーション）の機能の利用を制限するように制御する。
【００７７】
Ｓ８１４にて、システム制御部３１４は、拡張ＪＡＶＡアプリケーション４０４を再度インストールすることを促す画面を、ＭＦＰ１００の操作部１０２の画面上に表示する。ここでの状態は、対象の拡張ＪＡＶＡアプリケーションの再インストールを行えば復旧可能である状態である。この時、ユーザが対象の拡張ＪＡＶＡアプリケーション４０４を再インストールすることにより、ＭＦＰ１００が対象の拡張ＪＡＶＡアプリケーション４０４を利用可能にする。
【００７８】
Ｓ８１５にて、システム制御部３１４は、ＭＦＰ１００の機能を全て停止するように制御を行う。
【００７９】
Ｓ８１６にて、システム制御部３１４は、ユーザに対してＭＦＰ１００のファームウェアの入れ替えを促す画面を、操作部１０２の画面上に表示する。ここでの状態は、ＭＦＰ１００に必要な部品となっているプログラムが改ざんされている状態である。この状態のままＭＦＰ１００を動作させ続けるとセキュリティ上の問題を招く恐れがあり、なおかつファームウェアの入れ替えのみでしかＭＦＰ１００を復旧させることができない。なお、この時に改ざんされているプログラムの種類は、ホワイトリスト４０５に記載のある実行可能プログラムである。
【００８０】
図１６は、Ｓ８１６にて操作部１０２に表示される、ホワイトリスト４０５に記載のある実行可能プログラムの改ざんを検知した場合に表示されるエラー画面１６０１である。このエラー画面１６０１は、ファームウェアが改ざんされ、システムを停止したことをシステム停止エラーとしてユーザに通知している。また、このエラー画面１６０１から通常の機能実行画面に遷移することはできず、ユーザはＭＦＰ１００を利用することはない。
【００８１】
（特定処理）
図９を用いて、ＭＦＰ１００のログファイル解析部３１３がログファイル４０７の解析を行いプログラムの種類を特定する処理フローを説明する。この処理は、図８のＳ８０５の工程に対応し、ログファイル監視部３１２がログファイルの更新をログファイル解析部３１３に通知したときに行われる。以下の説明で、ＭＦＰ１００が実施する図９の処理は、ＦｌａｓｈＲＯＭ２１１に格納されたプログラムをＣＰＵ２０１がＤＲＡＭ２０２に読み込んだ後、ＣＰＵ２０１の演算処理として実施することで実現される。
【００８２】
Ｓ９０１にて、ログファイル解析部３１３は、検出されたログの中から検証に失敗したプログラムのファイルパスを取得する。ログファイル４０７に記録されるログの例を挙げると、文字列「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！  ／ｂｉｎ／ｌｓ」といったログが記載されている。ログファイル解析部３１３は、ログから検証に失敗したプログラムのファイルパスを抽出する場合、文字列「Ｆａｉｌｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ！」の後に続くファイルパス「／ｂｉｎ／ｌｓ」を抽出する。
【００８３】
Ｓ９０２にて、ログファイル解析部３１３は、ログファイル４０７から抽出したファイルパスがホワイトリスト４０５に記載されているファイルパスの中に一致するものがあるか否かを確認する。ログファイル４０７から抽出したファイルパスがホワイトリスト４０５に記載されているファイルパスの中に一致するものがなかった場合（Ｓ９０２にてＮＯ）Ｓ９０３へ進み、一致するものがあった場合（Ｓ９０２にてＹＥＳ）Ｓ９０４へ進む。
【００８４】
Ｓ９０３にて、ログファイル解析部３１３は、プログラムの種類を「未知のプログラム」と決定する。例えば、ファイルパス「／ｂｉｎ／ｌｓ」は、図５のホワイトリスト４０５に記載されているファイルパスの中にないため、ログファイル解析部３１３は「／ｂｉｎ／ｌｓ」を未知のプログラムと決定する。そして、本処理フローを終了する。
【００８５】
Ｓ９０４にて、ログファイル解析部３１３は、対象のプログラムがｊａｒファイルであるか否かを判定する。具体的には、プログラムの拡張子が「．ｊａｒ」であるか否かを確認し、「．ｊａｒ」である場合はｊａｒファイルと判定される。ｊａｒファイルでないと判定された場合は（Ｓ９０４にてＮＯ）Ｓ９０５へ進み、ｊａｒファイルであると判定された場合は（Ｓ９０４にてＹＥＳ）Ｓ９０６へ進む。
【００８６】
Ｓ９０５にて、ログファイル解析部３１３は、プログラムの種類を「既知の実行可能プログラム」と決定する。ここでの既知とは、ホワイトリスト４０５に記載されていることを意味する。そして、本処理フローを終了する。
【００８７】
Ｓ９０６にて、ログファイル解析部３１３は、アプリケーション管理テーブル４０６を参照してファイルパスからアプリケーションのタイプを特定する。この時、ログファイル解析部３１３は、ログファイル４０７から抽出したプログラムのファイルパスをアプリケーション管理テーブル４０６に記載されているファイルパスの中で一致するものを探索する。そして、ログファイル解析部３１３は、一致したファイルパスと対応しているアプリケーションのタイプをログファイル４０７から抽出したプログラムのファイルパスのアプリケーションのタイプとして決定する。
【００８８】
例えば、プログラムのファイルパスが「／ｈｏｍｅ／ａ．ｊａｒ」であった場合、図６のアプリケーション管理テーブル４０６の例を参照してファイルパス６０１が一致するもののアプリケーションのタイプ６０２は、「ＪＡＶＡアプリケーション」となる。そのため、ログファイル解析部３１３は、「／ｈｏｍｅ／ａ．ｊａｒ」のタイプを「ＪＡＶＡアプリケーション」であると決定する。
【００８９】
Ｓ９０７にて、ログファイル解析部３１３は、特定されたアプリケーションのタイプがＪＡＶＡアプリケーションか否かを判定する。ＪＡＶＡアプリケーションであると判定された場合（Ｓ９０７にてＹＥＳ）Ｓ９０９へ進み、そうでない場合は（Ｓ９０７にてＮＯ）Ｓ９０８へ進む。
【００９０】
Ｓ９０８にて、ログファイル解析部３１３は、プログラムの種類を「拡張ＪＡＶＡアプリケーション」と決定する。そして、本処理フローを終了する。
【００９１】
Ｓ９０９にて、ログファイル解析部３１３は、プログラムの種類を「ＪＡＶＡアプリケーション」と決定する。そして、本処理フローを終了する。
【００９２】
以上、本実施形態により、プログラムの実行時に改ざんを検証するシステムにおいて、プログラムの検証を失敗した場合にも、セキュリティを保ちつつ可用性を確保してユーザがＭＦＰを利用可能となる。
【００９３】
＜第２の実施形態＞
以下、本発明の第２の実施形態について説明する。本実施形態では、ログファイル解析部３１３がログファイル４０７から複数の更新されたログを検出した場合に、利用可能な機能を制御する方法について説明する。なお、第１の実施形態と重複する構成等については、ここでの詳細な説明は省略する。また、同じ処理等については、同じ参照番号を付して示す。
【００９４】
（処理フロー）
図１８は、本実施形態に係る監視処理を示す。図１８の処理は、第１の実施形態にて述べた図８の処理フローのうち、Ｓ８０３とＳ８０６の間に行われる処理であり、それ以外は第１の実施形態と同じ構成および処理である。ログファイルが更新されたことを検知した場合（Ｓ８０３にてＹＥＳ）、Ｓ１８０１へ進む。
【００９５】
Ｓ１８０１にて、ログファイル解析部３１３は、ログファイル４０７の中から更新された一回の検証分のログに当たる一行を抽出する。
【００９６】
Ｓ８０４にて、ログファイル解析部３１３は、抽出されたログの中から検証に失敗したプログラムのファイルパスを取得する。
【００９７】
Ｓ８０５にて、ログファイル解析部３１３は、取得したプログラムのファイルパスに基づき、プログラムの種類を、未知のプログラム、ＪＡＶＡアプリケーション、拡張ＪＡＶＡアプリケーション、機知の実行可能プログラムのいずれであるかを特定する。プログラムの種類を特定する方法については、第１の実施形態にて図９を用いて説明したものと同様となる。
【００９８】
Ｓ１８０２にて、ログファイル解析部３１３は、検証に失敗したプログラムの種類がホワイトリスト４０５に記載のある実行可能ファイルか否かを判定する。ホワイトリスト４０５に記載のある実行可能ファイルであると判定した場合（Ｓ１８０２にてＹＥＳ）、プログラムの種類をシステム制御部３１４へ通知し、図８のＳ８０６へ進む。ホワイトリスト４０５に記載のある実行可能ファイルでないと判定した場合は（Ｓ１８０２にてＮＯ）Ｓ１８０３へ進む。
【００９９】
Ｓ１８０３にて、ログファイル解析部３１３は、プログラムの種類をＤＲＡＭ２０２に記憶する。
【０１００】
Ｓ１８０４にて、ログファイル解析部３１３は、ログファイル４０７の更新されたログを全て解析したか否かを判定する。全て解析したと判定された場合は（Ｓ１８０４にてＹＥＳ）Ｓ１８０５へ進み、全て解析していないと判定された場合は（Ｓ１８０４にてＮＯ）Ｓ１８０１へ戻る。
【０１０１】
Ｓ１８０５にて、ログファイル解析部３１３は、Ｓ１８０３で記憶した全てのログに対して解析されたファイルの種類を取得する。
【０１０２】
Ｓ１８０６にて、ログファイル解析部３１３は、前回、システム制御部３１４に通知したファイルの種類を取得する。なお、ログファイル解析部３１３からシステム制御部３１４に通知したプログラムの種類に関する情報は、履歴として保持されているものとする。
【０１０３】
Ｓ１８０７にて、ログファイル解析部３１３は、Ｓ１８０５とＳ１８０６で取得したファイルの種類について、システム制御部３１４に通知する優先度に基づいて比較し、最も優先度が高いファイルの種類を決定する。ここでの優先度は、予め定義され、保持されているものとする。その後、ログファイル解析部３１３は、Ｓ１８０７にて決定したプログラムの種類をシステム制御部３１４へ通知し、図８のＳ８０６へ進む。
【０１０４】
本実施形態にて用いられる優先度について説明する。本実施形態に係る優先度は、プログラムの種類に応じて定義されている。図１８に示すフローの場合、ホワイトリスト４０５に記載のある実行可能プログラムに改ざんが見つかった場合を最も優先度が高いものとして扱っている。そのため、Ｓ１８０２にてプログラムが上記の種類である場合に、即座に通知を行っている。その他のプログラムの種類に対する優先度としては、例えば、ＪＡＶＡアプリケーション＞拡張ＪＡＶＡアプリケーション＞未知のプログラム、としてよい。この優先度の関係は、例えば、ＭＦＰ１００のセキュリティと可用性の要求に応じて決定してよい。言い換えると、例えば、ログが示すプログラムの種類のうち、最も制限の広い（厳しい）種類の対応を行うようにしてよい。
【０１０５】
以上、本実施形態により、複数のプログラムの検証に失敗し、ログファイルに複数のログを検出した場合に、検証に失敗したプログラムの種類によって制限する機能を優先度によって決定する。これにより、セキュリティを保ちつつ、可用性を確保してユーザがＭＦＰを利用可能となる。
【０１０６】
＜第３の実施形態＞
以下、本発明の第３の実施形態について説明する。本実施形態では、ユーザがログインしている時のログファイル更新監視時間の動的変更処理について説明する。なお、第１の実施形態と重複する構成等については、ここでの詳細な説明は省略する。また、同じ処理等については、同じ参照番号を付して示す。
【０１０７】
（処理フロー）
図１９は、本実施形態に係る監視処理を示す。第１の実施形態にて述べた図８の処理フローとの差異は、Ｓ８０１とＳ８０２の間に行われるＳ１９０３の処理であり、それ以外は第１の実施形態と同じ構成および処理である。
【０１０８】
Ｓ８０１にて、ログファイル監視部３１２は、ログファイル４０７の監視を開始する。
【０１０９】
Ｓ１９０１にて、ログファイル監視部３１２は、ＭＦＰ１００にユーザがログインしているか否かを判定する。ユーザがログインしていると判定された場合は（Ｓ１９０１にてＹＥＳ）Ｓ１９０２へ進み、ログインしていないと判定された場合は（Ｓ１９０１にてＮＯ）Ｓ１９０３へ進む。
【０１１０】
Ｓ１９０２にて、ログファイル監視部３１２は、次回のポーリング時間を第１の間隔に設定する。そして、Ｓ８０２へ進む。
【０１１１】
Ｓ１９０３にて、ログファイル監視部３１２は、ポーリング時間を第２の間隔に設定する。そして、Ｓ８０２へ進む。
【０１１２】
ポーリング時間の設定に関して例を挙げると、ポーリング時間を第１の間隔に設定する場合は１秒とし、ポーリング時間を第２の間隔に設定する場合は第１の間隔よりも長い５秒とする。なお、ここでは、ポーリング時間として、第１の間隔と第２の間隔の２段階に設定する構成としたが、これに限定するものではない。例えば、間隔の上限と下限を定義しておき、段階的に所定の単位で間隔を長くしたり短くしたりするような制御を行ってもよい。なお、ポーリング時間の初期値はいずれの間隔であってもよい。
【０１１３】
その後、Ｓ８０３にてログファイルが更新されていないと判定された場合には（Ｓ８０３にてＮＯ）Ｓ１９０１へ戻ることとなる。
【０１１４】
以上、本実施形態により、第１の実施形態の効果に加え、ユーザがログインを行っている場合にログファイル４０７のポーリング期間を短く設定することで、改ざんが起こっていることを早期にユーザに通知することが可能となる。
【０１１５】
＜第４の実施形態＞
以下、本発明の第４の実施形態について説明する。ログファイル４０７には、サイズの上限があり、大量のログが記録された場合、過去のログから順に消去される場合がある。このような構成において、プログラムが改ざんされていたとしてログが記録されていた場合でも、ログが消去されてしまう可能性がある。ログが解析前に消去されてしまうと、ユーザに対して適切な通知ができず、ＭＦＰのセキュリティや可用性の点からも問題である。
【０１１６】
そこで、本実施形態では、多数のプログラムの改ざんを検知し、ログファイル４０７に大量のログが記録された場合において、ログファイル４０７のポーリング期間の動的変更処理について説明する。なお、第１の実施形態と重複する構成等については、ここでの詳細な説明は省略する。また、同じ処理等については、同じ参照番号を付して示す。
【０１１７】
（処理フロー）
図２０は、本実施形態に係る監視処理を示す。図２０の処理は、第１の実施形態にて述べた図８の処理フローとは並行して実施されてもよいし、図８の処理フローの一部として実行されてもよい。以下の説明では、図８の処理フローと並列に行われる場合を示す。図８の処理フローの一部として行われる場合には、例えば、図８のＳ８０１〜Ｓ８０３に代えて行われてよい。この場合、Ｓ２００５およびＳ２００６の処理の後、Ｓ８０４へ進む。
【０１１８】
Ｓ２００１にて、ログファイル監視部３１２は、ログファイル４０７の監視を開始する。
【０１１９】
Ｓ２００２にて、ログファイル監視部３１２は、ログファイル４０７の更新をポーリングによって定期的に監視する。ここでの定期的な期間は、特に限定するものではなく、予め規定されているものとする。
【０１２０】
Ｓ２００３にて、ログファイル監視部３１２は、ポーリングの結果、ログファイル４０７が更新されたか否かを判定する。ログファイル４０７の更新を検知した場合（Ｓ２００３にてＹＥＳ）Ｓ２００４へ進み、ログファイル４０７の更新を検知しなかった場合（Ｓ２００３にてＮＯ）Ｓ２００２へ戻り、次の監視時間まで待機する。
【０１２１】
Ｓ２００４にて、ログファイル監視部３１２は、ログが更新された個数を確認し、更新されたログの数が、所定の閾値よりも多いか否かを判定する。ここでの所定の閾値として１００件を例に挙げて説明する。更新されたログの数が１００件以上である場合（Ｓ２００４にてＹＥＳ）Ｓ２００５へ進み、１００件よりも少ない場合は（Ｓ２００４にてＮＯ）Ｓ２００６へ進む。
【０１２２】
Ｓ２００５にて、ログファイル監視部３１２は、次にポーリングする時間を短く設定する。そして、Ｓ２００２へ戻り、次の監視時間まで待機する。ここでの設定は、例えば、現時点にて設定されているポーリング時間が半分（１／２）となるように設定してよい。もしくは、Ｓ２００５にて判定した所定の閾値からの差分に応じて、設定するポーリング時間や、現設定に対する比率を変更してもよい。
【０１２３】
Ｓ２００６にて、ログファイル監視部３１２は、ポーリング時間を元に戻す。ここでの元のポーリング時間とは、初期値であってもよいし、前回のＳ２００５の処理が行われる前の値であってもよい。そして、Ｓ２００２へ戻り、次の監視時間まで待機する。
【０１２４】
以上、本実施形態により、第１の実施形態の効果に加え、ログファイル４０７からログファイル解析部３１３が解析していないログの消去を防止可能になり、ＭＦＰの可用性が向上する。
【０１２５】
＜第５の実施形態＞
以下、本発明の第５の実施形態について説明する。本実施形態では、多数のプログラムの改ざんを検知し、ログファイル４０７に大量のログが記録された場合において、ログファイル解析部３１３が解析していないログが上書きなどにより消失したことを検知した場合の制御処理について説明する。第４の実施形態と同様に、ログファイル４０７にはサイズの上限があり、そのサイズを超えた場合には、ログが上書きされるものとする。なお、第１の実施形態と重複する構成等については、ここでの詳細な説明は省略する。また、同じ処理等については、同じ参照番号を付して示す。
【０１２６】
（処理フロー）
図２１は、本実施形態に係る監視処理を示す。図２１の処理は、第１の実施形態にて述べた図８の処理フローとは並行して実施されてもよいし、図８の処理フローの一部として実行されてもよい。以下の説明では、図８の処理フローと並列に行われる場合を示す。
【０１２７】
Ｓ２１０１にて、ログファイル監視部３１２は、ログファイル４０７の監視を開始する。
【０１２８】
Ｓ２１０２にて、ログファイル監視部３１２は、ログファイル４０７の更新をポーリングによって定期的に監視する。ここでの定期的な期間は、特に限定するものではなく、予め規定されているものとする。
【０１２９】
Ｓ２１０３にて、ログファイル監視部３１２は、ポーリングの結果、ログファイル４０７が更新されたか否かを判定する。ログファイル４０７の更新を検知した場合（Ｓ２１０３にてＹＥＳ）Ｓ２１０４へ進み、ログファイル４０７の更新を検知しなかった場合（Ｓ２１０３にてＮＯ）Ｓ２１０２へ戻り、次の監視時間まで待機する。
【０１３０】
Ｓ２１０４にて、ログファイル解析部３１３は、前回ポーリングした時の最後のログを取得する。ここでの最後のログに関する情報は、例えば、ポーリングを行った日時などの情報を記憶しておき、その情報に基づいて判定してよい。
【０１３１】
Ｓ２１０５にて、ログファイル解析部３１３は、前回ポーリングした時の最後のログと一致するログがログファイル４０７にあるか否かを判定する。前回ポーリングした時の最後のログと一致するログがログファイル４０７にあった場合（Ｓ２１０５にてＹＥＳ）Ｓ２１０２へ戻り、次の監視時間まで待機する。一致するログが無い場合（Ｓ２１０５にてＮＯ）Ｓ２１０６へ進む。
【０１３２】
Ｓ２１０６にて、システム制御部３１４は、ＭＦＰ１００の機能を全て停止するように制御を行う。
【０１３３】
Ｓ２１０７にて、システム制御部３１４は、ユーザに対してＭＦＰ１００のファームウェアの入れ替えを促す画面を、操作部１０２の画面上に表示する。Ｓ２１０２へ戻り、次の監視時間まで待機する。
【０１３４】
本実施形態では、前回ログを解析した時の最後のログと一致するログがログファイル４０７になかった場合、ログファイル解析部３１３は、改ざんを検知した場合の最も優先度が高い処理を実施した例を示した。具体的には、システム制御部３１４が、ＭＦＰ１００を停止し、ユーザに対してファームウェアの入れ替えを実施するように通知する処理を行っている。なお、この処理に限定するものではなく、他の処理を行うような構成であってもよい。例えば、ユーザにログが消去され、セキュリティ上の問題が発生している旨の通知を行ってもよい。
【０１３５】
大量にログファイル４０７の更新があり、ログファイル４０７からログファイル解析部３１３が解析していないログが上書きなどによって消失してしまう場合には、上書きによって消失したログにシステム全体に影響を及ぼすログがある可能性がある。これに対し本実施形態では、緊急性が高い状態であるものとして、優先度の高い制御処理を実施する。言い換えると、適用可能な制限のうち最も制限の広い（厳しい）制限を行う。これにより、ＭＦＰをセキュアに運用することが可能になる。
【０１３６】
なお、本処理フローを図８の処理フローの一部として行われる場合には、例えば、図８のＳ８０１〜Ｓ８０３に代えて行われ、Ｓ２１０５にてＹＥＳの場合にＳ８０４へ進み、Ｓ２１０５にてＮＯの場合にＳ８１５へ進むように制御してよい。
【０１３７】
以上、本実施形態では、第１の実施形態の効果に加え、ログファイル４０７から未処理のログが消失したことを確認した場合は、最も優先度の高い処理を実施することで、セキュリティを保ちつつ可用性を確保してユーザがＭＦＰを利用可能となる。
【０１３８】
＜その他の実施形態＞
本発明は上述の実施形態の１以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１３９】
１００…ＭＦＰ、１０１…コントローラ部、１０２…操作部、１０３…画像形成部、１０４…画像読取部、１１０…クライアントＰＣ、２０１…ＣＰＵ、２０２…ＤＲＡＭ、２１１…ＦｌａｓｈＲＯＭ、２２０…ＲＯＭ、３０１…コントローラソフト、３１９…カーネル
【図１】
2020086469.tif 000003
【図２】
2020086469.tif 000004
【図３】
2020086469.tif 000005
【図４】
2020086469.tif 000006
【図５】
2020086469.tif 000007
【図６】
2020086469.tif 000008
【図７】
2020086469.tif 000009
【図８】
2020086469.tif 000010
【図９】
2020086469.tif 000011
【図１０】
2020086469.tif 000012
【図１１】
2020086469.tif 000013
【図１２】
2020086469.tif 000014
【図１３】
2020086469.tif 000015
【図１４】
2020086469.tif 000016
【図１５】
2020086469.tif 000017
【図１６】
2020086469.tif 000018
【図１７】
2020086469.tif 000019
【図１８】
2020086469.tif 000020
【図１９】
2020086469.tif 000021
【図２０】
2020086469.tif 000022
【図２１】
2020086469.tif 000023