JP2015222474A - 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ - Google Patents

変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ Download PDF

Info

Publication number
JP2015222474A
JP2015222474A JP2014106076A JP2014106076A JP2015222474A JP 2015222474 A JP2015222474 A JP 2015222474A JP 2014106076 A JP2014106076 A JP 2014106076A JP 2014106076 A JP2014106076 A JP 2014106076A JP 2015222474 A JP2015222474 A JP 2015222474A
Authority
JP
Japan
Prior art keywords
variable set
variable
boot
firmware
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014106076A
Other languages
English (en)
Other versions
JP6054908B2 (ja
Inventor
萩原 幹雄
Mikio Hagiwara
幹雄 萩原
栄太郎 笠松
Eitaro Kasamatsu
栄太郎 笠松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lenovo Singapore Pte Ltd
Original Assignee
Lenovo Singapore Pte Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lenovo Singapore Pte Ltd filed Critical Lenovo Singapore Pte Ltd
Priority to JP2014106076A priority Critical patent/JP6054908B2/ja
Priority to US14/717,820 priority patent/US9703635B2/en
Publication of JP2015222474A publication Critical patent/JP2015222474A/ja
Application granted granted Critical
Publication of JP6054908B2 publication Critical patent/JP6054908B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1417Boot up procedures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】UEFIファームウェアが参照する変数セットを修復する。
【解決手段】ROM100に格納されたUEFI150は電源起動後に最初に実行される。UEFIは、変数領域105にブートに関連する変数セット183を書き込む。変数領域105には、OSも変数セットを書き込むため、ブートに関連する変数セットが改変される可能性がある。コンピュータが正常にブートしたときの変数セットをUSBメモリ・キーのような所定の領域に退避する。コンピュータのブート中に参照領域の変数セットが改変されたことを検出して退避した変数セットで参照領域の変数セットを置換する。変数セットの改変は、ブート開始の直後に設定され、OSをロードする直前に解除される検出フラグ153で検出することができる。
【選択図】図2

Description

本発明は、起動できなくなったコンピュータを回復する技術に関し、さらには、システム・ファームウェアが参照する変数セットを回復する技術に関する。
コンピュータは、ハードウェアとオペレーティング・システム(OS)、デバイス・ドライバまたはアプリケーションなどの上位のプログラムとの間のインターフェースを提供するファームウェアを実装する。ファームウェアは、周辺デバイスを専用に制御するデバイス・ファームウェアとシステム全体の動作にかかわるシステム・ファームウェア(プラットフォーム・ファームウェアともいう。)に分けることができる。
システム・ファームウェアは通常マザーボードに取り付けられたファームウェアROMに格納されている。BIOSはこれまで多くのコンピュータ・システムに実装されてきたシステム・ファームウェアで、コンピュータの電源が起動してからOSがロードを開始するまでの間にPOST(Power On Self Test)およびパスワード処理をしたり、上位のプログラムがハードウェアにアクセスする為のサービスを提供したりする。
しかしBIOSは、近年の進化したハードウェアへの対応が困難になってきたため、非特許文献1に示すように、UEFI(Unified Extensible Firmware Interface)フォーラムが、従来のBIOSであるレガシーBIOSに代わる新しいシステム・ファームウェアとしてUEFI規格を策定した。UEFIファームウェアは、レガシーBIOSをエミュレートして互換性を保つための仕組みを取り入れており、ハードウェアとソフトウェアは過去数年かけてレガシーBIOSからUEFIファームウェアに対応できるように段階的に発展してきた。2011年4月には非特許文献1に示すUEFI規格が策定され、ハードウェアもほぼ対応できるようになってきたこともあって現在のシステムはUEFIファームウェアへの完全移行段階に入ってきている。
UEFIファームウェアを実装するシステムではUEFIネイティブ・モードで動作するUEFI対応のOSと、レガシーBIOS互換モードで動作するUEFI非対応のOSのいずれも動作することができる。Windows(登録商標)7はUEFIネイティブ・モードに対応しているが、UEFIファームウェアの高速ブート、セキュア・ブートなどの機能を利用することはできない。Windows(登録商標)8ではUEFIファームウェアに完全移行してその機能を完全に利用できるようになっている。
非特許文献1のUEFI仕様には、7.2項にバリアブル・サービス(Variable Services)を規定している。バリアブル・サービスでは、不揮発性のメモリにUEFI規格で定義した変数であるグローバル・バリアブルズ(GV:Global Variables)を格納することにしている。現在ほとんどのパーソナル・コンピュータ(PC)では、UEFIファームウェアを格納する不揮発性メモリにGVを記録している。UEFI規格では、ベンダーがUEFI規格で定義されたGV用の識別子(VendorGuid)を使って、当該不揮発性メモリにGVを書き込んでもよいとしている。また、OSやアプリケーションがUEFI規格で定義したGVを書き換えることを許容している。特許文献1はUEFIファームウェアが使用する変数をプロテクトして不揮発性メモリに記憶する発明を記載している。
特許文献2は、システムを正常に起動させることができなくなったBIOSを正常なBIOSに復旧させる発明を開示する。情報処理装置は、電源が立ち上がるとBIOSを読み出すための命令を出力する。その後、BIOSROMが起動を開始する前に、PCIスロットに装着されたBIOSROMカードに予め記憶されているシステムを初期化する初期化プログラムを読み出し、初期化プログラムによりシステムを初期化する。
次に、BIOSROMカードに記憶されているBIOSROM書き換えプログラムを読み出し、読み出した書き込みプログラムに従って、BIOSROMカードに記憶されているBIOS制御コードをBIOSROMに格納する。特許文献3は、BIOS_ROMに格納されたシステム・ファームウェアを更新する際に、BIOS_ROMに旧CRTMの変数の定義と新BIOSの変数の定義が異なる場合に更新できなくなる事態を防ぐ発明を開示する。
特開2010−73193号公報 特開2003−345617号公報 特開2013−156799号公報
Unified Extensible Firmware Interface Specification Version 2.3.1 April 6,2011
ところで、レガシーBIOSやUEFIファームウェアなどのシステム・ファームウェアは、ブートの際にデバイスの認識や初期化などの処理をするために、電源の起動直後にアクセスが可能なファームウェアROMに書き込んだデータを参照する必要がある。以後このようなブートに不可欠なデータ(変数)を、本明細書においてコンフィグレーション・バリアブルズ(CV:Configuration Variables)ということにする。
CVはプリブート段階でUEFIがデバイスに設定するデバイスの属性情報およびデバイスに設定するパラメータ、セット・アップ画面を呼び出してユーザが設定したデバイスの種類、デバイスの動作モード、デバイスの有効/無効などの設定情報、ブート・イメージが格納されているパーティションのパス、およびロードするOSの種類などの情報を含む。
ここでプリブートとは、システムがACPIに規定するパワー・オフ状態(S5ステート)またはハイバネーション状態(S4ステート)のときに、電源が起動してからOSがロードを開始するまでの間に、システム・ファームウェアが行う処理をいう。また本明細書でブートとは、電源が起動してからプリブートを経由してOSおよびOSアプリケーションのロードが完了した状態になるまでの一連の処理をいうことにする。なお、S5ステートまたはS4ステートからブートすることをコールド・ブートという。
CVの多くは、従来、ボタン電池で電源をサポートしているCMOSに記録されていたが、近年はUEFIを格納するファームウェアROMにも書き込むようになってきた。また、OS、UEFIアプリケーション、およびOSアプリケーションはその実行に際して、自らをカスタマイズするための環境変数、デバッグ・ログ、またはエラー・ログのようなダンプ・ファイルをUEFIファームウェアの仕様上の制約を受けないで自由にファームウェアROMに書き込むことができる。このようなOS、UEFIアプリケーション、およびOSアプリケーションが作成したデータを本明細書においてユーザ・バリアブルズ(UV:User Variables)ということにする。
ファームウェアROMは、システム・ファームウェアを格納するコード領域と変数を記録する変数領域を含む。いずれのプログラムであっても、バリアブル・サービスを利用して変数領域にデータを書き込むためには、UEFI規格が定義する関数であるSetVariable()を呼び出してパラメータを設定する必要がある。UEFI規格では後述の認証サービスなどを除き変数領域の利用に制限を設けていないため、UEFIネイティブ・モードで動作するOSおよびOSアプリケーションは、バリアブル・サービスを利用して変数領域に自由にUVを書き込むことができる。その結果、変数領域にはUEFIファームウェアが書き込んだCV、GVと、UEFIアプリケーション、OS、OSアプリケーションが書き込んだUV、GVが記録される。
システム・ファームウェアの動作環境がレガシーBIOSからUEFIファームウェアに完全に移行して変数領域がOSおよびOSアプリケーションに解放されたことに伴って、最近、ブートに支障がでる場合があることがわかってきた。UVを書き込むOSやOSアプリケーションが、SetVariable()に誤ってCVやGVの変数の名称(VariableName)や識別子(VendorGuid)を設定すると、CVやGVが書き換えられてしまうことがある。
また、UEFIファームウェアが誤ってCVやGVを書き込んだり更新したりすることもある。さらに、マルウェアによっても意図的にCVやGVが書き換えられたり消去されたりしてしまう危険性がある。CVはプリブートでハードウェアを構成するために不可欠なデータであり、さらにGVもプリブートに関連するデータを含むためそれらが誤って書き換えられるとシステムをブートできなくなりユーザによる復旧作業が困難になる。
UEFI規格では、SetVariable()に設定するパラメータをハッシュして書き込み保護をする認証サービス(Variable Authentication)を提供する。認証サービスを利用すればOSまたはOSアプリケーションによるCVの上書きを防ぐことはできる。しかし、OSまたはUEFIアプリケーションが変数領域にアクセスしているときに電源の瞬断などによって電気的なノイズが発生すると、CVやGVが毀損する可能性がある。
またUEFI規格では、OSやOSアプリケーションがGVを書き換えることを許容するため、認証サービスではGVを保護することはできない。GVは、Boot####、BootOrder、Driver####、DriverOrder、Key####などの名称の起動ディスクの種類や優先順位などに関するブート関連データや、Conin、Conoutといった入出力コンソールまでのパスに関するデータを含みUEFI規格で定義している。GVのブート関連データがOSやOSアプリケーションで誤って書き換えられたり、電源ノイズで改変されたりするとブートできなくなることも予想される。
UEFIファームウェアを格納するファームウェアROMは、システムの基板に装着されて容易に取り外しできないようになっている。またファームウェアROMは、OSやOSアプリケ−ションにより書き換えができないように、ハードウェアでライト・ロックが施されている。そして、システムは電源が起動した直後だけライト・ロックを解除して、ファームウェアROMを最初に実行するようにして外付けのデバイスからの起動を防止し不正なプログラムによる起動を防止している。したがって、特許文献1のように電源の起動直後にファームウェアROM以外のデバイスが格納するコードを実行して改変されたCV、GVを修復することはできない。
また、ファームウェアROMは、CVやGVのデフォルト値を保有しているため、起動直後にF1キー、F3キーなどのファンクション・キーを押下して、セット・アップ画面を表示させることができれば、それらを初期化することができる。しかし、セット・アップ画面を表示できる段階までプリブートが進むためには、UEFIファームウェアが多くの変数を参照する必要があるため、変数が改変されている場合にはセット・アップ画面を表示できないことが多い。さらに、変数を初期化してしまうと、システムの状態が変化するため、できるだけシステムへの影響を少なくして修復できれば都合がよい。
本発明は、システム・ファームウェアに関する上述の諸問題を解決することを目的とする。そこで本発明の目的は、電源の起動時に最初に実行するシステム・ファームウェアが参照する変数セットを修復する方法を提供することにある。さらに本発明の目的は、コンピュータをブートの失敗から復旧する方法を提供することにある。さらに、本発明の目的は、ブートが失敗したときに直近の動作環境に復旧する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することにある。
本発明の一の態様は、電源起動後に最初に実行されるシステム・ファームウェアが参照する変数セットをコンピュータが修復する方法を提供する。システム・ファームウェアの参照領域に変数セットを書き込む。コンピュータが正常にブートしたときの変数セットを所定の領域に退避する。つぎに、コンピュータのブート中に、参照領域の変数セットが改変されたことを検出する。つぎに、検出に応答して退避した変数セットで参照領域の変数セットを置換する。したがって、変数セットをシステム・ファームウェアが誤って改変した場合、システム・ファームウェア以外のプログラムが改変した場合、または電源ノイズにより改変された場合のいずれでも正常にブートしたときの状態に戻すことができる。OSやOSアプリケーションが書き込んだ変数セットも含めて参照領域のすべての変数セットを正常な変数セットで置換すれば、改変前の動作環境からの変化が少なくなるように修復することができる。
システム・ファームウェアはUEFIファームウェアとすることができる。改変の検出は、オペレーティング・システムのロードを開始する前にブートが停止したことで検出することができる。セット・アップ画面を表示できる状態までブートが進行するためには、システム・ファームウェアが多くの変数セットを参照するため、変数セットが改変されているときはその段階までブート処理を進めることができない可能性が高いが、本発明では改変の検出を、システム・ファームウェアが提供するセット・アップ画面を表示できる状態までブートが進行する前に実行することができる。
変数セットが改変されたことの検出は、前回のブートの開始後に検出フラグを設定し、オペレーティング・システムのロードを開始する直前に検出フラグを解除し、今回のブートで検出フラグを確認することで行うことができる。このとき検出フラグの確認を、システム・ファームウェアの検出フラグを確認するために必要なデバイスの初期化が終了した直後に実行することができる。また検出フラグの確認を、ブートを開始したシステム・ファームウェアが参照領域に書き込まれた変数セットを参照する前に実行することができる。さらに今回のブートを開始してから検出フラグを確認するまで所定の値でデバイスを初期化し、検出フラグを確認してから変数セットを参照して再度初期化することができる。その結果、変数セットが改変された状態でブートを開始したときに、検出フラグの確認ができないような事態を防ぐことができる。
今回のブートで、検出フラグを確認するステップの直後に検出フラグを設定することができる。その結果、今回のブートで変数セットが改変されても次回のブートで検出フラグを確認して修復することができる。検出フラグの解除は、オペレーティング・システムのロードを開始する直前に実行することで、システム・ファームウェアによるブート処理が終了したときだけ検出フラグを解除できるため、次回のブートでシステムは検出フラグが解除されているときに、変数セットが改変されていないと判断することができる。
正常にブートしたときの変数セットの退避は、システム・ファームウェアのセット・アップ画面を通じて行うことができる。また変数セットの退避は、各ブートにおいてオペレーティング・システムのロードを開始する直前に実行することもできる。この場合は、ブートが成功してから変数セットを退避するまでの間に、システム・ファームウェア以外のプログラムが変数セットを改変する機会を完全になくすことができる。
参照領域を、システム・ファームウェアを格納するファームウェアROMに設定し、置換する処理をする修復コードと退避した変数セットをファームウェアROMとは異なる不揮発性メモリに格納することができる。修復コードのダイジェストを計算し、ダイジェストをコンピュータが保有する暗号鍵で暗号化し、置換する際にダイジェストを使って修復コードが改変されていないことを検証することができる。退避する際に、退避する変数セットのダイジェストを計算し、ダイジェストをコンピュータが保有する暗号鍵で暗号化し、置換する際にダイジェストを使って変数セットがコンピュータから抽出されたことを検証することができる。
本発明により、電源の起動時に最初に実行するシステム・ファームウェアが参照する変数セットを修復する方法を提供することができた。さらに本発明により、コンピュータをブートの失敗から復旧する方法を提供することができた。さらに、本発明により、ブートが失敗したときに直近の動作環境に復旧する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することができた。
PC10の主要なハードウェアの構成を説明するための概略の機能ブロック図である。 ファームウェアROM100のデータ構造の一例を説明するための図である。 PC10が実装するソフトウェアの実行状態における階層構造を説明するための図である。 USBメモリ・キー50またはNVRAM27のデータ構造を説明するための図である。 USBメモリ・キー50またはNVRAM27に変数セットを格納する手順を説明するためのフローチャートである。 USBメモリ・キー50を利用して変数セットを修復する手順を説明するためのフローチャートである。 NVRAM27を利用して変数セットを修復する手順を説明するためのフローチャートである。
[ハードウェアの概略構成]
図1は、ノートブック型またはデスクトップ型のパーソナル・コンピュータ(PC)10の主要なハードウェアの構成を示す機能ブロック図である。多くのハードウェアの構成は周知であるため、ここでは本発明の理解に必要な範囲で説明する。チップセット13はさまざまな規格のインターフェース機能を備えており、CPU11、システム・メモリ15、GPU17、HDD21、USBコネクタ23、有線または無線のLANに接続するためのネットワーク・モジュール25、不揮発性メモリ(NVRAM)27およびキーボード29などが接続されている。GPU17にはLCD19が接続されている。チップセット13にはさらに、SPI(Serial Peripheral Interface)コントローラにファームウェアROM100が接続されている。
チップセット13は後に説明する変数修復コード150fのダイジェストや変数セット205のダイジェストを暗号化する暗号鍵155を格納する。暗号鍵155は、たとえば、インテル(登録商標)ME・プラット・フォーム・キーや、UEFIファームウェア150(図2)とPC10を関連付ける識別情報のような、PC10を他のコンピュータから区別することができる固有のデータとすることが望ましい。
HDD21は起動ディスクで、PC10の、UEFI規格に対応するOSのブート・イメージを格納する。HDD21は、複数のパーティションにそれぞれUEFI非対応のOSも含めて異なるブート・イメージを格納するようにしてもよい。HDD21のブート・セクタは、OSのブート・イメージをロードするためのOSローダーを格納する。USBコネクタ23には、変数セットの修復に利用するUSBメモリ・キー50を装着することができる。PC10は、USBコネクタ23にOSのブート・イメージを格納したUSBメモリ・キーを装着して、当該ブート・イメージをロードすることはできるが、システム・ファームウェアを格納して電源の起動直後から実行することはできないようにしている。
[ファームウェアROMのデータ構造]
図2は、ファームウェアROM100のデータ構造を説明するための図で、図3はシステム・メモリ15にロードされて実行状態にあるソフトウェアの階層構造を説明するための図である。ファームウェアROM100は、不揮発性で記憶内容の電気的な書き替えが可能なフラッシュ・メモリで、一例としてコード領域101、デフォルト領域103、および変数領域105の3ブロックに区分している。
本実施の形態では、コード領域101およびデフォルト領域103には、チップセット13のSPIコントローラでライト・ロックが可能な記録領域を割り当てている。ライト・ロックが実行された記録領域に対しては、チップセット13がリセットされるまで書き込みができない。ただし、変数領域105はUEFI規格でOS167またはOSアプリケーション169(図3)による書き換えを保証しているGVを記録するためにライト・ロックはできない。UEFIファームウェア150は、チップセット13がリセットされたときに実行が可能な状態になり、OS167にCPU11の制御権を渡す前にライト・ロックをする。
本発明は、変数領域105を、CVだけを記憶する領域と、GV、UVを記憶する領域に分割して、前者だけをライト・ロックするようにしてもよい。ライト・ロックをすれば、OS167およびOSアプリケーション169による改変を防止することはできるが、UEFIファームウェア150自体による誤った改変および電源ノイズによる改変の可能性は依然として残る。
コード領域101はUEFIファームウェア150、検出フラグ153およびUEFIアプリケーション165を格納し、デフォルト領域103はGVとCVの初期値181を格納する。なお、検出フラグ153は、チップセット13のCMOS領域のような事前に変数セット183を参照しないでアクセスが可能な保管場所に格納することもできる。変数領域105にはUEFIファームウェア150、UEFIアプリケーション165、OS167またはOSアプリケーション169が実行中にCV、GV、UVのいずれかの変数セット183を記録する。デフォルト領域103が格納する変数セットの初期値181は、PC10の出荷前またはUEFIファームウェア150の更新時に書き込まれる。
UEFIファームウェア150は、システムの動作環境の変化に応じてCVとGVを更新する。UEFI規格では、GVをUEFIアプリケーション165、OS167、OSアプリケーション169に参照または更新できるように公開することを規定している。したがって、変数領域105が記録するGVおよびCVは当初は初期値であるが、PC10がブートを繰り返す間に書き換えられたり追加されたりする。CVがUEFIファームウェア150によって誤って書き換えられたり、電源のノイズで書き換えられたりすると、システムは次回のプリブートを正常に行うことができなくなる可能性がある。また、GVのブート関連データがOS167やOSアプリケーション169で誤って書き換えられたときも同様にプリブートを行うことができなくなる可能性がある。
UEFIファームウェア150は、初期化コード150a、ランタイム・サービス150b、ブート・マネージャ150c、セット・アップ・コード150d、変数修復コード150e、150f、およびレガシーBIOS互換サービス150gを含む。UEFIファームウェア150は署名データ・ベースに、UEFIファームウェアの製造者が発行した公開鍵を保持しており、完全性を検証した後でないと更新できないようになっている。
また、システムは電源の起動(コールド・ブート)でリセットされたときにCPU11に、ファームウェアROM100の初期化コード150aを実行するリセット・ベクタを設定する。初期化コード150aは、PC10がコールド・ブートをする際に、システム・メモリ15にUEFIファームウェア150をロードして実行を開始するために必要なCPU11、システム・メモリ15およびチップセット13の主要なコントローラなどの基本的なデバイスの検出、検査および初期化を必要な範囲で行う。
初期化コード150aはまた、CPU11がリセットしてから、UEFI_OSローダー163に制御が移行するまでの期間にチップセット13の残りのコントローラや周辺デバイスなどの所定のデバイスを初期化して使用できる状態にする。初期化コード150aは、コード領域101が格納する他のコードの一貫性または完全性を検査して改竄を発見した場合はブートを停止する。
ランタイム・サービス150bは、変数セットに関連するバリアブル・サービス、時刻情報のサービス、および仮想メモリ・サービスなどを提供する。ブート・マネージャ150cは、ブート処理およびパスワード認証処理などを行う。ブート・マネージャ150cは、GVを参照してUEFIアプリケーション165、UEFIドライバ150hおよびUEFI_OSローダー163(レガシーOS173をブートするときはレガシーBIOS_OSローダー171)をシステム・メモリ15にロードする。ブート・マネージャ150cは、プリブートが終了してUEFIファームウェア150からOS167にCPU11の制御権が移る直前に、UEFI_OSローダー163をシステム・メモリ15に読み出して完全性の検証をする。
ブート・マネージャ150cは、UEFI_OSローダー163のコードから計算したハッシュ値と、署名データ・ベースから取得した公開鍵で復号して得た電子署名のハッシュ値を比較して、一致していれば完全性が維持されていると判断してUEFI_OSローダー163の実行を許可する。セット・アップ・コード150dは、プリブートの段階でキーボード29の所定のファンクション・キーが押下されたたときに、LCD19にセット・アップ画面を表示する。
ユーザはセット・アップ画面を通じて、起動ディスクの優先順位の決定、起動方法の設定、使用デバイスの設定、パスワードの設定およびパワー・マネジメントの設定などをすることができる。さらに、ユーザは、前回のブートが成功したときに、今回のブートにおいてセット・アップ画面を表示してUSBメモリ・キー50またはNVRAM27に変数領域105が記録する変数セット183を復旧用の変数として退避することができる。
セット・アップ・コード150dはセット・アップ画面を通じて入力された設定情報を変数領域105およびその他の記憶領域に書き込む。ユーザはセット・アップ・コード150dを通じて、変数領域105を初期値181に戻すことができる。ただし、プリブートの処理がセット・アップ画面を表示できる状態に到達するまでには、ほとんどのデバイスを初期化するために初期化コード150aが多くの変数セット183を参照する必要がある。したがって、変数セット183が改変されている場合は、セット・アップ画面を表示できないことが多い。変数修復コード150e、150fは、図4、図5の手順で説明するように、USBメモリ・キー50またはNVRAM27に退避した変数セットで、変数領域105を置換するための処理をする。
一例において変数修復コード150fは実行に際し、後に説明するようにUSBメモリ・キー50またはNVRAM27に書き込まれる。変数修復コード150e、150fは、デバイスの初期化に必要なパラメータを規定の初期値として保有することで、変数セットを参照しないで修復処理ができるようにコーディングしている。したがって、変数修復コード150e、150fは、変数セット183の改変の影響を受けることはないようにしている。
レガシーBIOS互換サービス150gは、UEFI非対応のレガシーOS173に対するレガシーBIOS互換のインターフェースを提供する。レガシーOS173が、レガシーBIOS互換のインターフェースを利用するときは、INT**の割り込みルーチンを呼び出すが、そこにはバリアブル・サービスに関する割り込みルーチンを含まないため、レガシーOS173はバリアブル・サービスを利用することはできない。したがって、レガシーOS173は、変数領域105にUVを書き込むことはできない。
[USBメモリ・キー]
図4は、USBメモリ・キー50またはNVRAM27のデータ構造を説明するための図である。両者を代表してUSBメモリ・キー50には、変数修復コード150fが転送された状態の変数修復コード201、変数修復コード150fのダイジェストを暗号鍵155で暗号化した暗号化ダイジェスト203、変数領域105に記録されていた変数セット183が転送された状態の変数セット205、変数セット205のダイジェストを暗号鍵155で暗号化した暗号化ダイジェスト207が格納される。
以下においてはファームウェアROM100に格納された状態とUSBメモリ・キー50またはNVRAM27に格納された状態を区別する必要がある場合に、後者の変数修復コードおよび変数セットをそれぞれ参照番号201、205で示すことにする。さらにUSBメモリ・キー50は、変数セット183の修復の際のユーザ認証に使用する修復用パスワード209を格納する。
[変数修復の第1の手順]
図5、図6は、USBメモリ・キー50を使用してUEFIファームウェア150が改変された変数セット183を修復する手順を説明するためのフローチャートである。図5は、USBメモリ・キー50に図4に示したデータを格納する手順を示している。図6は、USBメモリ・キー50が装着されたPC10が変数領域105に記憶する変数セット183を修復する手順を示している。図5の手順は、NVRAM27にデータを格納する場合にも適用できる。
図5のブロック301でPC10にUSBメモリ・キー50を装着し、ブロック303で電源を起動してコールド・ブートを開始する。ユーザは前回のブートが成功してOS167およびOSアプリケーション169が安定して動作していることから、ブートに関連する変数セットは正常であることを確認している。ブロック305でユーザは、電源の投入直後に所定のファンクション・キーを押下してセット・アップ・コード150dを呼び出し、LCD19にセット・アップ画面を表示する。セット・アップ画面には、USBメモリ・キー50にデータを格納するためのメニューが表示される。セット・アップ画面が表示される状態では、ほとんどのデバイスの初期化が終了してUEFIファームウェア150がそれらの利用が可能な状態になっている。
ブロック307で、ユーザが変数セット183の退避メニューを選択すると、変数修復コード150eは、変数領域105が記憶する変数セット183のハッシュ値を計算してダイジェストを作成する。さらに変数修復コード150eは、暗号鍵155を使ってダイジェストを暗号化する。ブロック309で変数修復コード150eは、変数セット183とそのダイジェストをそれぞれ変数セット205、暗号化ダイジェスト207としてUSBメモリ50に格納する。
ファームウェアROM100に十分なスペースがないときは、OS167の動作環境下でWebサイトから変数修復コード150fをダウンロードして、USBメモリ・キー50に格納することもできる。このときダウンロードした変数修復コード150fには、製造者の秘密鍵で暗号化されたダイジェストが電子署名として付属している。電子署名を復号する公開鍵はUEFIファームウェア150に埋め込まれている。
ブロック311でユーザが変数修復コード150fの格納メニューを選択すると、変数修復コード150eは、変数修復コード150fのハッシュ値を計算して作成したダイジェストを、暗号鍵155を使って暗号化する。ブロック313で変数修復コード150eは、変数修復コード150fと暗号化されたダイジェストを変数修復コード201、暗号化ダイジェスト203としてUSBメモリ・キー50に格納する。以後、ユーザはブートが失敗するまでUSBメモリ・キー50を保管するが、変数セット183はPC10がブートを繰り返すたびに変更される可能性があるため、ブロック307、309は適宜実施することが望ましい。ブロック315でユーザがパスワードの登録メニューを選択して、キーボード29からUSBメモリ・キー50に修復用パスワード315を登録する。
変数修復コード150eはコールド・ブートの際に、変数セット183のUSBメモリ・キー50への退避を促すプロンプトを経過時間やブート回数などで計算した適当なタイミングで表示することができる。変数領域105を、CVとプリブートに関連するGVだけを記憶する領域と、UVとその他のGVを記録する領域に分けておく場合は、USBメモリ・キー50にはCVとプリブートに関連するGVだけを保存しておくこともできる。このときプリブートに関連するGVは、Boot####、BootOrder、Driver####、DriverOrder、およびKey####とし、それらに対するパラメータは、ロード・オプション(Load options)とすることができる。
つぎに図6を参照して、USBメモリ・キー50を利用してPC10が、改変された変数セットを修復する手順を説明する。ブロック403で電源を起動してコールド・ブートを開始する。ブロック403への移行には、前回のブートが成功して安定した動作をしていたブロック421からのパス、改変された変数セット183が修復されたブロック461からのパス、およびプリブートが失敗したブロック413からのパスを含む。以下の手順で明らかになるように、前回のプリブートが失敗したときは、今回のブートでユーザがUSBメモリ・キー50を装着して電源を起動することを想定している。
リセット信号を受け取ったCPU11は、電圧が安定すると内部のキャッシュおよびレジスタを初期化する。チップセット13はCPU11のあらかじめ定められたリセット・ベクタを初期化コード150aのアドレスに切り換える。CPU11はリセット・ベクタ)にアクセスして初期化コード150aのインストラクションをフェッチする。
ブロック405でCPU11はコード領域101に格納されたUEFIファームウェア150をキャッシュに読み出して、システム・メモリ15およびチップセット13などの修復に関連するUEFIファームウェア150を実行するのに必要な基本的なデバイスの初期化をする。つづいて、初期化コード150aは、システム・メモリ15が利用できるようになると、UEFIファームウェア150をシステム・メモリ15にロードする。
ブロック407で変数修復コード150eが検出フラグ153を確認する。検出フラグ153の設定と解除の論理は正論理と負論理のいずれでもよい。ここまでの動作において実行する初期化コード150aは、変数セット183に依存しないようなコーディングすることができる。たとえば、変数セットを参照しないで一旦既定の値でデバイスを初期化しておき、検出フラグを確認した後で変数セットを参照して再度、初期化を行うようにコーディングすることができる。したがって、前回のブートで変数セット183が改変されていても、今回のブートでは確実にブロック407まで進行することができる。
検出フラグ153が設定されているときはブロック450に移行して変数セット183の修復処理をする。検出フラグ153が設定されていないときはブロック409に移行する。ブロック409では、ブロック407の手順の直後に変数修復コード150eが検出フラグ153を設定する。この手順も今回のプリブートの失敗を次回のプリブートで変数修復コード150eが検出できるようにするために、変数修復コード150eが変数セット183に依存しないようにコーディングしておくことが望ましい。ブロック411で初期化コード150aが残りのデバイスを初期化したり、ブート・マネージャ150cがプリブートに必要な処理をしたりする。ブロック411が終了するとセット・アップ・コード150dが実行できる状態になる。ブロック411においては、UEFIファームウェア150が多くの変数セット183を参照する。
したがって、変数セット183が正常な状態から改変されていれば、ブロック411の手順を終了することができないためプリブートは停止する。他方でブロック407、409の手順は、ブロック411の前に行うことで前回のブートで変数セット183の改変があってもその影響を受けないで実行することができる。ブロック413では、変数セット183が改変されているとブロック411の手順の途中でプリブートが停止することを示している。ユーザはLCD19の画面を注視することで、OS167のロードが始まらないときにプリブートが停止したと判断することができる。
プリブートが停止したと判断したユーザは、ブロック431でUSBメモリ・キー50を装着してブロック403でPC10を再起動する。ブロック413からブロック431を経由してブロック403に移行するパスは、ユーザの操作に依存するため、点線で示している。ブロック421からブロック403までのパスもユーザの操作に依存するため点線で示している。
ブロック413でプリブートが正常に終了したときは、ブロック415に移行して変数修復コード150eが検出フラグ153を解除する。検出フラグ153が解除できたことは、プリブートが成功したことを意味しており、変数セット183が改変されてないことに相当する。ブロック417でブート・マネージャ150cが、UEFI_OSローダー163の完全性を検証すると、CPU11の制御権がOS167に移り、OS167およびOSアプリケーション169のロードが開始される。
ブロック415の手順は、プリブートが成功してOS167にCPU11の制御権が移る直前の段階で行われるため、プリブートが成功する限り必ず実行される。ブロック419でブートが完了してOS167およびOSアプリケーション169が実行される。OS167またはOSアプリケーション169は、その後の動作でUEFIファームウェア150が書き込んだプリブートに関連する変数セットを誤って書き換える場合がある。また、マルウェアが意図的に書き換える場合もある。本発明ではこれらの問題を、次回のブートで治癒することができる。ブロック421で今回のブートが完了して電源が停止する。
ブロック431を経由したブロック403以降の手順では、検出フラグ153が解除されていないため、ブロック407からブロック451に移行する。ブロック450で変数修復コード150eは、USBメモリ・キー50が装着されていないときにビープ音でユーザにUSBメモリ・キー50を装着するように促すことができる。
ブロック451で変数修復コード150eは、暗号鍵155で復号した暗号化ダイジェスト203と、変数修復コード201から計算したダイジェストを比較して同一性を検証する。同一性があるときは、変数修復コード150fは、ファームウェアROM100に格納されていた状態から改変されていないことに相当する。変数修復コード201をWebサイトからダウンロードしたときは、暗号化ダイジェスト203をUEFIファームウェア150が保持する公開鍵で復号して同一性を検証する。変数修復コード150fと変数修復コード201の同一性を検証することで、不正な変数修復コードを使って第3者がPC10にアクセスすることを防ぐことができる。ブロック450、451の手順も変数修復コード150eが変数セット183に依存しないで実行できるようにコーディングしておくことが望ましい。
変数修復コード201の検証が成功するとブロック453で、CPU11はUSBメモリ・キー50が格納する変数修復コード201を実行する。変数修復コード201は、暗号鍵155を使って変数セットの暗号化ダイジェスト207を復号し、変数セット205から計算したダイジェストと比較する。両者が一致した場合は、変数セット205が暗号鍵155に関連付けられたPC10から抽出したもので、かつ改変されていないことになる。
したがって、不正な変数セットを変数領域105に書き込むことはできず、かつ、異なるPC10の変数セットで置換することもできない。変数セット205とPC10のバインディングの検証が成功すると、ブロック455で変数修復コード201は修復用パスワード209でユーザ認証をする。したがって、PC10から抽出した正規の変数セット205であってもUSBメモリ・キー50を使って他人が変数領域105に書き込むことはできない。
変数修復コード201は、図7のブロック503で説明するように各プリブートの終了直前にNVRAM27に格納することもできる。ブロック457では、変数修復コード201がユーザに、任意のタイミングでセット・アップ画面を通じてUSBメモリ・キー50に格納した変数セット205と、前回のプリブートの終了直前に退避して置いた変数セット205のいずれを使用して修復するかを選択させるためのプロンプトを表示することができる。ブロック459で変数修復コード201は、変数領域105に変数セット183をクリアしてから変数セット205を書き込む。
ブロック461で変数修復コード201は、検出フラグ153を解除してブロック403でUSBメモリ・キー50を取り外すようにユーザに促したあとに電源を再起動する。これまでUSBメモリ・キー50を利用して変数セット183を修復する例を説明したが、NVRAM27を利用した修復もほぼ同じ手順で行うことができる。この場合は、ブロック413からブロック403にはブロック431を経由しないで自動的に戻る。また、ブロック450の手順は不要になる。
[変数修復の第2の手順]
つぎに、図7のフローチャートを参照して、NVRAM27を使ってUEFIファームウェア150が改変された変数セット183を修復する手順を説明する。図7において図6の手順と同一の手順には、同一の参照番号を付して説明を省略し、特徴的なブロック501、503、551の手順だけを説明する。図6のブロック450、457の手順は図7から削除している。ブロック501では、修復に必要な変数セット205と修復コード201をNVRAM27に格納している。
ブロック503では、毎回、プリブートが成功して検出フラグ153を解除する直前に変数修復コード150eが変数セット183をNVRAM27に退避する。その結果、NVRAM27には、USBメモリ・キー50に格納する場合とは異なり、OS167およびOSアプリケーション169による改変の可能性がない最新の変数セットを格納することができる。
ブロック551では、NVRAM27が格納する変数修復コード201がブロック451と同様の手順で検証される。それ以降は、NVRAM27が格納する変数修復コード201が図6の手順と同様に修復処理をする。図5〜図7に示したフローチャートの手順はすべてが必須の手順ではなく、また、手順の前後を限定するものでもない。本発明に必須の手順および手順の前後関係は特許請求の範囲の記載として特定する。
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
10 PC
27 不揮発性メモリ(NVRAM)
100 ファームウェアROM
101 コード領域
103 デフォルト領域
105 変数領域
183、205 変数セット
150 UEFIファームウェア

