(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-07
(45)【発行日】2024-02-16
(54)【発明の名称】スタック・ポインタを検証すること
(51)【国際特許分類】
G06F 12/14 20060101AFI20240208BHJP
G06F 9/30 20180101ALI20240208BHJP
G06F 9/32 20180101ALI20240208BHJP
G06F 21/62 20130101ALI20240208BHJP
【FI】
G06F12/14 510A
G06F9/30 380Z
G06F9/32 380
G06F21/62
(21)【出願番号】P 2021517598
(86)(22)【出願日】2019-09-03
(86)【国際出願番号】 GB2019052449
(87)【国際公開番号】W WO2020074854
(87)【国際公開日】2020-04-16
【審査請求日】2022-08-26
(32)【優先日】2018-10-08
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2018-11-23
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
【審査官】宮司 卓佳
(56)【参考文献】
【文献】特表2015-534186(JP,A)
【文献】米国特許出願公開第2014/0373171(US,A1)
【文献】特開2004-199693(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 21/60-21/62
G06F 9/30
G06F 9/32
(57)【特許請求の範囲】
【請求項1】
少なくとも安全なドメイン及びあまり安全でないドメインを含む複数のセキュリティ・ドメインのうちの1つにおいてデータ処理を実施するための処理回路構成と、
前記複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、前記メモリ・アクセスが許可されるかどうかについてチェックするためのメモリ・アクセス・チェック回路構成と、
スタック・データ構造を示す性質をもつスタック・ポインタをメモリに格納するための少なくとも1つのスタック・ポインタ・レジスタと
を備え、
前記あまり安全でないドメインにおける処理から、前記安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、
前記ターゲット命令が、前記安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令以外の命令であるとき、前記処理回路構成が障害をトリガするように構成され、
前記ターゲット命令が前記ゲートウェイ命令であるとき、前記処理回路構成が、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガするように構成されている、
装置。
【請求項2】
前記スタック・ポインタ検証アクションが、前記選択したスタック・ポインタ・レジスタに格納された前記選択したスタック・ポインタから導出されたターゲット・アドレスからの値のロードをリクエストするロード・リクエストが許可されるかどうかについてチェックするための許可チェックをトリガすることを含む、請求項1に記載の装置。
【請求項3】
前記処理回路構成が、複数の特権レベルのうちの1つで動作するように構成され、
前記メモリ・アクセス・チェック回路構成が、選択した特権レベルが前記ターゲット・アドレスにアクセスするのを禁止されていることを前記ターゲット・アドレスに適用可能なアクセス許可の選択したセットが明記している場合、障害をトリガするように構成されている、
請求項2に記載の装置。
【請求項4】
前記処理回路構成が、複数の動作モードのうちの1つでデータ処理を実施するように構成され、
前記選択した特権レベルが、前記安全なドメインと、プログラム・フローの前記所与の変更時の前記処理回路構成の動作の現在のモードとの組合せで処理に関連付けられた特権レベルを含む、
請求項3に記載の装置。
【請求項5】
アクセス許可の前記選択したセットが、前記処理回路構成の現在のドメインが前記安全なドメインであるときに、前記ターゲット・アドレスに適用可能なアクセス許可のセットを備える、請求項3及び4のいずれかに記載の装置。
【請求項6】
前記ターゲット・アドレスが、前記選択したスタック・ポインタに等しい、請求項2から5までのいずれかに記載の装置。
【請求項7】
前記ターゲット命令が前記ゲートウェイ命令であるときのプログラム・フローの前記所与の変更に応答して、前記処理回路構成が、前記ゲートウェイ命令に応答して再入場チェックを実施するように構成され、
前記再入場チェックが、前記ターゲット・アドレスからロードされた値が、少なくとも1つの整合性署名値のうちの1つであるときに障害をトリガすることを含む、請求項2から6までのいずれかに記載の装置。
【請求項8】
前記ターゲット命令が前記ゲートウェイ命令であるときのプログラム・フローの前記所与の変更に応答して、
前記処理回路構成が、前記再入場チェックが有効であるか無効であるかを指定する再入場チェック可能値に基づいて、前記ゲートウェイ命令に応答して前記再入場チェックを実施するべきか否かを判定するように構成されている、
請求項7に記載の装置。
【請求項9】
前記ターゲット命令が前記ゲートウェイ命令であるときのプログラム・フローの前記所与の変更に応答して、
前記処理回路構成が、再入場チェックが無効であること
を再入場チェック可能値が指定するときでも、前記ターゲット・アドレスに対する前記許可チェックをトリガするように構成されている、
請求項7に記載の装置。
【請求項10】
例外条件に応答して、前記処理回路構成の現在のセキュリティ・ドメインに少なくとも基づいて選択された複数の例外エントリ遷移のうちの1つを実施するための例外制御回路構成であって、前記複数の例外エントリ遷移の少なくともサブセットに対して、前記少なくとも1つのスタック・ポインタ・レジスタのうちの1つに格納された前記スタック・ポインタによって識別されたスタック・データ構造への、少なくとも1つの整合性署名値のうちの前記1つを含むスタック・フレームの保存をトリガするように構成されている、例外制御回路構成を備える、請求項7から9までのいずれかに記載の装置。
【請求項11】
例外復帰条件に応答して、前記例外復帰条件に関連付けられたセキュリティ・ドメインに少なくとも基づいて選択された複数の例外復帰遷移のうちの1つを実施するための例外制御回路構成であって、前記複数の例外復帰遷移の少なくともサブセットに対して、前記例外復帰遷移のために選択された所与のスタック・データ構造からスタック・フレームにアクセスすること、及び、前記アクセスしたスタック・フレーム内の所定の位置における前記値と、前記少なくとも1つの整合性署名値のうちの少なくとも1つとの間に不一致が検出されたときに障害をトリガすることを含む整合性署名チェックを実施するように構成されている、例外制御回路構成を備える、請求項7から10までのいずれかに記載の装置。
【請求項12】
前記再入場チェックは、構造的状態をスタック又はアンスタックするために、どのスタック・ポインタ・レジスタを使用するべきかを判定するためのスタック・ポインタ選択値が所定の値を有するときに障害をトリガすることも含む、請求項7から11までのいずれかに記載の装置。
【請求項13】
所与のセキュリティ・ドメイン内で、前記処理回路構成が、例外処理のためのハンドラ・モード、及びバックグラウンド処理のためのスレッド・モードを含む複数のモードのうちの1つでデータ処理を実施するように構成され、
前記装置が、
前記スレッド・モードで例外条件が発生し、前記スタック・ポインタ選択値が第1の値を有するときに、処理スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別された処理スタック・データ構造、及び
前記スレッド・モードで前記例外条件が発生し、前記スタック・ポインタ選択値が第2の値を有するときに、メイン・スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別されたメイン・スタック・データ構造
への、構造的状態データの保存を前記例外条件に応答してトリガするための例外制御回路構成を備え、
前記所定の値が、前記第2の値を備える、
請求項12に記載の装置。
【請求項14】
少なくとも1つの安全なスレッド・モードから安全なハンドラ・モードへの例外エントリ遷移に応答して、前記例外制御回路構成が、前記スタック・ポインタ選択値を前記第2の値に更新するように構成されている、請求項13に記載の装置。
【請求項15】
前記安全なドメインにおける処理から、前記安全なドメインに関連付けられた命令アドレスを有するゲートウェイ命令へのプログラム・フローの変更に応答して、前記処理回路構成が、前記再入場チェックを省略するように構成されている、請求項7から14までのいずれかに記載の装置。
【請求項16】
所与のセキュリティ・ドメイン内で、前記処理回路構成が、例外処理のためのハンドラ・モード、及びバックグラウンド処理のためのスレッド・モードを含む複数のモードのうちの1つでデータ処理を実施するように構成され、
前記装置が、
前記スレッド・モードで例外条件が発生し、スタック・ポインタ選択値が第1の値を有するときに、処理スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別された処理スタック・データ構造、及び
前記スレッド・モードで前記例外条件が発生し、前記スタック・ポインタ選択値が第2の値を有するときに、メイン・スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別されたメイン・スタック・データ構造
への、構造的状態データの保存を前記例外条件に応答してトリガするための例外制御回路構成を備え、
前記スタック・ポインタ検証アクションが、前記スタック・ポインタ選択値が前記第2の値を有するときに障害をトリガすることを含む、
請求項1に記載の装置。
【請求項17】
前記ターゲット命令が前記ゲートウェイ命令であり、前記ゲートウェイ命令に応答して実施された少なくとも1つのセキュリティ・チェックに合格したときのプログラム・フローの前記所与の変更に応答して、前記処理回路構成が、前記あまり安全でないドメインから前記安全なドメインへ
のスイッチをトリガするように構成されている、請求項1から16までのいずれかに記載の装置。
【請求項18】
制御フローの前記所与の変更に応答して、前記ターゲット命令が前記ゲートウェイ命令であるとき、前記処理回路構成が、少なくとも、前記処理回路構成が所定の動作モードであるときに、前記スタック・ポインタ検証アクションをトリガするように構成されている、請求項1から17までのいずれかに記載の装置。
【請求項19】
所与のセキュリティ・ドメイン内で、前記処理回路構成が、例外処理のためのハンドラ・モード、及びバックグラウンド処理のためのスレッド・モードを含む複数のモードのうちの1つでデータ処理を実施するように構成され、
前記所定の動作モードが、前記スレッド・モードを含む、
請求項18に記載の装置。
【請求項20】
制御フローの前記所与の変更に応答して、前記ターゲット命令が前記ゲートウェイ命令であるとき、前記処理回路構成が、前記処理回路構成が前記所定の動作モード以外の動作モードであるときに、前記スタック・ポインタ検証アクションを省略するように構成されている、請求項18及び19のいずれか一項に記載の装置。
【請求項21】
複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、前記メモリ・アクセスが許可されるかどうかについてチェックする、少なくとも安全なドメイン及びあまり安全でないドメインを含む前記複数のセキュリティ・ドメインのうちの1つにおいてデータ処理を実施することができる処理回路構成のためのデータ処理方法であって、
前記あまり安全でないドメインにおける処理から、前記安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、
前記ターゲット命令が、前記安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令であるかどうかについて判定するステップと、
前記ターゲット命令が前記ゲートウェイ命令以外の命令であるとき、障害をトリガするステップと、
前記ターゲット命令が前記ゲートウェイ命令であるとき、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガするステップと
を含む、方法。
【請求項22】
命令の実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
少なくとも安全なドメイン及びあまり安全でないドメインを含む複数のセキュリティ・ドメインのうちの1つにおいてデータ処理をサポートするための処理プログラム・ロジックと、
前記複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、前記メモリ・アクセスが許可されるかどうかについてチェックするためのメモリ・アクセス・チェック・プログラム・ロジックと、
前記ホスト・データ処理装置のメモリへのアクセスを制御して、前記コンピュータ・プログラムによってシミュレートされたターゲット・アーキテクチャのシミュレートされた構造レジスタへのアクセスをシミュレートするためのレジスタ・エミュレート・プログラム・ロジックであって、前記シミュレートされた構造レジスタが、スタック・データ構造を示す性質をもつスタック・ポインタをメモリに格納するための少なくとも1つのスタック・ポインタ・レジスタを備える、レジスタ・エミュレート・プログラム・ロジックと
を備え、
前記あまり安全でないドメインにおける処理から、前記安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、
前記ターゲット命令が、前記安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令以外の命令であるとき、前記処理プログラム・ロジックが、障害をトリガするように構成され、
前記ターゲット命令が前記ゲートウェイ命令であるとき、前記処理プログラム・ロジックが、前記シミュレートされた構造レジスタの選択したスタック・ポインタ・レジスタに関連付けられた選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガするように構成されている、
コンピュータ・プログラム。
【請求項23】
請求項22に記載のコンピュータ・プログラムを格納するコンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。
【背景技術】
【0002】
処理回路構成は、少なくとも安全なドメイン及びあまり安全でないドメインを含む、いくつかのセキュリティ・ドメインのうちの1つにおいてデータ処理の実施をサポートすることができる。これは、あまり安全でないドメインにおいて動作するあまり安全でないコードによる不適切なアクセスから、安全なドメインに関連付けられた取扱いに慎重を要するデータ又はコードを保護することを可能にすることができる。
【先行技術文献】
【非特許文献】
【0003】
【文献】Some Efficient Architecture Simulation Techniques”, Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63
【発明の概要】
【課題を解決するための手段】
【0004】
少なくともいくつかの実例は、少なくとも安全なドメイン及びあまり安全でないドメインを含む複数のセキュリティ・ドメインのうちの1つにおいてデータ処理を実施するための処理回路構成と、複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、メモリ・アクセスが許可されるかどうかについてチェックするためのメモリ・アクセス・チェック回路構成と、スタック・データ構造を示す性質をもつスタック・ポインタをメモリに格納するための少なくとも1つのスタック・ポインタ・レジスタとを備え、あまり安全でないドメインにおける処理から、安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、ターゲット命令が、安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令以外の命令であるとき、処理回路構成が、障害をトリガするように構成され、ターゲット命令が前記ゲートウェイ命令であるとき、処理回路構成が、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガするように構成される、装置を提供する。
【0005】
少なくともいくつかの実例は、複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、メモリ・アクセスが許可されるかどうかについてチェックする、少なくとも安全なドメイン及びあまり安全でないドメインを含む複数のセキュリティ・ドメインのうちの1つにおいてデータ処理を実施することができる処理回路構成のためのデータ処理方法を提供し、方法は、あまり安全でないドメインにおける処理から、安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、ターゲット命令が、安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令であるかどうかについて判定することと、ターゲット命令が前記ゲートウェイ命令以外の命令であるとき、障害をトリガすることと、ターゲット命令が前記ゲートウェイ命令であるとき、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガすることとを含む。
【0006】
少なくともいくつかの実例は、命令の実行のための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムを提供し、コンピュータ・プログラムは、少なくとも安全なドメイン及びあまり安全でないドメインを含む複数のセキュリティ・ドメインのうちの1つにおいてデータ処理をサポートするための処理プログラム・ロジックと、複数のセキュリティ・ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、メモリ・アクセスが許可されるかどうかについてチェックするためのメモリ・アクセス・チェック・プログラム・ロジックと、ホスト・データ処理装置のメモリへのアクセスを制御して、コンピュータ・プログラムによってシミュレートされたターゲット・アーキテクチャのシミュレートされた構造レジスタ(architectural register)へのアクセスをシミュレートするためのレジスタ・エミュレート・プログラム・ロジックであって、前記シミュレートされた構造レジスタが、スタック・データ構造を示す性質をもつスタック・ポインタをメモリに格納するための少なくとも1つのスタック・ポインタ・レジスタを備える、レジスタ・エミュレート・プログラム・ロジックとを備え、あまり安全でないドメインにおける処理から、安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、ターゲット命令が、安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令以外の命令であるとき、処理プログラム・ロジックが、障害をトリガするように構成され、ターゲット命令が前記ゲートウェイ命令であるとき、処理プログラム・ロジックが、前記シミュレートされた構造レジスタの選択したスタック・ポインタ・レジスタに関連付けられた選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガするように構成される。
【0007】
コンピュータ可読ストレージ媒体は、上記で説明したコンピュータ・プログラムを格納することができる。ストレージ媒体は、非一時的ストレージ媒体であってもよい。
【0008】
本技法のさらなる態様、特徴、及び長所は、添付の図面と共に読まれることになる実例の以下の説明から明らかであろう。
【図面の簡単な説明】
【0009】
【
図1】安全なドメイン及びあまり安全でないドメインをサポートする処理回路構成を有するデータ処理システムの実例を概略的に示す図である。
【
図2】処理回路構成の動作の種々のドメイン及びモードの実例を示す図である。
【
図3】処理回路構成のレジスタの実例を示す図である。
【
図4】被呼出側レジスタに関連付けられた構造的状態を省略し、整合性署名を省略した第1の例外スタック・フレームのいくつかの実例を示す図である。
【
図5】被呼出側レジスタからの追加の構造的状態を含み、整合性署名を含む第2の例外スタック・フレームの実例を示す図である。
【
図6】データ処理装置によってサポートされる種々の例外エントリ遷移を示すテーブルである。
【
図7】データ処理装置によってサポートされるいくつかの種々の例外復帰遷移を示すテーブルである。
【
図8】検出することが望ましくなり得るドメイン/モード遷移の潜在的に不適切なシーケンスを示す図である。
【
図9】機能が1回目にコールされ、途中で割り込まれ、その後、機能がコールされた1回目からの機能コードの残りの部分を完了させることなく、2回目にコールされる再入場(re-entrancy)シナリオの実例を示す図である。
【
図10】ゲートウェイ命令に応答して、スタック・ポインタ検証アクションをトリガすることを含むデータ処理の方法を示す図である。
【
図11】使用され得るシミュレータの実例を示す図である。
【発明を実施するための形態】
【0010】
データ処理装置は、少なくとも安全なドメイン及びあまり安全でないドメインを含むいくつかのセキュリティ・ドメインのうちの1つにおいてデータ処理をサポートする処理回路構成を有することができる。メモリ・アクセス・チェック回路構成は、ドメインのどれがメモリ・アクセスのターゲット・アドレスに関連付けられているかを示す性質をもつセキュリティ属性データに応じて、メモリ・アクセスが許可されるかどうかについてチェックするために提供することができる。例えば、あまり安全でないドメインにおいて動作するとき、メモリ・アクセス・チェック回路構成は、安全なドメインに関連付けられたアドレスへのメモリ・アクセスを防ぐことができ、一方で、安全なドメインにおいて動作するとき、処理回路構成は、安全なドメインとあまり安全でないドメインの両方に関連付けられたアドレスへのアクセスを許可されてもよい。少なくとも1つのスタック・ポインタ・レジスタは、スタック・データ構造を示す性質をもつスタック・ポインタをメモリに格納するために提供することができる。例えば、スタック・データ構造は、例外をハンドリングするときに、構造的状態を保存及び復元するために使用することができる。
【0011】
下記で論じる技法では、あまり安全でないドメインにおける処理から、安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの所与の変更に応答して、ターゲット命令が、安全なドメインへの有効なエントリ・ポイントを示す性質をもつゲートウェイ命令以外の命令であるとき、処理回路構成は障害をトリガし、ターゲット命令がゲートウェイ命令であるとき、処理回路構成は、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガする。
【0012】
ゲートウェイ命令は、安全なドメインへの有効なエントリ・ポイントをマークするために使用することができる。あまり安全でないドメインから、安全なドメインに関連付けられた命令アドレスを有するターゲット命令へのプログラム・フローの変更の後、ターゲット命令がゲートウェイ命令でない場合、障害をトリガすることによって、あまり安全でないドメインにおいて処理されるコードを制御する攻撃者が、メモリの安全な領域に格納された安全なコード内の任意のポイントへの分岐をトリガすることによってセキュリティを破るのを防ぐ。ターゲット命令がゲートウェイ命令であるかどうかのチェックをトリガするプログラム・フローの所与の変更は、プログラム・フローの連続の変更(分岐のない一連の命令の実行が、分岐せずに、あまり安全でないと指名されたアドレスと、安全であると指名されたアドレスとの間の境界を横切る)、又は、プログラム・フローの非連続の変更(例えば、分岐若しくは他の命令によって引き起こされるか、例外エントリ若しくは復帰イベントによって引き起こされ、これにより、実行の現在のポイントを表す命令アドレスを示すプログラム・カウンタを更新する)であってもよい。
【0013】
その一方で、プログラム・フローの所与の変更の後、ターゲット命令がゲートウェイ命令であるとき、処理回路構成は、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタを使用しても安全であるかどうかについて検証するために、スタック・ポインタ検証アクションをトリガすることができる。これは、あまり安全でないドメインにおいて動作する安全でないコードが、安全なドメインにおける命令の実行に影響を及ぼせるようにしようとして、安全なドメイン内で使用されるスタック・ポインタを操作しようとし得る一定の攻撃から保護することができる。ゲートウェイ命令に応答して、スタック・ポインタ検証アクションをトリガすることによって、あまり安全でないドメインから安全なドメインに入るたびに、スタック・ポインタ検証アクションが確実にトリガされるようにすることができる。実行される次の命令がゲートウェイ命令以外のいずれかの命令である場合、プログラム・フローの所与の変更の後、障害が生じると、これは、ゲートウェイ命令の後、安全なドメインにおいて実行されることになる残りのコードが、攻撃者によってコールされた悪意のあるコードであったとしても、ゲートウェイ命令が追加のセキュリティ・チェックを実行してくれることを意味する。したがって、ゲートウェイ命令は、スタック・ポインタを悪用しようとする攻撃から保護するために、選択したスタック・ポインタを使用しても安全であるかどうかについて検証するためのアクションをトリガすることができる。一定のセキュリティ・ドメイン遷移を監視する命令によって直接的にトリガされないロジックに基づくのではなく、ゲートウェイ命令に応答して、スタック・ポインタ検証アクションをトリガすることは、ハードウェアシステム設計者にとって、マイクロアーキテクチャに実装するのを簡単にすることもできる。
【0014】
いくつかの実例では、装置は、それぞれのスタック・ポインタを格納するための2つ以上のスタック・ポインタ・レジスタを備えることができる。スタック・アクセスが必要なときにどのスタック・ポインタ・レジスタにアクセスするかは、現在のセキュリティ・ドメイン、及び/又は、処理回路構成の現在の動作モードに依存すること、及び、場合によっては、例えば、制御レジスタに格納された構造的状態に基づくこともできる。
【0015】
例えば、場合によっては、システムは、安全なドメインにおいてアクセス可能な安全なスタック・ポインタ・レジスタ、及び、安全なドメインとあまり安全でないドメインの両方においてアクセス可能なあまり安全でないスタック・ポインタ・レジスタを含む少なくとも2つのスタック・ポインタ・レジスタを備えることができる。例外をハンドリングするときに構造的状態を保存/復元するために、どのスタック・ポインタ・レジスタを使用してスタック・ポインタを提供するかは、例外エントリ遷移又は例外復帰遷移に関係するドメインに応じて選択することができる。別個の安全なスタック・ポインタ・レジスタ及びあまり安全でないスタック・ポインタ・レジスタを提供することによって、安全なドメインによって使用されるスタック構造をメモリのどの領域が含むかについて、あまり安全でないコードが識別又は修正できるのを防ぐことができる。したがって、場合によっては、選択したスタック・ポインタ・レジスタは、安全なスタック・ポインタ・レジスタであってもよい。
【0016】
より具体的には、いくつかの実例は、所与のセキュリティ・ドメイン内で、複数のモードのうちの1つで処理することをサポートする処理回路構成を有することができる。モードは、例外処理のためのハンドラ・モード、及び、バックグラウンド処理のためのスレッド・モードを含むことができる。スレッド・モードとハンドリング・モードの分離は、どの構造的状態が処理回路構成にアクセス可能であるかについての管理を簡素化するのに役立てることができ、これにより、例外処理を簡素化し、例外ハンドリングに必要な一定の状態が、例えば、スレッド・モードでのバックグラウンド処理に確実に利用可能にされないようにすることができる。したがって、メモリの領域へのアクセスに対する制御、及び、どの構造レジスタが処理回路構成にとってアクセス可能であるかについての制御は、現在のセキュリティ・ドメインと、処理回路構成の現在のモードの組合せに基づくこと、及び、場合によっては、アーキテクチャの他の制御パラメータに基づくこともできる。
【0017】
スレッド・モード及びハンドラ・モードをサポートするシステムでは、スタック・ポインタ・レジスタは、処理スタック・ポインタを格納するための処理スタック・ポインタ・レジスタ、及び、メイン・スタック・ポインタを格納するためのメイン・スタック・ポインタ・レジスタを含むことができる。処理スタック・ポインタ・レジスタ及びメイン・スタック・ポインタ・レジスタの安全なバンク・バージョン及びあまり安全でないバンク・バージョンがあり得るので、場合によっては、少なくとも4つの異なるスタック・ポインタ・レジスタ(安全なメイン・スタック・ポインタ、安全な処理スタック・ポインタ、あまり安全でないメイン・スタック・ポインタ、及びあまり安全でない処理スタック・ポインタ)があり得る。一般に、メイン・スタック・ポインタ・レジスタは、ハンドラ・モードで動作するときに選択することができる。スレッド・モードのとき、処理スタック・ポインタ・レジスタ及びメイン・スタック・ポインタ・レジスタのうちの1つを、制御レジスタに格納されたスタック・ポインタ選択値に基づいて選択することができる。上記で説明した4つのスタック・ポインタ・レジスタを含むバンクされたスタック・ポインタ・レジスタを提供するアーキテクチャでは、ゲートウェイ命令に応答してスタック・ポインタ検証アクションが実施される選択したスタック・ポインタ・レジスタは、安全なメイン・スタック・ポインタ・レジスタ又は安全な処理スタック・ポインタ・レジスタであってもよい。
【0018】
スタック・ポインタ検証アクションは、種々の方法で実施することができる。1つの実例では、スタック・ポインタ検証アクションは、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタから導出されたターゲット・アドレスからの値のロードをリクエストするロード・リクエストが許可されるかどうかについてチェックするための許可チェックをトリガすることを含んでもよい。いくつかの実装形態では、この許可チェックは、ターゲット・アドレスに対する実際のロード・リクエストを発行することによってトリガしてもよい。代替として、許可チェックは、格納リクエストなどの別のタイプのメモリ・アクセス・リクエストを発行することによって、又は、メモリへのアクセスを実際にトリガしないが、ターゲット・アドレスへのアクセスが許可されるかどうかについての指示を返すようにメモリ・アクセス・チェック回路構成を制御するターゲット・アドレスを指定した許可チェック・リクエストを発行することによって、トリガすることができる。
【0019】
ゲートウェイ命令の機能は、安全なドメインへの有効なエントリ・ポイントをマークする際、メモリ内のいずれかの値にアクセスする必要があるように思えないので、ゲートウェイ命令に遭遇したときにスタック・ポインタから導出されたアドレスに対するメモリ許可チェックをトリガすることが有効であることは、直観的でないように思える。それでも、選択したスタック・ポインタ・レジスタに格納された選択したスタック・ポインタから導出されたターゲット・アドレスに対する許可チェックをトリガすることによって、許可チェックは、選択したスタック・ポインタを使用しても安全であるかどうかについてのチェックとして役立てることができる。例えば、処理回路構成は、いくつかの特権レベルのうちの1つで動作するように構成することができる。ゲートウェイ命令に応答してトリガされるターゲット・アドレスに適用可能なアクセス許可の選択したセットが、選択した特権レベルがターゲット・アドレスにアクセスするのを禁止されていることを明記している場合、メモリ・アクセス・チェック回路構成は、障害をトリガすることができる。したがって、ゲートウェイ命令は、メモリ・アクセス・チェック回路構成によって実装された特権ベースのメモリ許可チェックを起動して、選択したスタック・ポインタが安全であるかどうかについて検証する方式を提供するために使用することができる。
【0020】
具体的には、選択した特権レベルは、安全なドメインと、プログラム・フローの所与の変更時の処理回路構成の動作の現在のモードとの組合せで処理に関連付けられた特権レベルであってもよい。例えば、安全なドメインと現在のモードとの組合せが、特権のないものとして定義されると、メモリ・アクセス・チェック回路構成は、選択したスタック・ポインタから導出されたターゲット・アドレスを特権のないコードが実行できることを、アクセス許可の選択したセットが示すかどうかについてチェックすることができ、特権のないコードがこのアドレスにアクセスできない場合、障害をトリガすることができる。これにより、攻撃者が特権のないコードを使用して、メモリの特権領域内のスタック・データ構造を指すスタック・ポインタを操作しようとし得る攻撃から保護することができる。
【0021】
アクセス許可の選択したセットは、ロード・リクエストに応答して、選択したスタック・ポインタから導出されたターゲット・アドレスにアクセスできるかどうかについてチェックするために使用され、処理回路構成の現在のドメインが安全なドメインであるときに、ターゲット・アドレスに適用可能なアクセス許可のセットを備えることができる。いくつかの実例では、メモリ・アクセス・チェック回路構成は、安全なドメイン及びあまり安全でないドメインそれぞれについてのアクセス許可データの別個のセットを維持することができる。したがって、現在のドメインがまだ、あまり安全でないドメインであるときにゲートウェイ命令が実行されたとしても(ゲートウェイ命令はメモリの安全な領域に格納されているが、ドメイン・スイッチはまだトリガされていなくてもよい)、ゲートウェイ命令は、安全なドメインから後でアクセスされるはずのスタック・ポインタを使用しても安全であるかどうかについて検証するために、安全なドメインに関連付けられたアクセス許可を使用する許可チェックをトリガすることができる。
【0022】
いくつかの実例では、ゲートウェイ命令によってトリガされた許可チェックでチェックされるターゲット・アドレスは、選択したスタック・ポインタに一定のオフセットを追加することによって、選択したスタック・ポインタから導出することができる。他の実例では、ターゲット・アドレスは、選択したスタック・ポインタ自体に単に等しくてもよい。
【0023】
1つの実例では、処理回路構成は、ゲートウェイ命令に応答して、再入場チェックも実施することができる。再入場チェックは、選択したスタック・ポインタから導出されたターゲット・アドレスからロードされた値が、少なくとも1つの整合性署名値のうちの1つであるときに障害をトリガすることを含むことができる。整合性署名値は、メモリ内のスタック・データ構造に対するいくつかの整合性チェックを可能にするために使用することができるビットの所定のパターンであってもよい。いくつかの実装形態では、2つ以上の異なる整合性署名値(例えば、1つは、例外スタック・フレームのために使用され、もう1つは、機能スタック・フレームのために使用される)へのサポートがあり得る。この場合、障害をトリガする整合性署名値は、これらの整合性署名値(例えば、例外スタック・フレームのために使用される整合性署名値)のうちの特定の1つであってもよく、又は障害は、これらの整合性署名値のいずれかによってトリガされてもよい。
【0024】
このような再入場チェックは、再入場シナリオに対する構造的保護を行うのに役立てることができ、再入場シナリオでは、一定の機能を一度コールすると、機能が途中で割り込まれ、その後、イベントの一定のシーケンス(例えば、ドメイン遷移、モード遷移、例外エントリ又は復帰イベント、ファンクション・コール機能復帰を含むイベント)の後、機能がコールされた1回目からの機能コードの残りの部分をまず完了させることなく、機能が最後には、2回目にコールされる。機能を再びコールする前に機能の以前のインスタンスを完全に完了させないと間違った結果を生じることがあるので、機能コードのタイプの中には、このような再入場シナリオで実行するには安全でないことがあるものもある。例えば、機能は、同じ機能をコールする他のインスタンスに対して、原子力的に完了させることが必要な動作のセットを実装することができる。機能コード自体は、再入場に対して安全であるように再設計することができるが、これを行うと、コードの複雑性がかなり増す恐れがあり、さらなるセキュリティの脆弱性をもたらし、メンテナンスを難しくし、コード・サイズを増大させる可能性があり、望ましくなくなる可能性がある。代替として、再入場が発生した場合でもソフトウェアが安全であるように設計するのではなく、再入場を検出し、再入場を検出しても、2回目の機能の実行を防ぐための命令シーケンスを含むソフトウェアを提供するための別のアプローチがあり得る。それでも、やはり、これは、再入場のこのようなソフトウェア検出がエラーになりやすく、コード・サイズを増大させ、パフォーマンスを低下させる可能性があるので、望ましくない可能性がある。再入場を防ぐための別のオプションは、割込み又は例外がこの機能を回避しないように、例えば、重要な動作の期間中、機能の優先度を上げることによって、機能が途中で割り込まれる可能性を低減させようとすることであってもよい。それでも、これは、優先度を上げることが、一定の特権レベルでしか利用可能でない可能性があり、このように優先度を上げると、割込みレイテンシを著しく阻害する可能性があり、望ましくなくなる可能性があるので、全てのユース・ケースで機能しない可能性がある。
【0025】
しばしば、再入場シナリオでは、選択したスタック・ポインタ・レジスタ内の選択したスタック・ポインタによって示された関連するスタック・データ構造上に整合性署名値が存在する一連の例外遷移に、再入場シナリオがしばしば続き得ることが認識されてきた。したがって、ゲートウェイ命令に応答して、選択したスタック・ポインタから導出されたアドレスへのロードをトリガすること、及び、少なくとも1つの整合性署名値のうちの少なくとも1つに、ロードされた値が一致したときに、障害をトリガすることによって、このような再入場に対する構造的保護をもたらす。これは、プログラマ又はコンパイラの意図した結果を達成するソフトウェアを提供する際に、プログラマ又はコンパイラにかかる負担を著しく減らすことができる。
【0026】
ゲートウェイ命令によってロードがトリガされることを使用して、再入場チェックを実施することによって、安全なドメインへの各エントリに対して確実に再入場チェックを実施できるようにする。安全なドメインとあまり安全でないドメインとの間の境界を守らせることについて、再入場自体が問題ではないので(むしろ、再入場の主要なリスクは、セキュリティの問題ではなく、ソフトウェア・コードがその意図した結果を達成し得ないことである)、再入場チェックは、あまり安全でないドメインに対してよりも安全なドメインに対して関連があるという直観的でないものであることがある。それでも、再入場についてのソフトウェア修正は、攻撃者によって活用され得るセキュリティ脆弱性を持ち込むという2次リスクを生じ得ることが認識される。したがって、再入場チェック対してこのような構造的サポートを提供することによって、再入場を防ぐか検出するためのソフトウェア修正を、プログラマ又はコンパイラが提供する必要をなくし、これらのソフトウェア修正がセキュリティ脆弱性を偶然持ち込む機会を減らす。したがって、安全なドメインへの安全なエントリ・ポイントをマークするゲートウェイ命令の存在により、アーキテクチャにおいて自動的にトリガされた再入場チェックからの保護を何らかの安全な機能が確実に有することができるようになるので、ゲートウェイ命令に応答して再入場チェックをトリガすることが特に役立つ。
【0027】
ゲートウェイ命令に応答して再入場チェックが実施されるときにターゲット・アドレスから値を取得するための、再入場チェックのために使用されるロード・リクエストは、スタック・ポインタ検証アクションのために使用される許可チェックのトリガとしても役立てることができる。したがって、ロードをトリガすることは、スタック・ポインタ検証アクション及び再入場チェックという2つの目的を満たすことができる。
【0028】
それでも、このような再入場チェックは、常に必要でなくてもよい。いくつかの安全な機能について、プログラム・コードは、例えば、原子力的に更新されることが必要な共有変数に依存しないので、再入場に対して既に安全であるようなものである可能性がある。したがって、いくつかの実例では、アーキテクチャは、再入場チェックが有効であるか無効であるかを指定する(例えば、制御レジスタに格納された)再入場チェック可能値を提供することができる。ターゲット命令がゲートウェイ命令であるときのプログラム・フローの所与の変更に応答して、処理回路構成は、再入場チェックが有効であるか無効であるかを再入場チェック可能値が指定するかどうかに基づいて、ゲートウェイ命令に応答して再入場チェックを実施するべきか否かを判定することができる。したがって、再入場チェックが、実施されている特定の機能に関係がない場合、再入場チェックを無効にすることができる。
【0029】
それでも、再入場チェックが無効であることを再入場チェック可能値が指定するときでも、処理回路構成は、ゲートウェイ命令が、安全なメモリからフェッチされたものであり、あまり安全でないドメインからのプログラム・フローの所与の変更後に実行されたターゲット命令であるときに、ゲートウェイ命令に応答してターゲット・アドレスへのロード・リクエストが許可されるかどうかについてチェックするために、許可チェックをまだトリガすることができる。再入場チェックが無効である場合、ターゲット・アドレスに対する許可チェックを実施する必要がないと思うかもしれないが、ロードされた値が整合性署名値に一致するかどうかについてチェックする必要がないので、ターゲット・アドレスの許可チェックは、セキュリティに対する攻撃のいくつかの形式からの保護を提供するために、再入場チェックが無効であったとしても、選択したスタック・ポインタを使用しても安全であるかどうかについて検証するのに依然として役立つ。
【0030】
再入場チェックが無効である場合、スタック・ポインタ検証のために実施される許可チェックをトリガするための別のオプションがある。1つのアプローチは、再入場チェックが無効であることから、メモリからロードされた値が必要でなくても、それでもなお、ロード・リクエストが依然として発行されることであってもよい。これは、スタック・ポインタ検証アクションを実施するためにトリガされるリクエストが、再入場チェックが有効であるか無効であるかに関わらず、同じでよいことを意味するので、マイクロアーキテクチャに実装するのを簡単にすることができる。
【0031】
それでも、別のオプションは、再入場チェックが実施されるときにロード・リクエストを発行することによって許可チェックをトリガすることであるが、再入場チェックが実施されないとき、スタック・ポインタ検証アクションのために許可チェックをトリガするために、異なるタイプのリクエストを使用することができる。例えば、異なるタイプのリクエストは、メモリ・アクセスをトリガせずに許可チェックを実施することをリクエストするアドレス・チェック・リクエストであってもよい。これは、ターゲット・アドレスへの実際のロードを省略することによって、時間と電力を節約し、他のメモリ・アクセス動作のためのメモリ・アクセス帯域幅を節約するので、パフォーマンスを改善することができる。
【0032】
装置は、例外及び例外復帰をハンドリングするための例外制御回路構成を有することができる。例外条件に応じて、例外制御回路構成は、処理回路構成の現在のセキュリティ・ドメインに少なくとも基づいて(及び、場合によっては、現在のモードにも基づいて)選択された、いくつかの例外エントリ遷移のうちの1つを実施することができる。例外エントリ遷移の少なくともサブセットに対して、例外制御回路構成は、少なくとも1つのスタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別されたスタック・データ構造への、少なくとも1つの整合性署名値のうちの1つを含むスタック・フレームの保存をトリガすることができる。例えば、整合性署名値を含むスタック・フレームが保存される例外エントリ遷移のサブセットは、安全なドメインから、あまり安全でないドメインへの遷移を含むことができる。
【0033】
その一方で、例外復帰条件について、いくつかの例外復帰遷移のうちの1つは、例外復帰条件に関連付けられた少なくともセキュリティ・ドメインに基づいて選択することができる。例外復帰遷移の少なくともサブセットに対して、例外制御回路構成は、この例外復帰遷移のために選択された所与のスタック・データ構造からスタック・フレームにアクセスするため、及び、アクセス・スタック・フレーム内の所定の位置における値と、少なくとも1つの整合性署名値のうちの前記1つとの間の不一致が検出されたときに障害をトリガするために、整合性署名チェックを実施することができる。したがって、例外復帰遷移に対して、少なくともいくつかの例外復帰遷移に対して、整合性署名は、障害のトリガを避けるためにスタック・データ構造上に存在する必要があり得る。整合性署名値をこのように含むことは、安全なドメインへの復帰時に不適切なスタック・フレームが復元されるように、例外エントリ遷移若しくは例外復帰遷移、又は、ファンクション・コール若しくは復帰の一定のシーケンスを攻撃者が偽造しようとする攻撃からの保護を提供することができる(ここで、攻撃者は、スタック・フレーム内の不一致を使用して、攻撃者によって制御されたあまり安全でないコードによって提供された情報に基づいて選択された、安全なドメイン内のアドレスからコードを処理するために安全なドメインをトリガしようとすることができる)。整合性署名値を使用すると、遷移の不適切なシーケンスを検出して、このような攻撃から保護できるようにすることができる。
【0034】
したがって、いくつかの例外復帰遷移時に、整合性署名値は、例外及び例外復帰の有効なシーケンスが実施されたという指示として存在する必要があり得る(整合性署名値がないことによって、一定の例外復帰遷移時に障害をトリガすることができる)。対照的に、スタック上の所定の位置における値が整合性署名値に一致したときに障害をトリガすることができる再入場チェックに対して、この場合のように、整合性署名値は、再入場が望まれていない場合に、以前に割り込まれた、同じ機能の実行インスタンスの後に、一定の安全な機能が再びコールされたという印であってもよい。したがって、再入場チェックは、(スタッキングが適切にハンドリングされたという印として正常に使用される)整合性署名が検出されたときに障害をトリガするという点で、直観的でないと思われる可能性があり、予想し得るものとは逆である。以前に割り込まれた、同じ機能のコールの後に、機能の再入場を検出するという観点から本発明を説明するが、本発明は、以前に割り込まれた、第1の機能へのコールの後に、第2の安全な機能がコールされる、異なる形式の再入場からも保護できることが理解されよう。同じ状態を共有し、修正することが種々の機能に共通なので、安全なドメインへの機能再入場のいずれかの組合せを保護することが望ましくなり得る。
【0035】
再入場チェックがサポートされる場合、選択したスタック・ポインタからターゲット・アドレスを導出することは、整合性署名値が格納されていることが予想される選択したスタック・ポインタに対するアドレスに、ターゲット・アドレスが対応するようなものであってもよい。例えば、スタック・ポインタから一定のオフセットにおけるスタック・フレーム上のポイントに整合性署名値がある場合、ゲートウェイ命令に応答してターゲット・アドレスを導出するとき、選択したスタック・ポインタに、この同じオフセットを追加することができる。それでも、いくつかのアーキテクチャでは、(レイテンシを増加させ得る)スタック・ポインタ及びオフセットの追加を実施する必要をなくすために、スタック・ポインタ自体に対応するスタック・フレーム上の位置に整合性署名値を格納することができ、したがって、この場合、ターゲット・アドレスは、選択したスタック・ポインタに単に等しくてもよい。
【0036】
整合性署名が存在するかどうかについてチェックするこの技法は、例外エントリ遷移及び例外復帰遷移の一定のシーケンスの後に再入場シナリオが生じる場合に役立てることができる。それでも、同じ機能の第1のコールとその後のコールとの間のいくつかのポイントでファンクション・コールが使用されたときにも再入場シナリオが生じることがあり、したがって、時には、選択したスタック・ポインタから導出されたターゲット・アドレスへのロードが、ファンクション・コールが実施されたことに応答して、メモリに保存されたスタック・フレームにアクセスし得ることがある。ファンクション・コールについて、整合性署名値を全く保存しなくてもよく、又は、例外エントリ遷移のサブセットに応答して保存されたものとは異なる整合性署名値を保存してもよく、又は、ファンクション・コールの整合性署名値が、例外の整合性署名値と比べてスタック・ポインタとは異なるオフセットにあってもよい。これらのケースのいずれかでは、例外のために使用される所与の整合性署名値に、ロードされた値が一致するかどうかについてチェックすることは、全ての再入場シナリオを検出するのに十分でないことがある。ファンクション・コールのために整合性署名が使用されないいくつかの実例では、再入場が発生していないときに、再入場チェック障害を偶然にトリガし得るので、ターゲット・アドレスにおける値が整合性署名値に偶然に一致し得ないことを確実にすることが望ましくなり得る。これを可能にするために、いくつかの実施例は、ターゲット・アドレスに機能復帰アドレスを置き、実行可能アドレスでない整合性署名値を選択することができ、これにより、機能復帰アドレスが整合性署名に決して偶然に一致し得ないことを確実にする。いくつかの実施例では、ファンクション・コールに応答してメモリにスタック・フレームを保存することは、プロセッサによって自動的に実施することができ、安全な機能が、あまり安全でない機能をコールすることに応答して、発生させることしかできない。
【0037】
したがって、いくつかの実例では、再入場チェックは、構造的状態をスタック又はアンスタックするために、どのスタック・ポインタ・レジスタを使用するべきかを判定するために、スタック・ポインタ選択値が所定の値を有するときに障害をトリガすることも含むことができる。スタック・ポインタ選択値が所定の値を有することは、再入場が発生しているという別の指標であってもよく、したがって、再入場チェックが有効であるとき、スタック・ポインタ選択値が所定の値を有するときに障害をトリガすることは、再入場チェックからのさらなる保護を提供することができる。
【0038】
例えば、上述のように、処理回路構成は、ハンドラ・モード及びスレッド・モードをサポートすることができる。スタック・ポインタ選択値は、スレッド・モードのときに、処理スタック・データ構造とメイン・スタック・データ構造からの選択を制御することができる。処理スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別された処理スタック・データ構造は、スタック・ポインタ選択値が第1の値を有するときに、例外条件がスレッド・モードで発生したことに応答して、構造的状態を保存するために選択することができる。メイン・スタック・ポインタ・レジスタに格納されたスタック・ポインタによって識別されたメイン・スタック・データ構造は、例外条件がスレッド・モードで発生し、スタック・ポインタ選択値が第2の値を有するときに選択することができる。例外条件がハンドラ・モードで発生したとき、スタック・ポインタ選択値の現在の値に関わらず、メイン・スタック・データ構造を使用することができる。上記で説明したように、安全なバージョン及びあまり安全でないバージョンの処理スタック・データ構造及びメイン・スタック・データ構造を提供することができ、したがって、どのバージョンが使用されるかについては、例外が発生する前に実施されたバックグラウンド処理に関連付けられたセキュリティ・ドメインに依存し得ることが理解されよう。
【0039】
したがって、再入場チェックに対して、いくつかの実例では、スタック・ポインタ選択値が上記で説明した第2の値を有するときに障害をトリガすることができ、これは、スレッド・モードに対して、メイン・スタック・データ構造が使用されるべきであることを示す。やはり、これは、再入場が発生しているという印であってもよい。再入場チェックが実施され、スタック・ポインタ選択値が第2の値を有するときに、ゲートウェイ命令に応答して障害をトリガすることによって、再入場からの構造的保護を提供してコード開発を簡素化し、したがって、ソフトウェアへの再入場に対処しようとすることによってセキュリティが脆弱になる機会を減らす。
【0040】
具体的には、このアプローチは、少なくとも1つの安全なスレッド・モードから安全なハンドラ・モードへの例外エントリ遷移に応答して、例外制御回路構成が、スタック・ポインタ選択値を第2の値に更新することができるアーキテクチャにおいて役立てることができる。これは、上述のような、構造レジスタ状態の保存/消去、及び、整合性署名値の保存など、安全なドメインから安全なドメインへの遷移を例外がトリガするときに、安全なドメインからあまり安全でないドメインへの遷移時に実施される一定の保護手段が省略され得ることを活用することに狙いを定め得る、さらなるタイプのセキュリティ攻撃からの保護として行われるアクションであってもよい。このような保護手段の省略は、システムが既に安全なドメインにあり、信頼することができるので、安全なスレッド・モードから安全なハンドラ・モードへの遷移の際のパフォーマンスを改善することができ、正当化され得るが、安全なスレッド・モードに復帰する際に、整合性署名のないスタック・フレームにアクセスするように、機能エントリ条件及び機能復帰条件の例外の不適切なシーケンスを攻撃者が偽造できる場合、いくらかのセキュリティ脆弱性を持ち込む可能性がある。スレッド・モードは、通常、少なくとも1つの安全なスレッド・モードから安全なハンドラ・モードへの例外エントリ遷移に応答して、スタック・ポインタ選択値を第2の値にスイッチすることによって、処理スタック・データ構造にアクセスすることが予想されるが、これは、処理回路構成が、遷移のこれらの不適切なシーケンスのうちの1つを通じて、安全なスレッド・モードに復帰して戻り、スタック・ポインタ選択値がまだ第2の値である場合、処理スタック・データ構造ではなく、メイン・スタック・データ構造にアクセスできることを意味し、これにより、他のセキュリティ・チェックを失敗させる恐れがある。スタック・ポインタ選択値を第2の値にこのようにセットすることは、再入場チェックに活用される恐れがあり、なぜなら、機能のコールの以前のインスタンスが完了する前に、あまり安全でないドメインから安全な機能が2回目にコールされる再入場シナリオを引き起こす一連の遷移の一部として、介在するファンクション・コールが使用される場合、しばしば、一連の遷移も、スタック・ポインタ選択値が第2の値にセットされた少なくとも1つの安全なスレッド・モードから安全なハンドラ・モードへの例外エントリ遷移を含んでいたからである。
【0041】
上記で説明した再入場チェックは、安全なドメインでの処理から、安全なドメインに関連付けられた命令アドレスを有するゲートウェイ命令へのプログラム・フローの変更があるとき、省略することができる。したがって、再入場チェックは、あまり安全でないドメインから、安全なメモリに格納されたゲートウェイ命令への遷移に対して実施することができるが、安全なドメインからこのようなゲートウェイ命令にプログラム・フローがスイッチするときには必要ではない。上述のように、整合性署名値の保存は、安全なドメインからあまり安全でないドメインへの遷移があるときに実施されるだけでよく、したがって、安全なドメインからゲートウェイ命令にプログラム・フローがスイッチするとき、スタック・データ構造は、整合性署名値を含まなくてもよい。これは、再入場チェック時に選択したスタック・ポインタから導出されたアドレスの値が、安全な機能が他の安全な機能をコールするときの任意の値であってもよいことを意味する。安全なドメインから、安全なドメインに関連付けられたアドレスに格納されたアドレスに格納されたゲートウェイ命令へのプログラム・フローの変更に応答した再入場チェックを省略することによって、スタック上の値が偶然、整合性署名にたまたま一致する場合に、障害が偶然トリガされないようにする。
【0042】
セキュリティ・チェックをトリガすることだけでなく、ゲートウェイ命令は、あまり安全でないドメインから安全なドメインへの現在のセキュリティ・ドメインのスイッチをトリガする機能も有することができる。したがって、プログラム・フローの所与の変更に続くターゲット命令が、ゲートウェイ命令であるとき、少なくとも1つのセキュリティ・チェック(例えば、可能であれば再入場チェック、及び/又は、ドメイン間の境界を監視する他の任意のセキュリティ・チェック)を、ゲートウェイ命令に応答して実施することができ、少なくとも1つのセキュリティ・チェックに合格すると、処理回路構成は、あまり安全でないドメインから安全なドメインへの現在のセキュリティ・ドメインのスイッチをトリガすることができる。
【0043】
上記で論じた例では、プログラム・フローの所与の変更に続くゲートウェイ命令に応答してトリガされたスタック・ポインタ検証アクションは、選択したスタック・ポインタから導出されたターゲット・アドレスへのロードが許可されるかどうかについてチェックするための許可チェックのトリガを含むことができる。このアプローチには、スタック・ポインタ検証アクション(例えば、ロード・リクエストの発行)を実施する際のオーバヘッドのうちのいくつかを、上記で示した理由に役立てることができる再入場チェックと共有できるという長所がある。また、これは、安全なスレッド・モードにコールするときにスタック・ポインタ選択値が第2の値を有する一定の有効なユース・ケースを依然としてサポートできることを意味する。いくつかの実施例では、スタック・ポインタ選択値は、再入場チェックが実施される場合、依然としてチェックされてもよく、スタック・ポインタ選択値が第2の値である場合、障害が生じる。再入場チェックは、再入場チェックが無効な場合、実施されなくてもよい。また、再入場チェックは、安全なドメインから、メモリの安全な領域に格納されたゲートウェイ命令へのプログラム・フローの安全から安全への変更に対して実施されなくてもよい。
【0044】
それでも、別の実例では、プログラム・フローの所与の変更が検出され、ターゲット命令がゲートウェイ命令であるとき、スタック・ポインタ検証アクションは、スタック・ポインタ選択値が第2の値を有する場合に障害をトリガすることを含むことができる。これは、コードの不適切なシーケンスを実施するために、安全なドメインをトリガしようとして、安全なメイン・スタック・ポインタを操作することに狙いを定めた攻撃から保護する別の方法を提供することができる。再入場チェックが実施されるときにはスタック・ポインタ選択値のチェックが実施されるが、再入場チェックが省略されるときには実施されない、上記で論じた第1のアプローチとは異なり、第2のアプローチでは、スタック・ポインタ選択値は、再入場チェックが実施されるか否かに関わらず、ゲートウェイ命令に応答してチェックされてもよいことに留意されたい。したがって、これは、プログラム・フローの所与の変更の後、選択したスタック・ポインタを使用しても安全であるかどうかについてチェックするための代替実施例を提供する。安全なドメインへの有効なスイッチの際に存在することが保証されるゲートウェイ命令に応答して、このアクションをトリガすることによって(ゲートウェイ命令が存在しない場合、その後のいずれかの命令を実行する前に障害がトリガされる)、ゲートウェイ命令を識別したことに応答して、命令デコーダによって、スタック・ポインタ選択値のチェックをトリガできることをアクションが要求するので、マイクロアーキテクチャ設計をずっと簡単にする。
【0045】
スタック・ポインタ検証アクションの、どの変形物が使用されるかに関わらず、スタック・ポインタ検証アクションは、制御フローの所与の変更後に、ゲートウェイ命令に遭遇した全てのインスタンスに対してトリガされる必要はない。場合によっては、スタック・ポインタ検証アクションは、プログラム・フローの所与の変更時に、処理回路構成が動作の所定のモードにあるときにトリガされてもよい。例えば、所定のモードは、スレッド・モードであってもよい。スタック・ポインタ検証アクションは、処理回路構成が、動作の所定のモード以外の動作モードにあるとき、省略されてもよい。これは、上記で論じたタイプのスタック・ポインタ・ベースの攻撃が、スレッド・モードに入るときに最も可能性が高くなる可能性があり、ハンドラ・モードに入るときの問題ではない可能性があるので、役に立ち得る。(ハンドラ・モードはデフォルトで特権があると定義できるので、ハンドラ・モードからのアクセスが全体的に、アクセス許可の特権ベースのチェックに合格できる場合、少なくとも、スタック・ポインタ検証アクションが、選択したスタック・ポインタから導出されたターゲット・アドレスの許可チェックをトリガすることを含む実施例について)ハンドラ・モードのとき、いずれにしても、スタック・ポインタ検証アクションに関連付けられたチェックに合格することができるが、パフォーマンスのために、処理能力を節約し、他の目的のためにリソースを解放できるように、スタック・ポインタ検証アクションのトリガを省略することが好ましいことがある。例えば、ロード・リクエストのトリガをスタック・ポインタ検証アクションが含む実施例では、処理回路構成がハンドラ・モードのときにスタック・ポインタ検証アクションを省略すると、他のメモリ・アクセスのために使用することができるロード待ち行列内のスロットを解放することができる。したがって、スレッド・モードなど、所定のモードに対するスタック・ポインタ検証アクションを制限すると、パフォーマンスを改善することができる。同様に、複数の入れ子になった例外ハンドラをサポートする必要があることにより、安全な再入場をサポートすることが、ハンドラ・モードでは必要になり得る。したがって、いくつかの実施例は、ハンドラ・モードのコードについて、コードが既に再入場に対して安全であり、構造レベルでの再入場に対するさらなる保護を必要としないことが予想され得るので、ハンドラ・モードのときの再入場チェックを止めることができる。
【0046】
命令の実行のための命令実行環境を提供するために、ホスト・データ処理装置を制御するためのシミュレータ・コンピュータ・プログラムを提供することができる。コンピュータ・プログラムは、処理プログラム・ロジック及びメモリ・アクセス・チェック・プログラム・ロジックを備えることができ、上記で論じた処理回路構成及びメモリ・アクセス・チェック回路構成に機能的に対応する。また、プログラムは、コンピュータ・プログラムによってシミュレートされたターゲット・アーキテクチャのシミュレートされた構造レジスタへのアクセスをシミュレートするために、ホスト装置のメモリへのアクセスを制御するためのレジスタ・エミュレート・プログラム・ロジックを有することができる。シミュレートされた構造レジスタは、上記で説明したような少なくとも1つのスタック・ポインタ・レジスタを含むことができる。処理プログラム・ロジックは、ターゲット・コードのゲートウェイ命令がシミュレータ上で実行されるのに応答して、スタック・ポインタ検証アクションをトリガすることができる。したがって、このようなシミュレータ・コンピュータ・プログラムは、シミュレータ・コンピュータ・プログラムを実行するホスト・コンピュータにおいて、これらの特徴を提供する実際のハードウェアが何もなくても、実際のハードウェア装置によって提供されるものへの類似の命令環境を、シミュレータ・コンピュータ・プログラム上で実行するソフトウェアに提示することができる。上記で論じたハードウェア・アーキテクチャの機能は、上記で論じた特徴を実際に有する装置上で達成される結果と互換性がある方式で、上記で論じた特徴を有する装置上で実行することを意図するターゲット・コードを市販のホスト・コンピュータが実行することを可能にした、命令のセット又はデータ構造などの、プログラム・ロジックを提供することによって、エミュレートすることができる。ホスト・データ処理装置を制御するためのシミュレータ・コンピュータ・プログラムは、ストレージ媒体に格納することができる。このストレージ媒体は、非一時的ストレージ媒体であってもよい。
【0047】
図1は、メモリ・システム6からフェッチされた命令に応答してデータ処理を実施するための処理回路構成4を含むデータ処理システム2の実例を概略的に示す。メモリ・システム6は、キャッシュ(例えば、データ・キャッシュ及び/又は命令キャッシュの1つ又は複数のレベル)並びにメイン・メモリを含むことができる。処理回路構成4は、例えば、メモリ・システム6から実行されることになる命令をフェッチするためのフェッチ・ステージ8、フェッチした命令をデコードし、残りのパイプライン・ステージを制御してデータ処理を実施するための制御信号を生成するためのデコード・ステージ10、及び、データ処理動作を実施するために、デコードした命令を実行するための実行ステージ12を含むいくつかのパイプライン・ステージを含む処理パイプラインを含む。レジスタ14は、パイプライン4によって処理される命令の入力オペランドを格納するために提供される。レジスタ14は、整数値を格納するための汎用(整数)レジスタ16、浮動小数点値を格納するための浮動小数点レジスタ18、並びに、処理回路構成4による命令の実行、及び、例外ハンドリング、セキュリティ・チェック等などの他の動作を制御するための制御パラメータを格納するための制御レジスタ20を含むいくつかのタイプのレジスタを含む。
【0048】
図1に示したパイプライン・ステージは、簡素化した表現であり、レジスタのリネームを実施するためのリネーム・ステージ、実行を待っている命令を待ち行列に入れ、命令の必要なオペランドが利用可能になったとき、実行のために命令を発行するための発行ステージ、及び、命令のコミットをハンドリングし、レジスタ14に結果を書き戻すためのライト・バック・ステージなど、他のタイプのパイプライン・ステージも提供することができることが理解されよう。パイプラインは、順序だった、又は順序がばらばらのパイプラインであってもよい。
【0049】
システム2は、メモリ・アドレス空間の様々な領域に指定された属性データに基づいて、メモリ・システム6へのアクセスが許可されるかどうかについてチェックするためのメモリ・アクセス・チェック回路構成22も含む。メモリ・アクセス・チェック回路構成は、メモリ・アドレス空間のそれぞれの各領域に関連付けられたセキュリティ・ドメインを定義するセキュリティ・ドメイン定義データを格納するためのセキュリティ属性ユニット(SAU:security attribute unit)24を含む。セキュリティ属性データに基づいて、セキュリティ属性ユニット24は、処理回路構成の動作の現在のセキュリティ・ドメインに応じて、及び、メモリ・アクセスのターゲット・アドレスを含む領域に関連付けられたセキュリティ・ドメインに応じて、メモリ・アクセスが許可されるかどうかについてチェックすることができる。他の実施例では、SAUは、セキュリティ・ドメイン定義データを直接的に格納せず、その代わりに、メモリ・アクセス・チェックを実施するために、他の場所に格納されたセキュリティ・ドメイン定義データにアクセスすることができる。システムによっては、セキュリティ・ドメイン定義データは、メモリ・システム6に格納されてもよく、又は、システム2の他の場所にある構成レジスタであってもよい。処理回路構成4は、動作の現在のセキュリティ・ドメインにおいて動作することができ、現在のセキュリティ・ドメインは、一般に、現在実行されている命令のアドレスに関連付けられたセキュリティ・ドメインに対応し得る(しかし、ドメイン間の遷移をハンドリングするときなど、いくつかの例外があり得る)。1つのドメイン内にあるような、SAU24によって指定された領域内のアドレスから、別のドメインに関連付けられた領域内のアドレスに命令が分岐したとき、分岐は、処理回路構成4が動作している現在のセキュリティ・ドメインの遷移をトリガすることができる。他の実施例では、このような分岐は、現在のセキュリティ・ドメインの遷移を直接的にトリガせず、その代わりに、ゲートウェイ命令が存在するかどうかなど、追加のセキュリティ・チェックをトリガすることができ、これらの実施例では、現在のセキュリティ・ドメインの変更をトリガするのは、ゲートウェイ命令自体であってもよい。一般に、安全なドメインで動作している間、処理回路構成は、安全なドメインとあまり安全でないドメインの両方に関連付けられたメモリ領域内のデータにアクセスすることができ、一方で、あまり安全でないドメインで動作しているとき、処理回路構成は、あまり安全でないドメインに関連付けられた領域内のデータにアクセスすることができるが、安全なドメインに関連付けられているとSAU24が指定したアドレス空間の領域内のデータへのアクセスを許可されないことがある。これは、あまり安全でないドメインで動作しているコードからの不正なアクセスから、取扱いに慎重を要するデータを保護できるようにする。
【0050】
また、メモリ・アクセス・チェック回路構成は、例えば、処理回路構成4のどの特権レベルがメモリの所与の領域へのアクセスを許可されるかを指定することができるか、又は、アドレス空間のメモリ領域が、読込み動作と書込み動作の両方によってアクセスされ得るか、若しくは書込みが禁止された読込み専用領域であるかを指定することができるアクセス許可を、メモリ・システム6へのメモリ・アクセスが満たすかどうかについてチェックするメモリ保護ユニット(MPU:memory protection unit)26を含むことができる。MPU26によって使用されるアクセス許可は、例えば、メモリのどの領域へのアクセスを、あまり特権のない処理(アプリケーションなど)が許可されるか、及び、どのように(読込み専用、又は、読込み/書込み)許可されるかを制御するために、より特権がある処理(ハイパーバイザ又はオペレーティング・システムなど)によって指定することができる。MPU26によって提供される許可は、SAU24によって提供されたものと直角であってもよく、したがって、所与のメモリ・アクセスを許可するためには、MPU26とSAU24の両方に対して定義されたアクセス許可に基づいてチェックに合格するべきである。単一のエンティティとしてMPU26を
図1に示すが、いくつかの実例では、別個の安全なMPU26及びあまり安全でないMPU26を提供することができ、それぞれは、セキュリティ・ドメインのうちの1つに関連付けられ、したがって、現在のドメインが安全なドメインであるか、あまり安全でないドメインであるかに応じて、メモリの所与の領域に異なるメモリ・アクセス許可を指定することができる(例えば、領域は、あまり安全でないドメインでは読込み専用であるが、安全なドメインでは読込み可能且つ書込み可能の両方であってもよい)。
【0051】
したがって、
図2に示したように、処理回路構成4は、少なくとも安全なドメイン(S)及びあまり安全でないドメイン(LS)を含む、いくつかのセキュリティ・ドメインのうちの1つにおけるデータ処理の実施をサポートすることができる。
図2は、2つのセキュリティ・ドメインしかないシステムを示すが、セキュリティの異なるレベルに関連付けられた3つ以上のドメインを提供することができる。
【0052】
また、所与のセキュリティ・ドメイン内では、
図2に示したように、処理回路構成は、例外処理のためのハンドラ・モード(H)、及び、バックグラウンド処理のためのスレッド・モード(T)を含むいくつかのモードのうちの1つでデータ処理を実施することができる。
図1示したように、例外制御回路構成28は、例外エントリ遷移及び例外復帰遷移を含む例外ハンドリング動作、並びに、このような遷移中の構造的状態の任意の保存/復元を制御することができるように提供することができる。専用のハンドラ・モードHに例外ハンドリングを分離することは、処理回路構成によるアクセスを、どのレジスタに許可するかについての管理を簡素化するのに役立てることができる(例えば、例外ハンドリングのために使用されるレジスタの中は、ハンドラ・モードHでアクセス可能であってもよいが、スレッド・モードTでアクセス可能であってはならないものもある)。一般に、ハンドラ・モードHで動作するとき、処理回路構成4は、最も特権のないレベル以外の特権レベルの一定のレベルに従って、メモリ及びレジスタへのアクセスが制御されるような、動作の、より特権のあるモードを有すると、デフォルトで仮定することができるが、スレッド・モードTでは、処理回路構成は、制御レジスタ20に格納された他の構造的状態に応じて、いくつかの異なる特権レベルのうちの1つを有することができる。
【0053】
したがって、
図2に示したように、処理回路構成4が動作しているセキュリティ・ドメインとモードの組合せは、処理回路構成4によって処理がどのように行われるかについての態様を決定することができる。
図2は、これらのモードの4つの異なる組合せを示し、以下を含む。
・ 安全なスレッド・モード(安全なドメインと、スレッド・モードとの組合せの簡潔な言い方)
・ あまり安全でないスレッド・モード(あまり安全でないドメインと、スレッド・モードとの組合せ)
・ 安全なハンドラ・モード(安全なドメインと、ハンドラ・モードとの組合せ)、及び
・ あまり安全でないハンドラ・モード(あまり安全でないドメインと、ハンドラ・モードとの組合せ)
下記で論じるように、例外条件及び例外復帰条件に応答して、実行されるアクションは、セキュリティ・ドメインとモードのこれらのそれぞれの組合せの間で行われる特定の遷移に依存し得る。
【0054】
図3は、処理システムのレジスタ14のうちのいくつかを示す。この図は、提供し得る可能なレジスタの全てを示しておらず、他の多くのレジスタがさらに提供されてもよいことが理解されよう。
図3に示したように、レジスタ14は、汎用レジスタ16、浮動小数点レジスタ18、及び、いくつかの制御レジスタ20を含む(制御レジスタのうちのいくつかだけを
図3に示しているが、他も提供することができる)。この実例では、R0からR15までラベルを付けられた16個の汎用レジスタ、及び、S0からS31までラベルを付けられた32個の浮動小数点レジスタを示す。いくつかの実施例では、浮動小数点レジスタ18は、浮動小数点のフラグ値、浮動小数点の丸めモード等を保持することできる浮動小数点状態及び制御レジスタ(FPSCR:floating point status and control register)も含むことができる。いくつかの実施例では、汎用レジスタ16は、整数のフラグ値、及び、現在の背景に関連した他の情報を保持することができるプログラム状態レジスタ(XPSR:program status register)も含むことができる。
【0055】
算術命令若しくは論理命令のための入力オペランド、又は、メモリ・システム6にアクセスするためのロード/格納命令のためのアドレスを導出するために使用されるオペランドなどの、汎用オペランドを格納するために、汎用レジスタR0からR15の中の、レジスタR0からR12が使用される。このような汎用オペランドのために汎用レジスタR13からR15を使用することが可能であってもよいが、これらは、他の制御機能にも役立つ。
【0056】
レジスタR15は、処理回路構成4が達したプログラムの現在のポイントを指示するプログラム・カウンタを格納するプログラム・カウンタ(PC)レジスタとして使用される。プログラム・カウンタ・レジスタは、メモリ・システムからどの命令をフェッチするべきかを決定するためにフェッチ・ステージ8で使用することができる。
【0057】
レジスタR14は、機能が命令をコールした後、プログラム・フローを次の命令にリダイレクトして戻すために、機能に関連付けられた処理が完了したときに、リンク・レジスタ内のアドレスを使用できるように、機能がコールされたときの機能復帰アドレスを格納するために使用されるリンク・レジスタ(LR)として使用される。また、リンク・レジスタは、対応する例外復帰条件に遭遇したときに構造的状態のアンスタックを制御するための情報を示す例外復帰値を格納するために、例外の発生時に使用することができる。これは、より詳細に下記で論じる。
【0058】
レジスタR13は、メモリ内のスタック・データ構造のアドレスを示すスタック・ポインタを提供するスタック・ポインタ・レジスタとして使用される。スタック・データ構造は、例外条件が発生したときに構造的状態を保存するため、及び、例外復帰条件が発生したときに構造的状態を復元するために使用することができる。
図3に示したように、レジスタR13は、レジスタ指定子R13を使用してそれぞれアクセス可能な、いくつかの異なる物理レジスタをハードウェア内に配置するようにバンクされ、R13が指定されたときに選択される特定のバンクされたレジスタは、処理回路構成の現在のセキュリティ・ドメイン及びモードに依存する。
【0059】
例えば、バンクされたスタック・ポインタ・レジスタは、安全なメイン・スタック・ポインタ・レジスタ(MSP_S:secure main stack pointer register)、安全な処理スタック・ポインタ・レジスタ(PSP_S:secure process stack pointer register)、あまり安全でないメイン・スタック・ポインタ・レジスタ(MSP_LS:less secure main stack pointer register)、及び、あまり安全でない処理スタック・ポインタ・レジスタ(PSP_LS:less secure process stack pointer register)を含むことができる。一般に、安全なスタック・ポインタ・レジスタMSP_S及びPSP_Sは、安全なドメインSにあるとき、処理回路構成4にアクセス可能であるが、あまり安全でないドメインNSにあるとき、アクセス不能である。あまり安全でないスタック・ポインタ・レジスタMSP_LS及びPSP_LSは、あまり安全でないドメインにおいてアクセス可能である。一般に、処理スタック・ポインタPSP_S又はPSP_LSは、スレッド・モードTの中での使用が予想され、メイン・スタック・ポインタMSP_S又はMSP_LSは、ハンドラ・モードHの中での使用が予想される。ハンドラ・モード及びスレッド・モードのために別個のメイン・スタック及び処理スタックをそれぞれ提供すると、例外ハンドラがメイン・スタック上に残す可能性のある何らかのデータが、一般に、例外復帰後にスレッド・モードで動くスレッドにアクセス可能でないことを意味するので、例外ハンドラ・コードの開発を簡単にすることができる。これは、例外ハンドラが、そのデータの全てをメイン・スタック・データ構造から消去するための命令を含む必要がないので、例外ハンドラ・コードの開発を簡素化することができる。それでも、より詳細に下記で論じるように、スレッド・モードTにあるいくつかの処理は、メイン・スタック・ポインタを使用することができ、制御レジスタ32に格納されたスタック・ポインタ選択値30は、スレッド・モードTにあるときに、メイン・スタック・ポインタと処理スタック・ポインタのどちらを使用するべきかについて制御する。したがって、どのスタック・ポインタを使用するべきかについては、現在のモード(スレッドか、ハンドラか)と現在のドメイン(安全であるか、あまり安全でないか)の組合せだけでなく、スタック・ポインタ選択値30にも基づいて、決定することができる。
図3に示したように、スタック・ポインタ選択値30は、セキュリティ状態の間にバンクさせることができ、したがって、安全なドメイン及びあまり安全でないドメインは、スタック・ポインタ選択値30の別個の安全なバージョン及びあまり安全でないバージョンSPSEL-S、SPSEL-LSを使用して、安全なスレッド・モード及びあまり安全でないスレッド・モードがそれぞれ、メイン・スタック・ポインタを使用するかどうかについて独立して制御することができる。
【0060】
一般に、ハンドラ・モードHで動作する例外ハンドラの本体、又はスレッド・モードTで動作するスレッドの中では、安全なスタック・ポインタか安全でないスタック・ポインタかの選択肢は、処理回路構成4がコードを実行している現在のセキュリティ・ドメインに依存し得る。例外エントリ及び例外復帰について、状態のスタック及びアンスタックは、例外が発生する前に動いていたバックグラウンド・コードのセキュリティ・ドメインに関連付けられたスタック・ポインタによって識別されたスタックから実施される。
【0061】
制御レジスタ32は、スレッド・モードで実行されたコードに特権があるか特権がないかを制御する特権制御値31も含むことができる。特権制御値は、安全なドメイン及びあまり安全でないドメインに対してそれぞれにセットすることができる(例えば、安全なスレッド・モードには特権がなくてもよく、その一方で、あまり安全でないスレッド・モードには特権があってもよく、逆もまた同様である)。代替として、安全なスレッド・モードとあまり安全でないスレッド・モードの両方が、同じ特権レベルで動作することができる。特権制御値31はほんの一例であり、制御レジスタに格納された構造的状態を使用して、安全な/あまり安全でないスレッド・モードでコードに割り当てられた特権レベルを制御する他の方式があり得ることが理解されよう。
図3の実例では、安全なドメイン及びあまり安全でないドメインにおいてスレッド・モードによって使用される特権レベルをそれぞれ制御するために、別個の安全な特権制御値及びあまり安全でない特権制御値PRIV-S及びPRIV_LSが提供されるように、特権制御値31をバンクする。それでも、ドメイン遷移時にスイッチされる単一の制御ビットを提供するための別のアプローチがあってもよい。
【0062】
図3に示したように、制御レジスタ20は、構成レジスタ34を含むことができ、構成レジスタ34は、下記で論じるような安全なゲートウェイ命令に応答して、処理回路構成が再入場チェックを実施するべきかどうかについて指定することができる再入場可能構成指標36を含む構成データを格納することができる。
【0063】
また、制御レジスタ20は、安全なスタック・ポインタMSP_S及びPSP_Sによって指し示された安全なスタック・データ構造を広げることができる範囲の限界を示す限界アドレスを指定するために使用される1つ又は複数の安全なスタック・ポインタ限界レジスタ38、39を含むことができる。この実例では、2つの限界レジスタがあり、1つは、安全なメイン・スタック・ポインタMSP_Sのための39であり、1つは、安全な処理スタック・ポインタPSP_Sのための38である。各限界レジスタ内の限界アドレスは、スタック・データ構造がどこまで拡張できるかを限定するために使用することができる。メイン又は処理の安全なスタック・データ構造が、対応する限界レジスタ38、39内の限界アドレスを越えて拡張したことを、処理回路構成若しくは例外制御回路構成28が検出すると(又は、限界アドレスを越えた値にスタック・ポインタを更新しようとする試みを検出すると)、例外制御回路構成28は、それ自体が例外をトリガできる信号を送られるように障害をトリガすることができ、次に、例外ハンドラは、セキュリティを確保するためのいくつかの回復アクション又は他の措置を行うことによって障害に応じることができる。これは、他のデータのために使用される領域にスタック・データ構造が拡張し、これらの他の領域内のこのデータを破損させることができるように、攻撃者がセキュリティ対策を破ることを、非常に多くの例外を引き起こすことによって、又は、非常に多くの機能をコールすることによって、確実にできないようにするために役立てることができる。
【0064】
例外エントリ及び例外復帰のハンドリングの1つの態様は、構造的状態のスタッキング及びアンスタッキングである。例外条件が発生すると、レジスタ14に格納された構造的状態のうちのいくつかは、例外に入った後に実行された例外ハンドラが、これらのレジスタを上書きしても、例外が発生する前に実施されていた処理に復帰することが望まれるとき、レジスタの以前の内容を後でメモリから復元できるように、メモリに保存される必要があり得る。
図3に示したバンクされたスタック・ポインタ・レジスタのうちの1つによって指し示したスタック・データ構造は、この状態を保存するために使用することができる。
【0065】
パフォーマンスのために、このような例外エントリ・イベントに応答して保存される必要があり得るレジスタを、「呼出側」レジスタ及び「被呼出側」レジスタと呼ばれる2つのグループに分割することが役立ち得る。呼出側レジスタは、ハードウェアに実装された例外制御回路構成28がスタックに保存することを担当するレジスタである。したがって、スタック・データ構造に呼出側レジスタを保存するための命令を、例外ハンドラのソフトウェアが含む必要はない。
【0066】
図4に示したように、呼出側レジスタは、汎用レジスタのサブセットを含むことができる。この実例では、呼出側状態は、汎用レジスタR0、R1、R2、R3、及びR12、リンク・レジスタLR(R14)、例外処理後に処理が復帰することになる復帰アドレスの指示、並びに、条件付き命令の結果を制御するための条件コードを提供することができるプログラム状態レジスタXPSRを含む。これは、レジスタ状態が呼出側レジスタに含まれ得る単なる1つの特定の実例であることが理解されよう。
【0067】
図4の右側部分の基本スタック・フレームに示したように、浮動小数点レジスタ18のいずれも使用しない処理について、基本スタック・フレームは、一定の整数レジスタ16又は制御レジスタ20及び復帰アドレスを含むだけでよい。それでも、例外前に実行する処理も浮動小数点レジスタ18を使用する場合、
図4の左側の拡張されたスタック・フレームに示したように、呼出側レジスタは、浮動小数点レジスタ18のサブセットS0~S15も含むことができる。浮動小数点コンテキストは、浮動小数点演算の処理を制御するために使用される浮動小数点状態制御レジスタFPSCRなど、追加の制御レジスタも含むことができる。
【0068】
図4の中央部分に示したように、拡張された浮動小数点スタック・フレームが、追加の浮動小数点コンテキストのために予約された空間を含むことも可能であるが、実際には、例外エントリのハンドリング時にスタック上のこの予約空間に浮動小数点コンテキストを保存しないことも可能である。代わりに、ゆっくりとした(lazy)浮動小数点コンテキスト保存を使用することができ、この場合、例外エントリに続いて生成される新しいスタック・ポインタを予測できるように例外に応答してスタック上に空間が予約されるが、この予約空間への浮動小数点コンテキストの実際の保存は、例外後に、初回の浮動小数点状態が必要になるまで延期される。このようにして、いずれかの浮動小数点コンテキストに例外ハンドラがアクセスする前に、その後の例外復帰が発生した場合、浮動小数点レジスタ18からメモリに浮動小数点コンテキストを保存する際に、時間及びエネルギーを費やすことを避けることができる。
【0069】
したがって、
図4に示した実例のスタック・フレームの全てが、呼出側レジスタからの保存された状態を含むが、被呼出側レジスタに関連付けられた状態を含まない呼出側レジスタ・スタック・フレーム(第1のスタック・フレーム)の実例である。
【0070】
例外イベントに応答して、例外制御回路構成28によって、呼出側スタック・フレームがスタックに保存された後、例外ハンドリング・コードの実行がスタートしてもよく、その後、例外ハンドラ・ソフトウェアは、この実行中にこの状態を上書きすることがわかっている場合、追加の被呼出側レジスタからの状態をスタックに保存することができる。それでも、例外ハンドラによるこの状態保存は、例外ハンドラ・コード内で提供されるロード/格納命令に応答して、処理回路構成4のロード/格納ユニットを制御して関連データをメモリに保存することによって実施されるが、これは、例外制御回路構成28が、ハードウェア内のスタッキングを制御する場合より遅くなり得る。それでも、例外に入った後に実行するソフトウェアをどのレジスタに保存しなければならないかについて影響を及ぼすことができるように、呼出側レジスタ状態と被呼出側レジスタ状態との間で分割できるようにすることが有益になり得る。特定の被呼出側レジスタ(例えば、汎用レジスタR7又は浮動小数点レジスタS27)に例外ハンドラがアクセスしない場合、例外ハンドラは、対応する構造的状態を保存する必要がなく、例外制御回路構成28及びハードウェアにおいてこの状態保存を行うことにエネルギー及び時間が関連付けられることも避けられてきた。例外ハンドラについてのコードのライタ、又はこのようなコードのコンパイラは、追加の被呼出側レジスタを使用する前に呼出側レジスタをまず使用して、ソフトウェアでの追加の状態保存が必要になる機会を減らすことが奨励され得る。
【0071】
それでも、例外エントリによって安全なドメインからあまり安全でないドメインへの遷移が生じ、例外の前にスレッド・モードで実施されていた元のバックグラウンド処理が安全なドメインにおけるものであった場合、呼出側レジスタが例外制御回路構成28によってメモリに保存された場合のみ、最新の例外後に実行されることになるあまり安全でない例外ハンドラに、レジスタ・バンク14内で被呼出側レジスタがアクセスできるようにしてもよい。これは、そうでなければ、あまり安全でない例外ハンドラがアクセスするのをSAU24が防ぐことになる、メモリ・アドレス空間の安全な領域から導出された情報を、被呼出側レジスタが含む可能性があるので、望ましくないことがある。
【0072】
したがって、バックグラウンド処理が安全なドメインで以前に実施された、安全なドメインからあまり安全でないドメインへの一定の遷移について、例外制御回路構成28は、呼出側レジスタの保存に加えて、関連するスタック・データ構造に被呼出側レジスタを保存することもでき、(呼出側レジスタ及び被呼出側レジスタを含む)保存されたレジスタの内容を消去することができる。したがって、ハードウェアでの追加の状態保存を実施することによって、これは、被呼出側レジスタを通常、保存することになるソフトウェアが、例外が発生する前にこれらのレジスタに格納された潜在的に安全な情報にアクセスできないことを意味する。
【0073】
したがって、一定の例外エントリ遷移について、
図4に示した呼出側スタック・フレームを格納するのではなく、代わりに、
図5に示したような第2のスタック・フレームを(例外制御回路構成28によるハードウェア制御の下、すなわち、処理回路構成4によってロード/格納命令を明示的に実行する必要なく)保存することができる。もう一度、
図5の左側部分に示したように、浮動小数点コンテキストを必要としない場合について、スタック・フレームは、いずれかの浮動小数点状態の保存を省略することができる。この場合、第2のスタック・フレームは、
図4に示した呼出側状態と、また、レジスタR4~R11を含む追加の被呼出側状態の両方を含む。ハードウェアによって保存された追加の状態は、下記でより詳細に説明される整合性署名50も含むことができる。代替として、浮動小数点コンテキストも保存される必要がある場合について、
図4の左側の実例に示した呼出側状態に加えて、拡張された第2のスタック・フレームも、
図5の右側に示したように、追加の被呼出側浮動小数点レジスタS16からS31を含む。
図5に示されていないが、いくつかの実施例は、被呼出側及び呼出側の浮動小数点レジスタのための空間を予約し、
図4について説明したのと同じようにこれらのレジスタをゆっくりと保存することができる。
【0074】
したがって、
図4の実例に示した基本的な呼出側スタック・フレームは、第1の例外スタック・フレームの実例であってもよく、被呼出側レジスタに関連付けられた追加の構造的状態も含む
図5のスタック・フレームの実例は、第1の例外スタック・フレームから省略されたレジスタからの構造的状態データのサブセットを含む第2の例外スタック・フレームの実例であってもよい。例外エントリ遷移時、例外制御回路構成は、例えば、例外の前後に実施された処理に関連付けられたセキュリティ・ドメインに応じて、又は、制御レジスタ20に関連付けられた他の状態情報に応じて、第1の例外スタック・フレームと第2の例外スタック・フレームのどちらがハードウェアによって保存されるべきかを選択することができる。浮動小数点コンテキストが保存されるか否か、及び、ゆっくりとした浮動小数点コンテキスト保存のオプションが使用されるかどうかは、制御レジスタ20のうちの1つで指定された制御パラメータに依存し得る。
【0075】
整合性署名50は、例外制御ハードウェア28によって呼出側状態と被呼出側状態の両方が保存されるときに、第2の例外スタック・フレームに含まれるが、
図4に示した第1の例外スタック・フレームにはない。整合性署名50は、例えば、1つのアドレスから命令をフェッチする試みが行われた場合に、障害を信号で送るこのアドレスといった、実行可能アドレスに対応しない特殊な予約値を有することができる。この整合性署名は、安全なドメインとあまり安全でないドメインとの間の分割を実施するハードウェアによって提供されるセキュリティ保護を回避しようとするために処理回路構成に対して開始され得る一定の形の攻撃を検出するために使用することができる。攻撃のための1つの可能な手段は、攻撃者が例外エントリ遷移を実施して例外処理に入ろうとするが、その一方で、機能復帰遷移の実施など、例外エントリからの復帰が予想されるものへの異なるタイプの復帰遷移を後で偽造することであってもよい。署名50は、機能復帰が行われる場合の機能復帰アドレスを格納することが予想されるスタック・フレーム上の位置にあってもよく、整合性署名50は、実行可能アドレスに対応しない特殊値を有することができるので、これは、有効な機能復帰アドレスが署名に一致し得ないことを意味する。したがって、復帰アドレスが整合性署名50に一致すること(又は、これが、非実行可能アドレスに対応すること)が機能復帰時に検出された場合、例外エントリ・イベントに応答して、機能復帰を実施するために使用されるスタック・フレームがスタックに実際に保存されていたことを意味するので、障害をトリガすることができ、これは、攻撃が実施されているという指標になり得る。また、被呼出側レジスタに関連付けられた追加の構造的状態がスタック上にある例外からの復帰の際、セキュリティ・チェックの一部は、例外エントリ・イベント及び例外復帰イベントの不適切なシーケンスがトリガされたことを署名の欠如が示すことができるので、整合性署名50に対応するスタック内の関連オフセットにおける値が予想値を有しているかどうかについてチェックすることであってもよい。
【0076】
したがって、スタック上に整合性署名を提供することは、一定の例外エントリ遷移に対して実施され得る保護アクションの実例である。具体的には、スタック上に整合性署名をこのように保存することは、安全なスレッド・モードからあまり安全でないハンドラ・モードへの例外エントリ遷移の少なくとも1つの形に対して発生してもよい。それでも、整合性署名50は、
図4に示したような基本的な呼出側スタック・フレームに含まれず、なぜなら、安全なドメインから、同様に安全なドメインにおける例外ハンドラへの例外エントリを実施するとき、保護手段を必要としないことが予想され得るからである。ハードウェアにおいて(整合性署名を含む)被呼出側状態を回避することは、次の例外復帰が以前の安全なバックグラウンド処理に単に戻るように、スレッド・モードでの安全なバックグラウンド処理の処理中に安全な例外が発生し、安全な例外の処理中に他の例外が発生しない場合に対する割込みハンドリング・レイテンシを低減させるのに役立つ可能性がある。
【0077】
それでも、
図8に示したように、安全なスレッドからあまり安全でないハンドラ・モードへの例外エントリ遷移に対する保護アクションの省略は、時には、攻撃者が活用できる手段を提供する恐れがある。
図8は、イベントの以下のシーケンスを示す。
1.割込み(IRQ1)により、安全なハンドラ・モードへの遷移を生じる。呼出側保存レジスタは、例外制御ハードウェア28によって(PSP_Sで示された)安全な処理スタックに自動的に保存される。割込みハンドリング・レイテンシを低減させるために、被呼出側保存レジスタは保存されず、したがって、
図4に示したタイプの第1の例外スタック・フレームが(整合性署名を省略して)保存される。これは、ターゲット状態が安全であり、したがって、これらのレジスタを破損させないことが確信できるので、受入れ可能である。
2.もう1つの割込み(IRQ2)により、安全でないハンドラ・モードへの遷移が生じる。この時点で、ハードウェアは、遷移が安全でない状態になり、これにより、安全な値をハンドリングすることが確信できないので、呼出側保存レジスタと被呼出側保存レジスタの両方を保護する。したがって、
図5に示したタイプの第2の例外スタック・フレームが、MSP_Sによって示された安全なメイン・スタックに保存される。メイン・スタックは、ハンドラ・モードでの処理中に、この例外が発生したときに、使用される。
3.安全でないドメインを制御する攻撃者は、次に、(IRQ2から復帰するための安全なハンドラ・モードへの予想される例外復帰の代わりに)安全なスレッド・モードに戻る一連の例外復帰又は機能復帰を偽造することができる。ステップ1において安全な処理スタックに保存されたスタック・フレームが、そのスタック上に整合性署名を有していないので、安全なスレッド・モードへの復帰時のアンスタックが、ステップ1において安全な処理スタックに保存された呼出側だけの例外スタック・フレームをアンスタックしようとする場合、セキュリティ違反の可能性がある。
【0078】
この問題は、ステップ1において、通常、スレッド・モードで使用される処理スタック・ポインタ(PSP)の代わりに、アンスタック動作のためにメイン・スタック・ポインタ(MSP)を、スレッド・モードが後で使用することを示すように、スタック・ポインタ選択値30をセットすることによって対処することができる。これは、ステップ3において攻撃者が偽の例外復帰を偽造する場合、アンスタックは、メイン・スタックからのものであり、保護されていない処理スタックからのものではないことを意味する。メイン・スタック上のスタック・フレームが、実際には、(ハンドラ・モードのためのものである)IRQ2の復帰のためのものであり、スレッド・モードへの復帰のためのものではないので、他の整合性チェックは失敗し得る(例えば、実際に復帰したモードと、スタック・フレームがアンスタックされたときに復帰することを意図したモードであるような、アンスタック状態で示されたモードとの間の不一致が検出され得る)。したがって、攻撃を検出することができる。
【0079】
図6は、例外制御回路構成によってサポートされ得る例外エントリ遷移のいくつかの異なる形を示すテーブルである。テーブルの最初の4列に示したように、例外エントリ遷移は、バックグラウンド処理が、スレッド・モードのためのスタック・ポインタ選択値30によって示されるような、メイン・スタック・ポインタと処理スタック・ポインタのどちらを使用していても、例外エントリが発生する前に実施されたバックグラウンド処理に関連付けられたセキュリティ・ドメイン及びモードに応じて、並びに、例外条件自体に関連付けられたセキュリティ・ドメインに応じて、選択される。例えば、発生した例外のタイプは、これが、安全な例外であるか、あまり安全でない例外であるかを示すことができ、又は、例外は、どのセキュリティ・ドメインが例外に関連付けられるかを指定する追加の制御情報に関連付けられてもよい。バックグラウンド・モードがスレッド・モードである場合には、処理スタック・ポインタを使用することしかできないので、処理スタック・ポインタを使用するハンドラ・モードで実施されるバックグラウンド処理に対応する遷移はないことに留意されたい。したがって、バックグラウンド・モードがハンドラ・モードである場合について、テーブルの行9から行12に相当するものはない。
【0080】
図6のテーブルの第5列は、種々の例外エントリ遷移のそれぞれについて、どのスタック・フレーム・フォーマットが使用されるかについて示す。
【0081】
行5から行8、行11、及び行12に示した遷移について、呼出側保存レジスタだけしか保存する必要はなく、なぜなら、実施されているバックグラウンド処理が、あまり安全でないドメインにあり、したがって、被呼出側レジスタを保存しなくても、取扱いに慎重を要する情報を損失するリスクがないからである。
【0082】
行2、行4、及び行10に示した遷移について、バックグラウンド処理が安全なドメインにあり、例外のためのターゲット・セキュリティ・ドメインが、あまり安全でないドメインであり、したがって、被呼出側保存レジスタの追加の状態保存は、これらのレジスタ内のデータがあまり安全でない例外ハンドラに漏れるのを防ぐために、ハードウェアで例外制御回路構成28によって実施される。
【0083】
図8の行1、行3、及び行9に示した遷移について、アーキテクチャは、呼出側レジスタを保存することだけを必要としてもよいが、必要に応じて被呼出側レジスタを任意選択として同様に保存することを許可してもよい。これは、呼出側保存レジスタと被呼出側保存レジスタの両方の保存を必要とする一種の例外エントリ遷移をシステムが最初に実施し、その一方で、被呼出側レジスタを保存する間に、より高い優先度の例外が発生し、したがって、代わりに、被呼出側レジスタを保存することを必要としない異なる例外エントリが選択された場合、保存を停止し、第1の例外に応答して既に行われていた被呼出側レジスタの以前の保存に関連付けられた変更を元に戻さなければならなくなることよりむしろ、ハードウェアが被呼出側レジスタを保存し続けることが簡単になり得るので、役立ち得る。リンク・レジスタR14に書き込まれる例外復帰値は、デフォルトのスタック・ルールに従い、呼出側レジスタだけがスタック上にあるかどうか、又は、被呼出側レジスタもスタック上に置かれているかどうかを示すためにセットされ得るフラグDCRSを含むことができる。このフラグは、どのアンスタックを実施する必要があるかを決定するために例外復帰を実施するときにチェックすることができ、また、整合性署名に基づいてどの整合性チェックを実施するべきかを決定するために使用することができる。リンク・レジスタ内に置かれたこの例外復帰値は、安全なスタックとあまり安全でないスタックのどちらをスタックのために使用したか、スタックが実施された(また、対応する例外復帰が予想される)動作モードを示すフラグ、又は、スタック・フレームが、標準的な整数だけのスタック・フレームであるか、拡張された浮動小数点のスタック・フレームであるかを示すフラグなど、例外復帰中に参照するための他の情報も指定することができる。他の情報も例外復帰値で示すことができることを理解されたい。
【0084】
図7は、例外が行われる前に実施された以前の処理に処理を復帰させるために、例外制御回路構成28が使用できる例外復帰遷移のいくつかの異なる形式を示すテーブルである。テーブルの最初の5列に示したように、選択される特定の遷移は、例外に関連付けられたセキュリティ・ドメイン、例外復帰をリクエストしたときのセキュリティ状態、復帰するスタック・ポインタ、復帰するモード、及び、復帰するセキュリティ状態に依存する。どのスタック・ポインタ、モード、及びセキュリティ状態に復帰しているかは、例外復帰イベントをトリガする例外復帰命令に関連付けられた情報に基づいて決定することができる。例外復帰をリクエストしたときのセキュリティ状態は、例えば、あまり安全でないドメインと安全なドメインとの間の遷移を生じたはずの例外が行われてから、ファンクション・コールがあったはずなので、元の例外に関連付けられたセキュリティ・ドメインとは異なっていてもよい。したがって、例外に関連付けられたセキュリティ・ドメインも、例外が行われたときにリンク・レジスタ内の例外復帰値に置かれたフラグから決定することができる。
図6の例外エントリ遷移と同様に、
図7について、行5、行6、行11、行12、行17、及び行18における遷移に相当する「ハンドラへの復帰」はなく、なぜなら、ハンドラ・モードで処理スタック・ポインタを使用することができないからである。また、現在、あまり安全でない状態にある間、安全な例外から復帰する例外復帰遷移は、これらの遷移も禁止されるので、存在しない(すなわち、例外復帰がリクエストされたときのセキュリティ状態があまり安全でない行1から行6のミラーがない)。あまり安全でない例外は、例外復帰をその後トリガする安全な機能を後でコールすることができるが、安全な例外について、例外復帰をトリガするあまり安全でない機能を安全な例外がその後コールすることは許可されない。
【0085】
図7の第6列は、例外復帰遷移のそれぞれについて、被呼出側レジスタが、この例外に関連付けられたスタック・フレーム上にあると予想されるかどうか、及びしたがって、スタック・フレーム上の特定のオフセットにある値が、予想した整合性署名値に一致するかどうかについて決定するために、何らかの整合性署名チェックが必要であるかどうかについて示す。例外復帰遷移の大部分について、被呼出側レジスタが予想されず、整合性署名がチェックされないか、又は、被呼出側レジスタが予想され、整合性署名チェックが実施される。それでも、行1、行3、及び行5に示した遷移について(これらの行は、
図8の行1、行3、及び行9からの例外エントリ遷移に対応し、任意選択として、呼出側レジスタに加えて、被呼出側レジスタを保存していてもよい)、被呼出側レジスタが予想され、整合性署名がチェックされることになるか否かは、例外が行われたときにリンク・レジスタ内の例外復帰値に保存されたDCRSフラグに依存し得る。
【0086】
整合性署名の欠落を活用する潜在的な攻撃は、
図8について上記で説明したが、安全から安全への例外エントリ遷移に応答して、スタック・ポインタ選択値30をセットすることによって対処する。それでも、別の形の攻撃から保護するために、メイン・スタック・ポインタが、選択したスタック・ポインタのようにスレッド・モードによって使用されることになることをスタック・ポインタ選択値30が示すシナリオにおいて、安全なスレッド・モードへのスイッチ・バックを引き起こす一連の遷移を検出するための構造的手段を提供することが望ましいことがある。
【0087】
処理回路構成4は、あまり安全でないドメインから安全なドメインにスイッチしたときに、安全なドメインへの有効なエントリ・ポイントをマークするために使用することができるゲートウェイ命令(又は「安全なゲートウェイ」命令、SG(secure gateway))をコールする一定の命令をサポートすることができる。あまり安全でないドメインにおける処理から、安全なドメインに関連付けられることをSAU24が示す命令アドレスにおける命令へのプログラム・フローの変更時、処理回路構成4は、プログラム・フローの変更の後、ターゲット・アドレスで実行される第1の命令が安全なゲートウェイ命令であるかどうかについてチェックすることができ、そうでない場合、処理回路構成4は、障害をトリガすることができる。安全なコードのライタ又はコンパイラは、あまり安全でないコードが、安全なゲートウェイ命令を使用して、安全なコードにコールするのを許可されるコードのポイントをマークすることができる。これは、例えば、いくつかのセキュリティ対策を迂回できるようにすることによってセキュリティ脆弱性を生じ得る安全なコード内の任意の位置に、あまり安全でないコードが分岐できることを防ぐ。例えば、安全なコードがパスワード・チェックを含む場合、任意の分岐ポイントからの保護が提供されない場合、パスワード・チェックを越えた安全な機能の一部に、あまり安全でないコードが分岐できるようにすることができ、安全でないコードが正しいパスワードを保有していなくても、パスワード・チェックを迂回することを事実上可能にする。これは、比較的単純な例であるが、より複雑な他の実例があり得、この場合、安全な機能内の一定のポイントに、あまり安全でないコードが分岐できる場合に重大なセキュリティ・リスクがあり得る。したがって、安全なゲートウェイ命令を提供すると、安全なコードへの有効なエントリ・ポイントを保護することができ、他の任意のエントリ・ポイントを、障害をトリガする無効なエントリ・ポイントとして扱い、セキュリティを改善することができる。
【0088】
安全なゲートウェイ命令は、一般に、安全なドメインへの有効なエントリ・ポイントに存在するので、レジスタMSP_Sに格納された安全なメイン・スタック・ポインタを使用しても安全であるかどうかについてチェックするために、安全なゲートウェイ命令も、安全なメイン・スタック・ポインタのチェックをトリガするために使用することができる。攻撃者が、安全なゲートウェイ命令を含む悪意のある安全な機能にコードを提供しても、安全なゲートウェイ命令が、処理回路構成4をトリガして、スタック・ポインタに対して追加のセキュリティ・チェックを実施すると依然として信じることができ、なぜなら、残りの安全なスレッド・モードのコードが悪意のあるものであったとしても、安全なスレッド・モードのコードに入るポイントにおける安全なゲートウェイ命令以外の任意の命令が障害をトリガするので、攻撃者が、安全なゲートウェイ命令を提供することを避けることができないからである。
【0089】
1つの実例では、あまり安全でないドメインからの遷移時に安全なゲートウェイ命令によってトリガされるスタック・ポインタ検証アクションは、スタック・ポインタ選択値30が0に等しく、メイン・スタック・ポインタがスレッド・モードで使用されることを示すかどうかについて単純にチェックすることができる。したがって、スタック・ポインタ選択値が0に等しい場合、障害をトリガすることができる。これは、攻撃から保護することができるが、安全なスレッド・モードが、メイン・スタック・ポインタを使用できるようにすることがまだ望ましくなり得るいくつかの有効なユース・ケースを除外する可能性がある。
【0090】
したがって、下記で論じる例では、スタック・ポインタ検証アクションは、代わりに、安全なスレッド・モードで使用されることになるような、スタック・ポインタ選択値30によって示されたスタック・ポインタから導出されたターゲット・アドレスを指定するロード・リクエストを、メモリ・アクセス・チェック回路構成22が許可するかどうかについてチェックするために、許可チェックをトリガすることを含むことができる。したがって、スタック・ポインタ選択値30が、メイン・スタック・ポインタを示すように以前にセットされていた場合、許可チェックは、メイン・スタック・ポインタによって示されたスタック・データ構造にアクセスすることをスレッド・モードが許可されるかどうか、及びしたがって、スタック・ポインタを使用しても安全かどうかをチェックするために、安全なメイン・スタック・ポインタ・レジスタMSP_Sに格納されたアドレスに基づくことができる。
【0091】
場合によっては、安全なゲートウェイ命令は、ターゲット・アドレスへのロード・リクエストを実際にトリガして、ロードのターゲット・アドレスに対する、メモリ・アクセス・チェック回路構成22によって実施される許可チェックを起動することができる。このようなロード・リクエストも、正しくない処理結果をもたらし得る再入場シナリオからの保護として、時には、役立てることができる。これは、
図9の実例に示される。ポイント1において、安全なスレッド・モード機能が、あまり安全でない状態からコールされる。安全な状態への分岐後の第1の命令は、SG命令であるはずである(そうでなければ、障害が生じる)。このコールの前に、安全でない状態は、指定の時間の後、タイマー割込みが作動するようにセットアップされる。安全でないコードは、再入場をサポートするように設計されていない重要な安全な動作中に、このタイマーが作動するように設計することができる。タイマーが作動すると、制御は、あまり安全でないハンドラ・モードにリダイレクトされる。その後、あまり安全でないハンドラ・モードは、あまり安全でないスレッド・モード(無特権の(deprivilege)動作)に復帰する。ポイント2において、あまり安全でないスレッド・モードは、再び安全な状態になる。これは、再入場に対して安全であるように設計されていなかった重要な動作を完了していないときに安全な状態に再び入ることなので、再入場攻撃につながる恐れがある。例えば、重要な動作は、所与のイベントの発生数をカウントするためのイベント・カウンタの更新などの動作であってもよい。それぞれのイベント発生に応答して、以下の機能をコールすることができる(ここで、#countは、カウンタ値がメモリに格納されているアドレスを表す)。
LDR r0,[#count] //メモリからの現在のカウント値をロードする
ADD r0,r0,#1 //現在のカウント値に1を加算する
STR r0,[#count] //更新したカウント値をメモリに戻して格納する
ロード命令と格納命令の間でタイマー割込みが発生し、次に、その後のイベント発生時に機能が再びコールされると、機能を実行する両方のインスタンスが、ロード命令のために同じ初期値を読み込んでいることになり、したがって、機能が2度コールされているにもかかわらず、カウントの1回のインクリメントしか起こらないことになるので、カウントを間違える2つのイベント発生のうちの1つにつながる恐れがある。これは、比較的単純な例であるが、再入場に対して安全でないコードの他の多くの実例を提供できることが理解されよう。
【0092】
このような再入場問題は、安全な機能とあまり安全でない機能の両方に影響を及ぼし得るが、ソフトウェアのライタ又はコンパイラが、あまり安全でない機能を再入場に対して安全であるように設計すること、又は、再入場が発生したかどうかについて検出するためのチェックを含むことができるソフトウェア技法があり得るので、あまり安全でないコードに対して再入場が発生するかどうかについてチェックするための構造的機能を提供することが正当化されるとみなされることはなく、このことが、コードを増加させるか、パフォーマンスを低下させることもあるが、あまり安全でないドメインでコードが実行されたときに、何らかのセキュリティ脆弱性をもたらすことが予想されることはない。それでも、安全なドメインについて、再入場の検出又は保護のためのこのようなソフトウェア技法が、セキュリティ脆弱性をもたらし得る可能性があり、したがって、このような脆弱性の機会を低減させるために、再入場が発生したかどうかについての構造的チェックを行うことが好ましくなり得る。
【0093】
再入場チェックについて、安全なドメインからあまり安全でないドメインへの例外エントリ遷移(
図9の実線)があったとき、又は、安全なドメインから安全なドメインへの例外エントリ遷移の後、安全なドメインからあまり安全でないドメインへのファンクション・コールがあったとき(
図9の点線)、安全なスレッド・モード機能に対する再入場シナリオが発生することが認識される。安全な例外からあまり安全でない例外への遷移(実線)の場合、整合性署名値が予想され、したがって、2回目に(
図9にラベルを付けられたコール2)、あまり安全でないドメインからスレッド・モードで安全な機能をコールする際、安全なゲートウェイが存在するとき、ステップ・ポインタ選択値30に基づいて安全なスレッド・モードで使用するために選択された、選択したスタック・ポインタを、そのターゲット・アドレスとして指定してロードをトリガすることができる。処理回路構成は、このアドレスに整合性署名50が存在するかどうかについてチェックすることができ、存在する場合、安全なドメインからあまり安全でないドメインへの例外エントリ遷移時にメモリに保存された関連するスタック・フレームが、対応する例外復帰時にまだアンスタックされていないことを、整合性署名50が示すことになるので、障害をトリガし、これは、同じ安全な機能を処理する以前のインスタンスをむやみに完了させない同じ安全な機能コードへの再入場シナリオであるという指示である。
【0094】
その一方で、ファンクション・コールが使用された場合(
図9の点線)、整合性署名50は、選択したスタック・ポインタ値によって示されたスタック上の位置に存在しないが、この場合、
図9の点線に3とラベルを付けられた遷移によって、スタック・ポインタ・セクション値が0にセットされ、また、再入場に備えて、スタック・ポインタ選択値が、
図9に3とマークされた割込みの逆の任意の対応する例外復帰遷移がまだないことにより、まだ1に戻してセットされていないことから、安全なスレッド・モードへの第2のコールを行うポイントにおけるスタック・ポインタ選択値(SPSEL)30が、メイン・スタック・ポインタが使用される予定であることを示す0に、まだセットされていることになるので、再入場を検出することができる。したがって、安全なスレッド・モード機能をコールする際に、0の値を有するSPSELは、やはり、再入場が発生しているという印である。
【0095】
したがって、どちらにしても、このような再入場チェックは、割り込まれたが、まだ再開されていない同じ機能の初期のコールに続いて安全なスレッド・モードで安全なコードがコールされることにつながる一連の遷移によって正しくない処理結果が生じるのを防ぐことができる。
【0096】
このような再入場チェックは、あまり安全でないドメインからのコールに続いて実行される安全なゲートウェイ命令に対して常に実施される必要はない。
図3に示したように、再入場可能構成ビット36は、あまり安全でないドメインから、安全なドメインに関連付けられたアドレスにおける安全なゲートウェイ命令への遷移に対して再入場チェックが必要か否かを制御するために、構成レジスタ34内に提供することができる。例えば、安全な機能が、再入場に対して安全なコードを有していることがわかっている場合、再入場チェックは、パフォーマンスを改善し、電力を節約するために、無効にすることができる。それでも、再入場チェックを無効にしたとしても、安全なゲートウェイ命令は、上述のような、スタック・ポインタの操作を伴ういくつかのタイプの攻撃から依然として保護するので、依然として、処理回路構成をトリガして、選択したスタック・ポインタに対応するターゲット・アドレスへのロード・リクエストを発行すること、又は、ターゲット・アドレスに対する許可チェックをトリガする別のタイプのリクエストを発行することを行うことができる。
【0097】
図10は、
図1に示した処理装置2を使用してデータ処理を実施する方法を示す流れ図を示し、安全なゲートウェイ命令に応答して実施されるチェックを含む。ステップ100において、処理されることになる次の命令を取得する。ステップ102において、現在のドメインがあまり安全でないドメインであるかどうかが検出され、ステップ104において、安全なドメインに関連付けられるような、SAU24内の属性データによってマークされたメモリ領域から次の命令がフェッチされたかどうかが検出される。一般に、あまり安全でないドメインから、メモリの安全な領域からフェッチされた命令への遷移の際、安全なドメインへのエントリが有効であるかどうかについてチェックするために、一定のチェックが必要とされ得る。現在のドメインがあまり安全でないドメインであり、次の命令が、安全なメモリからフェッチされるケースは、制御フローの所与の変更と呼ばれる。現在のドメインが安全なドメインであるか、あまり安全でないメモリ領域から命令がフェッチされる場合、これは、制御フローの所与の変更ではなく、その後のセキュリティ/再入場チェックは必要とされない。現在のドメインが安全なドメインであるか、あまり安全でないメモリから命令がフェッチされる場合、ステップ106において、次の命令を、この命令によって機能が表されるどのようなものにも従って、正常なものとして実行することができる。
【0098】
あまり安全でないドメインから、安全なメモリからフェッチされた命令への、制御フローの所与の変更が識別された場合、ステップ108において、処理回路構成4は、次の命令が安全なゲートウェイ(SG)命令であるかどうかについてチェックする。次の命令が、安全なゲートウェイ命令以外のいずれかの命令である場合、ステップ110において、安全な障害を起こす。これは、システムが、安全なゲートウェイ命令によってマークされたコードにおける一定のポイントにおいて、安全なドメインへの遷移しかできないことを確実にする。
【0099】
命令が安全なゲートウェイ命令であると識別された場合、ステップ112において、処理回路構成4は、現在の動作モードがスレッド・モードであるかどうかについて決定する。現在のモードがハンドラ・モードである場合、その後の再入場チェック、及びスタック・ポインタ検証を省略することができ、ステップ106において、命令を正常に実行することができる。安全なゲートウェイ命令について、このような正常な実行は、安全なドメインへの遷移が許可されるかどうかについてチェックするための少なくとも1つのセキュリティ・チェックを含むことができる。安全なゲートウェイ命令に対する全ての必要なセキュリティ・チェックに合格した場合、安全なゲートウェイ命令を実行して、処理回路構成4は、動作の現在のセキュリティ・ドメインを指定するレジスタを更新し、これにより、あまり安全でないドメインから安全なドメインに、現在のドメインをスイッチする。
【0100】
現在のドメインが安全なドメインである場合も、安全なゲートウェイ命令に遭遇する可能性があることに留意されたい。これは、あまり安全でない機能から、又は安全な機能から、同じコードをコールできることが原因である可能性がある。安全なゲートウェイ命令が既に安全なドメインにあるときに実行される場合、プログラム・フローは、上述のように、ステップ102からステップ106に進む。
【0101】
ステップ112において、現在のモードがスレッド・モードであると判定されると、ステップ114において、安全なゲートウェイ命令に応答して、処理回路構成4は、メモリ・アクセス・チェック回路構成22をトリガして許可チェックを実施し、安全なスレッド・モードのために使用されるようなスタック・ポインタ選択値30によって示された選択したスタック・ポインタから導出されたターゲット・アドレスにおけるメモリ6からのデータのロードをリクエストするロード・リクエストが許可されるかどうかについて判定する。具体的には、ターゲット・アドレスは、スタック・ポインタ選択値30に応じて選択される、選択したレジスタMSP_S又はPSP_Sに格納されたスタック・ポインタに等しくてもよい。許可チェックをトリガすると、MPU26は、ターゲット・アドレスをアクセス許可と照合する。MPU26は、安全なドメイン及びあまり安全でないドメインそれぞれのためのメモリ属性エントリの別個のセットを維持することができる。安全なゲートウェイ命令について、現在のドメインは、依然として、あまり安全でないドメインであってもよいが、ロード・リクエストを、安全なドメインに関連付けられたアクセス許可と照合することができる。また、安全なゲートウェイ命令によってトリガされたロードが、特権のあるアクセス・リクエスト又は特権のないアクセス・リクエストとみなされるか否かは、安全なスレッド・モードからのアクセスを、特権のあるもの又は特権のないものとして扱うべきかどうかについて指定する、
図3に示した特権制御値31に依存し得る。
【0102】
ステップ114において、いくつかの異なる方式で許可チェックをトリガすることができる。1つの実例では、処理回路構成4は、実際のロード動作が実施されていた場合と同様に、ターゲット・アドレスを指定するロード・リクエストを実際に発行することができる。代替として、例えば、メモリ・システム6への実際のメモリ・アクセスをトリガすることなく許可チェックをトリガする格納リクエスト又はアドレス・チェック・リクエストといった、異なるタイプのリクエストをメモリ・アクセス・チェック回路構成22に発行することができる。再入場チェックが実施される場合、(ステップ122において、このようなロード・リクエストによってロードされた値が必要になるので)ロード・リクエストを発行することが最も効率的になり得るが、再入場チェックが実施されないとき、別のタイプのリクエストを使用することができる。代替として、再入場チェックが無効になっても、メモリ・アクセス許可チェックを起動するためにロード・リクエストを依然として発行し、再入場チェックが有効であるか無効であるかに関わらず、同じタイプのリクエストを発行できるようにすることによって複雑性を低減させることができる。
【0103】
したがって、ステップ116において、MPU26によるメモリ・アクセス許可の探索に基づいて、メモリ・アクセス・チェック回路構成22は、ターゲット・アドレスへのロードが許可されるかどうかについて判定することができ、許可されない場合、ステップ118において、メモリ保護障害を起こす。したがって、安全なスレッド・モードが特権のないものとして扱われ、選択したスタック・ポインタに関連付けられたアドレスが、(メイン・スタック・ポインタが現在選択されているかどうかについて一般に予想される)特権のあるメモリを指す場合、ロードが許可されることはなく、メモリ障害は、不適切であるか、セキュリティ脆弱性につながり得る方式で、その後の安全なコードがメイン・スタック・ポインタ値を操作するのを防ぐことができる。
【0104】
許可チェックに合格すると(ターゲット・アドレスへのロードが許可されると)、ステップ120において、処理回路構成は、再入場チェックが有効になったことを再入場可能構成値36が示すかどうかについて検出する。再入場チェックが無効になると、方法は、ステップ106に進み、上記で説明したように、SG命令を正常に実行する。再入場チェックが無効になっても、ステップ116において、スタック操作攻撃からの保護を提供するために、依然として、許可チェックがトリガされることに留意されたい。
【0105】
再入場チェックが有効になると、方法は、ステップ122に進む。ステップ114において、ロード・リクエストがまだ発行されていない場合、ステップ122において、ターゲット・アドレスを指定するロード・リクエストを発行することができる(しかし、実際には、再入場チェックが有効になった場合、ステップ114においてロード・リクエストを発行して、許可チェックをトリガすることがより効率的になり得る)。ステップ114とステップ122のどちらでロード・リクエストが発行されるかに関わらず、ステップ122において、処理回路構成4は、ターゲット・アドレスへのロード・リクエストに応答してメモリ6からロードされた値が、被呼出側状態の追加の状態保存が
図5に示したように実施されたときにスタックに保存された整合性署名50に一致するかどうかについて検出する。ロードされた値が整合性署名に一致する場合、再入場シナリオがあり、したがって、ステップ124において、第1のインスタンスがまだ完了していないときに安全な機能の第2のインスタンスを実行することによって正しくない処理結果が生じるのを防ぐために、安全な障害を起こす。
【0106】
また、再入場チェックが有効になると、ステップ126において、処理回路構成は、現在選択している状態ポインタがメイン・スタック・ポインタであることをスタック・ポイント選択値30が示すかどうか、すなわち、この実例では、スタック・ポインタ選択値が0に等しいかどうかについてチェックする。現在選択しているスタック・ポインタがメイン・スタック・ポインタである場合、再びステップ124において、安全な障害を起こす。ロードされた値が整合性署名に一致せず、現在選択しているスタック・ポインタが、処理スタック・ポインタである(スタック・ポインタ選択値が1に等しい)場合、ステップ106において、再入場チェックに合格しているので、SG命令が正常に実行される。
【0107】
したがって、要約すれば、安全なゲートウェイ命令を使用して、有効であるときに、スタック・ポインタ値の検証、及び再入場チェックをトリガすることによって、攻撃からの保護、及び、再入場シナリオに対するソフトウェア検出又は軽減の必要をなくすことによるパフォーマンスの改善を提供することができる。
【0108】
図11は、使用され得るシミュレータ実装形態を示す。初めの方で説明した実施例は、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本発明を実装するが、コンピュータ・プログラムの使用を通じて実装された、本明細書で説明した実施例による命令実行環境を提供することもできる。このようなコンピュータ・プログラムは、ハードウェア・アーキテクチャに関するソフトウェア・ベースの実装形態を提供する限りにおいて、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムは、エミュレータ、仮想マシン、モデル、及び、動的なバイナリ・トランスレータを含むバイナリ・トランスレータを含む。典型的には、シミュレータ実装形態は、任意選択として、シミュレータ・プログラム210をサポートするホスト・オペレーティング・システム220を動かす、ホスト・プロセッサ230上で動かすことができる。いくつかの配置では、ハードウェアと提供された命令実行環境との間に、及び/又は、同じホスト・プロセッサ上で提供された複数の別個の命令実行環境の間に、シミュレーションの複数の層があってもよい。歴史的に、適度なスピードで実行するシミュレータ実装形態を提供するために、強力なプロセッサを必要としてきたが、このようなアプローチは、互換性又は再利用のために、別のプロセッサにネイティブのコードを動かすという要望があるときなど、一定の状況で正当化され得る。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていないさらなる機能を命令実行環境に提供すること、又は、異なるハードウェア・アーキテクチャに典型的に関連付けられた命令実行環境を提供することができる。非特許文献1にシミュレーションの全体像が示されている。
【0109】
特定のハードウェア構造物又は特徴を参照しながら実施例を以前に説明した範囲で、シミュレートされた実施例では、適切なソフトウェア構造物又は特徴によって同等の機能を提供することができる。例えば、コンピュータ・プログラム・ロジックとして、シミュレートされた実施例において特定の回路構成を実装することができる。同様に、ソフトウェア・データ構造として、シミュレートされた実施例において、レジスタ又はキャッシュなどのメモリ・ハードウェアを実装することができる。また、ホスト・オペレーティング・システム220によって使用される仮想アドレス空間にシミュレータ210によってマッピングされた、シミュレートしたアドレス空間200として、ハードウェア装置2内のメモリ6にアクセスするために使用される物理アドレス空間をエミュレートすることができる。前述の実施例で言及されたハードウェア要素の1つ又は複数がホスト・ハードウェア(例えば、ホスト・プロセッサ230)上にある配置では、いくつかのシミュレートされた実施例が、適切な場合、ホスト・ハードウェアを使用することができる。
【0110】
シミュレータ・プログラム210は、コンピュータ可読ストレージ媒体(非一時的媒体であってもよい)に格納することができ、シミュレータ・プログラム210によってモデル化された、ハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じ、(アプリケーション、オペレーティング・システム、及びハイパーバイザを含むことができる)ターゲット・コードへのプログラム・インターフェース(命令実行環境)を提供する。したがって、ターゲット・コードのプログラム命令は、シミュレータ・プログラム210を使用して命令実行環境内から実行することができ、これにより、上記で論じた装置2のハードウェア特徴を実際に有していないホスト・コンピュータ230が、これらの特徴をエミュレートすることができる。シミュレータ・プログラムは、処理プログラム・ロジック235、メモリ・アクセス・チェック・プログラム・ロジック240(MPUプログラム・ロジック242及びSAUプログラム・ロジック244を含む)、並びに、
図1のハードウェア装置2の処理パイプライン4、(MPU26とSAU24を含む)メモリ・アクセス・チェック回路構成22、及び例外制御回路構成28の挙動をエミュレートする機能を提供する例外制御プログラム・ロジックを含むことができる。システム2の構造レジスタ14も、ホスト・ハードウェア230によって使用されるメモリ空間にターゲット・アーキテクチャの構造レジスタをマッピングするために、シミュレータ・コード210によって維持されるレジスタ・エミュレート・プログラム・ロジック255を使用してエミュレートすることができる。したがって、上記で論じた例でのハードウェアにおけるゲートウェイ命令によってトリガされたセキュリティ・チェック及び再入場チェックは、
図11の実例では、ターゲット・コード200の処理時に、プログラム・フローの所与の変更に続いて、ターゲット・コード200内で安全なゲートウェイ命令が識別されたときに、シミュレータ・プログラム210によってソフトウェアで代わりに実施することができる。
【0111】
本出願において、「~するように構成されている(configured to ...)」という語は、定義した動作を行うことができる構成を装置の要素が有することを意味するために使用される。この文脈では、「構成(configuration)」は、ハードウェア又はソフトウェアの相互接続の配置又は手法を意味する。例えば、装置は、定義した動作を行う専用ハードウェアを有してもよく、又は、プロセッサ若しくは他の処理デバイスを、機能を実施するようにプログラムしてもよい。「するように構成されている(Configured to)」は、定義した動作を行うために、何らかの方式で装置の要素を変更する必要があることを意味しない。
【0112】
本発明の例証的な実施例を、添付の図面を参照しながら本明細書で詳細に説明してきたが、本発明は、これらの正確な実施例に限定されないこと、及び、添付の特許請求の範囲によって定義されるような、本発明の範囲及び精神から逸脱することなく、様々な変更及び修正を当業者によってもたらすことができることを理解されたい。