(57)【要約】  制御スタックを生成する方法は、1つまたは複数の関数呼出しに応答して、複数の制御情報エントリをプロセッサの内部にある制御スタックバッファに書き込むステップと、制御スタックバッファが一杯であること、およびさらなる関数呼出しを受信したことに応答して、複数の制御情報エントリをプロセッサの外部にある外部メモリに書き込み、さらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むステップとを含む。
2018506784.tif 000002
【特許請求の範囲】
【請求項１】
制御スタックを生成する方法であって、
1つまたは複数の関数呼出しに応答して、複数の制御情報エントリをプロセッサの内部にある制御スタックバッファに書き込むステップと、
前記制御スタックバッファが一杯であること、およびさらなる関数呼出しを受信したことに応答して、
前記複数の制御情報エントリを前記プロセッサの外部にある外部メモリに書き込み、
前記さらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むステップと
を含む方法。
【請求項２】
前記複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するステップをさらに含む、請求項1に記載の方法。
【請求項３】
前記認証タグのそれぞれの部分を、前記第1の制御情報エントリおよび前記第2の制御情報エントリの各々に関連する前記外部メモリに記憶するステップをさらに含む、請求項2に記載の方法。
【請求項４】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記認証タグを決定するステップが、関数を前記複数の制御情報エントリのすべてに適用するステップを含む、請求項2に記載の方法。
【請求項５】
前記外部メモリに記憶された少なくとも前記第1の制御情報エントリおよび前記第2の制御情報エントリを使用して認証ベリファイアを決定するステップと、
前記認証ベリファイアが前記認証タグと一致すると決定するステップと、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記外部メモリからの前記第1の制御情報エントリを前記制御スタックバッファに書き込むステップと
をさらに含む、請求項2に記載の方法。
【請求項６】
前記複数の制御情報エントリを前記外部メモリに書き込むステップが、前記複数の制御情報エントリを前記外部メモリに書き込むステップであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアから物理的にずらされた前記外部メモリの第1のエリアに配置される、ステップを含む、請求項1に記載の方法。
【請求項７】
前記複数の制御情報エントリを前記外部メモリに書き込むステップが、前記複数の制御情報エントリを前記外部メモリに書き込むステップであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ステップを含み、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項6に記載の方法。
【請求項８】
前記複数の制御情報エントリの少なくとも前記主要部分が前記スタックフレーム制御情報エントリの少なくとも前記主要部分と一致すると決定するステップと、
前記複数の制御情報エントリの少なくとも前記主要部分が前記スタックフレーム制御情報エントリの少なくとも前記主要部分と一致することに基づいて、前記外部メモリからの前記複数の制御情報エントリを前記制御スタックバッファに書き込むステップと
をさらに含む、請求項7に記載の方法。
【請求項９】
コンピューティングシステムであって、
制御スタックバッファを含んでいるプロセッサと、
前記プロセッサの外部にあり、前記プロセッサに通信可能に結合された外部メモリと
を備え、
前記プロセッサが、
制御情報エントリを前記制御スタックバッファに書き込むことによって、関数呼出しに応答することと、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームを前記外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答することと
を行うように構成される、コンピューティングシステム。
【請求項１０】
前記プロセッサが、前記複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するようにさらに構成される、請求項9に記載のシステム。
【請求項１１】
前記プロセッサが、前記認証タグのそれぞれの部分を、前記第1の制御情報エントリおよび前記第2の制御情報エントリの各々に関連する前記外部メモリに記憶するようにさらに構成される、請求項10に記載のシステム。
【請求項１２】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記プロセッサが、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定するように構成される、請求項10に記載のシステム。
【請求項１３】
前記プロセッサが、
前記外部メモリに記憶された少なくとも前記第1の制御情報エントリおよび前記第2の制御情報エントリを使用して認証ベリファイアを決定し、
前記認証ベリファイアが前記認証タグと一致すると決定し、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記外部メモリからの前記第1の制御情報エントリを前記制御スタックバッファに書き込む
ようにさらに構成される、請求項10に記載のシステム。
【請求項１４】
前記プロセッサが、分割スタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアとは物理的に別個の前記外部メモリの第1のエリアに配置される、ことを行うように構成される、請求項9に記載のシステム。
【請求項１５】
前記プロセッサが、シャドースタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うように構成され、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項9に記載のシステム。
【請求項１６】
コンピューティングシステムであって、
制御スタックバッファを記憶するための手段と、
プログラムデータおよび制御データを記憶するための手段と、
制御情報エントリを前記制御スタックバッファに書き込むことによって、関数呼出しに応答するための手段と、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームをプログラムデータおよび制御データを記憶するための前記手段に書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答するための手段と
を備えるコンピューティングシステム。
【請求項１７】
前記複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するように構成された、認証するための手段をさらに備える、請求項16に記載のシステム。
【請求項１８】
プログラムデータおよび制御データを記憶するための前記手段がさらに、前記第1の制御情報エントリおよび前記第2の制御情報エントリの各々に関連する前記認証タグのそれぞれの部分を記憶するためのものである、請求項17に記載のシステム。
【請求項１９】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、認証するための前記手段が、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定するように構成される、請求項17に記載のシステム。
【請求項２０】
認証するための前記手段が、
プログラムデータおよび制御データを記憶するための前記手段に記憶された少なくとも前記第1の制御情報エントリおよび前記第2の制御情報エントリを使用して認証ベリファイアを決定し、
前記認証ベリファイアが前記認証タグと一致すると決定する
ようにさらに構成され、
前記システムが、前記認証ベリファイアが前記認証タグと一致することに基づいて、記憶手段からの前記第1の制御情報エントリを前記制御スタックバッファに書き込むための手段をさらに備える、請求項17に記載のシステム。
【請求項２１】
プログラムデータおよび制御データを記憶するための前記手段がさらに、分割スタックを形成することによって前記制御フレームを書き込むためのものであり、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶するプログラムデータおよび制御データを記憶するための前記手段の第2のエリアとは物理的に別個のプログラムデータおよび制御データを記憶するための前記手段の第1のエリアに配置される、請求項16に記載のシステム。
【請求項２２】
プログラムデータおよび制御データを記憶するための前記手段がさらに、シャドースタックを形成することによって前記制御フレームを書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うためのものであり、前記スタックフレームが、プログラムデータおよび制御データを記憶するための前記手段に記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項16に記載のシステム。
【請求項２３】
プロセッサに、
制御情報エントリを前記プロセッサ内の制御スタックバッファに書き込むことによって、関数呼出しに応答することと、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームを、前記プロセッサに通信可能に結合された、前記プロセッサとは物理的に別個の外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答することと
を行わせるように構成されたプロセッサ可読命令を備える非一時的プロセッサ可読記憶デバイス。
【請求項２４】
前記命令が、前記プロセッサに、前記複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定させるようにさらに構成される、請求項23に記載の記憶デバイス。
【請求項２５】
前記命令が、前記プロセッサに、前記認証タグのそれぞれの部分を、前記第1の制御情報エントリおよび前記第2の制御情報エントリの各々に関連する前記外部メモリに記憶させるようにさらに構成される、請求項24に記載の記憶デバイス。
【請求項２６】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記プロセッサに前記認証タグを決定させるように構成された前記命令が、前記プロセッサに、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定させるように構成される、請求項24に記載の記憶デバイス。
【請求項２７】
前記命令が、前記プロセッサに、
前記外部メモリに記憶された少なくとも前記第1の制御情報エントリおよび前記第2の制御情報エントリを使用して認証ベリファイアを決定させ、
前記認証ベリファイアが前記認証タグと一致すると決定させ、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記外部メモリからの前記第1の制御情報エントリを前記制御スタックバッファに書き込ませる
ようにさらに構成される、請求項24に記載の記憶デバイス。
【請求項２８】
前記プロセッサに前記制御フレームを前記外部メモリに書き込ませるように構成された前記命令が、前記プロセッサに、分割スタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアとは物理的に別個の前記外部メモリの第1のエリアに配置される、ことを行わせるように構成される、請求項23に記載の記憶デバイス。
【請求項２９】
前記プロセッサに前記制御フレームを前記外部メモリに書き込ませるように構成された前記命令が、前記プロセッサに、シャドースタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行わせるように構成され、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項23に記載の記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認証された制御スタックに関する。
【背景技術】
【０００２】
コンピュータソフトウェアは、ソフトウェアの動作を変更する攻撃に弱い場合がある。たとえば、ソフトウェアワームまたはウイルスなどのエクスプロイト(ソフトウェアにおける脆弱性をエクスプロイトするので、そう名付けられた)は、既存のソフトウェアコードを変更し、新しいコードを挿入し、かつ/または、既存のコードの実行の順序を最初に意図された順序から変更して、意図されたような元のコードの部分ではなかった動作を引き起こすことができる。ソフトウェア内の許容できるエントリポイントに関する何らかの規制がなければ、エクスプロイトは、ソフトウェア内の任意のポイントに対する実行を指示することができ、ソフトウェアコード全体がエクスプロイトによって使用可能であるので、ソフトウェア実行の意図しないシーケンスを容易にする。
【０００３】
プロセッサアーキテクチャは通常、データと制御フローの両方に使用されるスタックを含む。スタックは、プログラムを通じてコールパス内のすべてのコールについてのアクティベーションレコードを追跡するスタックフレームを含んでいる。アクティベーションレコードは、通常、データを参照するならびに/またはコールおよびリターンの間のプログラム制御フローを維持するために使用される制御情報(リターンアドレス、スタックポインタなど)とともに、各関数(ローカル変数、パラメータなど)によって使用されるデータを含んでいる。詳細には、リターンアドレスは、関数呼出しの間にスタックにプッシュされ、呼び出された関数は、そのローカル変数を含んでいるスタックフレームを任意のローカルデータバッファを含むスタック上で割り振る。実装バグおよび未検証の入力は、プログラムに、スタック上のバッファをオーバーフローさせ、制御データ(たとえば、リターンアドレス、フレームポインタ)を上書きさせる場合がある。このことは、今度は、外部入力を操作することによってプログラムの制御フローをハイジャックすることを可能にする。
【０００４】
そのようなスタック破壊攻撃を防ぐために、いくつかの軽減策が提案されている。1つの技法は、ガード値(またはスタックカナリア)がコンパイラによってリターンアドレスの隣のスタック上に挿入され、ガード値が関数リターンの前に検証される、ソフトウェアスタック保護(SSP:Software Stack Protection)である。この方法は、このようにして保護されるプログラムごとに、ビルドサイクルにわたる変化を用いる。既存のソフトウェアは、スタックカナリアをサポートするコンパイラを用いて構築される。ランごとにカナリア値をランダムにするために、乱数発生器へのアクセスが行われる。誤り回復ハンドラは、スタック破壊攻撃からの回復を可能にするために与えられる。プログラムごとの関係する複雑さに加えて、この技法は、保護される各関数がカナリアを生成し検査を実行するためのコードで計装されるので、サイズおよび性能のオーバーヘッドも有する。別の技法は、アプリケーションリターンアドレスがメモリに書き込まれるときにそれらのアドレスを保護するために、レジスタウィンドウオーバーフロー状況の際に起動されるOSカーネルトラップハンドラを計装し、任意の悪意のある上書きの有無を検査する、スタックゴースト(Stack Ghost)である。この技法は、アプリケーションレベルの有効化またはコードサイズのコストを必要としないが、アーキテクチャ内のサポートレジスタウィンドウに依拠する。別の技法は、シャドースタックアーキテクチャをメモリの別個の保護されたエリアに記憶することを含む。シャドースタックは、制御情報を複製することによって維持される。別個のメモリは、すべての実行スレッドに割り振られて管理されるので、複雑さをもたらす。
【発明の概要】
【課題を解決するための手段】
【０００５】
制御スタックを生成する例示的な方法は、1つまたは複数の関数呼出しに応答して、複数の制御情報エントリをプロセッサの内部にある制御スタックバッファに書き込むステップと、制御スタックバッファが一杯であること、およびさらなる関数呼出しを受信したことに応答して、複数の制御情報エントリをプロセッサの外部にある外部メモリに書き込み、さらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むステップとを含む。
【０００６】
そのような方法の実装形態は、次の特徴のうちの1つまたは複数を含み得る。方法は、複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するステップをさらに含む。方法は、認証タグのそれぞれの部分を、第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する外部メモリに記憶するステップをさらに含む。複数の制御情報エントリは、3つ以上の制御情報エントリを含み、認証タグを決定するステップは、関数を複数の制御情報エントリのすべてに適用するステップを含む。方法は、外部メモリに記憶された少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証ベリファイアを決定するステップと、認証ベリファイアが認証タグと一致すると決定するステップと、認証ベリファイアが認証タグと一致することに基づいて、外部メモリからの第1の制御情報エントリを制御スタックバッファに書き込むステップとをさらに含む。
【０００７】
同じくまたは代替的に、そのような方法の実装形態は、次の特徴のうちの1つまたは複数を含み得る。複数の制御情報エントリを外部メモリに書き込むステップは、複数の制御情報エントリを外部メモリに書き込むステップであって、複数の制御情報エントリが、制御情報エントリに対応するプログラムデータを記憶する外部メモリの第2のエリアから物理的にずらされた外部メモリの第1のエリアに配置される、ステップを含む。複数の制御情報エントリを外部メモリに書き込むステップは、複数の制御情報エントリを外部メモリに書き込むステップであって、複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ステップを含み、スタックフレームは、外部メモリに記憶され、少なくとも最初に書き込まれたときに、スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる。方法は、複数の制御情報エントリの少なくとも主要部分がスタックフレーム制御情報エントリの少なくとも主要部分と一致すると決定するステップと、複数の制御情報エントリの少なくとも主要部分がスタックフレーム制御情報エントリの少なくとも主要部分と一致することに基づいて、外部メモリからの複数の制御情報エントリを制御スタックバッファに書き込むステップとをさらに含む。
【０００８】
例示的なコンピューティングシステムは、制御スタックバッファを含んでいるプロセッサと、プロセッサの外部にあり、プロセッサに通信可能に結合された外部メモリとを含み、プロセッサは、制御情報エントリを制御スタックバッファに書き込むことによって、関数呼出しに応答することと、複数の制御情報エントリを含む制御フレームが制御スタックバッファを満たすこと、および、制御フレームを外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むことによって、さらなる関数呼出しを受信することに応答することとを行うように構成される。
【０００９】
そのようなコンピューティングシステムの実装形態は、次の特徴のうちの1つまたは複数を含み得る。プロセッサは、複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するようにさらに構成される。プロセッサは、認証タグのそれぞれの部分を、第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する外部メモリに記憶するようにさらに構成される。複数の制御情報エントリは、3つ以上の制御情報エントリを含み、プロセッサは、関数を複数の制御情報エントリのすべてに適用することによって認証タグを決定するように構成される。プロセッサは、外部メモリに記憶された少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証ベリファイアを決定し、認証ベリファイアが認証タグと一致すると決定し、認証ベリファイアが認証タグと一致することに基づいて、外部メモリからの第1の制御情報エントリを制御スタックバッファに書き込むようにさらに構成される。
【００１０】
同じくまたは代替的に、そのようなコンピューティングシステムの実装形態は、次の特徴のうちの1つまたは複数を含み得る。プロセッサは、分割スタックを形成することによって制御フレームを外部メモリに書き込むことであって、複数の制御情報エントリが、制御情報エントリに対応するプログラムデータを記憶する外部メモリの第2のエリアとは物理的に別個の外部メモリの第1のエリアに配置される、ことを行うように構成される。プロセッサは、シャドースタックを形成することによって制御フレームを外部メモリに書き込むことであって、複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うように構成され、スタックフレームは、外部メモリに記憶され、少なくとも最初に書き込まれたときに、スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる。
【００１１】
別の例示的なコンピューティングシステムは、制御スタックバッファを記憶するための手段と、プログラムデータおよび制御データを記憶するための手段と、制御情報エントリを制御スタックバッファに書き込むことによって、関数呼出しに応答するための手段と、複数の制御情報エントリを含む制御フレームが制御スタックバッファを満たすこと、および、制御フレームをプログラムデータおよび制御データを記憶するための手段に書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むことによって、さらなる関数呼出しを受信することに応答するための手段とを含む。
【００１２】
そのようなコンピューティングシステムの実装形態は、次の特徴のうちの1つまたは複数を含み得る。システムは、複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するように構成された、認証するための手段をさらに含む。プログラムデータおよび制御データを記憶するための手段はさらに、第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する認証タグのそれぞれの部分を記憶するためのものである。複数の制御情報エントリは、3つ以上の制御情報エントリを含み、認証するための手段は、関数を複数の制御情報エントリのすべてに適用することによって認証タグを決定するように構成される。認証するための手段は、プログラムデータおよび制御データを記憶するための手段に記憶された少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証ベリファイアを決定し、認証ベリファイアが認証タグと一致すると決定するようにさらに構成され、システムは、認証ベリファイアが認証タグと一致することに基づいて、記憶手段からの第1の制御情報エントリを制御スタックバッファに書き込むための手段をさらに備える。
【００１３】
同じくまたは代替的に、そのようなコンピューティングシステムの実装形態は、次の特徴のうちの1つまたは複数を含み得る。プログラムデータおよび制御データを記憶するための手段はさらに、分割スタックを形成することによって制御フレームを書き込むためのものであり、複数の制御情報エントリは、制御情報エントリに対応するプログラムデータを記憶するプログラムデータおよび制御データを記憶するための手段の第2のエリアとは物理的に別個のプログラムデータおよび制御データを記憶するための手段の第1のエリアに配置される。プログラムデータおよび制御データを記憶するための手段はさらに、シャドースタックを形成することによって制御フレームを書き込むことであって、複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うためのものであり、スタックフレームは、プログラムデータおよび制御データを記憶するための手段に記憶され、少なくとも最初に書き込まれたときに、スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる。
【００１４】
例示的な非一時的プロセッサ可読記憶デバイスは、プロセッサに、制御情報エントリをプロセッサ内の制御スタックバッファに書き込むことによって関数呼出しに応答することと、複数の制御情報エントリを含む制御フレームが制御スタックバッファを満たすこと、および、制御フレームを、プロセッサに通信可能に結合された、プロセッサとは物理的に別個の外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むことによって、さらなる関数呼出しを受信することに応答することとを行わせるように構成されたプロセッサ可読命令を含む。
【００１５】
そのような記憶デバイスの実装形態は、次の特徴のうちの1つまたは複数を含み得る。命令は、プロセッサに、複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定させるようにさらに構成される。命令は、プロセッサに、認証タグのそれぞれの部分を、第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する外部メモリに記憶させるようにさらに構成される。複数の制御情報エントリは、3つ以上の制御情報エントリを含み、プロセッサに認証タグを決定させるように構成される命令は、プロセッサに、関数を複数の制御情報エントリのすべてに適用することによって認証タグを決定させるように構成される。命令は、プロセッサに、外部メモリに記憶された少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証ベリファイアを決定させ、認証ベリファイアが認証タグと一致すると決定させ、認証ベリファイアが認証タグと一致することに基づいて、外部メモリからの第1の制御情報エントリを制御スタックバッファに書き込ませるようにさらに構成される。
【００１６】
同じくまたは代替的に、そのような記憶デバイスの実装形態は、次の特徴のうちの1つまたは複数を含み得る。プロセッサに制御フレームを外部メモリに書き込ませるように構成された命令は、プロセッサに、分割スタックを形成することによって制御フレームを外部メモリに書き込むことであって、複数の制御情報エントリが、制御情報エントリに対応するプログラムデータを記憶する外部メモリの第2のエリアとは物理的に別個の外部メモリの第1のエリアに配置される、ことを行わせるように構成される。プロセッサに制御フレームを外部メモリに書き込ませるように構成された命令は、プロセッサに、シャドースタックを形成することによって制御フレームを外部メモリに書き込むことであって、複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行わせるように構成され、スタックフレームは、外部メモリに記憶され、少なくとも最初に書き込まれたときに、スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる。
【００１７】
本明細書で説明する項目および/または技法は、以下の機能のうちの1つもしくは複数、および/または言及されていない他の機能を提供し得る。制御転送のためのリターンパスは、実行される前に、効率的に検証され得る。スタック破壊エクスプロイト攻撃は、たとえば、制御データとプログラムデータを分離することによって、抑制され得る。シャドーまたは分割制御/データスタックアーキテクチャは、スタックスピル(オーバーフロー)およびスタックフィル(スタックにデータをポピュレートする)のための認証を使用してハードウェアレベルにおいて与えられ得る。シャドーまたは分割制御/データスタックアーキテクチャは、低複雑度での簡易な管理を与えられ得る。制御フローの完全性は、たとえば、制御データ認証に使用されるブロックサイズを拡大すること、認証頻度を低減すること、および/またはクリティカルパスから離れてリターンパス制御データ認証を実行することによって、スケーラブルでトランスペアレントな方法で維持され得る。制御データ用のメッセージ認証コードを決定するための計算オーバーヘッドが低減され得る。他の機能が提供されてもよく、本開示によるすべての実装形態が、説明される機能のすべてはもちろん、それらのいずれかを提供しなければならないとは限らない。さらに、上記で言及された効果が言及されたもの以外の手段によって達成される可能性があり得、言及された項目/技法は必ずしも言及された効果をもたらすとは限らないことがある。
【図面の簡単な説明】
【００１８】
【図１】通信システムの概略図である。
【図２】図1に示すコンピューティングシステムのブロック図である。
【図３】図2に示すコンピューティングシステムの機能ブロック図である。
【図４】制御スタックバッファおよび分割プログラムスタックの簡略図である。
【図５】制御スタックバッファおよび分割プログラムスタックの簡略図である。
【図６】認証タグを含む制御データエントリの簡略図である。
【図７】制御スタックを生成するプロセスのブロック流れ図である。
【発明を実施するための形態】
【００１９】
制御スタックを生成するための技法について説明する。たとえば、プロセッサは、ソフトウェアプログラムの直近の関数呼出しに対応する直近のリターンアドレスを記憶する内部制御スタックバッファを有し得る。制御スタックバッファは、すべての関数リターンに使用され得る。制御スタックバッファが一杯で、別の関数が呼び出された場合(オーバーフロー)、またはコンテキストスイッチがある場合、制御スタックバッファコンテンツは、外部(プロセッサに対して)メモリに書き込まれ得、別の関数のリターンアドレス、または他のコンテキストは、制御スタックバッファに書き込まれ得る。制御スタックバッファコンテンツは、外部メモリにページ書込みされ得、制御スタックバッファのコンテンツのすべては、外部メモリに書き込まれて、制御スタックバッファを空にする。制御スタックバッファコンテンツは、分割スタック構成では、同じデータがプログラムスタック内のスタックフレームに記憶されず、またはシャドースタック構成では、同じデータがプログラムスタック内のスタックフレームに記憶されて、プログラムスタックに書き込まれ得る。認証タグは、制御スタックバッファに基づいて決定され得、認証タグは、制御スタックバッファコンテンツに関連して外部メモリに記憶され得る。制御データは、制御スタックバッファ内のすべてのリターンアドレスを使わせることによって制御スタックバッファが空になった場合(アンダーフロー)、またはコンテキストスイッチがある場合、外部メモリから制御スタックバッファに書き込まれ得る。認証タグが使用される場合、認証タグは、外部メモリに記憶されたリターンアドレスを制御スタックバッファに書き込む前に再決定され、外部メモリに記憶された認証タグと比較され得る。記憶された認証タグと再決定された認証タグが一致する場合、外部メモリからのリターンアドレスが制御スタックバッファに書き込まれ、それ以外の場合、制御スタックバッファに書き込まれないことがある。シャドースタックが使用される場合、シャドースタック内のリターンアドレスは、プログラムスタック内のリターンアドレスと比較され、たとえば、シャドースタックでは、リターンアドレスは、リターンアドレスの2つのセットが一致する場合にのみ制御スタックバッファに書き込まれ得る。限定はしないが、以下で説明する技法を含む他の技法が使用され得る。
【００２０】
図1を参照すると、通信システム10は、コンピューティングデバイス12と、基地トランシーバ局(BTS)14と、ネットワーク16と、サーバ18と、アクセスポイント(AP)20と、エクスプロイトソース22とを含む。システム10は、システム10の構成要素が、たとえば、ネットワーク16、BTS14(および/または図示しない1つもしくは複数のBTS)、および/またはアクセスポイント20のうちの1つもしくは複数を介して、直接または間接的に互いと通信することができるという点で、通信システムである。エクスプロイトは通常、(図1に示すネットワーク16などの)通信ネットワークおよびコンピューティングデバイス12内のネットワークインターフェースを介してコンピューティングデバイスに導入されるが、本明細書で説明する技法は、エクスプロイトが他の手段、たとえば、エクスプロイトを含んでいる外部メモリへの接続を介してコンピューティングデバイスに導入される場合に攻撃の成功を防ぐのを助けることに等しく適用可能である。図示の例示的なコンピューティングデバイス12は、モバイルフォン、デスクトップコンピュータ、ラップトップコンピュータ、およびタブレットコンピュータを含む。現在存在するか将来開発されるかにかかわらず、さらに他のコンピューティングデバイスが使用され得る。
【００２１】
図2を参照すると、コンピューティングデバイス12のうちの1つの一例はコンピューティングシステム50を含み、コンピューティングシステム50は、制御スタックバッファ54を含むプロセッサ52と、ソフトウェア58を(任意選択で)含む外部メモリ56と、オーセンティケータ60とを含む。プロセッサ52は、好ましくは、インテリジェントハードウェアデバイス、たとえば、ARM(登録商標)、Intel(登録商標) Corporation、またはAMD(登録商標)によって作られるかまたは設計されるものなどの中央処理装置(CPU)、マイクロコントローラ、特定用途向け集積回路(ASIC)などである。プロセッサ52は、コンピューティングデバイス12内で分散され得る複数の別個の物理エンティティを備え得る。制御スタックバッファ54は、プロセッサ52の内部にあり、オーバーフロー攻撃/エクスプロイトを受けやすいものではないと信頼される。制御スタックバッファ54は、直近の関数呼出しのリターンアドレスを記憶する。外部メモリ56は、プロセッサ52の外部にあり、ランダムアクセスメモリ(RAM)および/または読取り専用メモリ(ROM)を含み得る。メモリ54は、実行されると、(説明は、機能を実行するプロセッサ52のみを参照する場合があるが)本明細書で説明する様々な機能をプロセッサ52に実行させるように構成された命令を含んでいるプロセッサ可読、プロセッサ実行可能ソフトウェアコードであるソフトウェア58を記憶し得るプロセッサ可読記憶媒体である。代替的に、ソフトウェア58は、プロセッサ52によって直接実行可能ではない場合があり、代わりに、たとえば、コンパイルされ実行されると、機能をプロセッサ52に実行させるように構成され得る。プロセッサ52は、外部メモリ56およびオーセンティケータ60に通信可能に結合される。オーセンティケータ60は、プロセッサ52によって、またはプロセッサ52およびソフトウェア58によって、またはこれらのうちのいずれかの組合せによって、ハードウェア、ファームウェアにおいて実装され得る。さらに、図1に示すコンピューティングデバイス12に加えて、本明細書で説明する技法は、1つまたは複数のエクスプロイトに対して1つまたは複数の脆弱性をもつプロセッサ可読命令を有するメモリを含んでいる任意のデバイスに適用され得る。したがって、たとえば、図1に示すサーバ18、BTS14、アクセスポイント20、およびネットワーク16の構成要素(たとえば、ルータ、ゲートウェイなど)は、図2に示す構成要素(および図3に示すモジュール/手段)、ならびに1つまたは複数のエクスプロイトに対して1つまたは複数の脆弱性をもつプロセッサ可読命令を有するメモリを含んでいる任意の他のデバイスを含み得る。
【００２２】
図2を参照しながら図3を参照すると、コンピューティングシステム50は、制御スタックバッファモジュール72(制御スタックバッファを記憶するための手段)を含むプロセッサモジュール70(処理するための手段)と、認証モジュール74(認証するための手段)と、制御フレームモジュール76(プログラムデータおよび制御データを記憶するための手段)とを含む。プロセッサモジュール70は、制御データを制御スタックバッファに書き込むための手段と、制御フレームをプログラムデータおよび制御データを記憶するための手段に書き込むための手段とを含む。モジュール70、72は、それぞれ、プロセッサ52および制御スタックバッファ54によって実装され得る機能モジュールである。認証モジュール74は、オーセンティケータ60によって実装され得る機能モジュールである。制御フレームモジュール76は、外部メモリ56および関連するハードウェア、ならびに/またはファームウェア、ならびに/またはプロセッサ52およびメモリ56に記憶されたソフトウェア58によって実装され得る機能モジュールである。したがって、機能を実行するか、または機能を実行するように構成されたモジュール70、72、74、76のいずれかへの参照は、機能を実行するか、または機能を実行するように構成された対応する装置の省略表現である。
【００２３】
また図4〜図5を参照すると、制御スタック102、104およびプログラムスタック80が形成される。制御スタック102、104は、プロセッサ52によって実行されるプログラムの制御データを含んでおり、制御スタックバッファ54内の内部制御スタック102、および外部メモリ56におけるスタックメモリ78内の外部制御スタック104という2つの部分に区分される。制御データは、リターンアドレスおよび/またはフレームポインタおよび/または他の制御情報を含む。プログラムスタック80は、ローカル変数、引数などを含むプログラムデータを含み、何らかの制御データ、たとえば、フレームポインタも含み得る。コンピューティングシステム50のオペレーティングシステムは、制御ポインタ(CP)、別個のアーキテクチャレジスタを、プログラムデータ内の現在のプログラムロケーションに、ここでは図4に示す例におけるプログラムスタック80内のプログラムデータの一番上にポイントする。
【００２４】
制御スタックバッファモジュール72は、プロセッサ52から制御データを受信し、制御データを制御スタックバッファ(CSB)54に記憶し、制御データブロックをCSB54から外部メモリ56に送り、外部メモリ56から制御データのブロックを受信するように構成される。CSB54および外部制御スタック104は起動時に空であり、プログラムスタック80も空である。関数呼出しがプロセッサ52によってソフトウェアプログラムにおいて実行されると、プロセッサ52は制御データを制御スタックバッファモジュール72に与える。制御スタックバッファモジュール72は、制御データを受信し、これらの制御データを制御スタックバッファ54に書き込むように構成される。たとえば、図4に示すように、制御スタックバッファモジュール72は、リターンアドレスを制御データエントリ82としてCSB54に書き込むことができる。この例では、制御データはリターンアドレスであるが、これは一例にすぎず、フレームポインタなどの他の制御データが、リターンアドレスの代わりに、またはリターンアドレスに加えて、CSB54に記憶され得る。モジュール72は、CSB54から制御データを削除し、新しい制御データエントリをCSB54に書き込むことによって、CSB54が一杯であるときにプロセッサ52がCSB54に記憶されるべき新しい制御データエントリを有することに応答するか、またはコンテキストスイッチに応答するように構成される(すなわち、プログラムまたはプログラムの部分の変更がプロセッサ52によって実行される)。CSB54において追加の記憶スペースが利用可能であるとしても、CSB54のコンテンツが制御フレームモジュール76に送られるべきである場合、CSB54は「一杯」である。しかしながら、通常、CSB54の記憶スペース全体は、コンテンツを制御フレームモジュール76に送る前に使用される。モジュール72は、制御データエントリ82のうちの複数の制御データエントリ、好ましくは制御データエントリ82のすべてを制御フレームモジュール76にページ書込みする。したがって、モジュール72は、CSB54のコンテンツを制御フレームモジュール76に送ることによって、CSB54を空にすることができる。図5に示すように、モジュール72は、リターンアドレス1〜リターンアドレス8を制御フレームモジュール76に送り、リターンアドレス9をCSB54に書き込むことによって、CSB54を空にしている。逆に、モジュール72がCSB54内の制御データを使用することによってCSB54を空にするとき、モジュール72は、制御フレームモジュール76から制御データのブロックを取り出すことができる。したがって、図5のリターンアドレス9がプロセッサモジュール70によって使用される場合、モジュール72は、リターンアドレスの次のブロックを要求し、制御フレームモジュール76からリターンアドレス1〜リターンアドレス8を受信することができ、図5から図4に移る。図4〜図5に示す例では、CSBは8つの制御データエントリ82の容量を有するが、CSB54の他の容量が使用され得る。
【００２５】
制御スタックバッファモジュール72は、好ましくは、認証モジュール74を介して制御データエントリ82のブロックを制御フレームモジュール76に送るが、必ずしもそうするとは限らない。認証モジュール74は、セキュリティ情報が偶然に再作成される可能性が極めて低いような方法で、またはセキュリティ情報が導出される制御データエントリ82が知られているとしても、制御データエントリ82のうちの1つまたは複数からセキュリティ情報を導出するように構成される。セキュリティ情報は、再作成または再生成するのに計算的にコストがかかり、そうすることが可能であるとしても、情報を再作成するために必要なリソース(時間、計算エネルギーなど)が正当化するには多くなりすぎるという点で、セキュリティ情報が再作成される可能性は極めて低い。セキュリティ情報を生成するために、認証モジュール74は、たとえば、関数を制御データエントリ82のうちの1つまたは複数、好ましくは制御データエントリ82のすべてに適用して、セキュリティ情報を決定し得る。そのような関数の一例は、ハッシュ関数である。認証モジュール74は、認証モジュール74へのアクセス、特に、制御データエントリ82を用いてハッシュされる任意のハッシュ値を含む、認証モジュール74によって適用される関数へのアクセスが、コンピューティングシステム50においてエクスプロイトを生成しようと試みるエンティティによって不可能ではないとしても難しくなるように構成される。
【００２６】
一例として、認証モジュール74は、CSB54からの制御データエントリ82のうちの複数の制御データエントリに基づいて認証タグを生成するように構成される。好ましくは、認証モジュール74は、認証タグを決定するために、CSB54から空にされた制御データエントリ82のすべてを使用する。認証タグは、暗号学的にセキュアなメッセージ認証コード(MAC)である。認証モジュール74は、様々な技法のうちのいずれかを使用して認証タグを決定することができる。たとえば、認証モジュール74は、認証タグを決定するためにハッシュされた値を使用して、ハッシュ関数を制御データエントリ82に適用し得る。認証タグは、(CSBサイズなどの他の要因に基づき得る)様々な長さのうちのいずれかを有し得、外部メモリ56内の様々なロケーションに記憶され得る。たとえば、CSB54のサイズはキャッシュラインの倍数であり得、認証タグサイズは、CSB54内の制御データエントリ82の量の2ビット倍に設定され得る。したがって、各々が4バイト長で、32バイトのキャッシュラインを有する、8つ(8)のエントリ82のCSBサイズの場合、認証タグでは、エントリ当たり2ビットの16ビットがあることになる。CSB54のサイズは、より大きい認証タグに適応するように増加し得る。
【００２７】
認証モジュール74は、制御データエントリ82を有する認証タグを制御フレームモジュール76に与えるように構成される。たとえば、認証モジュール74は、制御データエントリ82を制御フレームモジュール76に与える前に、制御データエントリ82に認証タグを組み合わせ得る。したがって、認証モジュール74は、図6に示すように修正された制御データエントリ84を生成することができ、修正された制御データエントリ84の各々は、制御データ本体86および認証タグ部分88を含む。代替的に、認証モジュール74は、制御データ本体86(ここでは、リターンアドレス本体)および対応する認証タグ部分88を制御フレームモジュール76に別個に与え得る。
【００２８】
制御フレームモジュール76は、制御データ本体86および認証タグ部分88を受信し、修正された制御データエントリ84を外部制御スタック104に記憶するように構成される。モジュール76は、制御データ本体86および認証タグ部分88を別個に受信し、修正された制御データエントリ84を形成するためにそれらを組み合わせ得る。代替的に、モジュール76は、制御データ本体86と認証タグ部分88がすでに組み合わされた、修正された制御データエントリ84を受信し得る。いずれの場合も、モジュール76は、修正された制御データエントリ84を外部制御スタック104に記憶するように構成され、外部制御スタック104は、制御データ本体86が内部制御スタック102に返されることが求められる場合に認証タグ部分88が取り出され得るように、認証タグ部分88に関連する制御データ本体86を記憶するためのものである。修正された制御データエントリ84は、図5に示すように外部制御スタック104に書き込まれる。図6に示すように、この例では、認証タグ部分88は制御データ本体86に付加され、たとえば、修正された制御データエントリ84の2つの最下位ビットを占める。さらに、この例では、説明の目的で、認証タグ部分88は図6では2桁の識別子で標識されている。識別子の1桁目は認証タグ番号に対応し、識別子の2桁目はリターンアドレスに対応する。したがって、タグ11は、リターンアドレス1のための認証タグ1の部分に対応する。すべての認証タグ部分88の組合せは、認証タグ90を構成する。
【００２９】
図5に示すように、制御フレームモジュール76は、制御スタックバッファモジュール72から受信された制御データ92を、プログラムスタック80に記憶されたプログラムデータ94から物理的にずらして、外部制御スタック104に記憶するように構成される。制御フレームモジュール76は、プログラムデータ94のスタックフレームを1つまたは複数の物理ロケーションに記憶し、制御データ92を、少なくとも最初にプログラムデータ94を記憶するロケーションであったロケーションから物理的にずらされた1つまたは複数の他の物理ロケーションに記憶するように構成される。制御データ92およびプログラムデータ94の終わりは、外部制御スタック104およびプログラムスタック80が互いに到達するが、スタック104、80がずらされたロケーションにおいて始められる(すなわち、メモリロケーションによって分離される)場合、最終的には物理ロケーションに隣接して配置され得る。したがって、不可能ではないとしても、プログラムデータ内のオーバーフローが制御データ92に影響を及ぼす可能性は低い。結果として、プログラムデータ94内のオーバーフローが、制御データ94を変更することが禁止されていないとしても、制御データ94を変更する可能性は低く、したがって、スタック破壊エクスプロイトの可能性を排除しないとしても、その可能性を低減する。多数の他のメモリ記憶構成が使用され得るので、図5に示す例は一例にすぎない。たとえば、制御フレームモジュール76は、スタックメモリ78内の隣接する物理ロケーションにおいてプログラムデータ94および制御データ92を開始し、制御データ92およびプログラムデータ94を反対方向に、すなわち、物理的に互いから離れて増加させることができる。さらに他の構成が可能であり、使用され得る。
【００３０】
図4〜図5に示すように、制御フレームモジュール76は、プログラムデータ94をスタックフレームに記憶するように構成される。この例では、各スタックフレームは、ローカル変数、フレームポインタ、および引数を含むが、リターンアドレスを含まない。CSB54に記憶された(または制御データ92として記憶された)制御データがスタックフレームに記憶されないこの構成は、分割スタック構成と呼ばれる。すなわち、制御データ92は、プログラムデータ94とは物理的に別個に記憶され、スタックメモリ78のプログラムデータ94内ではなく、スタックメモリ78の制御データ92内のみに存在する。代替的に、制御データ92は、プログラムデータ94に含まれ得る。CSB54に記憶された(または制御データ92として記憶された)制御データもスタックフレームに記憶されるこの構成は、シャドースタック構成と呼ばれる。たとえば、リターンアドレスは制御データ92に記憶され、たとえば、フレームポインタと第1の引数との間のプログラムデータ94のそれぞれのスタックフレームにも記憶され得る。
【００３１】
制御フレームモジュール76は、修正された制御データエントリ84を認証モジュール74に与えるようにさらに構成される。制御フレームモジュール76は、認証タグ90に対応する修正された制御データエントリ84のブロックを与えることによって、(たとえば、CSB54におけるアンダーフローまたはコンテキストスイッチに応答して)認証モジュール74から要求を受信したことに応答するように構成される。制御フレームモジュール76は、それに応じて制御ポインタを調整し、CSB54のアンダーフローに応答して制御データを与えることに応答して制御ポインタを制御データの次のブロックに移動するか、またはコンテキストスイッチに応答して将来の参照用に制御ポインタを保存する。
【００３２】
認証モジュール74は、外部制御スタック104内の制御データを外部制御スタック104から制御スタックバッファモジュール72に与える前に、その制御データが修正されたかどうかを決定するようにさらに構成される。認証モジュール74は、たとえば、CSB54内のアンダーフローまたはコンテキストスイッチに応答して、外部制御スタック104からCSB54内の内部制御スタック102に制御データを書き込むという要望、たとえば、要求に応答して、制御データの完全性を検証するように構成される。制御データの完全性を検証するために、認証モジュール74は、制御フレームモジュール76から認証タグ90のための修正された制御データエントリ84を要求し、再計算された認証タグ(認証ベリファイアとも呼ばれる)を決定し、再計算された認証タグが外部制御スタック104に記憶された認証タグ90と一致するかどうかを決定し得る。外部制御スタック104からCSB54内の内部制御スタック102に制御データが書き込まれるために、認証モジュール74は、認証タグ90を生成するために制御データに適用された関数を再計算し、今度は、再計算された認証タグを決定するために、制御データ本体86を使用して関数を計算する。関数を再計算するために、認証モジュール74は、制御フレームモジュール76から制御データを受信し、関数を受信された制御データに適用するように構成される。認証モジュール74は、再計算された認証タグを決定するために、認証タグ90を決定するために使用される関数を制御フレームモジュール76から受信された制御データ本体86に適用するように構成される。認証モジュール74は、再計算された認証タグが認証タグ90と一致するかどうかを決定するために、再計算された認証タグを制御フレームモジュール76から受信された認証タグ90と比較するようにさらに構成される。認証モジュール74は、制御データエントリ86を制御スタックバッファモジュール72に与えることによって、再計算された認証タグが認証タグ90と一致することを示すこの比較に応答するように構成される。認証モジュール74は、制御データエントリ86が制御スタックバッファモジュール72に送られることを禁止することによって、かつ制御データ本体86のうちの少なくとも1つが修正されたという点で制御データの完全性が失われたという警告をプロセッサモジュール70に与えることによって、再計算された認証タグが認証タグ90と一致しないことを示すこの比較に応答するように構成される。
【００３３】
図1〜図6をさらに参照しながら図7を参照すると、制御スタックを生成するプロセス150は、図示の段階を含む。しかしながら、プロセス150は一例にすぎず、限定的ではない。プロセス150は、たとえば、段階を追加すること、削除すること、並べ替えること、組み合わせること、同時に実行すること、および/または単一の段階を複数の段階に分割することによって、変更され得る。
【００３４】
段階152において、プロセス150は、1つまたは複数の関数呼出しに応答して、複数の制御情報エントリをプロセッサの内部にある制御スタックバッファに書き込むステップを含む。制御スタックバッファモジュール72は、制御データエントリ82をプロセッサ52内部のCSB54に書き込むことによって、1つまたは複数の関数呼出しに応答する。CSB54が一杯になるまで、制御データエントリ82が書き込まれる。CSB54が一杯になる前に、制御データエントリ82のうちの1つまたは複数は、関数がそれぞれの制御データエントリ82内の制御データを完了するかまたはさもなければ使用することに応答して、CSB54から削除され得る。
【００３５】
段階154において、プロセス150は、制御スタックバッファが一杯であること、およびさらなる関数呼出しを受信したことに応答して、複数の制御情報エントリをプロセッサの外部にある外部メモリに書き込み、さらなる関数呼出しに対応するさらなる制御情報エントリを制御スタックバッファに書き込むステップを含む。制御スタックバッファモジュール72は、制御データエントリ82を外部メモリ56にページ書込みすることによって、CSB54が一杯であること、およびさらなる制御データエントリ82がCSB54に記憶するために受信されることに応答する。たとえば、制御スタックバッファモジュール72は、好ましくは認証モジュール74を介して、制御データエントリ82のブロックを制御フレームモジュール76に送ることによって、内部制御スタック102内の制御データエントリ82のブロックを外部メモリ56にページ書込みする。
【００３６】
プロセス150は、複数の制御情報エントリのうちの少なくとも第1の制御情報エントリおよび第2の制御情報エントリを使用して認証タグを決定するステップをさらに含み得る。たとえば、認証モジュール74は、制御スタックバッファモジュール72から制御データエントリ82のブロックを受信し、制御データエントリ82のうちの少なくとも2つを使用して認証タグを決定する。認証モジュール74は、認証タグ90を決定するために、制御スタックバッファモジュール72から受信された制御データエントリ82のすべてを使用し得る。プロセス150は、認証タグのそれぞれの部分を、制御情報エントリの各々に関連する外部メモリに記憶するステップを含み得る。認証モジュール74は、制御フレームモジュール76と組み合わせて、認証タグ部分88を、対応する制御データ本体86に関連する外部メモリ56に記憶し得る。プロセス150は、外部メモリに記憶された第1の制御情報エントリおよび第2の制御情報エントリを使用して認証ベリファイアを決定するステップと、認証ベリファイアが認証タグと一致すると決定するステップと、認証ベリファイアが認証タグと一致することに基づいて、外部メモリからの第1の制御情報エントリを制御スタックバッファに書き込むステップとをさらに含み得る。たとえば、認証モジュール74は、制御フレームモジュール76から修正された制御データエントリ84を取り出すことによって、CSB54における新しいアンダーフロー条件またはコンテキストスイッチに応答する。認証モジュール74は、認証タグを再計算することによって認証ベリファイアを決定し、認証ベリファイアを認証タグ、たとえば、認証タグ90と比較する。さらに、認証ベリファイアが認証モジュール74によって決定された認証タグと一致することに応答して、認証モジュール74は、少なくとも制御データ本体86を制御スタックバッファモジュール72に送り、制御スタックバッファモジュール72は、制御データ本体86をCSB54内の内部制御スタック102に書き込む。
【００３７】
複数の制御情報エントリを外部メモリに書き込むステップは、複数の制御情報エントリを外部メモリに書き込むステップであって、複数の制御情報エントリが、制御情報エントリに対応するプログラムデータを記憶する外部メモリの第2のエリアから物理的にずらされた外部メモリの第1のエリアに配置される、ステップを含み得る。制御フレームモジュール76は、外部制御スタック104を、プログラムスタック80から物理的にずらされた、スタックメモリ78内のロケーションに記憶し得る。さらに、複数の制御情報エントリは、外部メモリに書き込まれ得、複数の制御情報エントリの少なくとも主要部分は、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製であり、スタックフレームは、外部メモリに記憶され、少なくとも最初に書き込まれたときに、スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる。たとえば、制御フレームモジュール76は、スタックフレームをプログラムスタック80に記憶し得、プログラムスタック80は、シャドースタックとしての外部制御スタック104内の制御データ本体86として記憶された制御データを含む。さらに、プロセス150は、複数の制御情報エントリの少なくとも主要部分がスタックフレーム制御情報エントリの少なくとも主要部分と一致すると決定するステップと、複数の制御情報エントリの少なくとも主要部分がスタックフレーム制御情報エントリの少なくとも主要部分と一致することに基づいて、外部メモリからの複数の制御情報エントリを制御スタックバッファに書き込むステップとをさらに含み得る。たとえば、認証モジュール74は、外部制御スタック104に記憶された制御データ本体86が、プログラムスタック80の対応するスタックフレーム内の対応する制御データと一致すると決定するように構成され得、そのように決定し得る。認証モジュール74は、外部制御スタック104内の制御データ本体86がスタックフレーム内の対応する制御データと一致しない場合、制御スタックバッファモジュール72への制御データ本体86の配信を禁止するように構成され得、その配信を禁止し得る。逆に、認証モジュール74は、外部制御スタック104内の制御データ本体86がスタックフレーム内の対応する制御データと一致する場合、制御データ本体86を制御スタックバッファモジュール72に送るように構成され得、制御データ本体86を制御スタックバッファモジュール72に送り得、制御スタックバッファモジュール72は、受信された制御データ本体86を内部制御スタック102としてのCSB54に書き込み得る。
【００３８】
他の検討事項
他の例および実装形態は、本開示および添付の特許請求の範囲の範囲および趣旨内にある。たとえば、ソフトウェアの性質により、上記で説明した機能は、プロセッサによって実行されるソフトウェア、ハードウェア、ファームウェア、ハードワイヤリング、またはこれらのうちのいずれかの組合せを使用して実装され得る。機能を実装する特徴はまた、機能の部分が異なる物理ロケーションにおいて実装されるように分散されることを含め、様々な位置に物理的に位置していてもよい。また、特許請求の範囲を含め、本明細書で使用する場合、「のうちの少なくとも1つ」で始まる項目の列挙において使用される「または」は、たとえば、「A、B、またはCのうちの少なくとも1つ」の列挙が、Aのみ、またはBのみ、またはCのみ、またはAB、またはAC、またはBC、またはABC(すなわち、AおよびBおよびC)、または2つ以上の同じ特徴を有する組合せ(たとえば、AA、AAB、ABBCなど)を意味するような選言的列挙を示す。
【００３９】
別の例示的な実装形態として、外部制御スタック104を別個のエンティティとして記憶する代わりに、制御フレームモジュール76は、外部制御スタック104を分散方式で記憶し得る。この場合、修正された制御データエントリ84は、それらのそれぞれのスタックフレームとともにプログラムスタック80に記憶されることになる。制御フレームモジュール76は、外部制御スタック104を見つけ、外部制御スタック104を認証モジュール74に配信するように構成されることになり、認証モジュール74は、上記で説明したように制御データの完全性を決定するように構成されることになる。
【００４０】
特許請求の範囲を含め、本明細書で使用する場合、別段に明記されていない限り、機能または動作が項目または条件「に基づく」という記述は、機能または動作が、述べられた項目または条件に基づくこと、また、述べられた項目または条件に加えて1つまたは複数の項目および/または条件に基づき得ることを意味する。
【００４１】
さらに、情報がエンティティ「に」送られるもしくは送信されるという指示、または情報をエンティティ「に」送るもしくは送信するという記述は、通信の完了を必要としない。そのような指示または記述は、情報が送信エンティティから搬送されるが、情報の予定受信側に到達しないことを含む。予定受信側は、実際に情報を受信しなくても、依然として受信エンティティ、たとえば、受信実行環境と呼ばれることがある。
【００４２】
特定の要件に従って大幅な変形を行うことができる。たとえば、カスタマイズされたハードウェアが使用されることもあり、かつ/または、特定の要素がハードウェア、ソフトウェア(アプレットなどのポータブルソフトウェアを含む)、もしくは両方において実装されることがある。さらに、ネットワーク入力/出力デバイスなどの他のコンピューティングデバイスへの接続が用いられることがある。
【００４３】
本明細書で使用する「機械可読媒体」および「コンピュータ可読媒体」という用語は、機械を特定の方式で動作させるデータを与えることに関与する任意の媒体を指す。コンピュータシステムを使用して、様々なコンピュータ可読媒体は、命令/コードを実行のためにプロセッサに与えることに関与し得、かつ/またはそのような命令/コードを(たとえば、信号として)記憶および/または搬送するために使用され得る。多くの実装形態では、コンピュータ可読媒体は、物理的な記憶媒体および/または有形の記憶媒体である。そのような媒体は、限定はしないが、不揮発性媒体および揮発性媒体を含む、多くの形態をとり得る。不揮発性媒体は、たとえば、光学ディスクおよび/または磁気ディスクを含む。揮発性媒体は、限定はしないが、ダイナミックメモリを含む。
【００４４】
物理的なおよび/または有形のコンピュータ可読媒体の一般的な形態は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、もしくは任意の他の磁気媒体、CD-ROM、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップもしくはカートリッジ、以下で説明するような搬送波、または、コンピュータが命令および/もしくはコードを読み取ることができる任意の他の媒体を含む。
【００４５】
コンピュータ可読媒体の様々な形態は、1つまたは複数の命令の1つまたは複数のシーケンスを、実行のために1つまたは複数のプロセッサに搬送することに関与し得る。単に例として、命令は最初に、リモートコンピュータの磁気ディスクおよび/または光学ディスク上で搬送され得る。リモートコンピュータは、命令をそのダイナミックメモリにロードし、コンピュータシステムによって受信および/または実行されるべき命令を、送信媒体を介して信号として送ることができる。
【００４６】
上記で説明した方法、システム、およびデバイスは例である。様々な構成は、様々な手順または構成要素を適宜に省略、置換、または追加し得る。たとえば、代替構成では、方法は、説明した順序とは異なる順序で実行される場合があり、様々なステップが追加、省略、または組み合わされる場合がある。また、いくつかの構成に関して説明した特徴は、様々な他の構成において組み合わされる場合がある。構成の異なる態様および要素は、同様の方法で組み合わされる場合がある。また、技術は進化しており、したがって、要素の多くは例であり、本開示の範囲または特許請求の範囲を限定しない。
【００４７】
例示的な構成(実装形態を含む)の完全な理解を与えるために、説明において具体的な詳細が与えられている。しかしながら、構成は、これらの具体的な詳細なしに実践される場合がある。たとえば、構成を曖昧にすることを避けるために、よく知られている回路、プロセス、アルゴリズム、構造、および技法は、不要な詳細なしで示されている。この説明は、例示的な構成のみを提供し、特許請求の範囲の範囲、適用可能性、または構成を限定しない。むしろ、構成の前述の説明は、説明した技法を実装するための説明を与える。本開示の趣旨または範囲から逸脱することなく、要素の機能および構成において様々な変更が行われる場合がある。
【００４８】
また、構成は、流れ図またはブロック図として示されるプロセスとして説明され得る。各々は、順次プロセスとして動作を説明することがあるが、動作の多くは、並行してまたは同時に実行され得る。加えて、動作の順序は、並べ替えられてもよい。プロセスは、図に含まれない追加の段階または機能を有し得る。さらに、方法の例は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実装されるとき、タスクを実行するプログラムコードまたはコードセグメントは、記憶媒体などの非一時的コンピュータ可読媒体に記憶され得る。プロセッサは、説明されたタスクを実行することができる。
【００４９】
互いと接続されるまたは通信するものとして図に示し、かつ/または本明細書で説明した、機能的またはそれ以外の構成要素は、通信可能に結合される。すなわち、それらの構成要素は、それらの間の通信を可能にするために、直接または間接的に接続され得る。
【００５０】
いくつかの例示的な構成について説明したが、様々な変更形態、代替構成、および等価物は、本開示の趣旨から逸脱することなく使用され得る。たとえば、上記の要素は、より大きいシステムの構成要素である場合があり、他の規則が、本発明の適用例よりも優先するか、またはさもなければ本発明の適用例を変更する場合がある。また、上記の要素が考慮される前に、その間に、またはその後に、いくつかの動作が行われる場合がある。したがって、上記の説明は、特許請求の範囲を制限しない。
【００５１】
さらに、2つ以上の発明が開示される場合がある。
【符号の説明】
【００５２】
10  通信システム、システム
12  コンピューティングデバイス
14  基地トランシーバ局(BTS)、BTS
16  ネットワーク
18  サーバ
20  アクセスポイント(AP)、アクセスポイント
22  エクスプロイトソース
50  コンピューティングシステム
52  プロセッサ
54  制御スタックバッファ(CSB)、CSB
56  外部メモリ
58  ソフトウェア
60  オーセンティケータ
70  プロセッサモジュール、モジュール
72  制御スタックバッファモジュール、モジュール
74  認証モジュール、モジュール
76  制御フレームモジュール、モジュール
78  スタックメモリ
80  プログラムスタック
82  制御データエントリ
84  修正された制御データエントリ
86  制御データ本体
88  認証タグ部分
90  認証タグ
92  制御データ
94  プログラムデータ
102  制御スタック、内部制御スタック
104  制御スタック、外部制御スタック
150  プロセス
【図１】
2018506784.tif 000003
【図２】
2018506784.tif 000004
【図３】
2018506784.tif 000005
【図４】
2018506784.tif 000006
【図５】
2018506784.tif 000007
【図６】
2018506784.tif 000008
【図７】
2018506784.tif 000009
【手続補正書】
【提出日】平成29年8月3日(2017.8.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
制御スタックを生成する方法であって、
1つまたは複数の関数呼出しに応答して、複数の制御情報エントリをプロセッサの内部にある制御スタックバッファに書き込むステップと、
前記制御スタックバッファが一杯であること、およびさらなる関数呼出しを受信したことに応答して、
前記複数の制御情報エントリを前記プロセッサの外部にある外部メモリに書き込み、
前記さらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むステップと、
前記複数の制御情報エントリから、制御情報のみを使用して認証タグを決定するステップと
を含む方法。
【請求項２】
前記認証タグのそれぞれの部分を、前記複数の制御情報エントリのうちの第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する前記外部メモリに記憶するステップをさらに含む、請求項1に記載の方法。
【請求項３】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記認証タグを決定するステップが、関数を前記複数の制御情報エントリのすべてに適用するステップを含む、請求項1に記載の方法。
【請求項４】
前記複数の制御情報エントリから、制御情報のみを使用して認証ベリファイアを決定するステップと、
前記認証ベリファイアが前記認証タグと一致すると決定するステップと、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記複数の制御情報エントリを前記制御スタックバッファに書き込むステップと
をさらに含む、請求項1に記載の方法。
【請求項５】
前記複数の制御情報エントリを前記外部メモリに書き込むステップが、前記複数の制御情報エントリを前記外部メモリに書き込むステップであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアから物理的にずらされた前記外部メモリの第1のエリアに配置される、ステップを含む、請求項1に記載の方法。
【請求項６】
前記複数の制御情報エントリを前記外部メモリに書き込むステップが、前記複数の制御情報エントリを前記外部メモリに書き込むステップであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ステップを含み、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項5に記載の方法。
【請求項７】
前記複数の制御情報エントリの少なくとも前記主要部分が前記スタックフレーム制御情報エントリの少なくとも前記主要部分と一致すると決定するステップと、
前記複数の制御情報エントリの少なくとも前記主要部分が前記スタックフレーム制御情報エントリの少なくとも前記主要部分と一致することに基づいて、前記外部メモリからの前記複数の制御情報エントリを前記制御スタックバッファに書き込むステップと
をさらに含む、請求項6に記載の方法。
【請求項８】
コンピューティングシステムであって、
制御スタックバッファを含んでいるプロセッサと、
前記プロセッサの外部にあり、前記プロセッサに通信可能に結合された外部メモリと
を備え、
前記プロセッサが、
制御情報エントリを前記制御スタックバッファに書き込むことによって、関数呼出しに応答することと、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームを前記外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答することと、
前記複数の制御情報エントリから、制御情報のみを使用して認証タグを決定することと
を行うように構成される、コンピューティングシステム。
【請求項９】
前記プロセッサが、前記認証タグのそれぞれの部分を、前記複数の制御情報エントリのうちの第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する前記外部メモリに記憶するようにさらに構成される、請求項8に記載のシステム。
【請求項１０】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記プロセッサが、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定するように構成される、請求項8に記載のシステム。
【請求項１１】
前記プロセッサが、
前記複数の制御情報エントリから、制御情報のみを使用して認証ベリファイアを決定し、
前記認証ベリファイアが前記認証タグと一致すると決定し、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記複数の制御情報エントリを前記制御スタックバッファに書き込む
ようにさらに構成される、請求項8に記載のシステム。
【請求項１２】
前記プロセッサが、分割スタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアとは物理的に別個の前記外部メモリの第1のエリアに配置される、ことを行うように構成される、請求項8に記載のシステム。
【請求項１３】
前記プロセッサが、シャドースタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うように構成され、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項8に記載のシステム。
【請求項１４】
コンピューティングシステムであって、
制御スタックバッファを記憶するための手段と、
プログラムデータおよび制御データを記憶するための手段と、
制御情報エントリを前記制御スタックバッファに書き込むことによって、関数呼出しに応答するための手段と、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームをプログラムデータおよび制御データを記憶するための前記手段に書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答するための手段と、
前記複数の制御情報エントリから、制御情報のみを使用して認証タグを決定するための手段と
を備えるコンピューティングシステム。
【請求項１５】
プログラムデータおよび制御データを記憶するための前記手段がさらに、前記複数の制御情報エントリのうちの第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する前記認証タグのそれぞれの部分を記憶するためのものである、請求項14に記載のシステム。
【請求項１６】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、認証するための前記手段が、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定するように構成される、請求項14に記載のシステム。
【請求項１７】
認証するための前記手段が、
前記複数の制御情報エントリから、制御情報のみを使用して認証ベリファイアを決定し、
前記認証ベリファイアが前記認証タグと一致すると決定する
ようにさらに構成され、
前記システムが、前記認証ベリファイアが前記認証タグと一致することに基づいて、記憶手段からの第1の制御情報エントリを前記制御スタックバッファに書き込むための手段をさらに備える、請求項14に記載のシステム。
【請求項１８】
プログラムデータおよび制御データを記憶するための前記手段がさらに、分割スタックを形成することによって前記制御フレームを書き込むためのものであり、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶するプログラムデータおよび制御データを記憶するための前記手段の第2のエリアとは物理的に別個のプログラムデータおよび制御データを記憶するための前記手段の第1のエリアに配置される、請求項14に記載のシステム。
【請求項１９】
プログラムデータおよび制御データを記憶するための前記手段がさらに、シャドースタックを形成することによって前記制御フレームを書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行うためのものであり、前記スタックフレームが、プログラムデータおよび制御データを記憶するための前記手段に記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項14に記載のシステム。
【請求項２０】
プロセッサに、
制御情報エントリを前記プロセッサ内の制御スタックバッファに書き込むことによって、関数呼出しに応答することと、
複数の制御情報エントリを含む制御フレームが前記制御スタックバッファを満たすこと、および、前記制御フレームを、前記プロセッサに通信可能に結合された、前記プロセッサとは物理的に別個の外部メモリに書き込むことによって、かつさらなる関数呼出しに対応するさらなる制御情報エントリを前記制御スタックバッファに書き込むことによって、前記さらなる関数呼出しを受信することに応答することと、
前記複数の制御情報エントリから、制御情報のみを使用して認証タグを決定することと
を行わせるように構成されたプロセッサ可読命令を備える非一時的プロセッサ可読記憶デバイス。
【請求項２１】
前記命令が、前記プロセッサに、前記認証タグのそれぞれの部分を、前記複数の制御情報エントリのうちの第1の制御情報エントリおよび第2の制御情報エントリの各々に関連する前記外部メモリに記憶させるようにさらに構成される、請求項20に記載の記憶デバイス。
【請求項２２】
前記複数の制御情報エントリが、3つ以上の制御情報エントリを含み、前記プロセッサに前記認証タグを決定させるように構成された前記命令が、前記プロセッサに、関数を前記複数の制御情報エントリのすべてに適用することによって前記認証タグを決定させるように構成される、請求項20に記載の記憶デバイス。
【請求項２３】
前記命令が、前記プロセッサに、
前記複数の制御情報エントリから、制御情報のみを使用して認証ベリファイアを決定させ、
前記認証ベリファイアが前記認証タグと一致すると決定させ、
前記認証ベリファイアが前記認証タグと一致することに基づいて、前記外部メモリからの第1の制御情報エントリを前記制御スタックバッファに書き込ませる
ようにさらに構成される、請求項20に記載の記憶デバイス。
【請求項２４】
前記プロセッサに前記制御フレームを前記外部メモリに書き込ませるように構成された前記命令が、前記プロセッサに、分割スタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリが、前記制御情報エントリに対応するプログラムデータを記憶する前記外部メモリの第2のエリアとは物理的に別個の前記外部メモリの第1のエリアに配置される、ことを行わせるように構成される、請求項20に記載の記憶デバイス。
【請求項２５】
前記プロセッサに前記制御フレームを前記外部メモリに書き込ませるように構成された前記命令が、前記プロセッサに、シャドースタックを形成することによって前記制御フレームを前記外部メモリに書き込むことであって、前記複数の制御情報エントリの少なくとも主要部分が、スタックフレームに書き込まれたスタックフレーム制御情報エントリの主要部分の複製である、ことを行わせるように構成され、前記スタックフレームが、前記外部メモリに記憶され、少なくとも最初に書き込まれたときに、前記スタックフレーム制御情報エントリに対応するプログラムデータを含んでいる、請求項20に記載の記憶デバイス。
【国際調査報告】
2018506784.tif 000010
2018506784.tif 000011
2018506784.tif 000012
2018506784.tif 000013
2018506784.tif 000014