Claims (18)

  1. 電源起動後に最初に実行されるシステム・ファームウェアが参照する変数セットをコンピュータが修復する方法であって、
    前記システム・ファームウェアの参照領域に変数セットを書き込むステップと、
    前記コンピュータが正常にブートしたときに前記変数セットを所定の領域に退避するステップと、
    前記コンピュータのブート中に前記参照領域の変数セットが改変されたことを前記コンピュータが検出するステップと、
    前記検出に応答して前記コンピュータが前記退避した変数セットで前記参照領域の変数セットを置換するステップと
    を有する方法。
  2. 前記検出するステップが、前記オペレーティング・システムのロードを開始する前に前記ブートが停止したことを検出するステップを含む請求項1に記載の方法。
  3. 前記検出するステップを、前記システム・ファームウェアが提供するセット・アップ画面を表示できる状態までブートが進行する前に実行する請求項1に記載の方法。
  4. 前記検出するステップが、
    前回のブートの開始後に検出フラグを設定するステップと、
    前記前回のブートで前記オペレーティング・システムのロードを開始する直前に前記検出フラグを解除するステップと、
    今回のブートで前記検出フラグを確認するステップと
    を有する請求項1に記載の方法。
  5. 前記確認するステップを、前記システム・ファームウェアが前記検出フラグを確認するために必要なデバイスの初期化が終了した直後に実行する請求項4に記載の方法。
  6. 前記確認するステップを、前記システム・ファームウェアが前記参照領域に書き込んだ変数セットを参照する前に実行する請求項4に記載の方法。
  7. 前記今回のブートを開始してから前記検出フラグを確認するまで所定の値でデバイスを初期化し、前記検出フラグを確認してから前記変数セットを参照して再度前記デバイスを初期化するステップを有する請求項4に記載の方法。
  8. 前記今回のブートが、
    前記確認するステップの直後に前記検出フラグを設定するステップを有する請求項4に記載の方法。
  9. 前記退避するステップを、前記システム・ファームウェアのセット・アップ画面を通じて実行する請求項1に記載の方法。
  10. 前記退避するステップを、各ブートにおいて前記オペレーティング・システムのロードを開始する直前に実行する請求項1に記載のコンピュータ・プログラム。
  11. 前記退避するステップが、前記参照領域に書き込まれたすべての変数セットを退避する請求項1に記載の方法。
  12. 前記参照領域が前記システム・ファームウェアを格納するファームウェアROMに設定され、前記置換するステップを実行する修復コードと前記退避した変数セットが前記ファームウェアROMとは異なる不揮発性メモリに格納されている請求項1に記載の方法。
  13. 前記修復コードのダイジェストを計算するステップと、
    前記ダイジェストを前記コンピュータが保有する暗号鍵で暗号化するステップとを有し、
    前記置換するステップが前記ダイジェストを使って前記修復コードの同一性を検証するステップを含む請求項12に記載の方法。
  14. 前記退避するステップが、
    前記退避する変数セットのダイジェストを計算するステップと、
    前記ダイジェストを前記コンピュータが保有する暗号鍵で暗号化するステップとを含み、
    前記置換するステップが前記ダイジェストを使って前記変数セットが前記コンピュータから抽出されたことを検証するステップを含む請求項1に記載の方法。
  15. 前記システム・ファームウェアがUEFIファームウェアである請求項1に記載の方法。
  16. コンピュータがブートの失敗から復旧する方法であって、
    電源起動後に最初に実行されるシステム・ファームウェアのブートが成功したときに参照領域に書き込まれた変数セットを所定の領域に退避するステップと、
    前記コンピュータのブートを開始するステップと、
    オペレーティング・システムのロードを開始する前に前回のブートが停止したことを前記コンピュータが検出するステップと、
    前記検出に応答して前記コンピュータが前記退避した変数セットで前記参照領域の変数セットを置換するステップと
    を有する方法。
  17. UEFIファームウェアがファームウェアROMに書き込まれた変数セットを修復するためにコンピュータに、
    前記変数セットを所定の領域に退避するステップと、
    前記コンピュータのブートを開始するステップと、
    前記ブートがオペレーティング・システムのロードまで到達しなかったことを検出するステップと、
    前記検出に応答して前記退避した変数セットで前記ファームウェアROMの変数セットを置換するステップと
    を有する処理を実行させるためのコンピュータ・プログラム。
  18. 電源起動後に最初に実行されるシステム・ファームウェアを実装するコンピュータであって、
    プロセッサと、
    システム・メモリと、
    システム・ファームウェアと該システム・ファームウェアが参照する変数セットを格納する不揮発性メモリとを有し、
    前記システム・ファームウェアが前記コンピュータに、前記コンピュータのブートがオペレーティング・システムのロードまで到達しなかったことに応じてあらかじめ退避しておいた変数セットで前記不揮発性メモリの変数セットを置換する機能を前記コンピュータに実現させるコンピュータ。
