(57)【要約】      （修正有）【課題】起動に必要なプログラムの改ざんを検知したことを示すログを記録することができる情報処理装置を提供する。【解決手段】情報処理装置は、特定の起動処理プログラムの改ざんを検知した際に、生成した改ざん検知情報をフラッシュメモリの改ざん情報記録領域に書き込みＳ４０９、情報処理装置が正常に起動した際に、改ざん情報記録領域に改ざん検知情報が記録されているか否かを判別しＳ４１２、記録されている場合は改ざん検知情報に基づいてログを記録しＳ４１４、改ざん情報記録領域から改ざん検知情報を削除するＳ４１５。【選択図】図４
2019128775.tif 000002
【特許請求の範囲】
【請求項１】
格納されたプログラムの改ざんを起動処理の実行時に検知した際に前記起動処理の実行を中止する情報処理装置であって、
前記プログラムの改ざんを検知する改ざん検知手段と、
前記プログラムの改ざんを検知した際に生成した改ざん検知情報を保持する保持手段と、
前記改ざん検知手段による検知結果を含むログを記録するログ記録手段とを備え、
前記ログ記録手段は、前記情報処理装置が正常に起動した際に前記保持された改ざん検知情報に基づいて前記ログを記録することを特徴とする情報処理装置。
【請求項２】
複数の前記改ざん検知手段を備え、
複数の前記改ざん検知手段のうち、前記プログラムの改ざんを検知した改ざん検知手段が前記改ざん検知情報を保持手段に記録することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記改ざん検知情報は、前記プログラムの改ざんを検知した時刻を示す情報を含むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記改ざん検知情報は、前記保持手段において前記プログラムの改ざんを検知した改ざん検知手段に対応付けされた特定の領域に記録されることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記プログラムは、前記情報処理装置のブートプログラム及びＢＩＯＳ（Basic Input Output System）の実行後に実行されるプログラムであって且つ前記ログ記録手段の起動に関連するプログラムであることを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記ログ記録手段が前記改ざん検知情報に基づいて前記ログを記録した後に前記改ざん検知情報を前記保持手段から削除することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
格納されたプログラムの改ざんを起動処理の実行時に検知した際に前記起動処理の実行を中止する情報処理装置の制御方法であって、
前記プログラムの改ざんを検知する改ざん検知ステップと、
前記プログラムの改ざんを検知した際に生成した改ざん検知情報を保持する保持ステップと、
前記改ざん検知ステップの検知結果を含むログを記録するログ記録ステップとを有し、
前記ログ記録ステップは、前記情報処理装置が正常に起動した際に前記保持された改ざん検知情報に基づいて前記ログを記録することを特徴とする情報処理装置の制御方法。
【請求項８】
格納されたプログラムの改ざんを起動処理の実行時に検知した際に前記起動処理の実行を中止する情報処理装置の制御方法をコンピュータに実行させるプログラムであって、
前記情報処理装置の制御方法は、
前記プログラムの改ざんを検知する改ざん検知ステップと、
前記プログラムの改ざんを検知した際に生成した改ざん検知情報を保持する保持ステップと、
前記改ざん検知ステップの検知結果を含むログを記録するログ記録ステップとを有し、
前記ログ記録ステップは、前記情報処理装置が正常に起動した際に前記保持された改ざん検知情報に基づいて前記ログを記録することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
ソフトウェアを動作させる複数のプログラムを格納する情報処理装置が知られている。情報処理装置では、ソフトウェアの脆弱性を突いて上記ソフトウェアを動作させるプログラムが改ざんされると、上記情報処理装置が悪意あるユーザによって悪用されてしまう。これに対応し、従来では、情報処理装置が該情報処理装置の起動時に各プログラムの改ざん検知処理を行う（例えば、特許文献１参照）。情報処理装置は、プログラムの改ざんが検知されると、情報処理装置のシステムを停止する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２４４９９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の情報処理装置では、上記情報処理装置の起動に必要なプログラムの改ざんが検知された場合、情報処理装置のシステムが起動しないので、ログを記録するモジュールも起動せず、上記プログラムが改ざんされたことを示すログを記録することができない。
【０００５】
本発明の目的は、起動に必要なプログラムの改ざんを検知したことを示すログを記録することができる情報処理装置及びその制御方法、並びにプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明の情報処理装置は、格納されたプログラムの改ざんを起動処理の実行時に検知した際に前記起動処理の実行を中止する情報処理装置であって、前記プログラムの改ざんを検知する改ざん検知手段と、前記プログラムの改ざんを検知した際に生成した改ざん検知情報を保持する保持手段と、前記改ざん検知手段による検知結果を含むログを記録するログ記録手段とを備え、前記ログ記録手段は、前記情報処理装置が正常に起動した際に前記保持された改ざん検知情報に基づいて前記ログを記録することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、起動に必要なプログラムの改ざんを検知したことを示すログを記録することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態に係る情報処理装置としてのＭＦＰの構成を概略的に示すブロック図である。
【図２】図１のＭＦＰのソフトウェア構成を概略的に示すブロック図である。
【図３】図１のＭＦＰの起動を説明するための模式図である。
【図４】図１のＭＦＰによって実行される起動処理の手順を示すフローチャートである。
【図５】図１の改ざん情報記録領域の構成の一例を示す図である。
【図６】図２のソフトウェア構成の変形例を示すブロック図である。
【図７】図５の改ざん情報記録領域の変形例の構成を示す図である。
【図８】図４の起動処理の変形例の手順を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について図面を参照しながら詳細に説明する。なお、本実施の形態では、情報処理装置としてのＭＦＰに本発明を適用した場合について説明するが、本発明はＭＦＰに限られず、プログラムの改ざん検知機能を備えるＰＣ等の装置に適用してもよい。
【００１０】
図１は、本発明の実施の形態に係る情報処理装置としてのＭＦＰ１００の構成を概略的に示すブロック図である。図１において、ＭＦＰ１００は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＨＤＤ１０４、フラッシュメモリ１０５、ＥＣ（Embedded Controller）１０７、及びネットワークＩ／Ｆ制御部１１０を備える。さらに、ＭＦＰ１００は、スキャナＩ／Ｆ制御部１１２、スキャナ１１３、プリンタＩ／Ｆ制御部１１４、プリンタ１１５、パネル制御部１１６、及びＬＥＤ１１８を備える。ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＨＤＤ１０４、フラッシュメモリ１０５、ＥＣ１０７、ネットワークＩ／Ｆ制御部１１０、スキャナＩ／Ｆ制御部１１２、プリンタＩ／Ｆ制御部１１４、パネル制御部１１６、及びＬＥＤ１１８はバス１１９を介して互いに接続されている。スキャナ１１３はスキャナＩ／Ｆ制御部１１２に接続されている。プリンタ１１５はプリンタＩ／Ｆ制御部１１４に接続されている。
【００１１】
ＣＰＵ１０１は格納されたプログラムを実行してＭＦＰ１００全体の制御を行う。ＲＯＭ１０２は、後述する図２のブートプログラム２０３やＢＩＯＳ（Basic Input Output System）２０５等のプログラム、及びＭＦＰ１００の設定値を格納する。ＲＡＭ１０３はＣＰＵ１０１の作業領域として、また、各データの一時格納領域として用いられる。ＨＤＤ１０４は後述する図２のＪａｖａ（登録商標）プログラム２１４や各種データを格納する。フラッシュメモリ１０５は後述する図２のローダー２０７、カーネル２０９、及びＮａｔｉｖｅプログラム２１１等のプログラムを格納する。また、フラッシュメモリ１０５は、特定の領域である改ざん情報記録領域１０６に、後述するローダー２０７、カーネル２０９、及びＮａｔｉｖｅプログラム２１１の何れかの改ざんが検知された時刻等を含む改ざん検知情報を保持する。
【００１２】
ＥＣ１０７はＥＣ_ＣＰＵ１０８及びＥＣ_ＲＡＭ１０９を備える。ＥＣ_ＣＰＵ１０８はＥＣ１０７のソフトウェアモジュールを実行してＭＦＰ１００の一部の機能の制御を行う。ＥＣ_ＲＡＭ１０９はＥＣ_ＣＰＵ１０８が各制御を行う際にプログラムやデータ等を一時的に格納する領域として用いられる。なお、本実施の形態では、ＭＦＰ１００がシャットダウンしても、少なくともＲＯＭ１０２、ＥＣ_ＣＰＵ１０８、及びＥＣ_ＲＡＭ１０９は通電されている。ＭＦＰ１００では、起動指示を受け付けた際にＲＯＭ１０２からＥＣ_ＲＡＭ１０９に読み込まれた後述するブートプログラム２０３がＥＣ_ＣＰＵ１０８によって実行される。
【００１３】
ネットワークＩ／Ｆ制御部１１０はネットワーク１１１を介した外部装置（不図示）とのデータ通信の制御を行う。スキャナＩ／Ｆ制御部１１２はスキャナ１１３による原稿の読み取り処理の制御を行う。プリンタＩ／Ｆ制御部１１４はプリンタ１１５による印刷処理の制御を行う。パネル制御部１１６はＭＦＰ１００に外付けされたタッチパネル式の操作パネル１１７を制御する。例えば、パネル制御部１１６は操作パネル１１７に各種情報を表示させ、また、パネル制御部１１６はユーザが操作パネル１１７で入力した入力情報を操作パネル１１７から取得する。ＬＥＤ１１８は必要に応じて点灯し、後述するソフトウェアモジュール２００やハードウェアの異常をユーザに伝える。
【００１４】
図２は、図１のＭＦＰ１００のソフトウェア構成を概略的に示すブロック図である。図２において、ＭＦＰ１００は、通信管理プログラム２０１、ＵＩ制御プログラム２０２、ブートプログラム２０３、ＢＩＯＳ２０５、ローダー２０７、カーネル２０９、Ｎａｔｉｖｅプログラム２１１、及びＪａｖａプログラム２１４を備える。
【００１５】
通信管理プログラム２０１は、ネットワークＩ／Ｆ制御部１１０を制御してネットワーク１１１を介した外部装置（不図示）とのデータ通信の制御を行う。ＵＩ制御プログラム２０２は操作パネル１１７で入力された入力情報に応じて操作パネル１１７に表示される画面の切り替え制御を行う。
【００１６】
ブートプログラム２０３はＭＦＰ１００の起動時にＥＣ１０７のＥＣ_ＣＰＵ１０８によって実行されるプログラムである。ブートプログラム２０３はＲＯＭ１０２に格納され、ＭＦＰ１００の起動に関する処理を行う。また、ブートプログラム２０３はＢＩＯＳ２０５の改ざん検知を行うモジュールであるＢＩＯＳ改ざん検知部２０４を備える。ＢＩＯＳ２０５はブートプログラム２０３が実行された後にＣＰＵ１０１によって実行されるプログラムである。ブートプログラム２０３もＲＯＭ１０２に格納され、ＭＦＰ１００の起動に関する処理を行う。また、ＢＩＯＳ２０５はローダー２０７の改ざん検知を行うモジュールであるローダー改ざん検知部２０６を備える。
【００１７】
ローダー２０７はＢＩＯＳ２０５による処理を完了した後にＣＰＵ１０１によって実行されるプログラムである。ローダー２０７はフラッシュメモリ１０５に格納され、ＭＦＰ１００の起動に関する処理を行う。また、ローダー２０７はカーネル２０９の改ざん検知を行うモジュールであるカーネル改ざん検知部２０８を備える。カーネル２０９はローダー２０７による処理を完了した後にＣＰＵ１０１によって実行されるプログラムである。カーネル２０９はフラッシュメモリ１０５に格納され、ＭＦＰ１００の起動に関する処理を行う。また、カーネル２０９はＮａｔｉｖｅプログラム２１１の改ざん検知を行うモジュールであるＮａｔｉｖｅ改ざん検知部２１０を備える。
【００１８】
Ｎａｔｉｖｅプログラム２１１はＣＰＵ１０１によって実行されるプログラムである。Ｎａｔｉｖｅプログラム２１１はフラッシュメモリ１０５に格納され、Ｊａｖａプログラム２１４と連携してＭＦＰ１００の各機能を提供する複数のプログラムで構成される。例えば、Ｎａｔｉｖｅプログラム２１１は、スキャナＩ／Ｆ制御部１１２やプリンタＩ／Ｆ制御部１１４を制御するプログラムや起動プログラムを含む。ＭＦＰ１００では、Ｎａｔｉｖｅプログラム２１１を構成する複数のプログラムの中から起動プログラムがカーネル２０９によって呼び出されてＪａｖａプログラム２１４が起動する。
【００１９】
また、Ｎａｔｉｖｅプログラム２１１はＪａｖａ改ざん検知部２１２及びログ記録部２１３を備える。Ｊａｖａ改ざん検知部２１２はＪａｖａプログラム２１４の改ざん検知を行うモジュールである。ログ記録部２１３は改ざん情報記録領域１０６に保持された改ざん検知情報に基づいて改ざん検知結果を示すログを生成するモジュールである。以下では、ブートプログラム及びＢＩＯＳ２０５の実行後に起動され、且つログ記録部２１３の起動に関連する、具体的に、起動することでログ記録部２１３がログを生成可能となるローダー２０７、カーネル２０９、Ｎａｔｉｖｅプログラム２１１を特定の起動処理プログラムという。Ｊａｖａプログラム２１４はＣＰＵ１０１によって実行されるプログラムである。Ｊａｖａプログラム２１４はＨＤＤ１０４に格納され、Ｎａｔｉｖｅプログラム２１１と連携してＭＦＰ１００の各機能を提供する。
【００２０】
図３は、図１のＭＦＰ１００の起動を説明するための模式図である。ＭＦＰ１００では、起動指示受け付けると、図３（ａ）に示すように、ブートプログラム２０３がＢＩＯＳ２０５を起動し、ＢＩＯＳ２０５がローダー２０７を起動する。また、起動したローダー２０７がカーネル２０９を起動し、カーネル２０９がＮａｔｉｖｅプログラム２１１の中から起動プログラムを起動し、起動プログラムがＪａｖａプログラム２１４を起動する。Ｊａｖａプログラム２１４が起動すると、ＭＦＰ１００では、Ｎａｔｉｖｅプログラム２１１及びＪａｖａプログラム２１４が連携してＭＦＰ１００の各機能を提供可能になる。
【００２１】
また、ＭＦＰ１００では、上述した各プログラムが起動対象プログラムを起動する前に起動対象プログラムの改ざんを検知するための署名検証が行われる。署名検証を成功した場合、プログラムは、起動対象プログラムが改ざんされていないと判断し、上記起動対象プログラムを起動する。一方、署名検証を失敗した場合、プログラムは、起動対象プログラムが改ざんされていると判断し、上記起動対象プログラムを起動せず、ＭＦＰ１００の起動が中止される。署名検証では、ＭＦＰ１００の工場出荷時に各プログラムに付与された公開鍵及び署名が用いられる。本実施の形態において、図３に示すように、ブートプログラム２０３にはＢＩＯＳ２０５の署名検証を行うための公開鍵３０１が付与されている。ＢＩＯＳ２０５には該ＢＩＯＳ２０５の署名３０２及びローダー２０７の署名検証を行うための公開鍵３０３が付与されている。ローダー２０７には該ローダー２０７の署名３０４及びカーネル２０９の署名検証を行うための公開鍵３０５が付与されている。カーネル２０９には該カーネル２０９の署名３０６及びＮａｔｉｖｅプログラム２１１の署名検証を行うための公開鍵３０７が付与されている。Ｎａｔｉｖｅプログラム２１１には該Ｎａｔｉｖｅプログラム２１１の署名３０８及びＪａｖａプログラム２１４の署名検証を行うための公開鍵３０９が付与されている。Ｊａｖａプログラム２１４には該Ｊａｖａプログラム２１４の署名３１０が付与されている。
【００２２】
図４は、図１のＭＦＰ１００によって実行される起動処理の手順を示すフローチャートである。
【００２３】
図４の処理は、ＭＦＰ１００の起動指示を受け付けた際に実行される。ＭＦＰ１００では、起動指示を受け付けると、ＲＯＭ１０２からＥＣ_ＲＡＭ１０９に読み込まれたブートプログラム２０３がＥＣ_ＣＰＵ１０８によって実行される。その後、ＥＣ_ＣＰＵ１０８はＲＯＭ１０２からＢＩＯＳ２０５、該ＢＩＯＳ２０５の署名３０２をＥＣ_ＲＡＭ１０９に読み込み、ブートプログラム２０３のＢＩＯＳ改ざん検知部２０４により、公開鍵３０１を用いてＢＩＯＳ２０５の署名検証を行う。
【００２４】
図４において、ＥＣ_ＣＰＵ１０８はＢＩＯＳ改ざん検知部２０４により、ＢＩＯＳ２０５の署名検証を成功したか否かを判別する（ステップＳ４０１）。
【００２５】
ステップＳ４０１の判別の結果、ＢＩＯＳ２０５の署名検証を失敗したとき、ＥＣ_ＣＰＵ１０８はＢＩＯＳ２０５の改ざんを検知した旨をユーザに伝えるために、ＬＥＤ１１８を点灯させ（ステップＳ４０２）、本処理を終了する。
【００２６】
ステップＳ４０１の判別の結果、ＢＩＯＳ２０５の署名検証を成功したとき、ＥＣ_ＣＰＵ１０８はＣＰＵ１０１に通電し、ブートプログラムの処理を終了する。通電されたＣＰＵ１０１は、ＲＯＭ１０２からＢＩＯＳ２０５をＲＡＭ１０３に読み込み、ＢＩＯＳ２０５を起動する（ステップＳ４０３）。以降の全ての処理はＣＰＵ１０１によって処理される。
【００２７】
ＣＰＵ１０１は起動したＢＩＯＳ２０５により各種初期化処理を行う。また、ＣＰＵ１０１はフラッシュメモリ１０５からローダー２０７、該ローダー２０７の署名３０４、及び公開鍵３０３をＲＡＭ１０３に読み込む。ＣＰＵ１０１はローダー改ざん検知部２０６により、公開鍵３０３を用いてローダー２０７の署名検証を行い、ローダー２０７の署名検証を成功したか否かを判別する（ステップＳ４０４）。
【００２８】
ステップＳ４０４の判別の結果、ローダー２０７の署名検証を成功したとき、ＣＰＵ１０１はローダー改ざん検知部２０６による処理を終了する。ＣＰＵ１０１はＢＩＯＳ２０５により、ＲＡＭ１０３に読み込まれたローダー２０７を起動する（ステップＳ４０５）。ＣＰＵ１０１は起動したローダー２０７により各種初期化処理を行う。また、ＣＰＵ１０１はフラッシュメモリ１０５からカーネル２０９、該カーネル２０９の署名３０６、及び公開鍵３０５をＲＡＭ１０３に読み込む。ＣＰＵ１０１はカーネル改ざん検知部２０８により、公開鍵３０５を用いてカーネル２０９の署名検証を行い、カーネル２０９の署名検証を成功したか否かを判別する（ステップＳ４０６）。
【００２９】
ステップＳ４０６の判別の結果、カーネル２０９の署名検証を成功したとき、ＣＰＵ１０１はカーネル改ざん検知部２０８による処理を終了する。ＣＰＵ１０１はローダー２０７により、ＲＡＭ１０３に読み込まれたカーネル２０９を起動する（ステップＳ４０７）。
【００３０】
ＣＰＵ１０１は起動したカーネル２０９により各種初期化処理を行う。また、ＣＰＵ１０１はフラッシュメモリ１０５からＮａｔｉｖｅプログラム２１１、該Ｎａｔｉｖｅプログラム２１１の署名３０８、及び公開鍵３０７をＲＡＭ１０３に読み込む。ＣＰＵ１０１はＮａｔｉｖｅ改ざん検知部２１０により、公開鍵３０７を用いてＮａｔｉｖｅプログラム２１１の署名検証を行い、Ｎａｔｉｖｅプログラム２１１の署名検証を成功したか否かを判別する（ステップＳ４０８）。
【００３１】
ステップＳ４０８の判別の結果、Ｎａｔｉｖｅプログラム２１１の署名検証を失敗したとき、ステップＳ４０６の判別の結果、カーネル２０９の署名検証を失敗したとき、又はステップＳ４０４の判別の結果、ローダー２０７の署名検証を失敗したとき、ＣＰＵ１０１は改ざん検知情報の書き込み処理を行う（ステップＳ４０９）。ステップＳ４０９では、改ざん検知情報がフラッシュメモリ１０５の改ざん情報記録領域１０６に記録される。改ざん情報記録領域１０６は、図５に示すように、ローダー領域５０１、カーネル領域５０２、及びＮａｔｉｖｅ領域５０３に分割されている。
【００３２】
例えば、Ｎａｔｉｖｅプログラム２１１の署名検証を失敗した場合、Ｎａｔｉｖｅプログラム２１１の署名検証を行ったＮａｔｉｖｅ改ざん検知部２１０がＮａｔｉｖｅ領域５０３にＮａｔｉｖｅプログラム２１１の改ざん検知情報を記録する。Ｎａｔｉｖｅプログラム２１１の改ざん検知情報は、Ｎａｔｉｖｅプログラム２１１の改ざんを検知した時刻を含む。カーネル２０９の署名検証を失敗した場合、カーネル２０９の署名検証を行ったカーネル改ざん検知部２０８がカーネル領域５０２にカーネル２０９の改ざん検知情報を記録する。カーネル２０９の改ざん検知情報は、カーネル２０９の改ざんを検知した時刻を含む。ローダー２０７の署名検証を失敗した場合、ローダー２０７の署名検証を行ったローダー改ざん検知部２０６がローダー領域５０１にローダー２０７の改ざん検知情報を記録する。ローダー２０７の改ざん検知情報は、ローダー２０７の改ざんを検知した時刻を含む。このようにして、本実施の形態では、起動対象プログラムの署名検証を失敗した際に上記署名検証を行った改ざん検知部によって、上記起動対象プログラムに対応付けされた領域に改ざん検知情報が記録される。次いで、ＣＰＵ１０１は起動対象プログラムを起動することなく、操作パネル１１７にエラーメッセージを表示し（ステップＳ４１０）、本処理を終了する。
【００３３】
ステップＳ４０８の判別の結果、Ｎａｔｉｖｅプログラム２１１の署名検証を成功したとき、ＣＰＵ１０１はＮａｔｉｖｅ改ざん検知部２１０による処理を終了する。ＣＰＵ１０１はカーネル２０９により、ＲＡＭ１０３に読み込まれたＮａｔｉｖｅプログラム２１１を起動する（ステップＳ４１１）。
【００３４】
Ｎａｔｉｖｅプログラム２１１のログ記録部２１３が起動すると、ＣＰＵ１０１は、改ざん情報記録領域１０６に改ざん検知情報が記録されているか否かを判別する（ステップＳ４１２）。
【００３５】
ステップＳ４１２の判別の結果、改ざん情報記録領域１０６に改ざん検知情報が記録されていないとき、ＣＰＵ１０１は後述するステップＳ４１６以降の処理を行う。
【００３６】
ステップＳ４１２の判別の結果、改ざん情報記録領域１０６に改ざん検知情報が記録されているとき、ＣＰＵ１０１はログ記録部２１３により、改ざん検知情報を取得する（ステップＳ４１３）。次いで、ＣＰＵ１０１はログ記録部２１３により、取得した改ざん検知情報に基づいてプログラムの改ざんを検知した旨を示すログを記録する（ステップＳ４１４）。上記ログには、取得した改ざん検知情報に含まれる時刻や、改ざん検知情報が記録されていた領域に対応付けされたプログラムの種別、具体的に、ローダー、カーネル、及びＮａｔｉｖｅプログラムの何れかを示す情報が含まれる。すなわち、本実施の形態では、ローダー２０７、カーネル２０９、及びＮａｔｉｖｅプログラム２１１等の特定の起動処理プログラムの改ざんを検知した際に生成された改ざん検知情報が保持される。また、改ざんされた特定の起動処理プログラムが修正されてＭＦＰ１００が正常に起動した際に保持された改ざん検知情報に基づいてログが記録される。次いで、ＣＰＵ１０１はログ記録部２１３により、改ざん情報記録領域１０６から改ざん検知情報を削除する（ステップＳ４１５）。
【００３７】
また、Ｎａｔｉｖｅプログラム２１１のＪａｖａ改ざん検知部２１２が起動すると、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２により、ＨＤＤ１０４からＪａｖａプログラム２１４及び該Ｊａｖａプログラム２１４の署名３１０をＲＡＭ１０３に読み込む。ＣＰＵ１０１はＪａｖａ改ざん検知部２１２により、公開鍵３０９を用いてＪａｖａプログラム２１４の署名検証を行い、Ｊａｖａプログラム２１４の署名検証を成功したか否かを判別する（ステップＳ４１６）。
【００３８】
ステップＳ４１６の判別の結果、Ｊａｖａプログラム２１４の署名検証を成功したとき、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２による処理を終了する。ＣＰＵ１０１はＮａｔｉｖｅプログラム２１１の起動プログラムにより、Ｊａｖａプログラム２１４を起動する（ステップＳ４１７）。次いで、ＣＰＵ１０１はログ記録部２１３により、プログラムの改ざんが検知されずに正常起動した旨を示すログを記録し（ステップＳ４１８）、本処理を終了する。
【００３９】
ステップＳ４１６の判別の結果、Ｊａｖａプログラム２１４の署名検証を失敗したとき、ＣＰＵ１０１はログ記録部２１３により、Ｊａｖａプログラム２１４の改ざんを検知した旨を示すログを記録する（ステップＳ４１９）。次いで、ＣＰＵ１０１は操作パネル１１７にエラーメッセージを表示し（ステップＳ４２０）、本処理を終了する。
【００４０】
上述した図４の処理によれば、格納されたプログラムの改ざんを起動処理の実行時に検知した際に起動処理の実行を中止するＭＦＰ１００において、特定の起動処理プログラムの改ざんを検知した際に生成した改ざん検知情報が保持される。また、ＭＦＰ１００が正常に起動した際に改ざん検知情報に基づいてログが記録される。これにより、改ざんされた特定の起動処理プログラムが修正されてＭＦＰ１００が正常に起動した際に、特定の起動処理プログラムの改ざんが検知された旨を示すログを記録することができる。
【００４１】
また、上述した図４の処理では、特定の起動処理プログラムの改ざんを検知した改ざん検知部が改ざん検知情報を改ざん情報記録領域１０６に記録する。これにより、ログ記録部２１３が起動しておらず、ログを記録できない場合であっても、特定の起動処理プログラムの改ざんを検知したことを示す情報を残すことができる。
【００４２】
さらに、上述した図４の処理では、改ざん検知情報は特定の起動処理プログラムの改ざんを検知した時刻を示す情報である。これにより、特定の起動処理プログラムの改ざんを検知した時刻をログに記録することができる。
【００４３】
上述した図４の処理では、改ざん検知情報は、改ざん情報記録領域１０６において特定の起動処理プログラムの改ざんを検知した改ざん検知部に対応付けされた特定の領域に記録される。これにより、改ざん検知情報を最小限の情報に留めつつ、改ざんが検知された特定の起動処理プログラムの種別をログに記録することができる。
【００４４】
また、上述した図４の処理では、ログ記録部２１３が改ざん検知情報に基づいてログを記録した後に上記改ざん検知情報が改ざん情報記録領域１０６から削除される。これにより、改ざん検知情報を保持するために、フラッシュメモリ１０５の容量が必要以上に逼迫する事態を回避することができる。
【００４５】
以上、本発明について、上述した実施の形態を用いて説明したが、本発明は上述した実施の形態に限定されるものではない。例えば、ローダー２０７がＲＯＭ１０２に格納されるといった、各プログラムが上述した格納場所と異なる格納場所に格納されても良い。
【００４６】
また、上述した実施の形態では、各プログラムを格納する記憶媒体は、ＲＯＭ１０２、フラッシュメモリ１０５、及びＨＤＤ１０４に限られず、各プログラムを別の記憶媒体に格納してもよい。
【００４７】
上述した実施の形態では、署名検証において各プログラムが異なる公開鍵を用いる場合について説明したが、署名検証において全てのプログラムが同じ公開鍵を用いても良い。
【００４８】
また、上述した実施の形態では、ログ記録部２１３を備えるプログラムがＮａｔｉｖｅプログラム２１１ではなく、図６に示すように、Ｊａｖａプログラム２１４であっても良い。Ｊａｖａプログラム２１４がログ記録部２１３を備える場合、Ｊａｖａプログラム２１４の改ざん検知情報を記録するための図７のＪａｖａ領域７０１が改ざん情報記録領域１０６に設けられる。また、この場合、Ｊａｖａプログラム２１４も特定の起動処理プログラムに含まれる。
【００４９】
図８は、図４の起動処理の変形例の手順を示すフローチャートである。図８の処理も、ＭＦＰ１００の起動指示を受け付けた際に実行される。
【００５０】
図８において、ＥＣ_ＣＰＵ１０８はステップＳ４０１，Ｓ４０２の処理を行う。また、ＣＰＵ１０１はステップＳ４０３〜Ｓ４１１の処理を行う。次いで、ＣＰＵ１０１はステップＳ４１６の処理を行う。
【００５１】
ステップＳ４１６の判別の結果、Ｊａｖａプログラム２１４の署名検証を成功したとき、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２による処理を終了し、ステップＳ４１７の処理を行う。Ｊａｖａプログラム２１４のログ記録部２１３が起動すると、ＣＰＵ１０１はログ記録部２１３により、ステップＳ４１２の処理を行う。
【００５２】
ステップＳ４１２の判別の結果、改ざん情報記録領域１０６に改ざん検知情報が記録されていないとき、ＣＰＵ１０１はステップＳ４１８以降の処理を行う。
【００５３】
ステップＳ４１２の判別の結果、改ざん情報記録領域１０６に改ざん検知情報が記録されているとき、ＣＰＵ１０１はステップＳ４１３〜Ｓ４１５の処理を行って、本処理を終了する。
【００５４】
ステップＳ４１６の判別の結果、Ｊａｖａプログラム２１４の署名検証を失敗したとき、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２により、ログ記録部２１３の署名検証を成功したか否かを判別する（ステップＳ８０１）。
【００５５】
ステップＳ８０１の判別の結果、ログ記録部２１３の署名検証を成功したとき、ログ記録部２１３によるログの記録が可能であるので、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２により、ステップＳ４１９，Ｓ４２０の処理を行い、本処理を終了する。
【００５６】
ステップＳ８０１の判別の結果、ログ記録部２１３の署名検証を失敗したとき、ＣＰＵ１０１はＪａｖａ改ざん検知部２１２により、改ざん検知情報の書き込み処理を行う（ステップＳ８０２）。ステップＳ８０２では、ログ記録部２１３の署名検証を行ったＪａｖａ改ざん検知部２１２がＪａｖａ領域７０１にログ記録部２１３の改ざんを検知した時刻を含む改ざん検知情報を記録する。次いで、ＣＰＵ１０１は本処理を終了する。
【００５７】
このように、Ｊａｖａプログラム２１４がログ記録部２１３を備える構成であっても、図８の処理を行うことで上述した実施の形態と同様の効果を奏することができる。
【００５８】
本発明は、上述の実施の形態の１以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、該システム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出して実行する処理でも実現可能である。また、本発明は、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５９】
１００  ＭＦＰ
１０５  フラッシュメモリ
１０６  改ざん情報記録領域
２０６  ローダー改ざん検知部
２０７  ローダー
２０８  カーネル改ざん検知部
２０９  カーネル
２１０  Ｎａｔｉｖｅ改ざん検知部
２１１  Ｎａｔｉｖｅプログラム
２１２  Ｊａｖａ改ざん検知部
２１３  ログ記録部
２１４  Ｊａｖａプログラム
５０１  ローダー領域
５０２  カーネル領域
５０３  Ｎａｔｉｖｅ領域
７０１  Ｊａｖａ領域
【図１】
2019128775.tif 000003
【図２】
2019128775.tif 000004
【図３】
2019128775.tif 000005
【図４】
2019128775.tif 000006
【図５】
2019128775.tif 000007
【図６】
2019128775.tif 000008
【図７】
2019128775.tif 000009
【図８】
2019128775.tif 000010