(57)【要約】      （修正有）【課題】情報処理装置が実行するソフトウェアを安全に更新する。【解決手段】情報処理装置１００は、プロセッサ、不揮発性メモリ、制御部、指定部及び信号生成部とを備える。不揮発性メモリは、第１のソフトウェア、第１のソフトウェアに代えて用いられる第２のソフトウェア、第２のソフトウェアを検証する第３のソフトウェアを含む。制御部は、第１のソフトウェアを格納する第１の領域に対する書き込みを制御する。指定部は、プロセッサで実行されるソフトウェアを指定する。信号生成部は、プロセッサの再起動に指定部が第３のソフトウェアの実行を指定するときに限り、設定を許可する信号の出力を開始する。第３のソフトウェアは、第２のソフトウェアを検証し、第２のソフトウェアが正当の場合に指定部に対して第２のソフトウェアを設定する。プロセッサは、信号の出力停止後、指定部によって指定された第１のソフトウェア又は第２のソフトウェアを実行する。【選択図】図１
2019145110.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
第１のソフトウェアと、前記第１のソフトウェアに代えて用いられる第２のソフトウェアと、前記第２のソフトウェアを検証するための第３のソフトウェアとを具備する不揮発性メモリと、
前記第１のソフトウェアが前記プロセッサによって実行されている場合に、前記不揮発性メモリにおいて前記第１のソフトウェアを格納する第１の領域に対する書き込みを禁止する制御部と、
前記プロセッサで実行されるソフトウェアを指定する指定部と、
前記制御部に対する設定を許可する信号を生成する信号生成部と、
を具備し、
前記信号生成部は、前記プロセッサの再起動において前記指定部が前記第３のソフトウェアの実行を指定するときに限り前記制御部への前記信号の出力を開始し、
前記第３のソフトウェアは、前記プロセッサによって実行された場合に前記第２のソフトウェアを検証し、前記第２のソフトウェアが正当の場合に前記指定部に対して前記第２のソフトウェアを設定し、
前記プロセッサは、前記信号の出力停止後、前記指定部によって指定された前記第１のソフトウェア又は前記第２のソフトウェアを実行する、
ことを特徴とする情報処理装置。
【請求項２】
前記第３のソフトウェアは、前記プロセッサによって実行された場合に前記第２のソフトウェアを検証し、前記第２のソフトウェアが正当の場合に前記指定部に対して前記第２のソフトウェアを設定した後に再起動を行い、
前記信号生成部は、前記第２のソフトウェアが再起動を行った場合に前記制御部への前記信号の出力を終了する、
請求項１の情報処理装置。
【請求項３】
プロセッサと、
第１のソフトウェアと、前記第１のソフトウェアに代えて用いられる第２のソフトウェアと、前記第２のソフトウェアを検証するための第３のソフトウェアとを具備する不揮発性メモリと、
起動時に前記プロセッサで実行されるソフトウェアを指定する指定部と、
前記第１のソフトウェアが前記プロセッサによって実行されている場合に、前記不揮発性メモリにおいて前記第１のソフトウェアを格納する第１の領域に対する書き込みを禁止する制御部と、
を具備し、
前記第３のソフトウェアは、前記プロセッサによって実行された場合に、起動時に実行されるソフトウェアの切り替え依頼が前記第１のソフトウェアによって生成されたか否か判断し、前記切り替え依頼が生成されている場合に、前記第２のソフトウェアを検証し、前記第２のソフトウェアが正当の場合に、前記指定部に対して前記第２のソフトウェアを設定する、
情報処理装置。
【請求項４】
前記第３のソフトウェアは、前記プロセッサによって実行された場合に、前記第３のソフトウェアが切り替えが必要であると判断すると、前記第２のソフトウェアを検証し、前記第２のソフトウェアが正当の場合に、前記指定部に対して前記第２のソフトウェアを設定する、
請求項３の情報処理装置。
【請求項５】
前記第３のソフトウェアは、
前記第２のソフトウェアが正当の場合に、さらに、前記制御部に対して、前記不揮発性メモリにおいて前記第２のソフトウェアを格納する第２の領域に対する書き込みを禁止することを指示する、
請求項３又は請求項４の情報処理装置。
【請求項６】
前記第１の領域、及び、前記第２の領域は、前記プロセッサが直接実行可能かつ書き換え可能な領域である、
請求項５の情報処理装置。
【請求項７】
前記プロセッサによって実行される対象が前記第３のソフトウェアの場合に、所定の信号を生成する信号生成部をさらに具備する、
請求項３乃至請求項６のいずれか１項の情報処理装置。
【請求項８】
前記制御部は、
前記信号が生成されているか否か判断し、
前記信号が生成されている場合に、前記不揮発性メモリに含まれる複数の領域に対して書き込み可能か否かを表すプロテクト情報の変更を許可し、
前記信号が生成されていない場合に、前記プロテクト情報の変更を禁止する、
請求項１又は請求項２の情報処理装置。
【請求項９】
前記信号が生成されていない場合に前記プロテクト情報の変更が依頼されると、前記変更の依頼を無効化するリセット部をさらに具備する、請求項８の情報処理装置。
【請求項１０】
前記信号が生成されていない場合に、前記第３のソフトウェアが前記不揮発性メモリから読み出されることを禁止する読み出し制御部をさらに具備する、
請求項１乃至請求項９のいずれか１項の情報処理装置。
【請求項１１】
読み出し制御部は、前記信号が生成されていない場合に前記第３のソフトウェアが読み出されると、前記第３のソフトウェアの値をゼロに変換する無効化部を具備する、
請求項１０の情報処理装置。
【請求項１２】
前記制御部と前記読み出し制御部とは、ラッピングされたロジック部に含まれており、
前記不揮発性メモリは、コマンド受信バスを用いて、前記プロセッサから前記ロジック部経由でコマンドを受信し、
前記不揮発性メモリは、ソフトウェア送信バスを用いて、前記プロセッサから前記ロジック部経由でアドレスを受信し、前記不揮発性メモリから前記ロジック部経由で前記第１乃至第３のソフトウェアのうち前記アドレスに対応するソフトウェアを送信し、
前記不揮発性メモリにおいて前記第３のソフトウェアを格納する第３の領域は、書き込み不可である、
請求項１０又は請求項１１の情報処理装置。
【請求項１３】
前記不揮発性メモリは、前記第１の領域と第２の領域と第３の領域とを具備し、前記第２の領域は前記第２のソフトウェアを格納し、前記第３の領域は第３のソフトウェアを格納し、前記第１及び第２の領域は、前記第１の領域における前記第１のソフトウェアと前記第２の領域における前記第２のソフトウェアとが直接実行可能な領域であり、前記プロセッサによって書き換え可能であり、前記第３の領域は、前記第３の領域における前記第３のソフトウェアが前記第１及び第２のソフトウェアによって書き換え可能ではない領域であり、
前記制御部は、前記第１及び第２の領域のそれぞれに対する書き込み許可状態又は書き込み禁止状態を制御し、
前記第１のソフトウェアが前記プロセッサによって実行される場合に、前記第１のソフトウェアは、前記第２の領域に格納されている前記第２のソフトウェアを更新し、
前記第３のソフトウェアは、前記第３のソフトウェアによる検証の結果において前記第２のソフトウェアが正当の場合に前記指定部に対して前記第１のソフトウェアに代えて前記第２のソフトウェアを設定し、前記制御部に対して前記第１の領域に関する前記書き込み許可状態と前記第２の領域に関する前記書き込み禁止状態とを設定する、
請求項１、２、８、９のうちのいずれか１項の情報処理装置。
【請求項１４】
前記第３のソフトウェアは、
前記第３のソフトウェアが前記プロセッサによって実行された場合に、起動時に実行されるソフトウェアの切り替え依頼が前記第１のソフトウェアによって生成されたか否か判断し、前記切り替え依頼が生成された場合に、前記第２のソフトウェアを検証する、
請求項１３の情報処理装置。
【請求項１５】
前記第３のソフトウェアによる前記検証の結果において前記第２のソフトウェアが正当の場合、前記第３のソフトウェアは、前記制御部に対して、前記第２のソフトウェアを格納する前記不揮発性メモリの前記第２の領域に対する書き込みを禁止することを指示する、
請求項１４の情報処理装置。
【請求項１６】
前記プロセッサは、装置の起動又はリセットに基づいて前記第３のソフトウェアを実行し、
前記信号生成部は、前記プロセッサによる前記第３のソフトウェアの実行中、前記信号を生成する、
請求項１５の情報処理装置。
【請求項１７】
前記不揮発性メモリは、第１の不揮発性メモリと第２の不揮発性メモリとを具備し、
前記第１の不揮発性メモリは、前記第１の領域及び前記第２の領域を具備し、
前記第２の不揮発性メモリは、前記第３の領域を具備し、
前記第２の不揮発性メモリは、前記第３のソフトウェアを格納し、前記第１の不揮発性メモリに含まれているか、又は、前記第１の不揮発性メモリとは別であり、
前記制御部は、前記信号の受信が停止された場合に、前記第３のソフトウェアが前記第２の不揮発性メモリから読み出されることを禁止する、
請求項１６の情報処理装置。
【請求項１８】
前記制御部は、前記信号が生成されておらず、前記第３のソフトウェアが読み出された場合に、前記第３のソフトウェアの値をゼロに変換する、
請求項１７の情報処理装置。
【請求項１９】
前記第１の不揮発性メモリ及び前記第２の不揮発性メモリは、コマンド受信バスを用いて、前記プロセッサから前記制御部経由でコマンドを受信し、
前記第１の不揮発性メモリ及び前記第２の不揮発性メモリは、ソフトウェア送信バスを使用して、前記プロセッサから前記制御部経由でアドレスを受信し、前記制御部経由で前記プロセッサに対して前記アドレスに対応する前記第１乃至第３のソフトウェアのうちの１つを送信し、
前記第３のソフトウェアを格納する前記第２の不揮発性メモリは、書き込み禁止である、
請求項１７の情報処理装置。
【請求項２０】
前記第３の領域は、前記不揮発性メモリに含まれている書き換え禁止領域である、
請求項１３の情報処理装置。
【請求項２１】
前記第２のソフトウェアが前記プロセッサによって実行される場合、前記第１のソフトウェアは、前記プロセッサによって実行されない、
請求項１３の情報処理装置。
【請求項２２】
前記第３のソフトウェアによる前記検証の結果において前記第２のソフトウェアが正当の場合、前記指定部は、前記第２のソフトウェアを指定し、
前記第２のソフトウェアが前記プロセッサによって実行された場合に、前記第１のソフトウェアは、前記プロセッサによって実行されない、
請求項１３の情報処理装置。
【請求項２３】
情報処理装置の制御方法において、
前記情報処理装置は、
プロセッサと、
第１のソフトウェアと、前記第１のソフトウェアに代えて用いられる第２のソフトウェアと、前記第２のソフトウェアを検証するための第３のソフトウェアとを具備する不揮発性メモリと、
前記不揮発性メモリに対する読み出し及び書き込みを制御する制御部と、
前記プロセッサで実行されるソフトウェアを指定する指定部と、
前記制御部に対する設定を許可する信号を生成する信号生成部と、
を具備し、
前記制御部が、前記第１のソフトウェアが前記プロセッサによって実行されている場合に、前記不揮発性メモリにおいて前記第１のソフトウェアを格納する第１の領域に対する書き込みを禁止することと、
前記信号生成部が、前記プロセッサの再起動において前記指定部が前記第３のソフトウェアの実行を指定するときに限り前記制御部への前記信号の出力を開始することと、
前記プロセッサによって実行された前記第３のソフトウェアが、前記第２のソフトウェアを検証し、前記第２のソフトウェアが正当の場合に、前記指定部に対して前記第２のソフトウェアを設定することと、
前記プロセッサが、前記信号の出力停止後、前記指定部によって指定された前記第１のソフトウェア又は前記第２のソフトウェアを実行すること、
を具備する、制御方法。
【請求項２４】
前記不揮発性メモリは、前記第１の領域と第２の領域と第３の領域とを具備し、前記第２の領域は前記第２のソフトウェアを格納し、前記第３の領域は第３のソフトウェアを格納し、前記第１及び第２の領域は、前記第１の領域における前記第１のソフトウェアと前記第２の領域における前記第２のソフトウェアとが直接実行可能な領域であり、前記プロセッサによって書き換え可能であり、前記第３の領域は、前記第３の領域における前記第３のソフトウェアが前記第１及び第２のソフトウェアによって書き換え可能ではない領域であり、
前記制御部は、前記第１及び第２の領域のそれぞれに対する書き込み許可状態又は書き込み禁止状態を制御し、
前記制御方法は、
前記制御部によって、前記第１のソフトウェアを格納する前記不揮発性メモリの前記第１の領域を、前記第１のソフトウェアが前記プロセッサによって実行されている間、書き込み禁止とすることと、
前記第１のソフトウェアが前記プロセッサによって実行される場合に、前記第１のソフトウェアによって、前記第２の領域に格納されている前記第２のソフトウェアを更新することと、
前記第３のソフトウェアによって、前記第３のソフトウェアによる検証の結果において前記第２のソフトウェアが正当の場合に前記指定部に対して前記第１のソフトウェアに代えて前記第２のソフトウェアを設定することと、前記制御部に対して前記第１の領域に関する前記書き込み許可状態と前記第２の領域に関する前記書き込み禁止状態とを設定することと、
を具備する、
請求項２３の制御方法。
【請求項２５】
前記第３のソフトウェアは、
前記第３のソフトウェアが前記プロセッサによって実行された場合に、起動時に実行されるソフトウェアの切り替え依頼が前記第１のソフトウェアによって生成されたか否か判断し、
前記切り替え依頼が生成された場合に、前記第２のソフトウェアを検証し、
前記第２のソフトウェアが正当の場合に、前記指定部に対して前記第２のソフトウェアを設定する、
請求項２４の制御方法。
【請求項２６】
前記第３のソフトウェアは、前記第２のソフトウェアが正当の場合、前記制御部に対して、前記第２のソフトウェアを格納する前記不揮発性メモリの前記第２の領域に対する書き込みを禁止することを指示する、
請求項２５の制御方法。
【請求項２７】
前記第２のソフトウェアが前記プロセッサによって実行される場合、前記第１のソフトウェアは、前記プロセッサによって実行されない、
請求項２４の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、情報処理装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
ネットワークを介して他の装置と通信可能な情報処理装置は、脆弱性又は不具合の修正を目的とするファームウェアの更新を実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−３２３７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態は、ソフトウェアを安全に更新する情報処理装置及び情報処理装置の制御方法を提供する。
【課題を解決するための手段】
【０００５】
本実施形態によれば、情報処理装置は、プロセッサと、不揮発性メモリと、制御部と、指定部と、信号生成部とを備える。不揮発性メモリは、第１のソフトウェアと、第１のソフトウェアに代えて用いられる第２のソフトウェアと、第２のソフトウェアを検証するための第３のソフトウェアとを備える。制御部は、第１のソフトウェアがプロセッサによって実行されている場合に、不揮発性メモリにおいて第１のソフトウェアを格納する第１の領域に対する書き込みを禁止する。指定部は、プロセッサで実行されるソフトウェアを指定する。信号生成部は、制御部に対する設定を許可する信号を生成する。信号生成部は、プロセッサの再起動において指定部が第３のソフトウェアの実行を指定するときに限り制御部への信号の出力を開始する。第３のソフトウェアは、プロセッサによって実行された場合に第２のソフトウェアを検証し、第２のソフトウェアが正当の場合に指定部に対して第２のソフトウェアを設定する。プロセッサは、信号の出力停止後、指定部によって指定された第１のソフトウェア又は第２のソフトウェアを実行する。
【図面の簡単な説明】
【０００６】
【図１】本実施形態に係る情報処理装置の構成を例示するブロック図。
【図２】本実施形態に係る不揮発性メモリの各領域と、モニタ、ファームウェア、予備ファームウェアのアクセス制御との関係を例示する図。
【図３】本実施形態に係るコントローラの構成を例示するブロック図。
【図４】本実施形態に係る操作検出部の処理を例示するフローチャート。
【図５】本実施形態に係る領域判断部の処理を例示するフローチャート。
【図６】本実施形態に係るモニタの処理を例示するフローチャート。
【図７】本実施形態に係る指定部による起動領域の指定を例示するブロック図。
【図８】本実施形態に係る不揮発性メモリの領域とプロテクト情報との関係を例示する図。
【図９】本実施形態に係る特権モードと非特権モードとの遷移を例示する状態遷移図。
【図１０】一般的な情報処理装置のソフトウェア更新を例示するブロック図。
【図１１】一般的な情報処理装置の不正なファームウェア更新を例示するブロック図。
【図１２】本実施形態に係る情報処理装置のファームウェア更新を例示するブロック図。
【発明を実施するための形態】
【０００７】
以下、図面を参照しながら本発明の実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
【０００８】
［第１の実施形態］
本実施形態に係る情報処理装置は、例えば、組み込み機器、サーバマシン、クライアントマシン、パーソナルコンピュータ、スマートメータ、自動車、複写機、又は、ストレージデバイス、ストレージシステムなどでもよいが、これに限定されない。情報処理装置で実行されるソフトウェアには、脆弱性が含まれる場合がある。脆弱性を修正するために、不揮発性メモリに格納されているソフトウェアは事後的に更新される場合がある。ソフトウェアを更新するための更新機能が用意されると、脆弱性のあるソフトウェアが更新機能を用いて改竄されたソフトウェアを不揮発性メモリに格納し、この改竄されたソフトウェアにより異常状態が生じる場合がある。つまり、ソフトウェアの脆弱性を修正するためには更新機能が必要であるが、このような更新機能が悪用されて不揮発性メモリが改竄されることが想定される。
【０００９】
ソフトウェアの脆弱性を排除し、脅威の侵入を防ぐことはセキュリティ上重要であり、さらに、ソフトウェアの脆弱性を排除することが困難な場合には、被害を最小限に抑えることが重要である。
【００１０】
本実施形態に係る情報処理装置は、安全なソフトウェアの更新を可能とし、不揮発性メモリに対するソフトウェアの不正な書き込みを防止する。
【００１１】
以下、本実施形態では、保護される対象、及び、不揮発性メモリに対して書き込み、読み出し、又は、消去される対象は、ファームウェアの場合を例として説明する。しかしながら、保護される対象、及び、不揮発性メモリに対して書き込み、読み出し、又は、消去される対象は、例えば、オペレーティングシステム（ＯＳ）又はアプリケーションプログラムなどの各種のプログラム、プログラムコード、プログラムイメージ、データ、データイメージ、情報、ドキュメントなど、ファームウェアではない他のソフトウェアでもよい。
【００１２】
本実施形態に係る情報処理装置は、不揮発性メモリに、モニタ領域、ファームウェア領域、予備ファームウェア領域を含み、モニタ領域にモニタと呼ばれる監視用のファームウェアを格納する。モニタは、ファームウェアではない他のソフトウェアでもよい。
【００１３】
情報処理装置では、モニタが実行（動作）されている場合に不揮発性メモリに対する特権モード（モニタモード）が設定される。また、情報処理装置では、例えば、特権モードの場合にのみ、不揮発性メモリの各領域に対応する書き込み禁止又は書き込み許可の設定を変更することができる。特権モードの設定されている情報処理装置では、現在動作しているファームウェアが格納されているファームウェア領域が、書き込み禁止とされ、これにより改竄が防止される。一方で、更新されたファームウェア（以下、予備ファームウェアという）が格納される予備ファームウェア領域には、権限のない第三者であっても書き込み可能とする。また、リセットされた後の次の起動（ブート）に用いられる領域は起動領域と称される。起動領域は、モニタによって変更可能とする。本実施形態では、モニタが、予備ファームウェア領域の署名検証を行い、検証結果が正当な場合に、起動領域がファームウェア領域から予備ファームウェア領域へ変更される。これにより、想定されないファームウェアの起動が防止される。
【００１４】
図１は、本実施形態に係る情報処理装置の構成を例示するブロック図である。
【００１５】
情報処理装置１００は、プロセッサ１、メモリ２、ストレージ部３、信号生成部４、指定部５、コントローラ６を備える。
【００１６】
プロセッサ１は、信号線（バス）を介して他のブロックと接続されている。より具体的には、バス７１，７２は、プロセッサ１とコントローラ６とを接続する。バス７３，７４は、コントローラ６とストレージ部３とを接続する。バス７１及びバス７３は、コマンド受信バスである。バス７４及びバス７２は、ソフトウェア送信バスである。プロセッサ１としては、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）、又は、ＤＳＰ（Digital Signal Processor）などが利用される。バス７１〜７４は、例えば、後述の図３に示すようにアドレスバス７Ａ及びデータバス７Ｄを含む。
【００１７】
プロセッサ１は、メモリ２とストレージ部３とのうちの少なくとも一方に格納されたファームウェアに基づいて制御処理及び演算処理を実行する。
【００１８】
メモリ２は、主記憶装置であり、プロセッサ１からの制御に従う。メモリ２は、例えば、ＳＲＡＭ（Static Random Access Memory）、又は、ＤＲＡＭ（Dynamic Random Access Memory）を含む。例えば、情報処理装置１００の起動時に、起動パーティション領域３６２に格納されているいずれかのファームウェアがプロセッサ１の制御にしたがって実行され、メモリ２には、プロセッサ１の制御に基づいて、生成されたデータ等を一時的に格納する。
【００１９】
本実施形態において、ストレージ部３は、不揮発性メモリ３６、書き込み通信部３１、アクセス制御部３３、アクセス部３５、情報管理部３４、読み出し通信部３２を含む。ストレージ部３の書き込み通信部３１と読み出し通信部３２とは、バス７３，７４を経由してコントローラ６に接続されている。一般の構成では、ストレージ部３は、主にプロセッサ１によって直接制御されるが、本実施形態では、ストレージ部３の外部に、特徴的な周辺回路である信号生成部４、指定部５、コントローラ６が配置される。この周辺回路によってストレージ部３に対してアクセス制御を行うことで、安全なファームウェア更新が実現される。
【００２０】
ストレージ部３は、ソリッドステートドライブ（ＳＳＤ）を含むとしてもよく、又は、ハードディスクドライブ（ＨＤＤ）を含むとしてもよい。ストレージ部３は、ＳＳＤとハードディスクとを組み合わせたハイブリッド型のメモリ装置を含むとしてもよい。
【００２１】
不揮発性メモリ３６は、例えば、ＮＡＮＤ型フラッシュメモリなどを含む。しかしながら、不揮発性メモリ３６は、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random access memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase change Random access memory：相変化メモリ）、ＲｅＲＡＭ（Resistive Random access memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）などのメモリを含むとしてもよい。
【００２２】
書き込み通信部３１は、書き込み、削除、又は、プロテクト情報の変更を行うためのコマンドを受信する書き込みポートに対応する。
【００２３】
書き込み通信部３１は、書き込みの場合、プロセッサ１から、バス７１、コントローラ６、バス７３経由で書き込みコマンドを受信し、受信された書き込みコマンドをアクセス制御部３３へ送る。
【００２４】
書き込み通信部３１は、プロテクト情報の変更の場合、プロセッサ１から、バス７１、コントローラ６、バス７３経由で変更コマンドを受信し、受信された変更コマンドをアクセス制御部３３へ送る。
【００２５】
アクセス部３５は、アクセス制御部３３による制御にしたがって、不揮発性メモリ３６へファームウェアを書き込み、又は、消去を行う。また、アクセス部３５は、アクセス制御部３３による制御にしたがって、不揮発性メモリ３６における指定されたアドレスで示される領域からファームウェアを読み出し、読み出されたファームウェアをアクセス制御部３３へ送る。
【００２６】
アクセス部３５によって、不揮発性メモリ３６に対する実際の読み出し、書き込み、消去が実行される。
【００２７】
アクセス部３５は、不揮発性メモリ３６がフラッシュメモリであり、ファームウェアがが書き込まれている領域に対して再度書き込みを行う場合に、ブロック単位で当該領域のファームウェアを削除し、その後新たなファームウェアの書き込みをページ単位で行う。例えば、フラッシュメモリのように、データを更新するために対応する領域が消去される必要がある場合、不正な更新の代わりに不正な消去が制限されてもよい。しかしながら、領域の消去を行うことなくデータの更新が可能なフラッシュメモリも存在する。したがって、不揮発性メモリに対する不正な書き込みを防止するために、本実施形態では、書き込みコマンドと消去コマンドの双方に対して正当か否か判断する。
【００２８】
読み出し通信部３２は、例えばワード単位で読み出すアドレスの指定を受け、読み出された任意のファームウェアを送信するための読み出しポートに対応する。
【００２９】
読み出し通信部３２は、読み出しの場合に、プロセッサ１から、バス７２、コントローラ６、バス７４経由でアドレスを受信し、受信されたアドレスをアクセス制御部３３へ送る。読み出し通信部３２は、不揮発性メモリ３６から読み出されたアドレスに対応するファームウェアを、アクセス部３５、アクセス制御部３３経由で受け、ファームウェアをバス７４、コントローラ６、バス７２経由でプロセッサ１へ送信する。
【００３０】
情報管理部３４は、プロテクト情報（フラグ）を含み、管理する。プロテクト情報は、不揮発性メモリ３６に対する書き込み及び消去を防ぐための情報である。プロテクト情報が保護状態を示す場合には、不揮発性メモリ３６の対応する領域に対して書き込み及び消去が禁止される。プロテクト情報は、例えばブロック単位などのような任意の領域単位で、書き込み及び消去を防ぐか否かを特定する。
【００３１】
情報管理部３４は、アクセス制御部３３による制御にしたがって、プロテクト情報を変更する。
【００３２】
アクセス制御部３３は、書き込み通信部３１又は読み出し通信部３２から受けたコマンドを解釈し、アクセス部３５又は情報管理部３４を制御する。
【００３３】
例えば、アクセス制御部３３は、書き込み通信部３１から受けた書き込みコマンド又は消去コマンドに基づいて、アクセス部３５を制御し、不揮発性メモリ３６に対するファームウェアの書き込み、又は、領域に対する消去を制御する。
【００３４】
例えば、アクセス制御部３３は、読み出し通信部３１から受けた読み出しコマンドとアドレスとに基づいて、アクセス部３５を制御し、不揮発性メモリ３６におけるアドレスに対応する領域に格納されているファームウェアをアクセス部３５から受け、ファームウェアを読み出し通信部３２へ送る。
【００３５】
本実施形態では、アクセス制御部３３は、対応するプロテクト情報が保護状態を示す領域に対して書き込み又は消去が要求された場合に、当該書き込み又は消去を禁止し、対応するプロテクト情報が非保護状態を示す領域に対して書き込み又は消去が要求された場合に、書き込み要求又は消去要求をアクセス部３５に送る。
【００３６】
さらに、本実施形態では、アクセス制御部３３は、読み出し通信部３２から受けた変更コマンドを解釈し、解釈結果に基づいて、情報管理部３４に含まれているプロテクト情報を変更する。
【００３７】
なお、本実施形態においては、変更コマンドは、書き込み通信部３１が受信するとしているが、読み出し通信部３２が受信するとしてもよい。
【００３８】
また、本実施形態においては、変更コマンドは、書き込み通信部３１からアクセス制御部３３へ送られているが、書き込み通信部３１又は読み出し通信部３２から情報管理部３４へ送られてもよい。
【００３９】
不揮発性メモリ３６は、ファームウェアを格納する。本実施形態では、不揮発性メモリ３６は、データ領域３６１、起動パーティション領域３６２を含む。
【００４０】
データ領域３６１及び起動パーティション領域３６２は、さらに小領域に分割されている。不揮発性メモリ３６の領域ごとに、プロテクト情報が設定され、アクセス制御が実行される。
【００４１】
起動パーティション領域３６２は、情報処理装置１００によって実行されるファームウェアが格納される領域である。起動パーティション領域３６２は、例えば、モニタ領域３６２ａ、ファームウェア領域３６２ｂ、予備ファームウェア領域３６２ｃを含む。モニタ領域３６２ａは、モニタ８を格納し、ファームウェア領域３６２ｂは、ファームウェア９を格納し、予備ファームウェア領域３６２ｃは、予備ファームウェア１０を格納する。情報処理装置１００は、モニタ領域３６２ａ、ファームウェア領域３６２ｂ、予備ファームウェア領域３６２ｃのそれぞれの領域に格納されているモニタ８、ファームウェア９、又は、予備ファームウェア１０に基づいて、起動可能である。
【００４２】
モニタ８は、予備ファームウェア１０の検証を含む起動の準備を行う小規模な信頼性の高い監視ファームウェアである。モニタ領域３６２ａは、モニタ８を秘匿するために、例えば特権モードで動作される場合にのみモニタが読み出し可能な領域として設定される。
【００４３】
モニタ８は、更新可能で複雑なファームウェア９とは異なり、脆弱性は存在しないとする。モニタ８は、脆弱性を取り除くために、限られた所定の処理を実行し、外部からの入力をほとんど受けない、小さく単純なコードである。モニタ領域３６２ａは、モニタ８を格納する信頼できる保護領域であり、安全性を保証するため、更新不可である。モニタ領域３６２ａは、モニタ８自身が動作する場合に、プロセッサ１によってモニタ８が読み出される必要があるため、読み出し可能であるが、他の場合には、読み出し不可とする。このモニタ領域３６２ａに対するアクセス制御は、コントローラ６によって実現される。
【００４４】
モニタ８は、情報処理装置１００のリセットに基づいて実行される。モニタ８は、次の第１乃至第４の処理を実行可能である。
【００４５】
第１の処理は、予備ファームウェア領域３６２ｃの検証である。第１の処理はモニタ８に含まれる公開鍵を用いて予備ファームウェア領域３６２ｃに格納されている予備ファームウェア１０の完全性と真正性とを検証する。
【００４６】
第２の処理は、不揮発性メモリ３６のアクセス制御設定の変更である。
【００４７】
第３の処理は、起動パーティション領域３６２ａの切り替えである。第３の処理は、次の起動時にファームウェア領域３６２ｂと予備ファームウェア領域３６２ｃとのうちのどちらの領域のファームウェアを起動させるかを指定する指定部５を操作する。
【００４８】
第４の処理は、指定されているファームウェアを起動するためのリセットである。
【００４９】
モニタ８は、リセット時に、実行されているファームウェア９から起動領域の切り替えが依頼されたか否か（実行されているファーウェア９から予備ファームウェア１０への切り替えが依頼されたか否か）を判断する。
【００５０】
モニタ８は、起動領域の切り替えが依頼された場合、第１乃至第４の処理を実行する。
【００５１】
モニタ８は、特別な依頼がなければ、第３及び第４の処理を実行し、起動領域のファームウェア９を起動する。
【００５２】
プロセッサ１で実行されるファームウェア９からの書き込みは、不揮発性メモリ３６における共有領域３６１ａに対して行われる。ファームウェア領域９と予備ファームウェア１０とのうちのどちらに格納されているファームウェアを起動するかを指定する情報は、例えば、モニタ専用領域３６１ｂに格納される。
【００５３】
ファームウェア領域３６２ｂは、現在実行対象として設定されているファームウェア９を格納する。ファームウェア領域３６２ｂに格納されているファームウェア９が実行中である場合は、ファームウェア領域３６２ｂは書き込み不可とする。これにより、ファームウェア９の更新機能が脆弱性により悪用され、実行されているファームウェア９を更新しようとした場合でも更新できない。したがって、実行されているファームウェア９の安全性が担保される。その後の起動では、必ず実行されているファームウェア９と同一のコードが起動される。
【００５４】
予備ファームウェア領域３６２ｃは、実行されているファームウェア９の更新機能によって更新され、ファームウェア９に代えて用いられる予備ファームウェア１０を格納する。予備ファームウェア領域３６２ｃに予備ファームウェア１０が格納された後、予備ファームウェア１０は、モニタ８による検証を経て有効化される。
【００５５】
なお、モニタ８が予備ファームウェア領域３６２ｃに格納された予備ファームウェア１０を有効にした場合、ファームウェア領域３６２ｂと予備ファームウェア領域３６２ｃは入れ替わるとしてもよく、次回の更新で生成される予備ファームウェアは入れ替わった後の予備ファームウェア領域に格納されるとしてもよい。
【００５６】
データ領域３６１は、共通領域３６１ａとモニタ専用領域３６１ｂを含むデータ専用領域である。
【００５７】
共通領域３６１ａは、モニタ８、ファームウェア９、予備ファームウェア１０によって読み書き可能であり、モニタ専用領域３６１ｂは、モニタ８のみが読み書き可能であり、ファームウェア９及び予備ファームウェア１０が読み書き不可である。例えば、モニタ専用領域３６１ｂには、起動パーティション情報が格納される。起動パーティション情報は、起動領域を指定する情報であり、後述するモニタ８のファームウェア検証機能において更新される。
【００５８】
信号生成部４は、モニタ８が起動される場合に、特権モード信号を生成し、特権モード信号をコントローラ６へ送信する。以下では、プロセッサ１によって実行される対象がモニタ８である状態を、特権モードと呼ぶ。
【００５９】
信号生成部４は、例えばレジスタにより実現されてもよい。信号生成部４は、特権モードに一度設定されると、次に設定変更されるまで同じ信号を出力し続ける。信号生成部４は、リセットのタイミングでのみ特権モードと非特権モードとを切り替え可能としてもよい。
【００６０】
特権モード信号は、コントローラ６においてモニタ８が実行されているか否かを判別するための制御信号として用いられる。
【００６１】
指定部５は、例えば所定の信号(リセット)入力後に起動パーティション領域３６２内のどの領域のファームウェアを用いて起動するかを指定する。一般の情報処理装置では、リセット信号が生じると、単一のリセットベクタの内容にしたがって不揮発性メモリの特定アドレスで示される領域を参照し、特定アドレスで示される領域に格納されているファームウェアの実行が開始される。一方、本実施形態では、指定部５の値によってプロセッサ１で参照されるリセットベクタが切り替わり、起動時に用いられる起動領域がモニタ領域３６２ａ、ファームウェア領域３６２ｂ、予備ファームウェア領域３６２ｃで切り替わる。
【００６２】
リセットされた直後に、指定部５がモニタ８を格納するモニタ領域３６２ａを指定している場合、信号生成部４から特権モード信号が出力される。特権モード信号は、リセットが発生するまで、すなわちモニタ８が動作している間、出力され続ける。
【００６３】
ただし、実行されているファームウェア９が指定部５に対する設定を更新可能とすると、予備ファームウェア領域３６２ｃに格納されている予備ファームウェア１０が、モニタ８による検証を経ずに起動される場合がある。したがって、指定部５は、特権モード信号が出力されている状態でリセットが発生した場合にのみ、リセットをまたいで指定部５の値（起動領域の指定）をファームウェア９のまま維持する。すなわち、モニタ８のみが、次回の起動領域を切り替え可能である。リセットが発生したが特権モード信号が出力されていない場合、指定部５は、モニタ領域３６２ａを指定し、この場合には、モニタ８が起動される。ファームウェア９がリセットする際には必ずモニタ８が起動することになる。そのため、予備ファームウェア１０は必ず特権モードを経由した後に有効化されることになる。
【００６４】
コントローラ６は、ストレージ部３に対する読み出し及び書き込みを制御するためのアクセスコントロール回路である。コントローラ６は、ストレージ部３の前段に配置される。コントローラ６は、ラップされており、内部に、操作検出部６１、領域判断部６２、リセット部６１ａ、無効化部６２ａを含む。
【００６５】
コントローラ６は、信号生成部４から受信された特権モード信号に基づいて、アクセス制御の有無の判断及び設定を行う。モニタ８が動作中の場合、コントローラ６は、信号生成部４から特権モード信号を受信する。そして、コントローラ６は、特権モード信号を受信している場合にのみ、モニタ８によるアクセス制御の設定の変更を許可する。モニタ８によって設定された内容は、ファームウェア９が起動された後でも有効であり、再度モニタ８によって設定されるまで設定された内容は維持される。そのため、コントローラ６は、特権モード信号を受信していない場合においても、先に設定された正しいアクセス制御設定に従い、不揮発性メモリ３６の特定領域への格納を禁止する。
【００６６】
コントローラ６は、プロセッサ１が不揮発性メモリ３６に対して読み書きを行う場合に用いるアドレスバス、データバスを参照可能である。コントローラ６は、アドレスバス、データバスの入出力を監視することで必要なアクセス制限を行う。
【００６７】
操作検出部（例えば制御部）６１は、書き込みを行う場合の一連の操作を検出する。本実施形態において、操作検出部６１は、例えば非特権モードでプロテクト情報が操作されることを禁止するための制御を行う。
【００６８】
領域判断部（例えば読み出し制御部）６２は、読み出しを行う場合の一連の操作を検出する。本実施形態において、領域判断部６２は、所定の条件にしたがって例えばモニタ８の読み出しを禁止し、モニタ８の秘匿性を確保するための制御を行う。
【００６９】
リセット部６１ａは、ストレージ部３をリセットする場合に、リセット信号を操作検出部６１、バス７３経由で、ストレージ部３に送信する。例えば、リセット部６１ａは、非特権モードにおいてプロテクト情報の変更が依頼された場合に、ストレージ部３をリセットし、この変更を無効化する。
【００７０】
無効化部６２ａは、領域判断部６２によって読み出しが検出された場合に、ストレージ部３に対する操作に制限を加える。例えば、無効化部６２ａは、非特権モードの場合に、モニタ領域３６２ａから読み出されたモニタ８の値を強制的にゼロに置き換えることで無効化する。
図２は、本実施形態に係る不揮発性メモリ３６の各領域と、モニタ８、ファームウェア９、予備ファームウェア１０のアクセス制御との関係を例示する図である。
【００７１】
モニタ８が実行中の場合、モニタ８は、モニタ領域３６２ａに対して読み出し可及び書き込み不可であり、ファームウェア領域３６２ｂに対して読み出し可及び書き込み可であり、予備ファームウェア領域３６２ｃに対して読み出し可及び書き込み可であり、共通領域３６１ａに対して読み出し可及び書き込み可であり、モニタ専用領域３６１ｂに対して読み出し可及び書き込み可である。
【００７２】
ファームウェア９が実行中の場合、ファームウェア９は、モニタ領域３６２ａに対して読み出し不可及び書き込み不可であり、ファームウェア領域３６２ｂに対して読み出し可及び書き込み不可であり、予備ファームウェア領域３６２ｃに対して読み出し可及び書き込み可であり、共通領域３６１ａに対して読み出し可及び書き込み可であり、モニタ専用領域３６１ｂに対して読み出し不可及び書き込み不可である。
【００７３】
予備ファームウェア１０が実行中の場合、予備ファームウェア１０は、モニタ領域３６２ａに対して読み出し不可及び書き込み不可であり、ファームウェア領域３６２ｂに対して読み出し可及び書き込み可であり、予備ファームウェア領域３６２ｃに対して読み出し可及び書き込み不可であり、共通領域３６１ａに対して読み出し可及び書き込み可であり、モニタ専用領域３６１ｂに対して読み出し不可及び書き込み不可である。
【００７４】
ファームウェア領域３６２ｂのアクセス制御の設定は、動的に変化可能である。
【００７５】
図３は、本実施形態に係るコントローラ６の構成を例示するブロック図である。この図３に例示されるコントローラ６によって実行されるストレージ部３に対するアクセス制御を、図４及び図５を用いて説明する。
【００７６】
図４は、本実施形態に係る操作検出部６１の処理を例示するフローチャートである。
【００７７】
操作検出部６１は、アドレスバス７Ａとデータバス７Ｄを監視して、プロテクト情報を変更するための変更コマンドを検出する（Ｓ４−１）。本実施形態において、変更コマンドは、特定の順番でアドレスバス７Ａとデータバス７Ｄへ入力されるコマンドシーケンスでもよい。
【００７８】
変更コマンドが検出されると、操作検出部６１は、特権モード信号に基づいて特権モードか否か、すなわちモニタ８が実行されているか否か判断する（Ｓ４−２）。
【００７９】
特権モードの場合、操作検出部６１は、プロテクト情報の変更を許可し、変更コマンドを後段のストレージ部３に送る（Ｓ４−３）。非特権モードの場合、操作検出部６１は、変更を拒否する（Ｓ４−４）。
【００８０】
変更拒否の具体的方法は、ストレージ部３の仕様などに依存するため、様々な方法が考えられる。例えば、操作検出部６１は、リセット部６１ａを用いて、ストレージ部３をリセットしてもよいし、実行されているファームウェア９に例外を通知してもよいし、又は、セキュリティに関わる異常状態として情報処理装置１００をリセットしてもよい。
【００８１】
図５は、本実施形態に係る領域判断部６２の処理の一例を示すフローチャートである。
【００８２】
領域判断部６２は、アドレスバス７Ａを監視して、読み出しコマンドを検出する（Ｓ５−１）。読み出しコマンドが検出されると、領域判断部６２は、特権モード信号に基づいて特権モードか否か判断する（Ｓ５−２）。
【００８３】
特権モードの場合、領域判断部６２は、無効化部６２ａを無効化し（Ｓ５−３）、後段のストレージ部３に読み出しコマンドをそのまま送り、読み出しアドレスに対応したファームウェアをストレージ部３から受け、プロセッサ１に送信する（Ｓ５−４）。
【００８４】
一方、非特権モードの場合、領域判断部６２は、読み出し領域（範囲）の判断を行う（Ｓ５−５）。
【００８５】
読み出し領域がモニタ領域３６２ａ外の場合、領域判断部６２は、特権モードの場合と同様に、無効化部６２ａを無効にし（Ｓ５−３）、ストレージ部３から読み出されたファームウェアをプロセッサ１に送信する。読み出し領域がモニタ領域３６２ａ内の場合、領域判断部６２は、無効化部６２ａを有効にし（Ｓ５−６）、ストレージ部３から読み出されたモニタ８を無効化部６２ａによって無効にし、プロセッサ１に送信する（Ｓ５−４）。
【００８６】
無効化部６２ａは、例えばデータバス７Ｄから得られるモニタ８の値と０値とのＡＮＤ演算を行い、モニタ８の値を０に変換する回路である。無効化部６２ａにより、モニタ領域３６２ａのモニタ８は、非特権モードで実質的に読み出し不可となり、モニタ８の秘匿性が確保される。
【００８７】
なお、無効化部６２ａで用いられる無効化の手法は、モニタ８が実質的に読み出し不可となるならば他の手法が用いられてもよい。
【００８８】
図６は、本実施形態に係るモニタ８の処理を例示するフローチャートである。
【００８９】
モニタ８は、プロセッサ１によって実行されると、操作検出部６１に対し、プロテクト情報を変更可能に設定するための変更コマンドを送る（Ｓ６−１）。モニタ８が実行されている場合には、操作検出部６１は、特権モード信号を検出するため、プロテクト情報の変更は無効化されない。
【００９０】
次に、モニタ８は、起動時に用いられるファームウェアを格納している起動領域の切り替え依頼が、ファームウェアによって例えば共通領域３６１ａに格納されているか否か判断する（Ｓ６−２）。
【００９１】
起動領域の切り替え依頼がある場合、又は、モニタ８が起動領域を切り替える必要があると判断した場合、モニタ８に含まれている検証機能は、予備ファームウェア領域３６２ｃの予備ファームウェア９の完全性を検証するとともに、共通領域３６１ａに格納された起動領域の切り替え依頼を削除する（Ｓ６−３）。予備ファームウェア９は、予備ファームウェア領域３６２ｃから、プロセッサ１経由で、メモリ２へ格納され、例えば完全性及び真正性などが検証される。例えば、ファームウェアを切り替えたがこのファームウェアが正常に動作しないことをモニタ８が検出した場合、モニタ８は起動領域を切り替える必要があると判断する。
【００９２】
モニタ８は、予備ファームウェア１０が検証ＯＫの場合、モニタ専用領域３６１ｂに対して、起動領域の設定情報を、ファームウェア領域３６２ｂから予備ファームウェア領域３６２ｃへ変更する（Ｓ６−４）。
【００９３】
モニタ８は、起動領域の切り替え依頼がない場合、予備ファームウェア領域３６２ｃの検証が検証ＮＧの場合、又は、起動領域の設定が変更された場合、モニタ専用領域３６１ｂから、起動領域の設定情報を取得し、起動領域の設定情報を、指定部５に設定する（Ｓ６−５）。
【００９４】
さらに、モニタ８は、情報管理部３４に対して、起動領域のプロテクト情報を保護状態（書き込み禁止）とするなど、必要に応じてプロテクト情報の変更を指示する（Ｓ６−６）。
【００９５】
以上の処理が完了された後、モニタ８は、リセットを行う（Ｓ６−７）。
【００９６】
上記の動作により、次回の起動時には、予備ファームウェア領域３６２ｃに格納されている検証済の予備ファームウェア１０が書き込み禁止の状態で起動するか、又は、モニタ８が起動する。
【００９７】
なお、リセットを行った結果、予備ファームウェア１０が正常動作しないという可能性もあるため、モニタ８は、予備ファームウェア１０の正常動作を確認した後にプロテクト情報を変更してもよい。正常動作は様々に定義可能である。例えば、ＩＰアドレスが取得できた場合、サーバと通信が行えた場合、最新ファームウェアであることが確認できた場合に、正常動作が行われていると判断してもよい。この場合、モニタ８は、プロテクト情報の変更の前に、正常動作を検証する機能を含むとしてもよい。
【００９８】
図７は、本実施形態に係る指定部５による起動領域の指定を例示するブロック図である。
【００９９】
不揮発性メモリ３６は、モニタ領域３６２ａ、ファームウェア領域３６２ｂ、予備ファームウェア領域３６２ｃ、共通領域３６１ａ、モニタ専用領域３６１ｂなどの複数の領域に区切られている。
【０１００】
指定部５は、次の起動時に用いられる不揮発性メモリ３６の領域を指定する。不揮発性メモリ３６は、参照可能なリセットベクタ１１ａ〜１１ｃを格納している。リセットベクタ１１ａは、モニタ領域３６２ａに対応する。リセットベクタ１１ｂは、ファームウェア領域３６２ｂに対応する。リセットベクタ１１ｃは、予備ファームウェア領域３６２ｃに対応する。起動時に指定部５によって指定されるリセットベクタを切り替えることで、起動領域を切り替える。起動領域の切り替えは、モニタ８によってのみ実行可能とする。
【０１０１】
図８は、本実施形態に係る不揮発性メモリ３６の領域とプロテクト情報との関係を例示する図である。
【０１０２】
不揮発性メモリ３６は、領域Ｅ1〜ＥNを含む。プロテクト情報Ｐ1〜ＰNは、それぞれ領域Ｅ1〜ＥNに対応する。この図８において、プロテクト情報Ｐ1〜ＰNは、１ビットで構成され、保護状態を１、非保護状態を０のフラグで表す。
【０１０３】
コントローラ６の操作検出部６１は、ストレージ部３に対する書き込みコマンドを直接制限しない。ストレージ部３は、書き込み禁止を判断するためのプロテクト情報Ｐ1〜ＰNを含み、プロテクト情報Ｐ1〜ＰNに基づいて書き込み及び消去を禁止する。操作検出部６１は、このプロテクト情報Ｐ1〜ＰNをモニタ８だけが設定可能なように制限し、これにより実質的なストレージ部３に対する書き込み制限を実現している。具体的には、モニタ８は、ファームウェア９が起動する前に、起動領域としてのファームウェア領域３６２ｂを保護状態（書き込み禁止）とし、予備ファームウェア領域３６２ｃを非保護状態(書き込み可)とする。これにより、ファームウェア９の不正な更新が試みられた場合であっても、起動されたファームウェア９を格納する保護状態のファームウェア領域３６２ｂを更新することはできない。
【０１０４】
保護状態の領域は、実行されているファームウェアに基づいて変更される。したがって、モニタ８は、適切なタイミングで、プロテクト情報Ｐ1〜ＰNを変更し、保護状態の領域を決定する。例えば、モニタ８は、ファームウェア起動のためのリセットに先立って、アクセス制御の設定を行う。
【０１０５】
モニタ領域３６２ａなどのような読み出しが制限される領域では、読み出しが制限される領域自体が識別可能であれば、領域内でアドレスが設定されなくてもよい。
【０１０６】
図９は、本実施形態に係る特権モードと非特権モードとの遷移を例示する状態遷移図である。
【０１０７】
この図９において、表記「ＲＯＭ」は、指定部５がモニタ領域３６２ａを指定する場合を示す。表記「ＦＷ」は、指定部５がファームウェア領域３６２ｂを指定する場合を示す。
【０１０８】
電源がＯＮされると、モニタ８が実行される。
【０１０９】
モニタ８実行中（特権モード信号の出力中）にリセットが発生し、指定部５がモニタ領域３６２ａを指定している場合、モニタ８が実行される。
【０１１０】
モニタ８実行中にリセットが発生し、指定部５がファームウェア領域３６２ｂを指定している場合、ファームウェア９が実行される。
【０１１１】
ファームウェア９実行中（非特権モード信号の出力中）にリセットが発生し、指定部５がモニタ領域３６２ａを指定している場合、モニタ８が実行される。
【０１１２】
ファームウェア９実行中にリセットが発生し、指定部５がファームウェア領域３６２ｂを指定している場合であっても、モニタ８が実行される。
【０１１３】
電源は、モニタ８実行中又はファームウェア９実行中に、ＯＦＦ可能である。
【０１１４】
リセットされた直後に、指定部５は、モニタ領域３６２ａに対応するリセットベクタ１１ａを指定する。すると、信号生成部４は、特権モード信号をコントローラ６へ送信する。特権モード信号は、リセットが生じるまで、つまりモニタ８が動作している間、出力され続ける。
【０１１５】
以下で、本実施形態で実現されるファームウェア９の保護を説明する。まず、図１０及び図１１を用いてそれぞれ一般的な情報処理装置１００のファームウェア更新の例と不正なファームウェア更新の例とを説明し、次に、図１２を用いて本実施形態に係るソフトウェアの保護を説明する。
【０１１６】
図１０は、一般的な情報処理装置のソフトウェア更新を例示するブロック図である。
【０１１７】
プロセッサ１２は、不揮発性メモリ１３におけるファームウェア領域１３ｂに格納されているファームウェア１４をＸＩＰ（eXecute In Place）により不揮発性メモリ１３から直接実行し、又は、メモリに一時格納されたファームウェア１４を実行する（ＯＰ１−１）。ファームウェア１４の脆弱性発見などにより、ファームウェア１４の更新が発生した場合には、ファームウェア１４の更新機能１４ａは、起動されているファームウェア１４を更新して得られる予備ファームウェア１５を、予備ファームウェア領域１３ｃに格納する（ＯＰ１−２）。情報処理装置は、例えば、ネットワーク経由で、ＵＳＢ（Universal Serial Bus）メモリから、又は、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）経由で、予備ファームウェア１３ｃを受け、予備ファームウェア１５を予備ファームウェア領域１３ｃに格納してもよい。その後、現在実行されているファームウェア１４は、起動領域をファームウェア領域１３ｂから予備ファームウェア領域１３ｃへ切り替え、再起動を行う（ＯＰ１−３）。これにより、再起動後は、脆弱性が修正された予備ファームウェア１５がプロセッサ１２によって実行される（ＯＰ１−４）。
【０１１８】
図１１は、一般的な情報処理装置の不正なファームウェア更新を例示するブロック図である。
【０１１９】
ファームウェア１４がプロセッサ１２によって起動され（ＯＰ２−１）、起動されたファームウェア１４に脆弱性があると、ファームウェア１４は攻撃者によって不正に改竄され、不正な処理を実行する場合がある（ＯＰ２−２）。不正なファームウェア１６は、例えばバックドアなどのような不正なファームウェア１６をファームウェア領域１３ｂに格納し（ＯＰ２−３）、再起動を行う（ＯＰ２−４）。これにより、再起動後、ファームウェア領域１３ｂに格納されている不正なファームウェア１６が実行される（ＯＰ２−５）。また、例えば、不正なファームウェア１６は、予備ファームウェア領域１３ｃに不正なファームウェア１６を格納し、予備ファームウェア領域１３ｃに格納されている不正なファームウェア１６を起動するように改竄されることも想定される。
【０１２０】
攻撃者は、脆弱な状況を維持することを考え、ファームウェア１４の更新機能１４ａをプロセッサ１２でなにも実行しないＮＯＰ命令で上書きし、又は、ファームウェア１４の更新機能をジャンプ命令でスキップさせる可能性がある。この場合には、不正なファームウェア１６の動作が繰り返され、元の健全なファームウェアへ戻すことが困難である。また、ファームウェアの破壊を目的として、攻撃者が不揮発性メモリ１２の全領域を書き換える場合がある。また、攻撃者がブートプログラムの格納される領域を破壊することにより、情報処理装置が起動不可となる場合がある。
【０１２１】
図１２は、本実施形態に係る情報処理装置１００のファームウェア更新を例示するブロック図である。
【０１２２】
本実施形態に係るファームウェア更新では、モニタ８と呼ばれる信頼できるファームウェアが各種処理を実行し、次に起動されるファームウェアが正当か判断する点で、上記図１０及び図１１のファームウェア更新と相違する。
【０１２３】
プロセッサ１により、ファームウェア領域３６２ｂに格納されているファームウェア９が起動される（ＯＰ３−１）。その後、更新機能９ａが、予備ファームウェア領域３６２ｃに予備ファームウェア１０を格納する（ＯＰ３−２）。そして、ユーザが情報処理装置１００に対してリセット信号を入力すると、指定部５が起動領域としてモニタ領域３６２ａを指定する。
【０１２４】
リセット後、プロセッサ１は、モニタ領域３６２ａに格納されているモニタ８を起動する（ＯＰ３−３）。
【０１２５】
モニタ８の完全性検証機能は、予備ファームウェア領域３６２ｃに格納されている予備ファームウェア１０を検証し、完全性と真正性が確保されているか否かを判断する。
【０１２６】
モニタ８は、完全性と真正性が確保されている場合、ファームウェア領域３６２ｂを書き込み可能に設定し、予備ファームウェア領域３６２ｃを書き込み禁止に設定する。次に、モニタ８は、起動領域をファームウェア領域３６２ｂから予備ファームウェア領域３６２ｃに変更し、再度リセットを行う。すると、予備ファームウェア領域３６２ｃに格納されている正常な予備ファームウェア１０が起動される（ＯＰ３−４）。これにより、不正なファームウェアによる不揮発性メモリ３６に対する改竄を防止することができ、安全なファームウェア更新を実現することができる。
【０１２７】
以上説明した本実施形態においては、ファームウェアを安全に更新することができ、情報処理装置１００がリセットされると、正常なファームウェアが立ち上がることを保証することができる。
【０１２８】
本実施形態に係るファームウェア更新は、モニタ８が動作している間は、非特権モードから特権モードに遷移し、特別な処理を実行可能となる特徴を持つ。具体的には、特権モードの時だけ、保護領域及び非保護領域の設定（プロテクト情報）と起動領域の設定との変更とが許可される。これにより、たとえ異常状態のファームウェアが更新機能を悪用し、プロテクト情報を改竄し、予備ファームウェア領域３６２ｃの改竄を試みた場合であっても、ファームウェア領域３６２ｂの書き込み禁止属性が解除されず、この改竄は操作検出部６１によりブロックされ、ファームウェア領域３６２ｂに格納されているファームウェア９が更新されることはない。モニタ８は、ファームウェア９が起動する前に、ファームウェア領域３６２ｂに対応するプロテクト情報を保護状態とすることで、起動中のファームウェア９を更新不可とすることが可能となる。予備ファームウェア領域３６２ｃに対しては、ファームウェア９の動作に基づいて自由に書き込み可能である。しかしながら、ファームウェア９の動作に基づいて起動領域は変更されない。このため、再起動により直前に起動された正常なファームウェア９が起動されることを保証することができる。
【０１２９】
モニタ８は、予備ファームウェア領域３６２ｃに格納されている予備ファームウェア１０を、予備ファームウェア１０の検証を経た後にのみ有効化することができる。例えば、予備ファームウェア領域３６２ｃに不正な予備ファームウェアが格納された場合であっても、モニタ８の検証により不正な予備ファームウェアの起動を防止することができる。
【０１３０】
本実施形態においては、脆弱性により異常状態となったファームウェア９が、例えばモニタ８の読み出しを試みた場合でも、領域判断部６２により読み出されたモニタ８の無効化が行われるため、モニタ８を秘匿することができる。
【０１３１】
本実施形態で説明された各種の処理の順序又は構成は、適宜変更されてもよい。例えば、ストレージ部３とコントローラ６は、別モジュールとして分離されているが、同様の機能を備えていれば、一体のモジュールとして構成されていてもよい。また、例えば書き込み通信部３１、読み出し通信部３２は、アクセス制御部３３に内蔵されていてもよい。信号生成部４と指定部５とのうちの少なくとも一方は、コントローラ６に含まれてもよい。
【０１３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３３】
１００…情報処理装置、１…プロセッサ、２…メモリ、３…ストレージ部、４…信号生成部、５…指定部、６…コントローラ、７１〜７４…バス、３１…書き込み通信部、３２…読み出し通信部、３３…アクセス制御部、３４…情報管理部、３５…アクセス部、３６…不揮発性メモリ、３６１…データ領域、３６１ａ…共通領域、３６１ｂ…モニタ専用領域、３６２…起動パーティション領域、３６２ａ…モニタ領域、３６２ｂ…ファームウェア領域、３６２ｃ…予備ファームウェア領域、８…モニタ、９…ファームウェア、１０…予備ファームウェア、６１…操作検出部、６２…領域判断部、６１ａ…リセット部、６２ｂ…無効化部、１１ａ〜１１ｃ…リセットベクタ、Ｅ1〜ＥN…領域、Ｐ1〜ＰN…プロテクト情報、９ａ…更新機能。
【図１】
2019145110.tif 000003
【図２】
2019145110.tif 000004
【図３】
2019145110.tif 000005
【図４】
2019145110.tif 000006
【図５】
2019145110.tif 000007
【図６】
2019145110.tif 000008
【図７】
2019145110.tif 000009
【図８】
2019145110.tif 000010
【図９】
2019145110.tif 000011
【図１０】
2019145110.tif 000012
【図１１】
2019145110.tif 000013
【図１２】
2019145110.tif 000014