JP2014106076A 2014-05-22 2014-05-22 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ Active JP6054908B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014106076A JP6054908B2 (ja) 2014-05-22 2014-05-22 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ
US14/717,820 US9703635B2 (en) 2014-05-22 2015-05-20 Method, computer program, and computer for restoring set of variables

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014106076A JP6054908B2 (ja) 2014-05-22 2014-05-22 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ

Publications (2)

Publication Number Publication Date
JP2015222474A true JP2015222474A (ja) 2015-12-10
JP6054908B2 JP6054908B2 (ja) 2016-12-27

Family

ID=54785449

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014106076A Active JP6054908B2 (ja) 2014-05-22 2014-05-22 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ

Country Status (2)

Country Link
US (1) US9703635B2 (ja)
JP (1) JP6054908B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6204555B1 (ja) * 2016-09-21 2017-09-27 レノボ・シンガポール・プライベート・リミテッド 不揮発性メモリに格納した変数を保護する方法、システム・ファームウェアおよびコンピュータ
CN112306754A (zh) * 2020-11-05 2021-02-02 中国电子信息产业集团有限公司 基于可信的uefi固件恢复方法、装置、介质和设备
JP7011697B1 (ja) 2020-10-09 2022-01-27 レノボ・シンガポール・プライベート・リミテッド 情報処理装置および情報処理方法

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377063B (zh) * 2012-04-28 2016-06-22 国际商业机器公司 从遗留操作系统环境恢复到uefi预启动环境的方法和系统
US9569297B2 (en) * 2014-07-16 2017-02-14 Dell Products, Lp Seamless method for booting from a degraded software raid volume on a UEFI system
US9563439B2 (en) * 2015-04-27 2017-02-07 Dell Products, L.P. Caching unified extensible firmware interface (UEFI) and/or other firmware instructions in a non-volatile memory of an information handling system (IHS)
TWI562071B (en) * 2015-11-04 2016-12-11 Mitac Computing Technology Corp Method for startup inspection and computer system using the same
EP3485416B1 (en) * 2016-10-21 2020-11-25 Hewlett-Packard Development Company, L.P. Bios security
US10521216B2 (en) 2017-01-17 2019-12-31 Oracle International Corporation Unified extensible firmware interface updates
US11036408B2 (en) 2017-03-26 2021-06-15 Oracle International Corporation Rule-based modifications in a data storage appliance monitor
US10540501B2 (en) * 2017-06-02 2020-01-21 Dell Products, L.P. Recovering an information handling system from a secure boot authentication failure
US10831897B2 (en) * 2017-07-14 2020-11-10 Dell Products, L.P. Selective enforcement of secure boot database entries in an information handling system
CN111095213B (zh) * 2018-08-23 2024-04-30 深圳市汇顶科技股份有限公司 嵌入式程序的安全引导方法、装置、设备及存储介质
JP6775651B1 (ja) * 2019-08-07 2020-10-28 レノボ・シンガポール・プライベート・リミテッド 情報処理装置、制御方法、及びプログラム
US11301312B1 (en) * 2021-01-06 2022-04-12 Vmware, Inc. Error logging during system boot and shutdown
US11599436B2 (en) * 2021-03-02 2023-03-07 Dell Products L.P. Systems and methods for repairing corruption to BIOS boot critical memory variables

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000235483A (ja) * 1999-02-16 2000-08-29 Nec Gumma Ltd 情報処理装置
JP2002014818A (ja) * 2000-06-28 2002-01-18 Mitsubishi Electric Corp 情報処理装置およびbiosの設定パラメータの保存方法
US20050039081A1 (en) * 2003-05-20 2005-02-17 Wei-Han Chang Method of backing up BIOS settings
JP2009015818A (ja) * 2007-04-13 2009-01-22 Hewlett-Packard Development Co Lp 動的信頼管理
JP2013140536A (ja) * 2012-01-06 2013-07-18 Nec Corp 情報処理装置及び情報処理装置のシステム動作設定方法並びにコンピュータプログラム

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003345617A (ja) 2002-05-23 2003-12-05 Nec Corp 情報処理装置、情報処理方法、icカード、及びプログラム
US20090327741A1 (en) 2008-06-30 2009-12-31 Zimmer Vincent J System and method to secure boot uefi firmware and uefi-aware operating systems on a mobile internet device (mid)
US8712968B1 (en) * 2009-07-15 2014-04-29 Symantec Corporation Systems and methods for restoring images
JP5465738B2 (ja) 2012-01-30 2014-04-09 レノボ・シンガポール・プライベート・リミテッド システム・ファームウェアの更新方法およびコンピュータ
TWI526847B (zh) * 2012-09-28 2016-03-21 微盟電子(昆山)有限公司 計算機及其硬體參數設定方法
WO2014150478A1 (en) * 2013-03-15 2014-09-25 Insyde Software Corp. System and method for managing and diagnosing a computing device equipped with unified extensible firmware interface (uefi)-compliant firmware
TWI480802B (zh) * 2013-11-18 2015-04-11 Insyde Software Corp Platform system, universal extension firmware interface Basic input and output system Support for hardware configuration changes, recording media and computer program products
JP2015102889A (ja) * 2013-11-21 2015-06-04 レノボ・シンガポール・プライベート・リミテッド ファームウェアの更新方法、電子機器、コンピュータおよびコンピュータ・プログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000235483A (ja) * 1999-02-16 2000-08-29 Nec Gumma Ltd 情報処理装置
JP2002014818A (ja) * 2000-06-28 2002-01-18 Mitsubishi Electric Corp 情報処理装置およびbiosの設定パラメータの保存方法
US20050039081A1 (en) * 2003-05-20 2005-02-17 Wei-Han Chang Method of backing up BIOS settings
JP2009015818A (ja) * 2007-04-13 2009-01-22 Hewlett-Packard Development Co Lp 動的信頼管理
JP2013140536A (ja) * 2012-01-06 2013-07-18 Nec Corp 情報処理装置及び情報処理装置のシステム動作設定方法並びにコンピュータプログラム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6204555B1 (ja) * 2016-09-21 2017-09-27 レノボ・シンガポール・プライベート・リミテッド 不揮発性メモリに格納した変数を保護する方法、システム・ファームウェアおよびコンピュータ
JP7011697B1 (ja) 2020-10-09 2022-01-27 レノボ・シンガポール・プライベート・リミテッド 情報処理装置および情報処理方法
JP2022062877A (ja) * 2020-10-09 2022-04-21 レノボ・シンガポール・プライベート・リミテッド 情報処理装置および情報処理方法
CN112306754A (zh) * 2020-11-05 2021-02-02 中国电子信息产业集团有限公司 基于可信的uefi固件恢复方法、装置、介质和设备
CN112306754B (zh) * 2020-11-05 2024-05-24 中国电子信息产业集团有限公司 基于可信的uefi固件恢复方法、装置、介质和设备

