(57)【要約】【課題】コンピュータのＳＭＭ特権を保護する。【解決手段】メイン・メモリのＳＭＲＡＭ領域にＳＭＭコードをロードし、一般領域にビデオＢＩＯＳとシステムＢＩＯＳをロードする。あらかじめビデオＢＩＯＳのハッシュ値を計算し、ＩＮＴ１０ｈのベクタ・アドレスを取得してＳＭＲＡＭに格納しておく。ＳＭＩがアサートされて認証コードが実行され、認証コードがＩＮＴ１０ｈ命令でビデオＢＩＯＳを呼び出す際には事前にハッシュ値を計算して正当性を検証し、さらに、ベクタ・テーブルをあらかじめ取得しておいたベクタ・アドレスで書き換えて、ＩＮＴ１０ｈ命令で正当なビデオＢＩＯＳが実行されるようにする。【選択図】図５
2011076134.tif 000002
【特許請求の範囲】
【請求項１】
システム管理モードで動作することが可能なプロセッサと、一般領域と前記システム管理モードで使用するＳＭＲＡＭ領域とが定義されたメイン・メモリを有するコンピュータに、
前記ＳＭＲＡＭ領域にＳＭＭプログラムをロードし、前記一般領域に第１のプログラムと第２のプログラムとベクタ・テーブルをロードするステップと、
前記ＳＭＭプログラムが前記第１のプログラムの基準ハッシュ値を計算して前記ＳＭＲＡＭ領域に記憶するステップと、
前記コンピュータがオペレーティング・システムの動作環境で動作したあとに前記ＳＭＭプログラムが前記第１のプログラムのハッシュ値を計算して前記基準ハッシュ値と比較するステップと、
前記計算したハッシュ値と前記基準ハッシュ値が一致した場合に前記ＳＭＭプログラムが前記第１のプログラムを呼び出すステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項２】
前記基準ハッシュ値を計算するステップを、前記コンピュータのブートが完了する前に行う請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記オペレーティング・システムが動作する前に前記ベクタ・テーブルから取得した前記第１のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスを前記ＳＭＭプログラムが前記ＳＭＲＡＭ領域に記憶するステップと、
前記第１のプログラムを呼び出すステップを実行する前に前記第１のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスを前記ＳＭＭプログラムが前記ＳＭＲＡＭ領域に記憶したベクタ・アドレスで書き換えるステップと
を有する請求項１または請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記第１のプログラムを呼び出すステップを実行したあとに、前記第１のプログラムを呼び出す割り込みタイプに対応する前記書き換えられたベクタ・アドレスを前記ベクタ・テーブルに戻すステップを有する請求項３に記載のコンピュータ・プログラム。
【請求項５】
前記第１のプログラムが前記システム管理モードにおいて前記第２のプログラムを呼び出す命令を実行したときに前記第２のプログラムが実質的な命令コードを実行しないで前記第１のプログラムに戻る命令コードを実行するように前記第２のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスおよび前記第１のプログラムに戻る命令コードまたはそれらのいずれか一方を前記ＳＭＭプログラムが書き換えるステップと、
前記書き換えるステップを実行したあとに前記第１のプログラムが前記システム管理モードにおいて前記第２のプログラムを呼び出すステップと
を有する請求項１から請求項４のいずれかに記載のコンピュータ・プログラム。
【請求項６】
前記第１のプログラムに戻る命令コードがＩＲＥＴ命令コードである請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記第２のプログラムを呼び出すステップのあとに書き換えられた前記第２のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスおよび前記第１のプログラムに戻る命令コードまたはそれらのいずれか一方を書き換える前の状態に戻すステップを有する請求項５または請求項６に記載のコンピュータ・プログラム。
【請求項８】
前記ＳＭＭプログラムがパスワード認証を行うプログラムであり、前記第１のプログラムがビデオ・チップを制御するビデオＢＩＯＳであり前記第２のプログラムがシステム情報を提供するシステムＢＩＯＳである請求項１から請求項７のいずれかに記載のコンピュータ・プログラム。
【請求項９】
前記基準ハッシュ値と比較するステップおよび前記第１のプログラムを呼び出すステップを、前記コンピュータがサスペンドからレジュームする間に行う請求項１から請求項８のいずれかに記載のコンピュータ・プログラム。
【請求項１０】
システム管理モードで動作することが可能なプロセッサと、
前記プロセッサをシステム管理モードで動作させるためにＳＭＩをアサートするチップ・セットと、
前記ＳＭＭプログラムがロードされるＳＭＲＡＭ領域と第１のプログラム、第２のプログラムおよびベクタ・テーブルがロードされる一般領域とが定義されたメイン・メモリとを有し、
前記ＳＭＭプログラムは前記コンピュータに、前記第１のプログラムの基準ハッシュ値を計算させ、前記コンピュータがオペレーティング・システムの動作環境で動作したあとで前記チップ・セットが前記ＳＭＩをアサートしている間に、前記第１のプログラムのハッシュ値を計算し、該計算したハッシュ値と前記基準ハッシュ値とを比較してから前記システム管理モードで前記第１のプログラムを呼び出す処理を実行させるコンピュータ。
【請求項１１】
前記ＳＭＭプログラムは前記コンピュータに、前記オペレーティング・システムが動作する前にベクタ・テーブルから取得した前記第１のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスを前記ＳＭＲＡＭ領域に記憶させ、前記第１のプログラムを呼び出す前に前記ＳＭＲＡＭ領域に記憶したベクタ・アドレスを使って前記第１のプログラムを呼び出したときに前記第１のプログラムが呼び出されるように前記ベクタ・テーブルを構成する処理を実行させる請求項１０に記載のコンピュータ。
【請求項１２】
前記ＳＭＭプログラムは前記コンピュータに、前記第１のプログラムが前記システム管理モードにおいて前記第２のプログラムを呼び出したときに前記第２のプログラムを実質的に実行しないで前記第１のプログラムに戻るように前記第２のプログラムのコードおよびベクタ・アドレスまたはいずれか一方を書き換える処理を実行させる請求項１０または請求項１１に記載のコンピュータ。
【請求項１３】
前記第１のプログラムが前記ＳＭＭプログラムからＩＮＴ１０ｈ命令で呼び出されるビデオＢＩＯＳで前記第２のプログラムが前記ビデオＢＩＯＳからＩＮＴ１５ｈ命令で呼び出されるシステムＢＩＯＳで、前記第２のプログラムのコードがＩＲＥＴ命令コードである請求項１２に記載のコンピュータ。
【請求項１４】
前記チップ・セットは前記コンピュータがサスペンド状態からレジュームする際に前記ＳＭＩをアサートする請求項１３に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムの動作モードであるシステム管理モードの特権レベルを保護する技術に関する。
【背景技術】
【０００２】
インテル（登録商標）では、同社のプロセッサとチップ・セットを使用してコンピュータを不正プログラムから保護するために、セキュリティ機能を強化するＴＸＴ（Intel Trusted Execution Technology）という保護メカニズムを提供している。ＴＸＴでは、同社のＸ８６シリーズのプロセッサにおいて、システム管理モード（ＳＭＭ）という動作モードを採用している。ＳＭＭは、コンピュータの電源、温度およびその他の制御のために、オペレーティング・システム（ＯＳ）から独立した動作環境を提供することを目的にしている。
【０００３】
ＯＳ動作環境におけるプロテクト・モードでは、カーネル・コードの実行を許可するリング０からユーザ・プログラムの実行を許可するリング３までの４つの特権レベルを提供する。これに対しＳＭＭは、システム管理割り込み（ＳＭＩ）がアサートされたときに専用の保護されたメモリ領域にロードされたコードが実行される動作モードでＯＳ動作環境におけるプロテクト・モードのリング０の特権レベルに類似する特権レベルを提供する。したがって、ＳＭＭの特権レベル（以下、ＳＭＭ特権という。）を不正プログラムが取得すると、コンピュータの枢要なコードが書き換えられてしまい、かつ、ＯＳはＳＭＭ特権をどのプログラムが利用しているのか認識できないのでシステムの安全上大きな脅威になる。近年、非特許文献１のような論文がＳＭＭの脆弱性を発表している。
【０００４】
特許文献１は、認証されていないＢＩＯＳイメージでフラッシュＢＩＯＳが書き換えられることを防止する技術を開示する。同文献の発明では書き換え前にＢＩＯＳイメージを認証するＳＭＩハンドラが、システム管理メモリ部分に格納される。ＢＩＯＳイメージのＳＭＩハンドラによってのみ知られたオフセットに秘密のチェック・サムを埋め込んでおくことで、ＳＭＩハンドラは、適切なＢＩＯＳイメージであることを確認する。特許文献２は、プログラムからの通知に基づいてＳＭＭに移行し、メモリの保護領域でセキュリティ処理を行うことで機密情報を扱う通信の秘匿性を確保する技術を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−７５８２８号公報
【特許文献２】特開２００８−５００６５５公報
【非特許文献】
【０００６】
【非特許文献１】Attacking Intel Trusted Execution Technology ( http://invisiblethingslab.com/itl/Resources.html )
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＯＳ動作環境におけるプロテクト・モードで実行されるプログラムは、ＳＭＩをアサートしてＳＭＭに移行することができる。しかし、ＳＭＩがアサートされたときにはメイン・メモリの一部に確保されたシステム管理ＲＡＭ（ＳＭＲＡＭ）という領域にロードされたＳＭＭコードが実行されるようにハードウエアが構成されているため、不正プログラムはＳＭＩをアサートできてもＳＭＭコードを書き換えることができない。また、ＳＭＭコードはＢＩＯＳ＿ＲＯＭにセキュアに格納されているため、ＳＭＭコードの正当性は一貫して保証される。よって、ＳＭＭでＳＭＲＡＭ領域にロードされたコードだけが実行される場合は、不正プログラムがＳＭＭ特権を支配することはない。
【０００８】
しかし、ＳＭＭではＳＭＲＡＭ領域にロードされたコードだけでなく、ハードウエアで保護されない一般領域にロードされたコードをＳＭＭコードが呼び出す場合もある。そして一般領域にロードされたコードはコンピュータがＯＳ動作環境におけるプロテクト・モードで動作している間に不正プログラムにより書き換えられる可能性がある。不正プログラムにより書き換えられた汚染コードもＳＭＭコードから呼び出されてＳＭＭで動作することがあるため、ＳＭＭ特権が不正プログラムにより支配されてしまう可能性がある。図６は、ＳＭＭ特権が不正プログラムで支配される様子を説明する図である。ここでは、ＳＭＭコードであるパスワードの認証コードがメイン・メモリのＳＭＲＡＭ領域にロードされ、ベクタ・テーブル、ビデオＢＩＯＳおよびシステムＢＩＯＳが一般領域にロードされている。そして、一般領域のコードやデータは不正プログラムによる書き換えが可能であると想定する。
【０００９】
ＳＭＭで動作する認証コードは、パスワード入力のためのプロンプトを画面に表示するために、ビデオＢＩＯＳを呼び出す必要がある。このときＩＮＴ１０命令でベクタ・テーブルからベクタ・アドレスを取得するが、ベクタ・アドレスが不正プログラムにより不正コードのアドレスに書き換えられることが予想される。また、ビデオＢＩＯＳが、システムが保有する情報を取得するためにさらにＩＮＴ１５命令でベクタ・アドレスを取得して、システムＢＩＯＳを呼び出す場合も、ベクタ・アドレスが不正プログラムにより書き換えられることが予想される。ＳＭＭで動作するコードは、すべてのＩ／Ｏポートに何ら制約を受けることなくアクセスすることができる。そしてＳＭＭで動作した不正プログラムにより、ＳＭＭ特権を利用してシステムに攻撃が加えられる。ＯＳは不正プログラムによるメイン・メモリにロードされたプログラムやコードの改変を監視する機能も備えているが、ＯＳはＣＰＵがＳＭＭで動作していることを認識できないのでその機能を利用することができない。
【００１０】
これを防ぐには、一般領域にロードされるコードのなかで、ＳＭＭで動作する間に呼び出される可能性があるすべてのコードのハッシュ値を毎回計算して汚染されていないときのハッシュ値と比較することが考えられる。しかし、ハッシュ値の計算には時間がかかるため、オーバヘッドが大きくなって好ましくない。また、一般領域にロードされるコードをすべてＳＭＲＡＭ領域にロードすることも考えられる。しかし一般領域にロードされるコードもプロテクト・モードで動作するＯＳに対してサービスを提供する必要がある一方で、ＯＳはＳＭＩをアサートするインタフェースを備えていないので、一般領域にも同じコードをロードしておく必要がありメイン・メモリを無駄に消費したり更新が煩雑になったりする。
【００１１】
そこで本発明の目的は、ＳＭＭ特権を保護することができるコンピュータ・プログラムを提供することにある。さらに本発明の目的は、ＳＭＭ特権を小さなオーバヘッドで保護することができるコンピュータ・プログラムを提供することにある。さらに本発明の目的は、ＳＭＭ特権を保護することができるコンピュータを提供することにある。
【課題を解決するための手段】
【００１２】
本発明では、プロセッサがＳＭＭで動作する間にＳＭＲＡＭ領域以外の一般領域にロードされている汚染されたプログラムが実行されてＳＭＭ特権が支配されることを防ぐコンピュータ・プログラムを提供する。本発明の原理は、ＳＭＭにおいてＳＭＭプログラムが一般領域にロードされた第１のプログラムを呼び出して、または第１のプログラムを経由して第２のプログラムを呼び出して実行するときに、ＳＭＭプログラムがそれらのプログラムの正当性を検証してから、または安全性を確保してから呼び出す点にある。そして本発明はそのような正当性の検証または安全性の確保を小さなオーバヘッドで行うことができる。
【００１３】
ＳＭＭプログラム、第１のプログラム、第２のプログラムおよびベクタ・テーブルは、メイン・メモリにロードされる前は正当性が保証されている。メイン・メモリのＳＭＲＡＭ領域にはＳＭＭプログラムがロードされ、一般領域には第１のプログラム、第２のプログラムおよびベクタ・テーブルがロードされる。ＳＭＭプログラムは正当性が保証された状態でロードされている第１のプログラムの基準ハッシュ値を計算する。基準ハッシュ値はオペレーティング・システムの環境で動作する不正プログラムにより第１のプログラムが汚染されていないことを検証するために計算する。コンピュータの電源が起動してからＢＩＯＳだけが動作している間は、ＢＩＯＳの正当性が保証されている限り不正プログラムからの攻撃はないので、基準ハッシュ値の計算は安全な環境であるブートの完了前に行うことができる。
【００１４】
コンピュータがオペレーティング・システムの環境で動作すると、一般領域にロードされた第１のプログラム、第２のプログラムおよびベクタ・テーブルが不正プログラムで汚染される可能性がでてくる。したがって、ＳＭＭプログラムは第１のプログラムを呼び出すときには、事前にそれらの正当性および安全性を検証する必要がある。本発明ではＳＭＭプログラムが、コンピュータがオペレーティング・システムの環境で動作したあとに計算した第１のプログラムのハッシュ値と基準ハッシュ値を比較する。そして計算したハッシュ値と基準ハッシュ値が一致した場合にＳＭＭプログラムが第１のプログラムを呼び出す。
【００１５】
第１のプログラムの正当性が検証できたとしても、不正プログラムによりベクタ・アドレスが書き換えられてＳＭＭプログラムが第１のプログラムをＩＮＴ命令などで呼び出したときに、不正プログラムを呼び出す可能性がある。それを防ぐためにまず、オペレーティング・システムが動作する前にベクタ・テーブルから取得した第１のプログラムを呼び出す割り込みタイプに対応する信頼できるベクタ・アドレスをあらかじめＳＭＭプログラムがＳＭＲＡＭ領域に記憶しておく。ここで、オペレーティング・システムが動作する前とは、メイン・メモリにロードされたプログラムが不正プログラムにより汚染される環境で動作する前という意味であり、メイン・メモリにロードされたプログラムの記憶が維持された状態でオペレーティング・システムの動作環境から他の動作環境に移行し、さらにオペレーティング・システムの動作環境に戻る場合における他の動作環境は含まない。
【００１６】
そして、第１のプログラムを呼び出す前に第１のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスをＳＭＭプログラムがＳＭＲＡＭ領域に記憶しておいたベクタ・アドレスで書き換えることで、ＳＭＭプログラムが安全に第１のプログラムを呼び出せるようにすることができる。よって、ＳＭＭプログラムは、第１のプログラムを呼び出すことでＳＭＭ特権が不正プログラムにより支配されることを防ぐことができる。第１のプログラムを呼び出す割り込みタイプに対応するベクタ・アドレスは、ＳＭＭプログラムが第１のプログラムを呼び出す前に正当なプログラムにより書き換えられている可能性がある。したがって、第１のプログラムを呼び出したあとには、第１のプログラムを呼び出す割り込みタイプに対応する書き換えられたベクタ・アドレスをベクタ・テーブルに戻しておくことが望ましい。
【００１７】
またＳＭＭにおいてＩＮＴ命令などで呼び出された第１のプログラムが第２のプログラムをＩＮＴ命令などで呼び出す場合がある。このとき第２のプログラムを呼び出す命令の実行によりＳＭＭ特権が不正プログラムにより支配されないようにする必要がある。第２のプログラムは、ＳＭＭで動作する間に第１のプログラムから呼び出されるときには、必ずしもその時点で第１のプログラムの要求に応える必要がないプログラムである。しかし、第１のプログラムはＯＳ動作環境におけるプロテクト・モードで第２のプログラムを呼び出すときは第２のプログラムの実行が必要なので第１のプログラムから第２のプログラムを呼び出す命令コードを削除することはできない。本発明では、ＳＭＭで第１のプログラムから第２のプログラムを呼び出す命令が実行されたときには、第２のプログラムが実質的な命令コードを実行しないでＩＲＥＴ命令などのような第１のプログラムに戻る命令だけを実行するようにベクタ・アドレスおよび第１のプログラムに戻る命令コードまたはそれらのいずれか一方を書き換えることができる。
【００１８】
その結果、第２のプログラムおよびベクタ・テーブルまたはいずれか一方が汚染されていても、第２のプログラムを呼び出したときに汚染コードを実行することなく第１のプログラムに戻ることがＳＭＭプログラムにより保証されるので、第１のプログラムから第２のプログラムを呼び出す命令を実行してもＳＭＭ特権が不正プログラムにより支配されることはない。第２のプログラムは、コンピュータがオペレーティング・システムの動作環境であるプロテクト・モードで動作するときにさまざまなプログラムから呼び出される。したがって、第１のプログラムが第２のプログラムを呼び出す命令を実行したあとには、書き換えたベクタ・アドレスおよび第１のプログラムに戻る命令コードまたはそれらのいずれか一方を書き換える前の状態に戻しておくことが望ましい。
【００１９】
ＳＭＭプログラムはパスワード認証を行うプログラムとすることができる。また、ＳＭＭプログラムによる第１のプログラムのハッシュ値の計算と第１のプログラムの呼び出しは、コンピュータがサスペンドからレジュームする間に行うことができる。
【発明の効果】
【００２０】
本発明により、ＳＭＭ特権を保護することができるコンピュータ・プログラムを提供することができた。さらに本発明により、ＳＭＭ特権を小さなオーバヘッドで保護することができるコンピュータ・プログラムを提供することができた。さらに本発明により、ＳＭＭ特権を保護することができるコンピュータを提供することができた。
【図面の簡単な説明】
【００２１】
【図１】本実施の形態にかかるコンピュータの主要な構成を示すブロック図である。
【図２】メイン・メモリに本実施の形態の説明に必要なプログラムがロードされた様子を示す図である。
【図３】ＳＭＭ特権を保護する手順を示すフローチャートである。
【図４】ＳＭＭ特権を保護する手順を示すフローチャートである。
【図５】メイン・メモリの状態を示す図である。
【図６】ＳＭＭ特権に対して予想される攻撃シナリオを説明する図である。
【発明を実施するための形態】
【００２２】
［ノートＰＣの構成］
図１は、本実施の形態にかかるコンピュータ１０の主要な構成を示すブロック図である。図１（Ａ）は全体の構成を示し、図１（Ｂ）はＣＰＵとＳＭＩに関連する部分的な構成を示す。本明細書の全体に渡って、同一の要素には同一の参照番号を付与する。ＣＰＵ１１は、インテル（登録商標）のＸ８６シリーズのアーキテクチャで構成され、プロテクト・モードに加えてＳＭＭで動作することができる。メモリ・コントローラ・ハブ（ＭＣＨ）１３は、メイン・メモリ１５へのアクセス動作を制御するためのメモリ・コントローラ機能、およびＣＰＵ１１と他のデバイスとの間のデータ転送速度の差を吸収するためのデータ・バッファ機能を含むチップ・セットである。ＭＣＨはＳＭＩの発生要因を設定するＳＭＩレジスタ１４を含む。
【００２３】
ＣＰＵ１１がプログラムを実行したり、マザーボードに実装されたハードウエアが温度や電源に関するイベントを生成したりしてＳＭＩレジスタ１４を設定することでＭＣＨ１３はＳＭＩ信号をＣＰＵ１１のＳＭＩピンに送りＣＰＵ１１をＳＭＭで動作させる。ＭＣＨ１３はＣＰＵ１１がＳＭＭで動作していることをＳＭＩＡＣＴピンを通じて受け取ることで、メイン・メモリ１５に対するアクセスをハードウエアにより制御してＳＭＭ環境を構築する。ＭＣＨ１３は、ＣＰＵ１１がＳＭＭで動作している間は、ＳＭＲＡＭ領域（図２）にロードされたコードがＯＳやアプリケーション・プログラムにより書き換えられないように保護する。ＭＣＨ１３にはＣＰＵ１１、メイン・メモリ１５、グラフィック・プロセッシング・ユニット（ＧＰＵ）１７、およびアイオー・コントローラ・ハブ（ＩＣＨ）２３が接続されている。
【００２４】
メイン・メモリ１５は、ＣＰＵ１１が実行するプログラムの読み込み領域、処理データを書き込む作業領域として利用される揮発性のＲＡＭである。メイン・メモリ１５には、一般領域に加えてＣＰＵ１１がＳＭＭで動作するときに実行するコードをロードするための領域であるＳＭＲＡＭ領域が定義されている。ＧＰＵ１７には、ビデオ・メモリ（ＶＲＡＭ）２１およびＬＣＤ１９が接続されている。ＧＰＵ１７は、ＣＰＵ１１から受け取った描画命令に基づいてＶＲＡＭ２１にイメージを書き込み、所定のタイミングでＬＣＤ１９に画像イメージのデータを送るための専用プロセッサで、グラフィックス・アクセラレータともいう。ＩＣＨ２３は周辺入出力デバイスに関するデータ転送を処理する。
【００２５】
ＩＣＨ２３は、ＵＳＢ（Universal Serial Bus）、シリアルＡＴＡ（AT Attachment）、ＳＰＩ (Serial Peripheral Interface)バス、 ＰＣＩ（Peripheral Component Interconnect）バス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、およびＬＰＣ（Low Pin Count）などのポートを備え、ハードディスク・ドライブ（ＨＤＤ）２５、２６、ＵＳＢコントローラ、およびＬＰＣバス２９などが接続されている。ＨＤＤ２５はブートディスクで、コンピュータ１０が起動するときのブート・イメージを格納している。ＨＤＤ２６はセカンダリのドライブで、コンピュータ１０は動作している間にＨＤＤ２６を接続するいわゆるホットアタッチ機能をサポートする。
【００２６】
ＬＰＣバス２９には、エンベデッド・コントローラ３１およびＢＩＯＳ＿ＲＯＭ３３などの高速なデータ転送を要求しないデバイスが接続される。ＢＩＯＳ＿ＲＯＭ３３は不揮発性で記憶内容の電気的な書き替えが可能なメモリであり、入出力デバイスを制御するためのデバイス・ドライバ、ＡＣＰＩ（Advanced Configuration and Power Interface）の規格に適合し電源およびシステム筐体内の温度などを管理するシステムＢＩＯＳ、ベクタ・テーブル、コンピュータ１０の起動時にハードウエアの試験や初期化を行うＰＯＳＴ（Power-On Self Test）コード、およびパスワード認証を行うための認証コードなどを格納する。
【００２７】
システムＢＩＯＳは、コンピュータ１０の設定情報や固有情報を保有しており、他のプログラムから呼び出されたときに、保有する情報を提供するサービスを行う。システムＢＩＯＳの一部は、電源起動からのブートやサスペンドからのレジュームのタイミングのようにＯＳおよびビデオ・ドライバが実行されないときにＬＣＤ１９に画像を表示するためのビデオＢＩＯＳで構成されている。ＢＩＯＳ＿ＲＯＭ３３には周知の方法でハードウエアおよびソフトウエア上の保護が施され、そこに格納されているコードは正当性が保証されている。
【００２８】
［メイン・メモリのデータ構造］
図２は、メイン・メモリ１５に本実施の形態の説明に必要なプログラムおよびベクタ・テーブルがロードされた様子を示す図である。メイン・メモリ１５には、一般領域とＳＭＲＡＭ領域が定義されている。一般領域１０１には、ＢＩＯＳ＿ＲＯＭ３３に格納されたプログラムおよびＨＤＤ２５に格納されたオペレーティング・システム（ＯＳ）、デバイス・ドライバ、およびアプリケーション・プログラムなどがロードされる。ＢＩＯＳ＿ＲＯＭ３３に格納されたプログラムがロードされるメイン・メモリ１５の領域に対しては、通常ＭＣＨ１３により書き込み保護が施されているが、本実施の形態では不正プログラムにより書き込み保護が無効にされてプログラムが汚染されたり不正コードが埋め込まれたりする可能性があると想定する。
【００２９】
ＳＭＲＡＭ領域１０３には、ＳＭＩハンドラ１１３と認証コード１１５がロードされ、さらにＳＳＭ（State Save Map）という領域が確保される。ベクタ・テーブル１０５は、それぞれセグメント・アドレスとオフセット・アドレスの４バイトで構成される２５６個のベクタ・アドレスを格納する。システムＢＩＯＳ１０９は、ＩＮＴ命令で中断された元のルーチンに戻るためのＩＲＥＴ命令１１１を含む。ＩＲＥＴ命令１１１は、ビデオＢＩＯＳ１０７やＰＯＳＴコード１０８も含んでいるが、本実施の形態の説明に必要がないので図２からは省略している。
【００３０】
ＳＭＩハンドラ１１３は、ＳＭＩがアサートされたときに常に最初に実行されるコードある。ＳＭＩがアサートされたときにＳＭＩハンドラ１１３は、ＭＣＨ１３のＳＭＩレジスタ１４を参照してＳＭＩの発生要因を認識し、ＳＭＲＡＭ領域１０３にロードされているプログラムまたは一般領域１０１にロードされているプログラムを呼び出してＣＰＵ１１に実行させる。認証コード１１５は、コンピュータの起動時、サスペンド状態またはハイバネーション状態からの復帰時にパワーオン・パスワードまたはハードディスク・パスワードによる認証を処理するプログラムである。ＳＳＭは、ＣＰＵ１１がＳＭＭに移行する直前のレジスタやポインタなどのコンテキストを格納する領域である。
【００３１】
ＢＩＯＳ＿ＲＯＭ３３に格納されたコードは正当性が保証されている。したがって、コンピュータ１０の電源が起動されてメイン・メモリ１５にロードされＯＳに制御が移る前までは、正当性のあるプログラムだけが動作するので、図６で説明したような方法で不正プログラムがＳＭＭ特権を支配することはできない。しかし、ＯＳが動作している間は、ネットワークや外部記録媒体を通じたりして、コンピュータ１０に不正プログラムが進入し、一般領域１０１にロードされたプログラムを書き換えたり不正なコードを埋め込んだりしてＳＭＭ特権を支配する可能性が存在する。
【００３２】
［ＳＭＭ特権を保護する手順］
ＳＭＭ特権を保護する手順を図３および図４のフローチャートおよび図５のメイン・メモリの状態図に基づいて説明する。ブロック２０１でコンピュータ１０の電源が投入されると、ブロック２０３でＣＰＵ１１は、最初にＢＩＯＳ＿ＲＯＭ３３の所定のアドレスにアクセスしてＰＯＳＴコード１０８を実行しブートを開始する。ＰＯＳＴコード１０８はプロテクト・モードで実行されるが、ブート中に必要に応じてＳＭＩをアサートしてＣＰＵ１１をＳＭＭで動作させる。ＰＯＳＴコード１０８は初期の段階でＣＰＵ１１のレジスタ、ＭＣＨ１３、メイン・メモリ１５などの検査と初期化を行い、メイン・メモリ１５が利用可能な状態になるとブロック２０５でＢＩＯＳ＿ＲＯＭ３３のプログラムおよびベクタ・テーブル１０５を図２に示したようにメイン・メモリ１５にロードする。
【００３３】
ブロック２０７でビデオＢＩＯＳ１０７は、ＧＰＵ１７、ＶＲＡＭ２１およびＬＣＤ１９の検査と初期化を行う。ビデオＢＩＯＳ１０７による検査と初期化の間にビデオＢＩＯＳ１０７は初期化に使用したデータを削除したり、新たなデータを保有したりしてロードされたときの状態からコードの内容が変化するが、一旦初期化が完了するとそれ以降コードの内容が変化することはないので、ハッシュ値を計算して正当性の検証をすることができる。
【００３４】
ブロック２０９では、認証コード１１５を実行するためにＰＯＳＴコード１０８がＳＭＩをアサートしてＣＰＵ１１の動作をＳＭＭに移行させる。ＰＯＳＴコード１０８が、ＭＣＨ１３のＳＭＩレジスタ１４を設定すると、ＭＣＨ１３はＣＰＵ１１にＳＭＩ信号を送る。ＳＭＩがアサートされるとＣＰＵ１１は、その時点でのレジスタやポインタの内容であるコンテキストをメイン・メモリ１５のＳＳＭ１１７に格納して、ＭＣＨ１３に対してＳＭＡＣＴピンを通じてＳＭＭで動作したことを通知する。ＣＰＵ１１がＳＭＭで動作している間、ＭＣＨ１３はＳＭＲＡＭ領域のアドレスに対するアクセスは許容するが、ＳＭＭで動作していないときはＳＭＲＡＭ領域のアドレスに対するアクセスは、メイン・メモリ１５の他のアドレスへのアクセスとして処理する。
【００３５】
ＣＰＵ１１は、ＳＭＭに移行すると最初に必ずＳＭＩハンドラ１１３を実行する。ＳＭＩハンドラ１１３は、ＭＣＨ１３のＳＭＩレジスタ１４を参照してＳＭＩの発生要因を調べ、ＰＯＳＴコード１０８により認証コード１１５の実行が要求されていることを知ると、認証コード１１５を実行する。ブロック２１１で認証コード１１５は、初期化の完了したビデオＢＩＯＳ１０７のハッシュ値を計算してＳＭＲＡＭ領域１０３に格納する。この時点まではビデオＢＩＯＳ１０７は不正プログラムで汚染される可能性がないため正当性が保証されている。ここで計算したビデオＢＩＯＳ１０７のハッシュ値を基準ハッシュ値ということにする。
【００３６】
さらに認証コード１１５は、ベクタ・テーブル１０５からＩＮＴ１０ｈの割り込みタイプに対応するベクタ・アドレスを取得してＳＭＲＡＭ領域１０３に格納する。ビデオＢＩＯＳ１０７は初期化が完了すると、自らコード内容を変更したり、正当なプログラムによりコード内容が変更されたりすることはない。したがってこれ以後のさまざまな段階で、ビデオＢＩＯＳ１０７のハッシュ値を計算して基準ハッシュ値と比較することで、それぞれの段階でビデオＢＩＯS１０７が不正プログラムにより汚染されているか否かを判断することができる。
【００３７】
ハッシュ値とベクタ・アドレスの格納が終わった認証コード１１５は、パワーオン・パスワード、ハードディスク・パスワード、ログオン・パスワードなどのパスワード認証を行う。ベクタ・テーブル１０５、ビデオＢＩＯＳ１０７およびシステムＢＩＯＳ１０９は不正プログラムで汚染されていないので、認証コードがＩＮＴ１０ｈ命令を実行してビデオＢＩＯＳ１０７を本来のエントリ・ポイントから実行し、ビデオＢＩＯＳ１０７がＩＮＴ１５ｈ命令を実行してシステムＢＩＯＳ１０９を本来のエントリ・ポイントから実行することでパスワード認証をする。この時点では不正プログラムによりＳＭＭ特権が支配されることはない。
【００３８】
ブロック２１３で認証コード１１５はＲＳＭ（Return from System Management instruction）命令を実行して、ＭＣＨ１３がＳＭＩをネゲートするようにＳＭＩレジスタ１４に設定する。認証コード１１５はＳＳＭ１１７に格納しておいたＣＰＵ１１のコンテキストをＣＰＵ１１に戻してＣＰＵ１１をＳＭＭからプロテクト・モードに移行させる。プロテクト・モードに移行したＣＰＵ１１はＳＭＭで動作する直前の状態からＰＯＳＴコード１０８の実行を再会する。図５（Ａ）は、プロテクト・モードに移行する直前のメイン・メモリの状態を示している。その後残りのＰＯＳＴコード１０８が実行されてブートが完了する。
【００３９】
ブロック２１５ではＯＳ、デバイス・ドライバおよびアプリケーション・プログラムのロードも含めてブートが完了し、コンピュータ１０はプロテクト・モードで動作してＯＳの動作環境が構築される。ブロック２１７ではコンピュータ１０がＯＳの動作環境で動作する間に、ベクタ・テーブル１０５、ビデオＢＩＯＳ１０７、およびシステムＢＩＯＳ１０９のすべてまたはいずれかが不正プログラムで汚染されることを想定する。汚染の形態には、不正プログラムがベクタ・テーブル１０５をフックしてＩＮＴ命令による割り込み先を不正コードに誘導したり、ビデオＢＩＯＳ１０７またはシステムＢＩＯＳ１０９に不正コードを埋め込んだりすることが想定される。この様子を図５（Ｂ）に示す。
【００４０】
この状態でＣＰＵ１１がＳＭＭで動作するときに認証コード１１５がＩＮＴ１０ｈ命令でビデオＢＩＯＳ１０７を呼び出したり、ビデオＢＩＯＳ１０７がＩＮＴ１５ｈ命令でシステムＢＩＯＳ１０９を呼び出したりすると、ＳＭＭ特権が不正コードにより支配されてしまう。ブロック２１９では、コンピュータ１０にセカンダリＨＤＤ２６がホットアタッチされコンピュータ１０の通常の動作として、一旦サスペンド状態に移行したあとただちに復帰動作（レジューム）が行われる。コンピュータ１０は、レジュームのときにＨＤＤパスワードの認証をすることになっているので、認証コード１１５はビデオＢＩＯＳ１０７を呼び出す必要がある。サスペンド状態に移行するときにはＢＩＯＳ＿ＲＯＭ３３に格納された電源管理用のコードがＭＣＨ１３に移行前の状態を設定する。
【００４１】
サスペンド状態からレジュームするときは、メイン・メモリ１５にロードされていた図２に示すプログラムおよびベクタ・テーブル１０５は記憶が保持されているので、ブロック２１７での汚染が維持されている可能性がある。また、サスペンド状態ではＧＰＵ１７、ＬＣＤ１９およびＶＲＡＭ２１の電源は停止するので、レジュームするときはＰＯＳＴコード１０８がそれらの検査および初期化を行う。ＣＰＵ１１はＭＣＨ１３に設定された移行前の状態に応じて所定の位置からＰＯＳＴコード１０８の実行を開始する。
【００４２】
ブロック２２１でＰＯＳＴコード１０８はＨＤＤパスワードの認証をするために、ＭＣＨ１３のＳＭＩレジスタ１４を設定してＳＭＩをアサートする。ＳＭＩ信号を受け取ったＣＰＵ１１は、コンテキストをＳＳＭ１１７に格納するとＳＭＩＡＣＫ信号をＭＣＨ１３に送ってＳＭＭで動作していることを通知する。ＳＭＩハンドラ１１３は、ＳＭＩレジスタ１４の内容を参照してＳＭＩの発生要因を認識し認証コード１１５を実行する。
【００４３】
ブロック２１７で説明したように、コンピュータ１０がＯＳ環境で動作する間は、ベクタ・テーブル１０５およびビデオＢＩＯＳ１０７は不正なプログラムで書き換えられることがある。認証コード１１５はＬＣＤ１９にパスワードを要求するためのプロンプトを表示するためにビデオＢＩＯＳ１０７を呼び出す必要があるが、ＳＭＭ特権を保護するためには呼び出す前にビデオＢＩＯＳ１０７とビデオＢＩＯＳ１０７を呼び出すベクタ・アドレスの安全性を維持しておく必要がある。
【００４４】
ブロック２２３で認証コード１１５は、ベクタ・テーブル１０５のＩＮＴ１０ｈの割り込みタイプに対応するベクタ・アドレスが、ブロック２１１でＳＭＲＡＭ領域１０３に格納しておいたブート時のベクタ・アドレスと一致するか否かを検証し、一致していない場合は格納しておいたベクタ・アドレスに書き換える。なお、一致するか否かの検証を省いて、常に格納しておいたＩＮＴ１０ｈの割り込みタイプに対応するベクタ・アドレスをベクタ・テーブル１０５に書き込むようにしてもよい。そして、書き換える前のベクタ・アドレスをＳＭＲＡＭ領域１０３に格納する。認証コード１１５は、さらにビデオＢＩＯＳ１０７のハッシュ値を計算する。
【００４５】
ブロック２２５で認証コード１１５は、ブロック２２３で計算したハッシュ値とブロック２１１でＳＭＲＡＭ領域１０３に格納しておいた基準ハッシュ値を比較して一致するか否かを判断する。ブロック２２５でハッシュ値が一致しないと判断した場合は、認証コード１１５はブロック２２７に移行してＩＮＴ１０ｈ命令の実行を中止する。その結果、ＬＣＤ１９には、ＨＤＤパスワードの認証のためのプロンプトが表示されずセカンダリＨＤＤ２６はコンピュータ１０によって認識されない。その後認証コード１１５はブロック２４３でＲＳＭ命令を実行してＣＰＵ１１をプロテクト・モードに移行させ、ＳＳＭ１１７に格納したコンテキストをＣＰＵ１１に設定してＰＯＳＴコード１０８を実行しサスペンド状態からのレジュームを完了する。
【００４６】
ブロック２２５でハッシュ値が一致すると判断した場合は、ビデオＢＩＯＳ１０７は基準ハッシュ値を格納したときの状態から変更されていないことになるので認証コード１１５はビデオＢＩＯＳ１０７の正当性を検証でき、かつＩＮＴ１０ｈ命令を実行したときにビデオＢＩＯＳ１０７の正しいエントリ・ポイントを呼ぶことも確保している。ただし認証コード１１５は、ビデオＢＩＯＳ１０７がさらにＩＮＴ１５ｈ命令で呼び出すシステムＢＩＯＳ１０９の正当性を検証していないので、この時点ではまだＩＮＴ１０ｈ命令を実行しない。
【００４７】
認証コード１１５はあらかじめメイン・メモリ１５上でシステムＢＩＯＳ１０９のＩＲＥＴ命令コード１１１が書き込まれているアドレスを知っている。また、システムＢＩＯＳ１０９は、メイン・メモリ１５にロードされている間に正当なプログラムまたは不正なプログラムにより、ＩＲＥＴ命令コードのメイン・メモリ１５上でのアドレスが変更される場合がある。認証コード１１５はブロック２２９で、ブロック２２９であらかじめ知っているＩＲＥＴ命令コード１１１が書き込まれているメイン・メモリ１５上のアドレスに実際にＩＲＥＴ命令コード１１１が存在するか否かを検査する。
【００４８】
認証コード１１５はブロック２３１で、ＩＲＥＴ命令１１１が既知のアドレスに存在すると判断した場合は、ブロック２３５に移動する。認証コードはブロック２３１で既知のアドレスにＩＲＥＴ命令コード１１１が存在しないと判断した場合は、ブロック２３３に移行してＩＲＥＴ命令コード１１１を既知のアドレスに書き込む。また、ベクタ・テーブル１０５のＩＮＴ１５ｈの割り込みタイプに対応するベクタ・アドレスがＩＲＥＴ命令コード１１１の既知のアドレスでない場合は、既知のアドレスになるようにベクタ・テーブル１０５を書き換えてブロック２３５に移行する。不正プログラムによりＩＲＥＴ命令１１１の既知のアドレスにジャンプ命令が埋め込まれていたり、ＩＮＴ１５ｈの割り込みタイプに対応するベクタ・アドレスが不正コードのエントリ・ポイントにフックされていたりしても、この段階でＩＮＴ１５ｈのベクタ・アドレスが正当性のある認証コード１１５によりＩＲＥＴ命令コード１１１のアドレスになるように変更される。
【００４９】
なお、認証コード１１５はビデオＢＩＯＳ１０７がＩＮＴ１５ｈ命令を実行したときに、ＩＲＥＴ命令コード１１１のアドレスがエントリ・ポイントになるようにベクタ・アドレス１０５およびＩＲＥＴ命令１１１またはそのいずれかを書き換えればよいので、認証コード１１５は自らが選択した任意のベクタ・アドレスとＩＲＥＴ命令コード１１１を書き込んでもよい。また、認証コード１１５は、ベクタ・アドレスおよびＩＲＥＴ命令コード１１１またはそのいずれかを書き換えた場合は、書き換える前の内容をＳＭＲＡＭ領域１０３に格納しておく。この手順ではシステムＢＩＯＳ１０９が不正プログラムにより汚染されているか否かを検証することはできないが、ビデオＢＩＯＳ１０７がＩＮＴ１５ｈ命令を実行したときには、認証コード１１５によりＩＲＥＴ命令１１１だけが実行されることは保証される。したがって、ＩＮＴ１５ｈ命令の実行によりＳＭＭ特権が不正プログラムにより支配されることはなくなる。このときの様子を図５（Ｃ）に示す。
【００５０】
ブロック２３５では、認証コード１１５はＬＣＤ１９にＨＤＤパスワードの認証に必要なプロンプトを表示するために、ＩＮＴ１０ｈ命令を実行してビデオＢＩＯＳ１０７の呼び出しを行う。その際認証コード１１５は、ＣＰＵ１１のその時点でのＦＬＡＧレジスタの値、ＣＳレジスタの値、およびＩＰレジスタの値をメイン・メモリ１５に確保されたスタック・セグメントにプッシュし、ベクタ・テーブル１０５のＩＮＴ１０ｈの割り込みタイプが示すアドレスに格納されているオフセット値とセグメント値をＣＰＵ１１のＩＰレジスタとＣＳレジスタに設定すると、ＣＰＵ１１はビデオＢＩＯＳ１０７を実行する。
【００５１】
ビデオＢＩＯＳ１０７は、プロンプトの表示を行う作業を行う間にシステムＢＩＯＳ１０９からシステムの設定情報やシステムの固有情報を取得することがある。たとえば、サスペンド状態からレジュームする際にはＧＰＵ１７を再度設定する必要があるが、ビデオＢＩＯＳ１０７はシステムの設定情報をシステムＢＩＯＳ１０９から取得するために、ＩＮＴ１５ｈ命令を実行してシステムＢＩＯＳ１９を呼び出す。ビデオＢＩＯＳ１０７は、ＣＰＵ１１のその時点でのＦＬＡＧレジスタの値、ＣＳレジスタの値およびＩＰレジスタの値をメイン・メモリ１５上のスタック・セグメントにプッシュし、ベクタ・テーブル１０５のＩＮＴ１５ｈが示すアドレスに格納されているオフセット値とセグメント値をＣＰＵ１１のＩＰレジスタとＣＳレジスタに設定する。
【００５２】
ＩＮＴ１５ｈの割り込みタイプに対応するベクタ・アドレスはブロック２２９〜ブロック２３３でＩＲＥＴ命令コード１１１のアドレスとなるように設定されているので、ブロック２３７ではＩＮＴ１５ｈ命令が実行される。ＩＲＥＴ命令１１１が実行されるとスタック・セグメントにプッシュされていたＦＬＡＧレジスタの値、ＣＳレジスタの値およびＩＰレジスタの値がポップされＣＰＵ１１はシステムＢＩＯＳ１０９の実質的な命令コードを実行することなくビデオＢＩＯＳ１０７の実行を再開する。
【００５３】
したがって、システムＢＩＯＳ１０９やベクタ・テーブル１０５が不正プログラムで書き換えられても、ビデオＢＩＯＳ１０７を実行する過程では不正プログラムの影響を排除することができる。ここでビデオＢＩＯＳ１０７は、ＩＮＴ１５ｈ命令を実行してもシステムＢＩＯＳ１０７から所定の情報を受け取ることはできないが、ビデオＢＩＯＳ１０７はシステムＢＩＯＳ１０９が保有する情報を受け取る必要がある場合はあらかじめ保有しているディフォルト値を使用することができる。ディフォルト値は、ビデオＢＩＯＳ１０７がＳＭＭにおける作業に必要な最低限の情報という意味もある。
【００５４】
本実施の形態は、ビデオＢＩＯＳ１０７が呼び出すシステムＢＩＯＳ１０９が、本来のエントリ・ポイントが指定されたときの命令コードをしないでもビデオＢＩＯＳ１０７が認証コード１１５の要求に応えられる場合にだけ適用することができる。ここでの認証コード１１５からの要求はＳＭＭで動作するときの要求である。プロテクト・モードで動作するときには、いずれかのプログラムがＩＮＴ１０ｈ命令またはＩＮＴ１５ｈ命令を実行したときにビデオＢＩＯＳ１０７またはシステムＢＩＯＳ１０９はそれぞれ本来のエントリ・ポイントから実行される必要がある。
【００５５】
ブロック２３９ではビデオＢＩＯＳ１０７がＩＲＥＴ命令１１１を実行して認証コード１１５にＣＰＵ１１の制御を移し、認証コード１１５はブロック２２３でＳＭＲＡＭ領域１０３に格納しておいたＩＮＴ１０ｈの割り込みタイプに対応する書き換えられたベクタ・アドレスを復元し、ブロック２３３でＳＭＲＡＭ領域１０３に格納しておいたＩＮＴ１５ｈの割り込みタイプに対応する書き換えられたＩＲＥＴ命令コード１１１およびベクタ・アドレスまたはいずれか一方を復元する。このときのメイン・メモリ１５の状態を図５（Ｄ）に示す。
【００５６】
たとえば、ＯＳが動作している間にユーザがプライマリのディスプレイを内部ディスプレイから外部ディスプレイに変更したときに、その設定情報をシステムＢＩＯＳ１０７が保有しているような場合は、ビデオＢＩＯＳ１０７がブロック２３７で設定情報としてディフォルト値を使用すると外部ディスプレイにはプロンプトが表示されない場合がある。プロンプトが外部ディスプレイに表示されるように設定する必要がある場合は、ブロック２４１で認証コード１１５は再度ＩＮＴ１０ｈ命令を実行してビデオＢＩＯＳ１０７を実行する。このときのＩＮＴ１０ｈ命令は、プロンプトを表示するディスプレイの選択といったような限定的なものであるため、ビデオＢＩＯＳ１０７はシステムＢＩＯＳ１０９を呼び出さないようにしたり、あるいは、ブロック２３３のようにＩＲＥＴ命令またはベクタ・アドレスを書き換えたりする。そして、ＣＰＵ１１のレジスタにプロンプトを表示するディスプレイを選択するためのファンクションを設定してＩＮＴ１０ｈ命令を実行する。
【００５７】
ブロック２４３では、認証コード１１５がＲＳＭ命令を実行してＳＭＩをネゲートしてＳＳＭ１１７に格納しておいたＣＰＵ１１のコンテキストを元に戻すと、ＣＰＵ１１はブロック２２１でＳＭＭに移行した直前の状態の動作をプロテクト・モードで再会する。ＣＰＵ１１は、ブロック２２１でＳＭＩがアサートされブロック２４３でＳＭＩがネゲートされるまでＳＭＭで動作するが、この間にＯＳが動作するプロテクト・モードで不正プログラムにより汚染されうる一般領域１０１にロードされたビデオＢＩＯＳ１０７が実行されても認証コード１１５によりそれらの正当性および安全性が確保されるのでＳＭＭ特権の剥奪の問題は生じない。ブロック２４３では、ＯＳが動作するプロテクト・モードにおいて、ＯＳやアプリケーションによって、ビデオＢＩＯＳ１０７が実行されることがある。このとき、ビデオＢＩＯＳ１０７やシステムＢＩＯＳ１０９は、図５（Ｄ）に示すように不正プログラムで汚染されている可能性はあるが、ＯＳ動作環境におけるプロテクト・モードで実行されるので、ＳＭＭ特権が不正プログラムにより支配されることはない。ブロック２４５では、いずれかのプログラムから他の理由でＳＭＩアサートがありＳＭＭで動作する間にビデオＢＩＯＳ１０７を呼び出すことがある場合は、ブロック２２１に移行する。
【００５８】
ＳＭＭ特権を保護する他の方法として、ビデオＢＩＯＳ１０７だけでなくシステムＢＩＯＳ１０９の基準ハッシュ値も計算して、ビデオＢＩＯＳ１０９をコールする都度計算したシステムＢＩＯＳ１０９のハッシュ値と基準ハッシュ値を比較する方法が考えられる。しかし、システムＢＩＯＳ１０９のハッシュ値は、ブート時にだけ動作するコードだけでなくＯＳが動作している間に提供するランタイム・サービスのために動作するコードまで含めて計算する必要があるので時間がかかる。これに対して本発明では、システムＢＩＯＳ１０９に対してＩＮＴ１５ｈ命令で呼び出すときの安全性を確保するためのオーバヘッドは必要がない。
【００５９】
さらに、システムＢＩＯＳ１０９はＯＳが動作している間に、自身のメイン・メモリ上での記憶領域にシステムの設定情報を記憶する場合がある。この場合には、ビデオＢＩＯＳ１０７のようにハッシュ値による正当性の検証をすることはできないので、ＩＲＥＴ命令によるＳＭＭ特権の保護は有効である。
【００６０】
上記の手順では、ビデオＢＩＯＳがＩＮＴ１５ｈ命令を実行したときにシステムＢＩＯＳ１０９のＩＲＥＴ命令１１１だけが実行されてビデオＢＩＯＳ１０７にＣＰＵ１１の制御が戻るようにしているが、本発明はＩＲＥＴ命令だけが実行される場合に限定するものではない。たとえば認証コード１１５は、みずから書き込んだベクタ・アドレスのエントリ・ポイントにジャンプ命令を書き込み、システムＢＩＯＳ１０９が実質的な命令コードを実行しないでＩＲＥＴ命令を実行してビデオＢＩＯＳに制御が戻るようにすることもできる。
【００６１】
ビデオＢＩＯＳ１０９が認証コード１１５の要求に応えるために、システムＢＩＯＳ１０９のサービスが必要ないとすれば、認証コード１１５がＩＮＴ１０ｈ命令を実行したときにはＩＮＴ１５ｈ命令を実行しないようにビデオＢＩＯＳ１１５のコードを作成することも考えられる。しかし、ビデオＢＩＯＳ１１５は、プロテクト・モードで動作する他のプログラムからＩＮＴ１０ｈ命令が実行されたときは、ＩＮＴ１５ｈ命令を実行してシステムＢＩＯＳ１０９のサービスを利用する必要がある。そしてビデオＢＩＯＳ１１５はＩＮＴ１０ｈ命令がＳＭＭで実行されたのかプロテクト・モードで実行されたのかを認識することはできないので、この方法の実現は困難である。
【００６２】
本発明は、ＳＭＭで動作する間に呼び出されるＳＭＲＡＭ領域以外の領域にロードされるコードは、ビデオＢＩＯＳに限定するものではなく、他のデバイス・コントローラを制御するコードに適用することが可能である。たとえば、ＳＭＭのコードがディスクのコントローラを制御するオプションＲＯＭのコードをコールし、オプションＲＯＭのコードがシステムＢＩＯＳをコールするような場合にも適用することができる。またＩＲＥＴ命令は、割り込みルーチンが元のルーチンに戻るときに実行するアセンブラ言語の命令コードであるが、ＢＩＯＳのコードを他の言語で作成するときは同じ機能を果たす他の命令コードであってもよい。
【００６３】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００６４】
１５…メイン・メモリ
１０１…一般領域
１０３…ＳＭＲＡＭ領域
１０５…ベクタ・テーブル
１０７…ビデオＢＩＯＳ
１０９…システムＢＩＯＳ
１１５…認証コード
【図１】
2011076134.tif 000003
【図２】
2011076134.tif 000004
【図３】
2011076134.tif 000005
【図４】
2011076134.tif 000006
【図５】
2011076134.tif 000007
【図６】
2011076134.tif 000008