(57)【要約】【課題】本発明は、情報処理装置の起動中にソフトウェアの改ざんが検知された場合に、改ざん状態から自動復旧する仕組みを提供する。【解決手段】情報処理装置は、ブートプログラムの起動に続いて複数のモジュールをそのプログラムの改ざんを検知しつつ順次起動する。また、本情報処理装置は、複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、当該次に起動するモジュールの改ざんを検知し、署名の検証が成功すると、次に起動するモジュールを起動する。一方、本情報処理装置は、所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する。【選択図】  図３
2020082441.tif 000002
【特許請求の範囲】
【請求項１】
ブートプログラムの起動に続いて複数のモジュールを順次起動する情報処理装置であって、
前記複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、該次に起動するモジュールの改ざんを検知する検知手段と、
前記検知手段による署名の検証が成功すると、前記次に起動するモジュールを起動する起動手段と、
前記検知手段によって所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、前記検知手段によって前記所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記所定のモジュールを通常モードで起動する第１プログラムを格納した第１パーティションと、前記所定のモジュールの改ざんが検知された場合に前記第１プログラムとは異なる第２プログラムを用いた起動を行うアップデートモードで起動する該第２プログラムを格納した第２パーティションとを有する記憶手段をさらに備え、
前記制御手段は、前記自動復旧を行う場合には、前記通常モードによる起動からアップデートモードによる起動に切り替えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、前記アップデートモードでは、前記第１プログラムを新たなプログラムでアップデートすることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記制御手段は、前記新たなプログラムを外部サーバから取得して前記第１プログラムをアップデートすることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記制御手段は、前記新たなプログラムを前記外部サーバから取得する際にエラーが発生すると、自動復旧を中断して、対応するエラーコードを前記操作部に表示することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記制御手段は、前記アップデートモードにおいて、前記第１プログラムのアップデート中にエラーが発生すると、自動復旧を中断して、対応するエラーコードを前記操作部に表示することを特徴とする請求項４又は５に記載の情報処理装置。
【請求項７】
前記複数のモジュールには、少なくとも、ＢＩＯＳ（Ｂａｓｉｃ Ｉｎｐｕｔ/Ｏｕｔｐｕｔ Ｓｙｓｔｅｍ）、ローダ、第１カーネル、第２カーネル、通常モードで用いる第１プログラムモジュール、及びアップデートモードで用いる第２プログラムモジュールが含まれ、
各モジュールには、前記検知手段及び前記起動手段が含まれ、前記検証情報と自身の署名とが予め格納されていることを特徴とする請求項２乃至６の何れか１項に記載の情報処理装置。
【請求項８】
前記複数のモジュールには、少なくとも、ＢＩＯＳ（Ｂａｓｉｃ Ｉｎｐｕｔ/Ｏｕｔｐｕｔ Ｓｙｓｔｅｍ）、ローダ、第１カーネル、第２カーネル、通常モードで用いる第１プログラムモジュール、及びアップデートモードで用いる第２プログラムモジュールが含まれ、
各モジュールには、前記起動手段が含まれ、自身の署名が予め格納され、
前記ＢＩＯＳには、さらに、前記ローダ、前記第１カーネル、及び第２カーネルの改ざんを検知するための前記検知手段が含まれ、前記ローダ、前記第１カーネル、及び第２カーネルの検証情報が予め格納され、
前記第１カーネルには、さらに、前記第１プログラムモジュールの改ざんを検知するための前記検知手段が含まれ、前記第１プログラムの検証情報が予め格納され、
前記第２カーネルには、さらに、前記第２プログラムモジュールの改ざんを検知するための前記検知手段が含まれ、前記第２プログラムの検証情報が予め格納されることを特徴とする請求項２乃至７の何れか１項に記載の情報処理装置。
【請求項９】
前記所定のモジュールとは、前記第１カーネル及び前記第１プログラムモジュールであることを特徴とする請求項７又は８に記載の情報処理装置。
【請求項１０】
ブートプログラムの起動に続いて複数のモジュールを順次起動する情報処理装置の制御方法であって、
検知手段が、前記複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、該次に起動するモジュールの改ざんを検知する検知工程と、
起動手段が、前記検知工程での署名の検証が成功すると、前記次に起動するモジュールを起動する起動工程と、
制御手段が、前記検知工程で所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、前記検知工程で前記所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する制御工程と
を含むことを特徴とする情報処理装置の制御方法。
【請求項１１】
ブートプログラムの起動に続いて複数のモジュールを順次起動する情報処理装置の制御方法における各工程をコンピュータに実行させるためのプログラムであって、前記制御方法は、
検知手段が、前記複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、該次に起動するモジュールの改ざんを検知する検知工程と、
起動手段が、前記検知工程での署名の検証が成功すると、前記次に起動するモジュールを起動する起動工程と、
制御手段が、前記検知工程で所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、前記検知工程で前記所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する制御工程と
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置、その制御方法、及びプログラムに関する。
【背景技術】
【０００２】
ソフトウェアの脆弱性をついて、ソフトウェアを改ざんし、コンピュータを悪用する攻撃が問題となっている。そういった攻撃対策として、特許文献１には、耐タンパーモジュールを用いてプログラムのハッシュ値を計算、保存しておき、起動するたびにプログラムのハッシュ値を再計算して検証を行うことで改ざん検知を行う方法が提案されている。また、特別なハードウェアを必要とする耐タンパーモジュールを使用せず、起動時に順次プログラムを起動していく際に、次のプログラムの正解値を保持しておき正解値が一致することで各プログラムの改ざん検知を行う方法も考えられる。いずれにしても、起動中にプログラムの改ざんが検知されるとその装置は改ざん状態が解消されるまで使用不可能な状態になる。
【０００３】
また、デジタル複合機のようなサービスマンによるメンテナンス契約が行われる装置の場合は、装置が使用不可能な状態に陥るとサービスマンが出動して問題を解消し、装置を復旧させる必要がある。問題が生じるたびにサービスマンが出動していると、ユーザの利便性が損なわれ、サービスマンの出動コストもかかる。そのため、近年デジタル複合機では、メーカで把握している不具合の修正や、機能追加のためのソフトウェアの更新を目的とした、ネットワーク越しの外部サーバからの定期的な自動アップデートを行う仕組みを導入している。サービスマンがいない状態でデジタル複合機のアップデートを自動的に行う場合、アップデート処理に不具合があったとしてもできるだけ確実にリカバリを行い、装置の動作を保証しながら所望のアップデートを行う必要がある。例えば、特許文献２には、アップデート処理自体に不具合があった場合にリカバリ処理を実行することによって、所望のアップデートを行う方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2008-244992号公報
【特許文献２】特開2016-053839号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術には以下に記載する課題がある。上記従来技術のリカバリ処理は、アップデート処理によるソフトウェアのダウンロード処理や、書き込み処理やアップデート用プログラム自体のリカバリであり、メーカが想定していない装置内の各プログラムの改ざんの復旧には対応できない。そのため、現状メンテナンス契約をしているデジタル複合機でソフトウェアの改ざんが検知されると、エラーコードが表示されるのみでユーザはサービスマンの出動を要請し復旧を依頼する以外に復旧させる方法がない。
【０００６】
本発明は、上述の問題の少なくとも一つに鑑みて成されたものであり、情報処理装置の起動中にソフトウェアの改ざんが検知された場合に、改ざん状態から自動復旧する仕組みを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、例えば、ブートプログラムの起動に続いて複数のモジュールを順次起動する情報処理装置であって、前記複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、該次に起動するモジュールの改ざんを検知する検知手段と、前記検知手段による署名の検証が成功すると、前記次に起動するモジュールを起動する起動手段と、前記検知手段によって所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、前記検知手段によって前記所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する制御手段とを備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、情報処理装置の起動中にソフトウェアの改ざんが検知された場合に、改ざん状態から自動復旧することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る情報処理装置１００のハードウェア構成図。
【図２】一実施形態に係る情報処理装置１００のソフトウェア構成図。
【図３】一実施形態に係る情報処理装置１００の処理を示すフローチャート。
【図４】一実施形態に係る情報処理装置１００の処理を示すフローチャート。
【図５】一実施形態に係る改ざん検知時の自動復旧ができない場合に表示するエラー画面の例。
【発明を実施するための形態】
【００１０】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確立されるのであって、以下の個別の実施形態によって限定されるわけではない。なお、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ／Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら本発明の主旨を逸脱しない範囲で、レーザプリンタやＦＡＸなどの電子写真方式の画像形成装置に適用することが可能である。
【００１１】
＜第１の実施形態＞
＜情報処理装置のハードウェア構成＞
以下では、添付図面を参照して、本発明の第１の実施形態について説明する。まず、図１を参照して、本実施形態に係る情報処理装置１００のハードウェア構成を説明する。
【００１２】
情報処理装置１００は、制御部２００、操作部２２０、プリンタエンジン２２１、及びスキャナエンジン２２２を備える。また、外部電源２４０が接続され、各部に電源供給が行われる。制御部２００は、ＣＰＵ２１０、ＲＯＭ２９１、チップセット２１１、ＲＡＭ２１２、ＳＲＡＭ２１３、ＬＥＤ２９０、及びＮＩＣ２１４を備える。さらに、制御部２００は、操作部Ｉ／Ｆ２１５、プリンタＩ／Ｆ２１６、スキャナＩ／Ｆ２１７、ＨＤＤ２１８、フラッシュＲＯＭ２１９、及び埋め込みコントローラ２８０を備える。埋め込みコントローラ２８０は、ＣＰＵ２８１及びＲＡＭ２８２を備える。チップセット２１１はＲＴＣ２７０を備える。また、プリンタエンジン２２１はプリンタエンジンファーム２３１を備える。スキャナエンジン２２２は、スキャナエンジンファーム２３２を備える。
【００１３】
制御部２００は、情報処理装置１００全体の動作を統括的に制御する。ＣＰＵ２１０は、フラッシュＲＯＭ２１９に記憶された制御プログラムを読み出して読取制御や印刷制御、ファームアップデート制御などの各種制御処理を実行する。また、フラッシュＲＯＭ２１９は、ファームアップデート用のファイル格納領域、ワークエリアや、ユーザデータ領域としても用いられる。ＲＯＭ２９１はリードオンリーメモリであり、情報処理装置１００のＢＩＯＳ（Ｂａｓｉｃ Ｉｎｐｕｔ/Ｏｕｔｐｕｔ Ｓｙｓｔｅｍ）、固定パラメータ等を格納している。ＲＡＭ２１２は、ＣＰＵ２１０の主メモリ、ワークエリア等の一時記憶領域として用いられる。ＳＲＡＭ２１３は不揮発メモリであり、情報処理装置１００で必要となる設定値や画像調整値などを記憶しており、電源を再投入してもデータが消えないようになっている。ＨＤＤ２１８は、画像データやユーザデータ等を記憶する。
【００１４】
操作部Ｉ／Ｆ２１５は、操作部２２０と制御部２００とを接続する。操作部２２０には、タッチパネル機能を有する液晶表示部やキーボードなどが備えられている。プリンタＩ／Ｆ２１６は、プリンタエンジン２２１と制御部２００とを接続する。プリンタエンジン２２１内に含む不図示のＲＯＭにはプリンタエンジンファーム２３１が格納されている。プリンタエンジン２２１で印刷すべき画像データはプリンタＩ／Ｆ２１６を介して制御部２００からプリンタエンジン２２１に転送され、プリンタエンジン２２１において記録媒体上に印刷される。スキャナＩ／Ｆ２１７は、スキャナエンジン２２２と制御部２００とを接続する。スキャナエンジン２２２内に含まれる不図示のＲＯＭにはスキャナエンジンファーム２３２が格納されている。スキャナエンジン２２２は、原稿上の画像を読み取って画像データを生成し、スキャナＩ／Ｆ２１７を介して制御部２００に入力する。
【００１５】
ネットワークＩ／Ｆカード（ＮＩＣ）２１４は、制御部２００（情報処理装置１００）をＬＡＮ１１０に接続する。ＮＩＣ２１４は、ＬＡＮ１１０上の外部装置（例えば、外部サーバ２５０やＰＣ２６０）に画像データや情報を送信したり、逆にアップデートファームや各種情報を受信したりする。外部サーバ２５０はインターネット上に存在するケースもある。ＰＣ２６０上に存在する不図示のＷｅｂブラウザから情報処理装置１００の操作を行うこともある。
【００１６】
チップセット２１１はある一連の関連のある複数の集積回路を示す。ＲＴＣ２７０はＲｅａｌＴｉｍｅＣｌｏｃｋ（リアルタイムクロック）であり、計時専用のチップである。ＲＴＣ２７０は、外部電源２４０が接続されていなくとも、不図示の内蔵電池から電源供給を受けるため、スリープ時も動作することができる。これにより、チップセット２１１に対して一部の電源供給が行われる状態では、スリープからの復帰が可能である。逆に、チップセット２１１に電源供給がまったく行われないシャットダウン状態の場合には、ＲＴＣ２７０は動作することができない。
【００１７】
ＣＰＵ２８１は埋め込みコントローラ２８０のソフトウェアプログラムを実行し、情報処理装置１００の中で一部の制御を行う。ＲＡＭ２８２はランダムアクセスメモリであり、ＣＰＵ２８１が情報処理装置１００を制御する際に、プログラムや一時的なデータの格納などに使用される。ＬＥＤ２９０は必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝えるために利用される。
【００１８】
＜情報処理装置のソフトウェア構成＞
次に、図２を参照して、本実施形態に係る情報処理装置１００が有するソフトウェアモジュールの構成を説明する。
【００１９】
通信管理部３０１は、ネットワーク１１０に接続されるＮＩＣ２１４を制御して、ネットワーク１１０を介して外部とデータの送受信を行う。ＵＩ制御部３０２は、操作部Ｉ／Ｆ２１５を介して操作部２２０への入力を受け取り、入力に応じた処理や画面出力を行う。
【００２０】
ブートプログラム３０３は情報処理装置１００に電源が投入されると埋め込みコントローラ２８０のＣＰＵ２８１で実行されるプログラムであり、起動に関わる処理を実行するほかにＢＩＯＳ３０５の改ざん検知を行うＢＩＯＳ改ざん検知処理部３０４を有する。ＢＩＯＳ３０５はブートプログラム３０３の実行後にＣＰＵ２１０で実行されるプログラムであり、起動に関わる処理を実行するほかにローダ３０７の改ざん検知を行うローダ改ざん検知処理部３０６を有する。ローダ３０７はＢＩＯＳ３０５の処理が終わった後にＣＰＵ２１０で実行されるプログラムであり、起動に関わる処理を実行するほかにカーネルの改ざん検知を行うカーネル改ざん検知処理部３０８を有する。
【００２１】
３０９と３１０はフラッシュＲＯＭ２１９内に構成されるパーティションを示す。３０９は通常起動用ファームであるｓｔｄファーム３１１を含むｓｔｄパーティション（第１パーティション）であり、３１０はアップデート起動用ファームであるｓａｆｅファーム３１２を含むｓａｆｅパーティション（第２パーティション）である。ｓｔｄファーム３１１は、カーネル３１３と通常起動用プログラム（第１プログラムモジュール）３１５とで構成される。カーネル３１３はローダ３０７の処理が終わった後にＣＰＵ２１０で実行されるプログラムであり、起動に関わる処理を実行するほかに通常起動用プログラム３１５の改ざん検知を行うプログラム改ざん検知処理部３１４を有する。
【００２２】
通常起動用プログラム３１５はＣＰＵ２１０で実行されるプログラム（第１プログラム）であり、情報処理装置１００で各機能を提供する複数のプログラムからなる。例えばスキャナＩ／Ｆ２１７やプリンタＩ／Ｆ２１６を制御するプログラムや起動プログラムなどである。カーネル３１３によって通常起動用プログラムの中から起動プログラムが呼び出され起動処理を実行する。また、通常起動用プログラム３１５には、ｓａｆｅファームアップデート用プログラム３１６を含む。ｓａｆｅファームアップデート用プログラム３１６は、ｓａｆｅファーム３１２をアップデートする機能を備える。
【００２３】
ｓａｆｅファーム３１２は、カーネルＢ３１７とｓｔｄファームアップデート用プログラム（第２プログラムモジュール）３１９とで構成される。カーネルＢ３１７はローダ３０７の処理が終わった後にＣＰＵ２１０で実行されるプログラムであり、起動に関わる処理を実行するほかにｓｔｄファームアップデート用プログラム３１９の改ざん検知を行うプログラム改ざん検知処理部Ｂ３１８を有する。ｓｔｄファームアップデート用プログラム３１９は、ｓｔｄファーム３１１と、図１で説明したプリンタエンジンファーム２３１とスキャナエンジンファーム２３２をアップデートする機能を備える。当該アップデートについては、所定のモジュールのプログラムの改ざんが検知された場合に行われる。従って、所定のモジュール以外のプログラムの改ざんが検知された場合は、後述するように、サービスマンに提供するエラーコードを操作部に表示するのみで、自動復旧のためのアップデートは行わない。情報処理装置１００として、例えば不図示のフィニッシャなどの、スキャナエンジンやプリンタエンジン以外の構成が接続された場合も同様になる。
【００２４】
情報処理装置１００は起動モードを切り替えながらアップデートを実現するが、起動モードとは、ｓｔｄファーム３１１での起動（通常モード）と、ｓａｆｅファーム３１２での起動（アップデートモード）を示す。またそれぞれ、起動モードの切り替えを行う機能を備え、ローダ３０７がＳＲＡＭ２１３に保存される起動モードの情報に応じてｓｔｄファーム３１１とｓａｆｅファーム３１２との起動を行う。
【００２５】
＜自動復旧処理＞
次に、図３を参照して、本実施形態に係る情報処理装置１００の改ざん検知時の自動復旧処理を説明する。本実施形態による改ざん検知の方法は、ブートプログラム３０３、ＢＩＯＳ３０５、ローダ３０７、通常起動であればｓｔｄファーム３１１内のカーネル３１３と通常起動用プログラム３１５が、改ざん検知を行いながら起動する。また、アップデート用起動であればローダ３０７以降はｓａｆｅファーム３１２内のカーネルＢ３１７とｓｔｄファームアップデート用プログラム３１９が改ざん検知を行いながら起動する。ブートプログラム３０３にはＢＩＯＳ署名検証用の公開鍵（検証情報）が含まれ、ＢＩＯＳ３０５にはＢＩＯＳ署名（自身の署名）とローダ検証用公開鍵が含まれる。ローダ３０７にはローダ署名と、カーネル検証用公開鍵及びカーネルＢ検証用公開鍵が含まれているものとする。また、カーネル３１３にはカーネル署名と通常起動用プログラム検証用公開鍵が含まれ、通常起動用プログラム３１５には通常起動用プログラム署名が含まれているものとする。さらにカーネルＢ３１７にはカーネルＢ署名とｓｔｄファームアップデート用プログラム検証用公開鍵が含まれ、ｓｔｄファームアップデート用プログラム３１９にはｓｔｄファームアップデート用署名が含まれているものとする。これらの公開鍵と署名は予め情報処理装置１００の出荷前にプログラムに対して付与されたものとする。３０４、３０６、３０８、３１４、３１８の検証部が各プログラムを検証し、問題がなければ次のプログラムを起動することで改ざん検知を行う情報処理装置１００の起動が行われる。以降ではＲＯＭ２９１にブートプログラム３０３とＢＩＯＳ３０５、フラッシュＲＯＭ２１９にローダ３０７とｓｔｄファーム３１１とｓａｆｅファーム３１２が保存されているものとして説明する。
【００２６】
情報処理装置１００の電源が投入されると、ＲＯＭ２９１からＲＡＭ２１２にブートプログラム３０３が読み込まれ、ＣＰＵ２１０によって実行される。ブートプログラム３０３に含まれるＢＩＯＳ改ざん検知処理部３０４はフラッシュＲＯＭ２１９からＢＩＯＳ３０５、ローダ検証用公開鍵、及びＢＩＯＳ署名をＲＡＭ２１２に読み込む。Ｓ４０１で、ＢＩＯＳ改ざん検知処理部３０４は、ＢＩＯＳ検証用公開鍵を用いてＢＩＯＳ署名の検証を行い成功したか否かを判定する。当該署名の検証に失敗した場合、Ｓ４０３で、ＢＩＯＳ改ざん検知処理部３０４はＬＥＤ２９０を点灯させ、処理を終了する。一方、当該署名の検証に成功した場合、ＢＩＯＳ改ざん検知処理部３０４は、ＣＰＵ２１０に通電し、ブートプログラムの処理を終了する。ＣＰＵ２１０は通電されると、Ｓ４０２で、ＲＯＭ２９１からＢＩＯＳ３０５とローダ検証用公開鍵をＲＡＭ２１２に読み込み、ＢＩＯＳ３０５を起動する。以降の処理は全てＣＰＵ２１０によって処理されるものとして説明する。
【００２７】
ＢＩＯＳ３０５が起動されると、各種初期化処理を実行し、ＢＩＯＳ３０５に含まれるローダ改ざん検知処理部３０６がフラッシュＲＯＭ２１９からローダ３０７とカーネル検証用公開鍵、及びローダ署名をＲＡＭ２１２に読み込む。その後、Ｓ４０４で、ローダ改ざん検知処理部３０６は、ローダ検証用公開鍵を用いてローダ署名の検証を行い、成功したか否かを判定する。当該署名の検証に失敗した場合、Ｓ４１０に進み、ローダ改ざん検知処理部３０６は、操作部２２０に図５の５００に示すエラーコードを表示して、自動復旧処理を中断し処理を終了する。
【００２８】
一方、当該署名の検証に成功した場合、ローダ改ざん検知処理部３０６は処理を終了し、ＢＩＯＳ３０５がＲＡＭ２１２に読み込まれたローダ３０７を起動する。その後、Ｓ４０５で、ローダ３０７が起動されると、各種初期化処理を実行し、ＳＲＡＭ２１３を参照して起動モード等のフラグの確認を行う。ここでは通常起動時の例で説明するため、ここではＳＲＡＭ２１３ではｓｔｄファーム３１１を起動する起動モードが選択されるフラグが立っていることを前提とし、ローダ３０７はｓｔｄパーティション３０９に含まれるｓｔｄファーム３１１の起動を開始する。ローダ３０７に含まれるカーネル改ざん検知処理部３０８がフラッシュＲＯＭ２１９からｓｔｄファーム３１１のカーネル３１３と、通常起動用プログラム検証用公開鍵とカーネル署名とをＲＡＭ２１２に読み込む。
【００２９】
次に、Ｓ４０６で、カーネル改ざん検知処理部３０８は、カーネル検証用公開鍵を用いて、カーネル署名の検証を行い、成功したか否かを判定する。当該署名の検証に失敗した場合については後述する。一方、当該署名の検証に成功した場合、カーネル改ざん検知処理部３０８は処理を終了し、Ｓ４０７で、ローダ３０７がＲＡＭ２１２に読み込まれたカーネル３１３を起動する。
【００３０】
カーネル３１３は起動されると、各種初期化処理が実行される。さらに、カーネル３１３に含まれるプログラム改ざん検知処理部３１４がフラッシュＲＯＭ２１９から通常起動用プログラム３１５と通常起動用プログラム署名とをＲＡＭ２１２に読み込む。その後、Ｓ４０８で、プログラム改ざん検知処理部３１４は、通用起動用プログラム検証用公開鍵を用いて、通常起動用プログラム署名の検証を行い、成功したか否かを判定する。当該署名の検証に失敗した場合は後述する。一方、当該署名の検証に成功した場合、プログラム改ざん検知処理部３１４は処理を終了し、Ｓ４０９で通常起動用プログラム３１５を起動する。
【００３１】
Ｓ４０６又はＳ４０８でｓｔｄファーム３１１のカーネル３１３や通常起動用プログラム３１５の署名の検証に失敗し、改ざんが検知された場合、Ｓ４１１で、ＣＰＵ２１０は、ＳＲＡＭ２１３に自動復旧フラグを立てリブートする。このリブートのとき、前述のＳ４０１、Ｓ４０２、Ｓ４０３でのＢＩＯＳの検証と起動、Ｓ４０４でのローダの検証が同様に行われるが図３のフローチャートでは省略している。
【００３２】
続いて、Ｓ４１２で、ローダ３０７は起動されると、各種初期化処理を実行し、ＳＲＡＭ２１３を参照して起動モード等のフラグの確認を行う。それによりローダ３０７は自動復旧モードによるｓａｆｅファーム３１２による起動であることを判断する。この場合、ローダ３０７に含まれるカーネル改ざん検知処理部３０８は、フラッシュＲＯＭ２１９からｓａｆｅファーム３１２のカーネルＢ３１７と、ｓｔｄファームアップデート用プログラム検証用公開鍵と、カーネルＢ署名とをＲＡＭ２１２に読み込む。その後、Ｓ４１３で、カーネル改ざん検知処理部３０８は、カーネルＢ検証用公開鍵を用いて、カーネルＢ署名の検証を行い、成功したか否かを判定する。当該署名の検証に失敗した場合は、Ｓ４１０に進み、カーネル改ざん検知処理部３０８は操作部２２０に図５の５００に示すエラーコードを表示し、自動復旧処理を中断し処理を終了する。一方、当該署名の検証に成功した場合、Ｓ４１４で、カーネル改ざん検知処理部３０８は、Ｓ４１４でローダ３０７がＲＡＭ２１２に読み込まれたカーネルＢ３１７を起動する。
【００３３】
カーネルＢ３１７は起動されると、各種初期化処理を実行する。その後、カーネルＢ３１７に含まれるプログラム改ざん検知処理部Ｂ３１８がフラッシュＲＯＭ２１９からｓｔｄファームアップデート用プログラム３１９と、ｓｔｄファームアップデート用プログラム署名をＲＡＭ２１２に読み込む。続いて、Ｓ４１５で、プログラム改ざん検知処理部Ｂ３１８は、ｓｔｄファームアップデート用プログラム検証用公開鍵を用いて、ｓｔｄファームアップデート用プログラム署名の検証を行い、成功したか否かを判定する。当該署名の検証に失敗した場合は、Ｓ４１０に進み、プログラム改ざん検知処理部Ｂ３１８は、操作部２２０に５００に示すエラーコードを表示し、自動復旧処理を中断し処理を終了する。一方、当該署名の検証に成功した場合、プログラム改ざん検知処理部Ｂ３１８は処理を終了し、Ｓ４１６で、ｓｔｄファームアップデート用プログラム３１９を起動する。
【００３４】
ｓｔｄファームアップデート用プログラム３１９は起動されると、ＳＲＡＭ２１３の自動復旧フラグを参照する。それによりｓｔｄファームアップデート用プログラム３１９は、ｓｔｄファーム３１１の改ざん検知による自動復旧モードであることを判断する。Ｓ４１７で、ｓｔｄファームアップデート用プログラム３１９は、外部サーバ２５０が有効であるかどうかを確認する。ここでいう外部サーバ２５０が有効とは、情報処理装置１００がＬＡＮ１１０上又はインターネット上の外部サーバ２５０と通信でき、かつ、外部サーバ２５０からファームをダウンロードしアップデート可能な設定となっている状態を示す。外部サーバ２５０が有効でない場合は、Ｓ４１８に進み、ｓｔｄファームアップデート用プログラム３１９は、ファームのアップデートによって復旧可能であることを示す図５の５１０に示すエラーコード表示を行い、自動復旧処理を中断し処理を終了する。このように、外部サーバ２５０が有効でないためにアップデートによって改ざん状態からの復旧の見込みがあるのに自動復旧できない場合、ユーザから出動を要請されたサービスマンが復旧方法の判断材料となる情報として、５１０に示すエラーコードを表示する。
【００３５】
一方、外部サーバ２５０が有効である場合、Ｓ４１９に進み、ｓｔｄファームアップデート用プログラム３１９は、外部サーバ２５０から、現状改ざんが検知されたｓｔｄファーム３１１と同じバージョンのファームをダウンロードする。続いて、Ｓ４２０で、ｓｔｄファームアップデート用プログラム３１９は、外部サーバ２５０からファームのダウンロード中にエラーが発生したか否かを判断する。エラーが発生した場合は、Ｓ４１０に進み、ｓｔｄファームアップデート用プログラム３１９は、操作部２２０に５００のエラーコードを表示し、自動復旧処理を中断し処理を終了する。
【００３６】
一方、ファームのダウンロードが無事完了した場合は、Ｓ４２１に進み、ｓｔｄファームアップデート用プログラム３１９は、改ざんされているｓｔｄファーム３１１を、外部サーバ２５０からダウンロードした同一バージョンのファームにアップデートする。続いて、Ｓ４２２で、ｓｔｄファームアップデート用プログラム３１９は、アップデート中にエラーが発生したか否かを判断する。エラーが発生した場合は、Ｓ４１０に進み、ｓｔｄファームアップデート用プログラム３１９は操作部２２０に５００のエラーコードを表示し、自動復旧処理を中断し処理を終了する。一方、ｓｔｄファーム３１１のアップデートに成功した場合は、Ｓ４２３に進み、ｓｔｄファームアップデート用プログラム３１９は、装置をリブートして通常起動を行う。
【００３７】
以上説明したように、本実施形態の情報処理装置は、ブートプログラムの起動に続いて複数のモジュールをそのプログラムの改ざんを検知しつつ順次起動する。また、本情報処理装置は、複数のモジュールのうち、次に起動するモジュールの署名を検証する検証情報を用いて、当該次に起動するモジュールの改ざんを検知し、署名の検証が成功すると、次に起動するモジュールを起動する。一方、本情報処理装置は、所定のモジュールの改ざんが検知されると、改ざんされたモジュールを更新して自動復旧を行い、所定のモジュール以外のモジュールの改ざんが検知されると、対応するエラーコードを操作部に表示する。より具体的には、本情報処理装置では、通常モードによる起動時に、ｓｔｄファーム３１１内のカーネル３１３や通常起動用プログラム３１５（所定のモジュール）に改ざんがあった場合は、アップデートモードでの起動に切り替える。アップデートモードでは、外部サーバ２５０から同一バージョンのｓｔｄファームを取得して、アップデートすることで改ざん状態から自動復旧する。このように、本実施形態によれば、情報処理装置の起動中にソフトウェアの改ざんが検知された場合に、改ざん状態から自動復旧する仕組みを提供することができる。つまり、本実施形態によれば、自動復旧可能な改ざんにおいては、サービスマンによる復旧処理を行うことなく自動復旧を行うことができ、よりユーザの利便性を向上させることができる。
【００３８】
また、本発明は上記実施形態に限らず様々な変形が可能である。例えば、上記実施形態では情報処理装置１００が通常起動を開始し改ざんを検知するケースを例としたが、本発明では、アップデート用起動を開始して改ざんを検知した場合であっても同様に改ざん状態からの自動復旧が可能である。この場合、アップデートモードでの起動時に、ｓａｆｅファーム３１２内のカーネルＢ３１７、ｓｔｄファームアップデート用プログラム３１９に改ざんがあった場合は、通常モードでの起動に切り替える。さらに、ｓｔｄファーム３１１内の通常起動用プログラム３１５の一部であるｓａｆｅファームアップデート用プログラム３１６によって、同様の手法でｓａｆｅファーム３１２をアップデートすることで改ざん状態から復旧することができる。このように、情報処理装置１００の改ざん検知時に自動復旧を行う仕組みを提供することで、ユーザの利便性が向上し、サービスマンの出動コスト等を抑えることができる。
【００３９】
＜第２の実施形態＞
以下では、本発明の第２の実施形態について説明する。上記第１の実施形態では、電源投入後に順次起動されたプログラムが次に起動するプログラムの署名検証をしながら起動する方法であった。この場合、各プログラムがそれぞれに公開鍵、検証処理のためのプログラム等を保持する必要がある。そのため、同じ署名アルゴリズム、及び公開鍵を用いる場合は、プログラム格納領域を余分に使うことになり無駄が多い。この点を改善する手法として、同じ署名アルゴリズム、公開鍵を用いる場合は可能な範囲で後段のプロムラムの署名検証処理をまとめて行うことが考えられる。本実施形態では、ＢＩＯＳ３０５において、ローダ３０７、ｓｔｄファーム３１１内のカーネル３１３、ｓａｆｅファーム３１２内のカーネルＢ３１７の署名検証処理をまとめて実行する例について説明する。図２の例では、署名アルゴリズムと公開鍵の共通化によって、ＢＩＯＳ３０５内のローダ改ざん検知処理部３０６に相当する部分がローダ３０７、ｓｔｄファーム３１１内のカーネル３１３、ｓａｆｅファーム３１２内のカーネルＢ３１７の署名検証を行う。これにより、ローダ３０７はカーネル改ざん検知処理部３０８とカーネル検証用公開鍵、カーネルＢ検証用公開鍵を保持する必要がなくなる。
【００４０】
＜自動復旧処理＞
図４を参照して、本実施形態に係る情報処理装置１００の改ざん検知時における自動復旧処理を説明する。ここでは、上記第１の実施形態で説明した図３のフローチャートと異なる部分について主に説明する。即ち、Ｓ５０１乃至Ｓ５０３は図３のＳ４０１乃至Ｓ４０３と同一の処理のため説明を省略する。
【００４１】
Ｓ５０２でＢＩＯＳ３０５が起動されると、当該ＢＩＯＳ３０５は各種初期化処理を実行する。さらに、ＢＩＯＳ３０５のローダ改ざん検知処理部３０６が、ローダ３０７、ローダ、カーネル、カーネルＢ共通の検証用公開鍵、ローダ署名、カーネル署名、及びカーネルＢ署名を、フラッシュＲＯＭ２１９からＲＡＭ２１２に読み込む。その後、Ｓ５０４で、ローダ改ざん検知処理部３０６は、ローダ、カーネル、カーネルＢ共通の検証用公開鍵を用いて、ローダ、カーネル、カーネルＢの署名の検証を一括して行い、成功したか否かを判定する。
【００４２】
Ｓ５０５で、ローダ改ざん検知処理部３０６は、改ざんされたプログラムがあるか否かを判断する。ローダ３０７、カーネル３１３、及びカーネルＢ３１７の全ての署名の検証に成功した場合、ローダ改ざん検知処理部３０６は処理を終了し、ＢＩＯＳ３０５がＲＡＭ２１２に読み込まれたローダ３０７を起動する。この場合、通常起動となり、ローダ３０７はｓｔｄパーティション３０９に含まれるｓｔｄファーム３１１の起動を開始する。Ｓ５０６乃至Ｓ５０９は、それぞれ、図３のＳ４０５乃至４０９と同一の処理のため説明を省略する。
【００４３】
一方、Ｓ５０５でローダ３０７、カーネル３１３、及びカーネルＢ３１７のいずれかの署名の検証に失敗した場合、Ｓ５１０に進み、ローダ改ざん検知処理部３０６は、アップデートによる自動復旧が可能かどうか判断する。本実施形態では、ローダ３０７、ｓｔｄファーム３１１内のカーネル３１３、及びｓａｆｅファーム３１２内のカーネルＢ３１７のうち、カーネル３１３が改ざんされた場合以外はｓｔｄファーム３１１を自動アップデートして改ざん状態から復旧することはできない。自動復旧ができないと判断した場合は、Ｓ５１１に進み、上記第１の実施形態で説明した図３のＳ４１０と同様に、ローダ改ざん検知処理部３０６が操作部２２０に図５の５００に示すエラーコードを表示し、処理を終了する。
【００４４】
ｓｔｄファーム３１１内のカーネル３１３のみ改ざんされていた場合は、ローダ改ざん検知処理部３０６は、自動復旧が可能と判断し、Ｓ５１２に進み、図３のＳ４１１と同様に、ＳＲＡＭ２１３に自動復旧フラグを立てリブートする。このリブートのとき、前述のＳ５０１乃至Ｓ５０４でのＢＩＯＳの検証と起動、ローダ、カーネル、カーネルＢの検証が同様に行われるが、詳細な説明については省略する。なお、Ｓ５１３乃至Ｓ５２３のアップデート起動時の改ざん検知時における自動復旧処理は、それぞれ、図３のＳ４１２、Ｓ４１４乃至Ｓ４２３と同一の処理のため説明を省略する。
【００４５】
以上説明したように、本実施形態によれば、同じ署名アルゴリズム、公開鍵を用いて可能な範囲で後段のプロムラムの署名検証処理をまとめて行う改ざん検知方法でも、改ざん検知時の自動復旧が可能である。アップデート用起動を開始して改ざんを検知した場合であっても、改ざん状態からの自動復旧が可能である点は、上記第１の実施形態と同様である。
【００４６】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００４７】
２１０：ＣＰＵ、２１１：チップセット、２１２：ＲＡＭ、２１３：ＳＲＡＭ、２１４：ＮＩＣ、２１８：ＨＤＤ、２１９：フラッシュＲＯＭ、２２０：操作部、２２１：プリンタエンジン、２２２：スキャナエンジン、２４０：電源、２５０：外部サーバ、２６０：ＰＣ、２７０：ＲＴＣ、２８０：埋め込みコントローラ、２９０：ＬＥＤ、２９１：ＲＯＭ
【図１】
2020082441.tif 000003
【図２】
2020082441.tif 000004
【図３】
2020082441.tif 000005
【図４】
2020082441.tif 000006
【図５】
2020082441.tif 000007