Also Published As

Publication number Publication date
US20150378846A1 (en) 2015-12-31
JP6054908B2 (ja) 2016-12-27
US9703635B2 (en) 2017-07-11

Similar Documents

Publication Publication Date Title
JP6054908B2 (ja) 変数セットを修復する方法、コンピュータ・プログラムおよびコンピュータ
US11520894B2 (en) Verifying controller code
JP5889933B2 (ja) コンピュータの動作不良を防止する方法、コンピュータ・プログラムおよびコンピュータ
CN103718165B (zh) Bios闪存攻击保护和通知
JP4433401B2 (ja) 情報処理システム、プログラム、及び情報処理方法
JP5512610B2 (ja) 非ファームウェアエージェントからメモリへのアクセスを許可または阻止する方法、システム、および機械可読記憶媒体
US9785596B2 (en) Redundant system boot code in a secondary non-volatile memory
US20140250290A1 (en) Method for Software Anti-Rollback Recovery
JP5565040B2 (ja) 記憶装置、データ処理装置、登録方法、及びコンピュータプログラム
US8819330B1 (en) System and method for updating a locally stored recovery image
US8886955B2 (en) Systems and methods for BIOS processing
WO2014175861A1 (en) Recovering from compromised system boot code
US20050132177A1 (en) Detecting modifications made to code placed in memory by the POST BIOS
CN104572168A (zh) 一种bios自更新保护系统及方法
JP5689429B2 (ja) 認証装置、および、認証方法
TW201506788A (zh) 在配有適用統一可延伸韌體介面(uefi)之韌體之計算裝置中的安全啓動覆蓋技術
US10621330B2 (en) Allowing use of a test key for a BIOS installation
JP5465738B2 (ja) システム・ファームウェアの更新方法およびコンピュータ
CN114692160A (zh) 计算机安全可信启动的处理方法及装置
JP6204555B1 (ja) 不揮発性メモリに格納した変数を保護する方法、システム・ファームウェアおよびコンピュータ

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160429

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161108

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161129

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161201

R150 Certificate of patent or registration of utility model

Ref document number: 6054908

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250