(57)【要約】【課題】  バッファオーバーフロー攻撃等による記憶領域内の機密データに対する削除、改竄、漏洩等を防止可能なコンピュータシステムを提供する。【解決手段】  記憶領域１９のアドレス毎のＣＰＵ１０からのプログラム実行用のアクセス権の有無を設定したアクセス制御メモリマップを記憶するメモリマップ回路１５と、プログラムカウンタ２０で指定される実行プログラム格納アドレスＳｐｃの記憶領域へのＣＰＵ１０からのアクセス権の有無を、アクセス制御メモリマップに基づいて判定し、アクセス権が無い場合に、ＣＰＵ１０から実行プログラム格納アドレスの記憶領域へのアクセスを不能にする所定の処理をＣＰＵ１０に実行させるアクセス禁止信号ＳＣを出力するアクセス権判定回路１６を備える。【選択図】        図１
2007304954.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムを実行可能なＣＰＵと、
前記コンピュータプログラム及びデータを格納可能な１または複数のメモリ装置で構成される記憶領域と、
前記記憶領域のアドレス毎の前記ＣＰＵからのプログラム実行用のアクセス権の有無を設定したアクセス制御メモリマップを記憶するメモリマップ回路を備え、
前記アクセス制御メモリマップにより前記アクセス権が無いと規定されるアドレス範囲の前記記憶領域に対する、通常の読み出し及び書き込み動作に対するアクセスは許可されるが、前記ＣＰＵからのプログラム実行用のアクセスは禁止されることを特徴とするメモリ保護機能を有するコンピュータシステム。
【請求項２】
前記ＣＰＵのプログラムカウンタで指定される実行プログラム格納アドレスの前記記憶領域への前記ＣＰＵからの前記アクセス権の有無を、前記アクセス制御メモリマップに基づいて判定し、前記アクセス権が無い場合に、前記ＣＰＵから前記実行プログラム格納アドレスの前記記憶領域へのアクセスを不能にする所定の処理を前記ＣＰＵに実行させるアクセス禁止信号を出力するアクセス権判定回路を備えていることを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記アクセス権判定回路は、前記プログラムカウンタからの前記実行プログラム格納アドレスの入力と、前記メモリマップ回路からの前記アクセス制御メモリマップの入力を受け付けて、前記実行プログラム格納アドレスと前記アクセス制御メモリマップを照合する照合回路を備え、前記照合回路の照合結果に基づいて前記アクセス禁止信号を活性化させることを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記アクセス権判定回路は、前記プログラムカウンタからの前記実行プログラム格納アドレスの入力を、前記ＣＰＵが命令をフェッチするタイミング信号の入力と同期して判別することを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、データ格納専用アドレス領域として固定されていることを特徴とする請求項２〜４の何れか１項に記載のコンピュータシステム。
【請求項６】
前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、スタック領域として使用されることを特徴とする請求項２〜４の何れか１項に記載のコンピュータシステム。
【請求項７】
前記メモリマップ回路は、前記ＣＰＵのプログラム実行による前記アクセス制御メモリマップの内容変更が不能な構成であることを特徴とする請求項２〜６の何れか１項に記載のコンピュータシステム。
【請求項８】
前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、前記スタック領域の増減に応じて変化することを特徴とする請求項６に記載のコンピュータシステム。
【請求項９】
前記記憶領域の一部が、前記ＣＰＵからの前記アクセス権が無いスタック領域と、前記ＣＰＵからの前記アクセス権が有るヒップ領域に分割されており、前記スタック領域がオーバーフローして前記ヒップ領域が侵食された場合に、侵食された前記ヒップ領域が前記ＣＰＵからの前記アクセス権がない状態となるように、前記アクセス制御メモリマップが変化することを特徴とする請求項８に記載のコンピュータシステム。
【請求項１０】
前記記憶領域の一部が、前記ＣＰＵからの前記アクセス権が無いスタック領域と、前記ＣＰＵからの前記アクセス権が有るヒップ領域に分割されており、前記スタック領域がオーバーフローしても前記ヒップ領域が侵食されないように、前記スタック領域と前記ヒップ領域の各アドレス範囲が分離して設定されていることを特徴とする請求項２〜８の何れか１項に記載のコンピュータシステム。
【請求項１１】
前記アクセス禁止信号が、前記ＣＰＵに対して所定の割り込み動作を発生させることを特徴とする請求項２〜１０の何れか１項コンピュータシステム。
【請求項１２】
前記アクセス禁止信号が、前記ＣＰＵに対してリセット動作を発生させることを特徴とする請求項２〜１０の何れか１項に記載のコンピュータシステム。
【請求項１３】
請求項１〜１２の何れか１項に記載のメモリ保護機能を有するコンピュータシステムを搭載してなることを特徴とするＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムを実行可能なＣＰＵ（中央演算処理装置）とコンピュータプログラム及びデータを格納可能な１または複数のメモリ装置で構成される記憶領域を備えてなるコンピュータシステムにおいて、ユーザの不注意や不正使用による記憶領域内の機密データの削除、改竄、漏洩を防止するアクセス制御に関し、より詳細には、機密データを含むデータを格納する記憶領域に対するデータ保護技術に関する。
【背景技術】
【０００２】
ＣＰＵと１または複数のメモリ装置を備えてなるコンピュータシステムでは、一般にＣＰＵからメモリ装置への予期せぬアクセスや権限外のアクセスにより、システム全体の動作が不安定或いは動作不能となる等の事態を回避するために、システム内にメモリ装置に対するアクセス制御手段を備えている。
【０００３】
従来のアクセス制御は、ファイル毎に属性を付けてユーザがファイルへのアクセス権の有無を判別するのが一般的である。ユーザはアクセス権が有るファイルに対して、リード（読み出し）／ライト（書き込み）等の操作が可能である。
【０００４】
しかし、ユーザのファイルへのアクセス権の有無で判別する方式では、アプリケーションプログラムがアクセス権を記載したアクセス制御リストファイルにアクセスすることが可能であり、アプリケーションにより当該ファイルを削除、改竄、漏洩する可能性がある。また悪意のあるユーザにより当該ファイルを不正に削除、改竄、漏洩される可能性がある。
【０００５】
当該問題点に対して、下記の特許文献１に開示されている従来技術を図１０に示す。特許文献１に開示されているコンピュータシステムでは、複数ＯＳ制御プログラム１０４を用いて、ユーザが直接利用するホストＯＳ（オペレーティングシステム）１０２と、保護対象のファイルを管理するゲストＯＳ１０３を動作させる。通信制御プログラム１１０がアクセス制御リスト１１９に基づき、外部からのアクセス要求に対して、アクセス可否を判定し、アクセス可の場合にゲストＯＳ１０３を起動し保護対象のファイルにアクセスする。当該アクセス制御を実現するハードウェアの構成例としては、米国Ｉｎｔｅｌ社のＭＰＵ（マイクロプロセッサ）で使用されているＥｘｅｃｕｔｅ  Ｄｉｓａｂｌｅ  Ｂｉｔ等がある。これは、実アドレスをページという仮想アドレスに変換し、このページ毎にリード／ライト／実行という属性を付けてアクセス制御を行う。この機能によりゲストＯＳとホストＯＳのアクセス制御を実現できる。
【０００６】
【特許文献１】特開２００３−３４５６５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、複数ＯＳ制御プログラムは、アクセス制御リストファイルにアクセス可能である。また、一般的にワークメモリであるスタック領域は起動するゲストＯＳやアプリケーションにより使用サイズがまちまちであり、ページでアクセス権を設定することは難しい。バッファオーバーフロー攻撃等により、スタック領域内のデータを破壊、改竄し、悪意のあるプログラムコードに置き換えることができると、ゲストＯＳ、ホストＯＳ、或いは、複数ＯＳ制御プログラムの権限を奪うことができる。かかる脆弱性は、引数データ（変数）の保持やサブルーチンの戻りアドレスの格納にスタック領域を用いる場合に発現し得る。例えば、プログラム開発言語であるＣ言語等の仕様が該当し、ソフトウェアだけではより完全に防御することは非常に難しい。
【０００８】
次に、バッファオーバーフロー攻撃として知られるデータ或いはプログラムの破壊、改竄動作をＣ言語で記載されたプログラムを例に説明する。
【０００９】
先ず、図４に、正常なプログラムの実行（＃１〜＃５）とスタック領域の状態変化の様子を示す。スタック領域は一時的なデータの格納場所であるのでＲＡＭ（ランダムアクセスメモリ）上に設定される。
【００１０】
スタック領域は、通常次のようなプログラム実行処理（＃１〜＃５）に使用される。
＃１：メインルーチンのプログラムが実行される。
＃２：サブルーチンを呼び出し戻り先のアドレスがスタック領域内に確保される。
＃３：サブルーチン内のローカル変数領域（ａ，Ｂｕｆ）がスタック領域内に確保される。
＃４：変数（Ｂｕｆ）に入力データ（Ｄａｔａ）が格納されていく。
＃５：サブルーチンが終了し、スタックに格納されている戻り先アドレスにジャンプしてメインルーチンへ戻る。
【００１１】
しかし、＃５においてメインルーチンに戻るとスタック領域は開放されるが、スタック内にはデータが残っている。
【００１２】
図５に、バッファオーバーフロー攻撃を受けたときのプログラムの実行とスタック領域の状態変化の様子（＃６〜＃９）を示す。
【００１３】
＃６：図４に示す正常動作の＃１〜＃３と同じ動作をする。
＃７：変数（Ｂｕｆ）に確保されたサイズ以上のデータ（Ｄａｔａ）を入力する。例えばＣ言語で用いられるｓｔｒｃｐｙ関数等はデータサイズのチェックが行われないため、Ｂｕｆ領域を超えて、スタック領域内の他の領域まで上書きしてしまう。
＃８：サブルーチンを終了しても、正しい戻り先アドレスが上書きされているため本来の戻り先には戻れない。
＃９：Ｄａｔａの中にプログラムコード（ｐｒｏｇｒａｍ）と当該プログラムコードの先頭へ制御を移すアドレス（ａｄｄｒｅｓｓ）を埋め込むことにより攻撃者の意図した通りのプログラムが実行できる。
【００１４】
更に、スタック領域だけでなく、ＲＡＭ上の一時データ保持領域であるヒープ領域に対しても、同様な攻撃が可能となる。図６に、バッファオーバーフロー攻撃を受けてスタック領域からヒープ領域へデータ破壊が侵食したときのプログラムの実行とスタック領域とヒープ領域の状態変化の様子（＃１０〜＃１２）を示す。
【００１５】
＃１０：図４に示す正常動作の＃１〜＃３と同じ動作をする。
＃１１：変数（Ｂｕｆ）に確保されたサイズ以上のデータ（Ｄａｔａ）を入力する。
＃１２：更に、当該Ｄａｔａ入力により、ＲＡＭ上のヒープ領域にまでデータ破壊が侵食する。
【００１６】
ヒープ領域まで破壊されると、もはや正常動作はできす、攻撃者の意のままになる可能性がある。このような処理により攻撃者が意図したプログラムを実行し、内部の機密データに対して削除、改竄、漏洩を行うことができる。
【００１７】
本発明は、上記問題点に鑑みてなされたものであり、その目的は、ＯＳやアプリケーションのプログラム実行時にスタック領域内のデータを悪意のあるコードに改竄されたとしても、改竄されたコードによる悪意のあるプログラムの実行を阻止し、記憶領域内の機密データに対する削除、改竄、漏洩等を防止可能なメモリ保護機能を有するコンピュータシステムを提供する点にある。
【課題を解決するための手段】
【００１８】
上記目的を達成するための本発明に係るコンピュータシステムは、コンピュータプログラムを実行可能なＣＰＵと、前記コンピュータプログラム及びデータを格納可能な１または複数のメモリ装置で構成される記憶領域と、前記記憶領域のアドレス毎の前記ＣＰＵからのプログラム実行用のアクセス権の有無を設定したアクセス制御メモリマップを記憶するメモリマップ回路を備え、前記アクセス制御メモリマップにより前記アクセス権が無いと規定されるアドレス範囲の前記記憶領域に対する、通常の読み出し（リード）及び書き込み（ライト）動作に対するアクセスは許可されるが、前記ＣＰＵからのプログラム実行用のアクセスは禁止されることを第１の特徴とする。
【００１９】
上記第１の特徴のコンピュータシステムによれば、アクセス制御メモリマップによってプログラム実行用のアクセス権の有無を設定し、通常のリード／ライトは可能であるが、プログラム実行用のアクセスが不可能なアドレス範囲を持つことが可能となり、当該アドレス範囲の記憶領域内のデータは、通常のリード／ライトによって悪意のあるプログラムに書き換わっても、当該悪意のあるプログラムの実行による記憶領域内の機密データに対する削除、改竄、漏洩が不可能となり、記憶領域内の機密データが安全に保護される。
【００２０】
更に、本発明に係るコンピュータシステムは、上記第１の特徴に加えて、前記ＣＰＵのプログラムカウンタで指定される実行プログラム格納アドレスの前記記憶領域への前記ＣＰＵからの前記アクセス権の有無を、前記アクセス制御メモリマップに基づいて判定し、前記アクセス権が無い場合に、前記ＣＰＵから前記実行プログラム格納アドレスの前記記憶領域へのアクセスを不能にする所定の処理を前記ＣＰＵに実行させるアクセス禁止信号を出力するアクセス権判定回路を備えていることを第２の特徴とする。
【００２１】
上記第２の特徴のコンピュータシステムによれば、アクセス制御メモリマップによってプログラム実行用のアクセス権が無いと規定されるアドレス範囲の前記記憶領域に対するアクセスは、ＣＰＵのプログラムカウンタで指定されるプログラム実行用の実行プログラム格納アドレスが、アクセス制御メモリマップに基づいて前記アクセス権が無いと判定された場合に、ＣＰＵからのプログラム実行用のアクセスとして禁止されるため、当該アドレス範囲の記憶領域内のデータは、通常のリード／ライトによって悪意のあるプログラムに書き換わっても、当該悪意のあるプログラムの実行による記憶領域内の機密データに対する削除、改竄、漏洩が不可能となり、記憶領域内の機密データが安全に保護される。
【００２２】
更に、本発明に係るコンピュータシステムは、上記第２の特徴に加えて、前記アクセス権判定回路は、前記プログラムカウンタからの前記実行プログラム格納アドレスの入力と、前記メモリマップ回路からの前記アクセス制御メモリマップの入力を受け付けて、前記実行プログラム格納アドレスと前記アクセス制御メモリマップを照合する照合回路を備え、前記照合回路の照合結果に基づいて前記アクセス禁止信号を活性化させることを第３の特徴とする。
【００２３】
上記第３の特徴のコンピュータシステムによれば、実行プログラム格納アドレスと、アクセス制御メモリマップによってプログラム実行用のアクセス権が無い或いは有ると規定されるアドレス範囲とを照合した結果に基づいて、実行プログラム格納アドレスの当該アクセス権の有無を判定でき、悪意のあるプログラムが、正規のプログラムが格納されているアドレス範囲以外の当該アクセス権の無いアドレス範囲に上書きされたとしても実行不可能となって、当該悪意のあるプログラムの実行による記憶領域内の機密データに対する削除、改竄、漏洩が不可能となり、記憶領域内の機密データが安全に保護される。
【００２４】
更に、本発明に係るコンピュータシステムは、上記第３の特徴に加えて、前記アクセス権判定回路は、前記プログラムカウンタからの前記実行プログラム格納アドレスの入力を、前記ＣＰＵが命令をフェッチするタイミング信号の入力と同期して判別することを第４の特徴とする。
【００２５】
上記第４の特徴のコンピュータシステムによれば、ＣＰＵが命令をフェッチするタイミング信号と同期して実行プログラム格納アドレスの入力を判別することで、実行プログラム格納アドレスを正確に判別でき、上記第３の特徴のコンピュータシステムの作用効果を確実に奏することができる。
【００２６】
更に、本発明に係るコンピュータシステムは、上記第２乃至第４の何れかの特徴に加えて、前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、データ格納専用アドレス領域として固定されていることを第５の特徴とする。
【００２７】
上記第５の特徴のコンピュータシステムによれば、前記ＣＰＵからの前記アクセス権の無いアドレス範囲が固定されていて、安全なデータ格納用領域として使用することができる。
【００２８】
更に、本発明に係るコンピュータシステムは、上記第２乃至第４の何れかの特徴に加えて、前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、スタック領域として使用されることを第６の特徴とする。
【００２９】
上記第６の特徴のコンピュータシステムによれば、スタック領域上のデータはプログラムとして実行不可能となるため、バッファオーバーフロー攻撃等によりスタック上に悪意のあるプログラムコードが仕込まれたとしても、不正な実行を防ぐことができる。
【００３０】
更に、本発明に係るコンピュータシステムは、上記第２乃至第６の何れかの特徴に加えて、前記メモリマップ回路が、前記ＣＰＵのプログラム実行による前記アクセス制御メモリマップの内容変更が不能な構成であることを第７の特徴とする。
【００３１】
上記第７の特徴のコンピュータシステムによれば、アクセス制御メモリマップの内容が、悪意のあるプログラムによっても変更不能であるため、悪意のあるプログラムによるデータの削除、改竄、漏洩をより高度に防止できる。尚、ＣＰＵからメモリマップ回路へのアクセス制御メモリマップの内容変更に対するアクセスは、ユーザによる本コンピュータシステムの使用状態、つまり、出荷後に制限されればよい。
【００３２】
更に、本発明に係るコンピュータシステムは、上記第６の特徴に加えて、前記アクセス制御メモリマップで規定される前記ＣＰＵからの前記アクセス権の無いアドレス範囲が、前記スタック領域の増減に応じて変化することを第８の特徴とする。
【００３３】
上記第８の特徴のコンピュータシステムによれば、前記アクセス権の無いアドレス範囲が、プログラムの実行中は増減するスタック領域に合わせて増減することにより、無駄の無いアクセス制限領域が設定できる。
【００３４】
更に、本発明に係るコンピュータシステムは、上記第８の特徴に加えて、前記記憶領域の一部が、前記ＣＰＵからの前記アクセス権が無いスタック領域と、前記ＣＰＵからの前記アクセス権が有るヒップ領域に分割されており、前記スタック領域がオーバーフローして前記ヒップ領域が侵食された場合に、侵食された前記ヒップ領域が前記ＣＰＵからの前記アクセス権がない状態となるように、前記アクセス制御メモリマップが変化することを第９の特徴とする。
【００３５】
上記第９の特徴のコンピュータシステムによれば、スタック領域のオーバーフローによって、ＣＰＵからのプログラム実行用のアクセス権のあるヒープ領域のデータが悪意のあるプログラムコードに書き換わっても実行不能となり、悪意のあるプログラムの実行を防止できる。
【００３６】
更に、本発明に係るコンピュータシステムは、上記第２乃至第８の何れかの特徴に加えて、前記記憶領域の一部が、前記ＣＰＵからの前記アクセス権が無いスタック領域と、前記ＣＰＵからの前記アクセス権が有るヒップ領域に分割されており、前記スタック領域がオーバーフローしても前記ヒップ領域が侵食されないように、前記スタック領域と前記ヒップ領域の各アドレス範囲が分離して設定されていることを第１０の特徴とする。
【００３７】
上記第１０の特徴のコンピュータシステムによれば、スタック領域のオーバーフローによって、ＣＰＵからのプログラム実行用のアクセス権のあるヒープ領域のデータが悪意のあるプログラム等に書き換わるのを防止できる。
【００３８】
更に、本発明に係るコンピュータシステムは、上記第２乃至第１０の何れかの特徴に加えて、前記アクセス禁止信号が、前記ＣＰＵに対して所定の割り込み動作を発生させることを第１１の特徴とする。
【００３９】
上記第１１の特徴のコンピュータシステムによれば、スタック領域内に埋め込まれた不正なプログラムを実行しようとしたときに、所定の割り込み動作を発生させて不正なプログラムの実行を制御することができる。
【００４０】
更に、本発明に係るコンピュータシステムは、上記第２乃至第１０の何れかの特徴に加えて、前記アクセス禁止信号が、前記ＣＰＵに対してリセット動作を発生させることを第１２の特徴とする。
【００４１】
上記第１２の特徴のコンピュータシステムによれば、スタック領域内に埋め込まれた不正なプログラムを実行しようとしたときに、ＣＰＵに対してリセットをかけて全て初期化することにより不正なプログラムの実行を防止できる。
【００４２】
更に、本発明に係るＩＣカードは、上記何れかの特徴のメモリ保護機能を有するコンピュータシステムを搭載してなることを特徴とする。
【００４３】
上記特徴のＩＣカードによれば、バッファオーバーフロー攻撃等による不正なプログラムの実行を効果的に防止できるＩＣカードを提供可能となる。
【発明を実施するための最良の形態】
【００４４】
以下、本発明に係るメモリ保護機能を有するコンピュータシステム（以下、適宜「本発明システム」と略称する）の実施形態を図面に基づいて説明する。
【００４５】
〈第１実施形態〉
図１に、本発明システム１の概略の構成例を示す。図１に示すように、本発明システム１は、ＣＰＵ（中央演算処理装置）１０、ＲＯＭ（読み出し専用メモリ）１１、ＲＡＭ１２、不揮発性メモリ１３、ペリフェラルＩ／Ｏインタフェース１４、メモリマップ回路１５、アクセス権判定回路１６、データバス１７、及び、アドレスバス１８を備えて構成される。ＣＰＵ１０、ＲＯＭ１１、ＲＡＭ１２、不揮発性メモリ１３、及び、ペリフェラルＩ／Ｏインタフェース１４は、データバス１７とアドレスバス１８を介して相互に接続されている。ＲＯＭ１１、ＲＡＭ１２、及び、不揮発性メモリ１３によって、ＣＰＵ１０で実行可能なプログラムコード及びデータを格納する記憶領域１９が構成される。
【００４６】
尚、本実施形態では、記憶領域１９の内、プログラムコードを格納するプログラムコード領域、及び、固定データを格納する固定データ領域は、ＲＯＭ１１及び不揮発性メモリ１３内に形成され、また、プログラムの実行時に利用される記憶領域で、動的なデータを格納するスタック領域とその他のヒープ領域は、高速で読み出し及び書き込み可能なＲＡＭ１２内に形成される場合を想定する。
【００４７】
メモリマップ回路１５は、ＲＡＭまたはレジスタで構成され、記憶領域１９のアドレス毎のＣＰＵ１０からのプログラム実行用のアクセス権（以下、適宜「実行権」と略称する）の有無を設定したアクセス制御メモリマップを記憶し、アクセス制御メモリマップの情報をアクセス権判定回路１６に対して出力する。本実施形態では、メモリマップ回路１５の入力及び出力は、データバス１７と分離され直接の接続がないため、ＣＰＵ１０からプログラムの実行によってアクセス制御メモリマップの内容が不用意に或いは不正に変更されるのを防止している。
【００４８】
アクセス権判定回路１６は、ＣＰＵ１０内のプログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃで指定される記憶領域１９への実行権の有無を、実行プログラム格納アドレス毎に判定する。図２に、アクセス権判定回路１６の入力信号、出力信号、及び、内部回路構成の詳細を示す。図２に示す実施例では、メモリマップ回路１５から出力されるアクセス制御メモリマップの情報は、ＣＰＵ１０からのプログラム実行用のアクセスが不許可である（つまり、実行権の無い）実行不許可アドレス範囲の上限と下限を示す上限アドレス信号ＳＡ１と下限アドレス信号ＳＡ２である。アクセス権判定回路１６は、実行プログラム格納アドレスＳｐｃとアクセス制御メモリマップの情報ＳＡ１，ＳＡ２を照合する照合回路２１を備え、照合回路２１が、プログラムカウンタ２０から入力される実行プログラム格納アドレスＳｐｃと、上限アドレス信号ＳＡ１と下限アドレス信号ＳＡ２の夫々との比較を行い、実行プログラム格納アドレスＳｐｃが上限アドレス信号ＳＡ１と下限アドレス信号ＳＡ２の間の実行不許可アドレス範囲に存在するか否かを判定する。尚、本実施形態では、実行プログラム格納アドレスＳｐｃが実行不許可アドレス範囲に存在するか否か、つまり、実行プログラム格納アドレスＳｐｃの実行権の有無は、ＣＰＵ１０から入力されるＣＰＵ１０が命令をフェッチするタイミングで活性化されるフェッチタイミング信号Ｓｆｔに同期して判定される。具体的には、実行プログラム格納アドレスＳｐｃが実行不許可アドレス範囲に存在し、且つ、フェッチタイミング信号Ｓｆｔが活性化状態（高レベル時）であると、実行プログラム格納アドレスＳｐｃの実行権が無いと判定して、アクセス禁止信号ＳＣを活性化して（高レベルにして）出力する。
【００４９】
アクセス禁止信号ＳＣは、ＣＰＵ１０から記憶領域１９のプログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃで指定されるアドレス領域へアクセスして、当該アドレス領域に格納されている不正プログラムの実行を不能にする後述する処理をＣＰＵ１０に対して実行させる。この結果、記憶領域１９の全アドレス領域の内、メモリマップ回路１５に記憶されているアクセス制御メモリマップで規定される実行不許可アドレス範囲に不正に書き込まれたプログラムの実行が不能となり、当該不正プログラムの実行による、記憶領域１９内に格納されている機密データに対する削除、改竄、漏洩が未然に防止される。
【００５０】
更に、本発明システム１は、図３に示すように、メモリマップ回路１５からアクセス制御メモリマップの実行不許可アドレス範囲の上限を示す上限アドレス信号ＳＡ１としてＣＰＵ１０から出力されるスタックポインタ２２の値を用いることで、スタック領域の増減に応じて変化するように構成される。例えば、ＣＰＵ１０から出力されるスタックポインタ２２の値ＳＰを上限アドレス信号ＳＡ１として使用し、実行中のサブルーチンで使用されるスタック領域分を減算した値を実行不許可アドレス範囲の下限を示す下限アドレス信号ＳＡ２とすればよい。
【００５１】
〈実施例１〉
次に、図５に例示したようなバッファオーバーフロー攻撃受けた場合の本発明システム１における防御動作の一例を説明する。図７に、バッファオーバーフロー攻撃を受けたときの正規のプログラムの実行、悪意のある不正プログラムの実行阻止、及び、スタック領域の状態変化の様子（＃１３〜＃１５）を示す。
【００５２】
＃１３：バッファオーバーフロー攻撃を受けたときの動作は図５に示した＃６〜＃８と同じ動作をする。
＃１４：改竄された戻り先アドレスにより、実行不許可アドレス範囲内に設定されたスタック領域に埋め込まれた悪意のある不正プログラムへＣＰＵ１０は制御を移行しようとする。ここで、プログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃがメモリマップ回路１５に記憶されたアクセス制御メモリマップの実行不許可アドレス範囲内であることをアクセス権判定回路１６が検出し、アクセス禁止信号ＳＣが活性化される。
＃１５：アクセス禁止信号ＳＣの活性化により不正プログラムの実行を検出し、アクセス禁止信号ＳＣをＣＰＵ１０への割り込み要求信号として用いることにより、ＣＰＵ１０において割り込み処理が起動される。この割り込み処理の中で、スタック領域のクリア（データ消去）を行う等の適切な処理を行うことにより、悪意のある不正プログラムによる内部機密データの削除、改竄、漏洩を防ぐことができる。
【００５３】
ここで、上記ステップ＃１３で受けたバッファオーバーフロー攻撃によって、図６の＃１２に示したように予め設定されたスタック領域を超えてヒープ領域のデータが書き換えられた場合には、改竄された戻り先アドレスにより、ヒープ領域に埋め込まれた悪意のある不正プログラムへＣＰＵ１０は制御を移行しようとする。
【００５４】
しかしながら、スタック領域を超過するデータ書き込みによってスタックポインタの指示値がヒープ領域内に移行するため、実行不許可アドレス範囲の上限を示す上限アドレス信号ＳＡ１もヒープ領域内に移行し、バッファオーバーフロー攻撃で侵食されたヒープ領域の実行権は、当初の実行権有りの状態から実行権無しの状態に変化する。従って、上記＃１４の場合と同様に、プログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃがメモリマップ回路１５に記憶されたアクセス制御メモリマップの実行不許可アドレス範囲内であることをアクセス権判定回路１６が検出し、アクセス禁止信号ＳＣが活性化される。そして、上記＃１５の割り込み動作が実行され、ヒープ領域に埋め込まれた悪意のある不正プログラムが実行不能となり、内部機密データの削除、改竄、漏洩を防ぐことができる。
【００５５】
尚、ＲＡＭ１２に設定されたスタック領域とヒープ領域のアドレス範囲を連続にせずに分離することで、具体的には、スタック領域とヒープ領域の境界のアドレス範囲をＲＯＭ１１または不揮発性メモリ１３のアドレス範囲とし、バッファオーバーフロー攻撃によってヒープ領域が侵食されないようにするのも、バッファオーバーフロー攻撃に対する防御策として有効である。
【００５６】
〈実施例２〉
次に、図５に例示したようなバッファオーバーフロー攻撃受けた場合の本発明システム１における防御動作の他の一例を説明する。本実施例２では、システム全体を初期状態にしてバッファオーバーフロー攻撃に対して防御する動作を説明する。
【００５７】
図８に、悪意のある不正プログラムの実行を検出しリセット処理をするときのプログラム実行、不正プログラムの実行阻止、及び、スタック領域の状態変化の様子（＃１６〜＃１８）を示す。
【００５８】
＃１６：バッファオーバーフロー攻撃を受けたときの動作は図５に示した＃６〜＃８と同じ動作をする。
＃１７：改竄された戻り先アドレスにより、実行不許可アドレス範囲内に設定されたスタック領域に埋め込まれた悪意のある不正プログラムへＣＰＵ１０は制御を移行しようとする。ここで、プログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃがメモリマップ回路１５に記憶されたアクセス制御メモリマップの実行不許可アドレス範囲内であることをアクセス権判定回路１６が検出し、アクセス禁止信号ＳＣが活性化される（実施例１の＃１４と同じ動作）。
＃１８：アクセス禁止信号ＳＣの活性化により不正プログラムの実行を検出し、アクセス禁止信号ＳＣをＣＰＵ１０へのリセット要求信号として用いることにより、ＣＰＵ１０においてリセット処理が起動され、ＣＰＵ１０がリスタートする。ＣＰＵ１０がリスタートすることにより、悪意のある不正プログラムの実行をより確実に防ぐことができる。
【００５９】
ここで、上記ステップ＃１６で受けたバッファオーバーフロー攻撃によって、図６の＃１２に示したように予め設定されたスタック領域を超えてヒープ領域のデータが書き換えられた場合には、改竄された戻り先アドレスにより、ヒープ領域に埋め込まれた悪意のある不正プログラムへＣＰＵ１０は制御を移行しようとする。
【００６０】
しかしながら、スタック領域を超過するデータ書き込みによってスタックポインタの指示値がヒープ領域内に移行するため、実行不許可アドレス範囲の上限を示す上限アドレス信号ＳＡ１もヒープ領域内に移行し、バッファオーバーフロー攻撃で侵食されたヒープ領域の実行権は、当初の実行権有りの状態から実行権無しの状態に変化する。従って、上記＃１７（＃１４）の場合と同様に、プログラムカウンタ２０の値で指示される実行プログラム格納アドレスＳｐｃがメモリマップ回路１５に記憶されたアクセス制御メモリマップの実行不許可アドレス範囲内であることをアクセス権判定回路１６が検出し、アクセス禁止信号ＳＣが活性化される。そして、上記＃１８のリセット処理が実行され、ヒープ領域に埋め込まれた悪意のある不正プログラムが実行不能となり、内部機密データの削除、改竄、漏洩を防ぐことができる。
【００６１】
〈第２実施形態〉
上記第１実施形態では、メモリマップ回路１５はＲＡＭまたはレジスタで構成され、そこに記憶されているアクセス制御メモリマップで規定される実行不許可アドレス範囲は、物理的には変更可能であり、特に図３に示す構成例では、スタックポインタ２２の値に応じて実行不許可アドレス範囲が変化する場合を説明した。しかし、本第２実施形態では、実行不許可アドレス範囲が、データ格納専用アドレス領域として予め固定されている場合について説明する。データ格納専用アドレス領域は、例えば、スタック領域とヒープ領域を含むＲＡＭ１２の全アドレス範囲をカバーする。
【００６２】
第２実施形態では、アクセス制御メモリマップがメモリマップ回路１５内に、ハードウェア或いはソフトウェア処理によって書き換え不能に記憶されている。アクセス制御メモリマップが書き換え不能であることで、メモリマップ回路１５の回路構成は、上記第１実施形態に比べて簡単化できる。尚、本発明システム１全体の構成は、図１に示す構成と同様である。
【００６３】
メモリマップ回路１５をＲＯＭで構成する場合は、出荷段階で既に実行不許可アドレス範囲が固定されており出荷後には変更できないが、メモリマップ回路１５をＲＡＭまたはレジスタで構成する場合は、製造後の出荷テストと併せてテスタ側から、或いは、特別なプログラム（不揮発性メモリ１３等に格納しておく）に従い、ＣＰＵ１０により設定することができる。後者の場合、製造後の許可範囲の設定は、設定後に当該プログラムを消去する等によって、設定内容の改竄の危険性がなければ特に手段は問わない。
【００６４】
本第２実施形態では、実行不許可アドレス範囲が固定されていれば、個人情報等の機密情報の格納領域を予め確保し、その格納領域に対して無条件に実行権無しに設定することにより、実行不許可アドレス範囲を完全なデータ専用領域として使用できる。
【００６５】
更に、第１実施形態におけるメモリマップ回路１５の機能と第２実施形態におけるメモリマップ回路１５の機能を組み合わせることにより、つまり、固定的な実行不許可アドレス範囲と可変的な実行不許可アドレス範囲を組み合わせて使用することで、より確実な悪意のある不正プログラムの実行を防ぐことができる。
【００６６】
〈第３実施形態〉
次に、上記第１または第２実施形態の本発明システム１の応用例について説明する。図９に、本発明システム１を搭載したＩＣカード２の構成例を示す。尚、図１に示す本発明システム１と同じ構成要素には同じ符号を付して重複する説明は省略する。ＩＣカードには、パスワードや電子証明情報など重要なデータが記録されている。これらのデータを狙う攻撃者に対して、本発明システム１を搭載することによりセキュアなＩＣカードを実現することができる。
【００６７】
〈別実施形態〉
次に、本発明システムの別実施形態につき説明する。
【００６８】
〈１〉上記第１実施形態では、スタック領域のアドレス範囲は、データの書き込み応じて上位アドレス方向に拡張する場合を想定し、実行不許可アドレス範囲の上限を示す上限アドレス信号ＳＡ１としてスタックポインタ２２の値を用いる場合を説明したが、スタック領域のアドレス範囲が下位アドレス方向に拡張する場合では、実行不許可アドレス範囲の下限を示す下限アドレス信号ＳＡ２としてスタックポインタ２２の値を用いるようにすればよい。
【００６９】
〈２〉本発明システム１の構成例として、図１及び図３の構成を例示したが、本発明システム１の構成例はこれらに限定されるものではない。例えば、上記各実施形態では、記憶領域１９は、ＲＯＭ１１、ＲＡＭ１２、及び、不揮発性メモリ１３の３種類のメモリ装置で構成される場合を想定したが、例えば、ＣＰＵ１０のプログラム実行時に使用する記憶領域がＲＡＭ１２だけで構成される実施形態であっても構わない。
【００７０】
〈３〉上記各実施形態では、メモリマップ回路１５は、図１、図２及び図３において独立した回路として例示したが、ＣＰＵ１０またはアクセス権判定回路１６内に組み込まれても構わない。また、アクセス権判定回路１６は、図１、図２及び図３において独立した回路として例示したが、ＣＰＵ１０内にハードウェア回路として組み込まれても構わない。
【００７１】
〈４〉上記第３実施形態では、本発明システム１の応用例としてＩＣカードを説明したが、本発明システム１の応用例はＩＣカードに限定されるものではない。
【産業上の利用可能性】
【００７２】
本発明に係るコンピュータシステムは、ユーザの不注意や不正使用による記憶領域内の機密データの削除、改竄、漏洩を防止するアクセス制御の必要なコンピュータシステムに利用可能である。
【図面の簡単な説明】
【００７３】
【図１】本発明に係るコンピュータシステムの一実施形態における回路構成を示すブロック図
【図２】本発明に係るコンピュータシステムのアクセス権判定回路の入力信号、出力信号、及び、内部回路構成の一例を示す回路図
【図３】本発明に係るコンピュータシステムの一実施形態における他の回路構成を示すブロック図
【図４】バッファオーバーフロー攻撃されていない場合の正常なプログラムの実行とスタック領域の状態変化の様子を示す図
【図５】バッファオーバーフロー攻撃を受けたときのプログラムの実行とスタック領域の状態変化の様子を示す図
【図６】バッファオーバーフロー攻撃を受けてスタック領域からヒープ領域へデータ破壊が侵食したときのプログラムの実行とスタック領域とヒープ領域の状態変化の様子を示す図
【図７】本発明に係るコンピュータシステムの一実施形態におけるバッファオーバーフロー攻撃を受けたときの不正プログラムの実行を阻止する動作過程の一例を示す図
【図８】本発明に係るコンピュータシステムの一実施形態におけるバッファオーバーフロー攻撃を受けたときの不正プログラムの実行を阻止する動作過程の他の一例を示す図
【図９】本発明に係るＩＣカードの構成例を示すブロック図
【図１０】従来のデータ保護機能を有するコンピュータシステムの一例を示すブロック図
【符号の説明】
【００７４】
１：      本発明に係るコンピュータシステム
２：      本発明に係るＩＣカード
１０：    ＣＰＵ
１１：    ＲＯＭ
１２：    ＲＡＭ
１３：    不揮発性メモリ
１４：    ペリフェラルＩ／Ｏインタフェース
１５：    メモリマップ回路
１６：    アクセス権判定回路
１７：    データバス
１８：    アドレスバス
１９：    記憶領域
２０：    プログラムカウンタ
２１：    照合回路
２２：    スタックポインタ
１０１：  メインメモリ
１０２：  ホストＯＳ
１０３：  ゲストＯＳ
１０４：  複数ＯＳ制御プログラム
１０５：  文書作成プログラム
１０６：  管理プログラム
１０７：  署名要求プログラム
１０８：  署名作成プログラム
１０９：  管理プログラム
１１０：  通信制御プログラム
１１１：  ＯＳ間通信プログラム
１１２：  キーボード
１１３：  ＣＰＵ
１１４：  ディスプレイ
１１５：  ハードディスク
１１６：  ハードディスク
１１７：  秘密鍵
１１８：  ログ
１１９：  アクセス制御リスト
Ｓｐｃ：  実行プログラム格納アドレス
ＳＡ１：  上限アドレス信号
ＳＡ２：  下限アドレス信号
Ｓｆｔ：  フェッチタイミング信号
ＳＣ：    アクセス禁止信号
【図１】
2007304954.tif 000003
【図２】
2007304954.tif 000004
【図３】
2007304954.tif 000005
【図４】
2007304954.tif 000006
【図５】
2007304954.tif 000007
【図６】
2007304954.tif 000008
【図７】
2007304954.tif 000009
【図８】
2007304954.tif 000010
【図９】
2007304954.tif 000011
【図１０】
2007304954.tif 000012