(57)【要約】  定義されたメモリブロック上で動作するように特に結合され、他のメモリブロックで動作することを禁止された様々な命令セットを定義することによって、実行可能命令からの不正アクセスからメモリブロックを保護するための方法が提供される。たとえば、実行可能コードは、複数の別個の読取りおよび書込み命令を含み得、各読取りおよび/または書込み命令は、複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である。メモリブロックも確立され、各メモリブロックは、複数の異なるメモリアクセスタグのうちの1つに関連付けられる。したがって、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令が、異なるメモリアクセスタグに関連するメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行は禁止または中止される。
2018514860.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリアクセスタグを定義するステップと、
各メモリアクセスタグに固有の複数の読取りおよび書込み命令を定義するステップと、
実行可能コードへのソースコードのコンパイル中に、前記複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックを定義し、1つまたは複数のメモリブロックを対応するメモリアクセスタグに関連付けるステップであって、各メモリブロックが、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である、ステップと
を備える、方法。
【請求項２】
前記複数のメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項1に記載の方法。
【請求項３】
前記複数の読取りおよび/または書込み命令における各読取りおよび/または書込み命令が、別個のメモリアクセスタグに関連付けられる、請求項1に記載の方法。
【請求項４】
前記複数の別個の読取りおよび書込み命令を定義するステップが、
第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を定義するステップと、
第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令を定義するステップと
を含み、
前記第1の読取りおよび/または書込み命令が、第2のアクセスタグに関連付けられるメモリブロック上で動作しない、請求項1に記載の方法。
【請求項５】
前記第1のメモリアクセスタグが複数のメモリブロックに関連付けられる、請求項4に記載の方法。
【請求項６】
メモリブロックがサブページサイズのメモリ領域である、請求項1に記載の方法。
【請求項７】
前記1つまたは複数のメモリブロックが、メモリスタック領域またはメモリヒープ領域内に定義され得る、請求項1に記載の方法。
【請求項８】
処理回路によって実行されると、前記処理回路に、
複数のメモリアクセスタグを定義することと、
各メモリアクセスタグに固有の複数の読取りおよび書込み命令を定義することと、
実行可能コードへのソースコードのコンパイル中に、前記複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックを定義し、1つまたは複数のメモリブロックを対応するメモリアクセスタグに関連付けることであって、各メモリブロックが、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である、ことと
を行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体。
【請求項９】
ストレージデバイスから実行可能コードを取得するステップであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、ステップと、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義するステップと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行するステップであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、ステップと
を備える、方法。
【請求項１０】
読取りおよび/または書込み命令が、前記読取りおよび/または書込み命令とは異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記読取りおよび/または書込み命令の実行が禁止または中止される、請求項9に記載の方法。
【請求項１１】
メモリブロックがサブページサイズのメモリ領域である、請求項9に記載の方法。
【請求項１２】
前記実行可能コードが単一のアプリケーションまたはプロセスである、請求項9に記載の方法。
【請求項１３】
前記複数の別個の読取りおよび書込み命令が、
第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令と、
第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令と
を含み、
前記第1の読取りおよび/または書込み命令が、第2のアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、禁止または中止される、請求項9に記載の方法。
【請求項１４】
前記1つまたは複数のメモリブロックが、実行可能ファイルがコンパイルされるときに事前に定義され、または前記実行可能コードが実行されるときに動的に定義される、請求項9に記載の方法。
【請求項１５】
実行可能コードを記憶するストレージデバイスであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、ストレージデバイスと、
前記ストレージデバイスに結合された処理回路であって、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義することと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行することであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、実行することと
を行うように構成された処理回路と
を備える、デバイス。
【請求項１６】
ストレージデバイスから実行可能コードを取得するための手段であって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、手段と、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義するための手段と、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行する手段であって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、手段と
を備える、デバイス。
【請求項１７】
処理回路によって実行されると、前記処理回路に、
ストレージデバイスから実行可能コードを取得することであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、取得することと、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義することと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行することであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、実行することと
を行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体。
【請求項１８】
ストレージデバイスから実行可能コードを取得するステップであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、ステップと、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得するステップと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止するステップと
を備える、方法。
【請求項１９】
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認するステップをさらに備える、請求項18に記載の方法。
【請求項２０】
前記第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとするかどうかを確認するステップをさらに備える、請求項18に記載の方法。
【請求項２１】
複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持するステップをさらに備える、請求項18に記載の方法。
【請求項２２】
前記複数の異なるメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項18に記載の方法。
【請求項２３】
前記第1のメモリアクセスタグが複数の別個のメモリブロックに関連付けられ、前記複数の別個のメモリブロックがすべて同じメモリアクセスタグに関連付けられる、請求項18に記載の方法。
【請求項２４】
メモリブロックがサブページサイズのメモリ領域である、請求項18に記載の方法。
【請求項２５】
実行可能コードを記憶するストレージデバイスであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、ストレージデバイスと、
前記ストレージデバイスに結合された処理回路であって、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得することと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止することと
を行うように構成された処理回路と
を備える、デバイス。
【請求項２６】
前記処理回路が、
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認するようにさらに構成される、請求項25に記載のデバイス。
【請求項２７】
前記処理回路が、
前記第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとするかどうかを確認するようにさらに構成される、請求項25に記載のデバイス。
【請求項２８】
前記処理回路が、
メモリデバイスにおいて、複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持するようにさらに構成される、請求項25に記載のデバイス。
【請求項２９】
前記複数の異なるメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項25に記載のデバイス。
【請求項３０】
前記第1のメモリアクセスタグが複数の別個のメモリブロックに関連付けられ、前記複数の別個のメモリブロックがすべて同じメモリアクセスタグに関連付けられる、請求項25に記載のデバイス。
【請求項３１】
メモリブロックがサブページサイズのメモリ領域である、請求項25に記載のデバイス。
【請求項３２】
ストレージデバイスから実行可能コードを取得するための手段であって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、手段と、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得するための手段と、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止するための手段と
を備える、デバイス。
【請求項３３】
不正アクセスからメモリブロックを保護するための非一時的機械可読記憶媒体であって、処理回路によって実行されると、前記処理回路に、
ストレージデバイスから実行可能コードを取得することであって、前記実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令が複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、取得することと、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得することと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止することと
を行わせる1つまたは複数の命令を有する、非一時的機械可読記憶媒体。
【請求項３４】
処理回路によって実行されると、前記処理回路に、
メモリデバイスにおいて、複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持することを行わせる1つまたは複数の命令をさらに有する、請求項33に記載の非一時的機械可読記憶媒体。
【請求項３５】
処理回路によって実行されると、前記処理回路に、
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認することを行わせる1つまたは複数の命令をさらに有する、請求項33に記載の非一時的機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、2015年4月24日に米国特許商標庁に提出された非仮出願第14/696,229号の優先権および利益を主張するものであり、その全内容は参照により本明細書に組み込まれる。
【０００２】
本明細書において開示される様々な特徴は、一般にメモリオーバーラン攻撃を緩和するための方法に関し、より具体的には、実行可能命令およびメモリブロックがタグに関連付けられ、その結果、それらのタグが両方とも同じである場合にのみ、命令がメモリブロック(たとえば、サブページサイズのメモリブロック)にアクセスできる方法に関する。
【背景技術】
【０００３】
モバイル電話、モバイルデバイス、ポケットベル、ワイヤレスモデム、携帯情報端末、タブレット、個人情報管理ソフトウェア(PIM)、パーソナルメディアプレーヤ、パームトップコンピュータ、ラップトップコンピュータなどのデバイス、またはプロセッサを備えた他の任意のデバイスはますます普及し、普遍的になりつつある。そのようなデバイスにおいて生成、入力、記憶、および/または受信されたデータは、不正アクセスから保護されるべきである。不正アクセスのそのような危険の1つは、デバイス内の情報を侵害するために実行可能コード内の既存の読取りまたは書込み動作を利用するメモリオーバーラン攻撃を含む。オーバーランメモリ攻撃は、典型的には、メモリオーバーランを作成するために、メモリの意図しない部分にアクセスするために(実行可能コードまたは命令における)読取りまたは書込みをもたらすいくつかのレジスタ(たとえば、アドレスレジスタ、ポインタレジスタなど)を修正することを含む。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、オーバーランメモリ攻撃を防止または禁止する解決策が必要とされている。
【課題を解決するための手段】
【０００５】
第1の特徴は、統合メモリブロック保護を有する実行可能コードをコンパイルするための方法を提供する。複数のメモリアクセスタグが定義され得る。一例では、複数のメモリアクセスタグは、3つ以上の別個のタイプのメモリアクセスタグを含み得る。同様に、各メモリアクセスタグに固有の複数の読取りおよび書込み命令が定義され得る。たとえば、複数の読取りおよび/または書込み命令における各読取りおよび/または書込み命令は、別個のメモリアクセスタグに関連付けられ得る。
【０００６】
実行可能コードへのソースコードのコンパイル中に、複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックが定義され得る。いくつかの実装形態では、メモリブロックは、サブページサイズのメモリ領域であり得る。
【０００７】
1つまたは複数のメモリブロックは、対応するメモリアクセスタグに関連付けられ得る。各メモリブロックは、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である。
【０００８】
一例では、複数のメモリアクセスタグは、3つ以上の別個のタイプのメモリアクセスタグを含み得る。
【０００９】
一例によれば、複数の別個の読取りおよび書込み命令を定義することは、(a)第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を定義することと、(b)第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令を定義することとを含み得、第1の読取りおよび/または書込み命令は、第2のアクセスタグに関連付けられるメモリブロック上で動作しない。第1のメモリアクセスタグは、複数のメモリブロックに関連付けられ得る。
【００１０】
一実装形態では、1つまたは複数のメモリブロックは、メモリスタック領域またはメモリヒープ領域内に定義され得る。
【００１１】
第2の特徴は、処理回路によって実行されると、処理回路に(a)複数のメモリアクセスタグを定義すること、(b)各メモリアクセスタグに固有の複数の読取りおよび書込み命令を定義すること、ならびに/あるいは(c)実行可能コードへのソースコードのコンパイル中に、複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックを定義し、1つまたは複数のメモリブロックを対応するメモリアクセスタグに関連付けることであって、各メモリブロックは、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である、定義し関連付けることを行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体を提供する。いくつかの例では、各メモリブロックは、サブページサイズのメモリ領域であり得る。
【００１２】
第3の特徴は、命令単位でメモリブロックを保護するための、処理デバイスにおいて動作する方法を提供する。実行可能コードはストレージデバイスから取得され、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる。各メモリブロックが複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックが定義され得る。一例では、実行可能コードは、単一のアプリケーションまたはプロセスであり得る。
【００１３】
次いで、実行可能コード内の複数の別個の読取りおよび/または書込み命令の少なくともいくつかが実行され(または実行のためにロードされ)得、各実行された読取りおよび/または書込み命令は、実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される。すなわち、読取りおよび/または書込み命令が、読取りおよび/または書込み命令とは異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、読取りおよび/または書込み命令の実行は禁止または中止される。
【００１４】
一例では、複数の別個の読取りおよび書込み命令は、(a)第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令と、(b)第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令とを含み得る。第1の読取りおよび/または書込み命令は、第2のアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、禁止または中止される。
【００１５】
1つまたは複数のメモリブロックは、実行可能ファイルがコンパイルされるときに事前に定義されてもよく、または実行可能コードが実行されるときに動的に定義されてもよい。
【００１６】
第4の特徴は、命令ごとにメモリブロックを保護するように構成されたデバイスを提供する。デバイスは、ストレージデバイスおよび処理回路を含み得る。ストレージデバイスは実行可能コードを記憶し得、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる。処理回路は、(a)各メモリブロックが複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義すること、(b)実行可能コード内の複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行すること、ならびに/あるいは(c)各実行された読取りおよび/または書込み命令は、実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限されることを行うように構成され得る。
【００１７】
別の事例では、本デバイスは、(a)ストレージデバイスから実行可能コードを取得するための手段であって、実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、手段、(b)各メモリブロックが複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義するための手段、ならびに/あるいは(c)実行可能コード内の複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行するための手段であって、各実行された読取りおよび/または書込み命令は、実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、手段を含み得る。
【００１８】
さらに別の事例では、処理回路によって実行されると、処理回路に、(a)ストレージデバイスから実行可能コードを取得することであって、実行可能コードが複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、取得すること、(b)各メモリブロックが複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックを定義すること、ならびに/あるいは(c)実行可能コード内の複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行することであって、各実行された読取りおよび/または書込み命令は、実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、実行することを行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体が提供される。
【００１９】
第5の特徴は、命令単位でメモリブロックを保護するための、処理デバイスにおいて動作する別の方法を提供する。実行可能コードはストレージデバイスから取得され得、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である。第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令は、実行可能コードから取得され得る。第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行は禁止、中止、またはブロックされる。いくつかの事例では、メモリブロックは、サブページサイズのメモリ領域であり得る。複数のメモリブロックごとにメモリアクセスタグを定義するマッピングが維持され得る。
【００２０】
一例では、複数の異なるメモリアクセスタグは、3つ以上の別個のタイプのメモリアクセスタグを含み得る。第1のメモリアクセスタグは、複数の別個のメモリブロックに関連付けられ得る。
【００２１】
第6の特徴は、命令ごとにメモリブロックを保護するように構成されたデバイスを提供する。デバイスは、ストレージデバイスおよび処理回路を含み得る。ストレージデバイスは実行可能コードを記憶し得、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である。処理回路は、(a)実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得すること、ならびに/あるいは(b)第1の読取りおよび/または書込み命令が、異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行を禁止することを行うように構成され得る。
【００２２】
別の事例では、デバイスは、(a)ストレージデバイスから実行可能コードを取得するための手段であって、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、手段、(b)実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得するための手段、ならびに/あるいは(c)第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行を禁止するための手段を備え得る。
【００２３】
さらに別の例では、不正アクセスからメモリブロックを保護するための非一時的機械可読記憶媒体が提供され、機械可読記憶媒体は、処理回路によって実行されると、処理回路に、(a)ストレージデバイスから実行可能コードを取得することであって、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、取得すること、(b)実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得すること、ならびに/あるいは(c)第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行を禁止する、取得することを行わせる1つまたは複数の命令を有する。
【図面の簡単な説明】
【００２４】
【図１】不正アクセスからメモリブロックを保護する方法の例示的な動作環境を示すブロック図である。
【図２】メモリブロックが、複数の異なるメモリアクセスタグの1つにどのようにしてタグ付けされ得るか、または関連付けられ得るかを示す図である。
【図３】メモリブロックが命令単位およびメモリブロック単位で不正アクセスから保護される、例示的なシステムを示すブロック図である。
【図４】命令単位のメモリブロック保護を提供するためにコンパイラによって実装され得る方法を示す流れ図である。
【図５】命令単位のメモリブロック保護を提供するための第1の方法を示す流れ図である。
【図６】命令単位のメモリブロック保護を提供するための第2の方法を示す流れ図である。
【図７】命令単位のメモリブロック保護を提供しながらコードを実行するように構成された例示的な処理デバイスを示すブロック図である。
【発明を実施するための形態】
【００２５】
以下の説明では、記載された実装形態の完全な理解を提供するために特定の詳細が与えられる。ただし、実装形態はこれらの具体的な詳細なしに実施され得ることを当業者は理解されよう。たとえば、実装形態を不要な詳細で不明瞭にしないように回路をブロック図で示すことがある。他の事例では、これらの実装形態を不明瞭にしないように、よく知られている回路、構造および技法を詳細に示すことがある。
【００２６】
「例示的」という用語は、本明細書においては、「例、事例、または例示としての役割を果たす」ことを意味するために使用される。本明細書において「例示的」と記載された任意の実装形態または実施形態は、必ずしも他の実施形態または実装形態よりも好ましいまたは有利であると解釈されるべきではない。
【００２７】
概説
1つの機能は、不正アクセスからメモリブロックを保護する方法を提供する。たとえば、コンパイルの前に、または実行可能コードの生成と同時に、複数の異なるメモリアクセスタグが定義される。同様に、各メモリアクセスタグに固有の複数の別個の読取りおよび書込み命令が定義される。読取りおよび/または書込み命令は、異なるメモリアクセスタグに関連付けられるメモリブロックに適用される場合、実行に失敗する(または、実行を妨げられる)。実行可能コードのコンパイル中、メモリブロックは複数のアクセス属性のうちの1つに関連付けられる。
【００２８】
第2の態様によれば、実行可能コードの実行中、処理回路は、第1の読取りおよび/または書込み命令のためのメモリアクセスタグを確認することができる。第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令の実行は、第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックに適用される場合、禁止、ブロック、および/または中止される。
【００２９】
第3の態様によれば、メモリブロックの保護は、処理回路またはオペレーティングシステムに、任意のアプリケーション依存またはユーザ依存セキュリティコンテキスト、あるいは保護されたメモリ領域を確立させることとは無関係に達成される。すなわち、実行可能コードをコンパイルする際に使用される命令は、そのような命令によってアクセス可能なメモリ空間(たとえば、タグ付きメモリ領域)を定義する。そのような命令を実行する処理回路は、そのような命令によって確立された実行規則/プロトコルに従うにすぎない。したがって、命令は、両方が同じメモリアクセスタグに関連付けられている場合にのみ、メモリ領域にアクセスすることが許可される。この手法は、特定のメモリ領域が特定のアプリケーションによってアクセスされないようにする、または保護するために、プロセッサおよび/またはオペレーティングシステムによって実装され得る任意の他のメモリ保護メカニズムまたは方法とは無関係である。
【００３０】
第4の態様によれば、メモリブロックの保護は、アプリケーションとは無関係であり得る。すなわち、メモリブロックは、アプリケーション単位ではなく、命令単位で保護され得る。したがって、同じアプリケーション内からの異なる読取りまたは書込み命令は、同じメモリブロックにアクセスすることができない場合がある。たとえば、第1のメモリアクセスタグに関連付けられる第1の読取りまたは書込み命令は、やはり第1のメモリアクセスタグに関連付けられる第1のメモリブロックにアクセスすることができ得るが、第2のメモリアクセスタグに関連付けられる(または、第1のメモリアクセスタグに関連付けられていない)第2の読取りまたは書込み命令は、たとえ第1の読取りまたは書込み命令と第2の読取りまたは書込み命令との両方が同じ実行アプリケーション内から発生した場合であっても、第1のメモリブロックにアクセスすることが許可されない。
【００３１】
第5の態様によれば、メモリブロックの保護は、サブページサイズのメモリブロックにおいて実装される。メモリブロックサイズは、異なるアプリケーションおよび/またはプロセスにメモリを割り振るために特定のシステムアーキテクチャによって使用されているどんなメモリページサイズよりも小さい。
【００３２】
第6の態様によれば、メモリブロックの特性を定義するためにメモリアクセスタグ属性が追加される。このメモリアクセスタグは、読取り属性、書込み属性などの他の属性とは別個である。
【００３３】
例示的な動作環境
図1は、不正アクセス(たとえば、オーバーランメモリ攻撃による)からメモリブロックを保護する方法の例示的な動作環境を示すブロック図である。たとえば、コード106は、コンパイラデバイス102によって実行可能コード108にコンパイルされ得る。コードをコンパイルする際に、コンパイラデバイス102は、コードによって使用/定義された(たとえば、データおよび/または命令の記憶のために)各メモリブロックを、複数の異なるメモリアクセスタグの中からメモリアクセスタグと関連付けることができる。メモリアクセスタグは、安全なメモリ割振り対非安全なメモリ割振り(たとえば、メモリページおよび/またはメモリブロック)とは無関係であり得る点に留意されたい。代わりに、メモリアクセスタグは、1つまたは複数のメモリブロックを参照し、それらを他のメモリブロックと区別するための論理構造であり得る。同様に、複数の別個のタイプの読取りおよび/または書込み命令が実行可能コード内で使用され得、読取りおよび/または書込み命令の各タイプは別個のメモリアクセスタグに関連付けられる。様々な例では、「タグ」は、メモリブロックを特定の実行可能命令(たとえば、読取りおよび/または書込み命令)に関連するまたは関連付けるように機能することができる、任意の識別子、マッピング、および/または属性(たとえば、明示的、暗黙的、および/または論理的な)であり得る。たとえば、同じ読取り/書込み動作を実行するが、それぞれが複数の異なるメモリから特定のメモリブロック(または、メモリアクセスタグ)に固有であり、および/または結合されている、異なるセットの読取り/書込み命令が定義され得る。
【００３４】
いくつかの実装形態では、メモリブロックの保護は、サブページサイズのメモリブロックにおいて実装され得る。「ページ」または「仮想ページ」とも呼ばれるメモリページは、固定長の連続したメモリブロックであってよく、しばしばページテーブル内の単一のエントリによって記述される。メモリページは、しばしば、処理回路によって実行されるプロセスまたはアプリケーションに関連付けられ、または割り振られる。ページテーブルは、しばしば、各プロセスまたはアプリケーションに割り振られた、および/または割り当てられたメモリページを定義または追跡するために使用される。いくつかの事例では、メモリページは、メモリオペレーティングシステムにおけるメモリ管理のためのデータの最小単位であってもよい。メモリブロックサイズは、異なるアプリケーションおよび/またはプロセスにメモリを割り振るために特定のシステムアーキテクチャ(たとえば、処理回路、メモリ管理回路など)によって使用されているどんなメモリページサイズよりも小さい。
【００３５】
実行可能コードは、処理デバイス104のストレージデバイス110にロードされ得る。次いで、処理デバイス104内の処理回路112は、第1のメモリアクセスタグに関連付けられる読取りおよび/または書込み命令が同じ第1のメモリアクセスタグに関連付けられるメモリブロックにのみアクセスできる実行可能コードを実行することができる。メモリブロックのメモリアクセスタグへのマッピングは、メモリデバイス114内のこの目的のために維持され得る。
【００３６】
不正アクセスからのメモリブロックの例示的な保護
図2は、メモリブロックが、複数の異なるメモリアクセスタグの1つにどのようにしてタグ付けされ得るか、または関連付けられ得るかを示す図である。実行可能コードがコンパイルされると、変数、レジスタなどのメモリブロックが定義され得る。コンパイラはどの読取り/書込み命令がどのメモリブロックにアクセスするべきかを確認する。したがって、読取り/書込み命令は、それらが意図されたメモリブロック上でのみ動作するように関連付けられ、および/または制限される。これにより、メモリオーバーラン攻撃の一環として意図しないメモリブロックにアクセスするために関連のない読取り/書込み命令が使用されることを防止する。
【００３７】
一例では、メモリ領域202は、メモリブロック204、206、208、210、212、および214として論理的に分割または配置され得る。各メモリブロックは、たとえば、サブページメモリセグメント(たとえば、メモリページサイズよりも小さい)であり得る。各メモリブロックは、マッピングテーブル216に維持されているタグに関連付けられる。
【００３８】
メモリアクセスタグごとに、異なるセットの読取りおよび書込み命令220またはコマンドが定義され得る。たとえば、タグAの場合、命令読取りAおよび書込みA222が定義され、タグBの場合、命令読取りBおよび書込みB224が定義され、タグCの場合、命令読取りCおよび書込みC226が定義される。これらの命令220は、それらが、タグ付けされている、またはそれらの対応するアクセス属性に関連付けられているメモリブロックにアクセスしているかどうかを具体的にチェックする。これらの命令220は、アクセスしようとするメモリブロックが、それらの対応するアクセス属性で識別される/タグ付けされている場合にのみ、続行または実行される。たとえば、書込みA命令が、タグBでタグ付けされたメモリブロックにデータを書き込んだり記憶したりするために呼び出された場合、書込みA命令は失敗し、続行しない。読取りおよび書込み動作は、いくつかの実装形態では、ロードおよび記憶動作とも呼ばれ得る。さらに、いくつかの実装形態では、各アクセスタグに固有の他の命令が定義され得る。メモリブロック用のタグは、マッピングテーブル216にタグ付けするために、メモリブロックに記憶され得る。
【００３９】
意図された動作の下では、読取り/書込み命令は、最初に割り振られたメモリブロックにのみアクセスすることができる。しかしながら、メモリオーバーラン攻撃においては、意図しないメモリブロックにアクセスするために、攻撃者によって読取り/書込み命令が別の目的で利用され得る。本明細書に示されるメモリアクセスタグを使用することにより、特定の読取り/書込み命令を本来意図されたメモリブロックにのみ結合するためにタグを使用することによるメモリブロックへのそのような意図しないアクセスを防止する。
【００４０】
ソースコードを実行可能コードにコンパイルする際に、コンパイラは、どのソースコード読取りおよび/または書込み命令がどのメモリブロックにアクセスするべきかを識別するように構成され得、次いで、識別された別個のメモリブロックごとに、別個の読取りおよび/または書込み命令(たとえば、別個のクラスおよび/またはタイプの命令)を使用する。たとえば、識別された各メモリブロックは、別個のメモリアクセスタグに関連付けられ得る。同様に、特定のメモリブロックにアクセスすることが許可された命令もまた、特定のメモリブロックと同じメモリアクセスタグに関連付けられる。このように、実行可能コード(または、その中の命令)は、あらかじめ決定されたメモリブロックまたはあらかじめ関連付けられたメモリブロック上でのみ動作するように制限される。命令が、命令に関連付けられないメモリブロックにアクセスしようとする場合、そのような命令の実行は処理回路によって中止される。一実装形態では、メモリブロックへのアクセスは、(複数の別個の読取りおよび/または書込み命令の中から)単一の読取りおよび/または書込み命令だけが各メモリブロックにアクセスすることが許可されるように、命令単位で制限される。さらに、単一の(読取り/書込み)命令は、すべてのメモリブロック(たとえば、単一の命令が明示的に関連付けられていないメモリブロック)にアクセスすることは許可されていない。
【００４１】
一例では、メモリの各8ワードブロックは、保護されているか、または保護されていないとしてマーク付けまたはタグ付けされ得る(たとえば、2タグ手法)。保護されたメモリおよび保護されていないメモリにアクセスするために、別々のロード/読取り命令と記憶/書込み命令が定義される。例示的な実装形態では、保護された領域は、メモリの保護されていない領域間の「保護」ブロックとして使用され得る。プロセスがループ内の保護されていないメモリにアクセスしているときに、保護されていないブロックの終わりを通過して保護されたブロックにアクセスしようとする場合、メモリアクセス属性(保護された)はもはやアクセス命令(保護されていないものに関連付けられる)に一致しなくなるため、命令は失敗する。同様に、保護されたメモリ上で動作するプロセスは、隣接する保護されていないメモリブロックを通過することができない。
【００４２】
より複雑な展開では、メタデータを記憶するために、またはフローデータを制御するために保護されたブロックも使用され得る。たとえば、スタック上では、コンパイラは、スタックポインタとリターンアドレス(ならびに、他の保存されたレジスタ)を保護されたブロック内に配置することができ、それらが上書きされることをより困難にする。同様に、ヒープ上では、保護されたブロック内にヒープメタデータが配置され得る。本方法は、既存のコードと完全に下位互換性があり得る(たとえば、すべてを保護されていないものとして単にマークすることによって)。
【００４３】
図3は、メモリブロックが命令単位およびメモリブロック単位で不正アクセスから保護される、例示的なシステムを示すブロック図である。たとえば、ソースコード302は、コンパイラデバイスによって実行可能コード304にコンパイルされ得る。ソースコード302をコンパイルする際、コンパイラデバイスは、実行可能命令306、メモリ割振り308、および/またはメモリアクセスタグマッピング310を作成する。一例では、命令306は、同じ動作(たとえば、読取り/書込みA、読取り/書込みB、読取り/書込みCなど)のうちのいくつかを実行することができる別個の命令326を含み得る。しかしながら、別個の命令の各々は、メモリブロックに明示的に結合され得る。たとえば、実行可能コード304は、命令306によって使用された(たとえば、データおよび/または命令の記憶のために)各メモリブロックを、複数の異なるメモリアクセスタグの中からメモリアクセスタグと定義または関連付けることができる。各命令326は、特定のメモリブロックと同じメモリアクセスタグを有する命令だけがそのメモリブロックにアクセスすることを許可されるように、異なるメモリアクセスタグに関連付けられ得る。たとえば、読取りAおよび/または書込みA命令は、第1のメモリアクセスタグAに関連付けられてもよく、読取りBおよび/または書込みB命令は、第2のメモリアクセスタグBに関連付けられてもよい。
【００４４】
処理デバイス312に分配すると、実行可能コード304はストレージデバイス314に記憶され得、ストレージデバイス314から処理回路316によって実行され得る。様々な例では、処理回路316は、1つまたは複数のプロセッサ、メモリコントローラ、入力/出力インタフェースなどを含み得る。メモリデバイス318はまた、処理デバイス312に結合され得る。一例では、処理回路は、アプリケーションおよび/またはプロセス単位でメモリページを割り振るメモリデバイス318内にページ割振りテーブル320を設定することができる。実行可能コード304はまた、処理回路316に、命令単位でメモリデバイス318内のメモリブロック322およびメモリブロック属性324を設定させることができる。
【００４５】
一例では、メモリブロック322(たとえば、ブロックA、ブロックB、...、ブロックN)ごとに、メモリブロック属性324のセットが定義される。属性324のセットは、たとえば、読取り専用属性、メモリアクセスタグ属性などを含み得る。読取り専用属性は、対応するメモリブロックが特定のアプリケーションおよび/またはプロセスによって読取り専用であるかどうかを定義することができる。メモリアクセスタグ属性は、どの呼出し命令が対応するメモリブロックへの読取りおよび/または書込みを許可されているかを示すことができる。このように、各メモリブロックは特定の命令328に結合され、他のメモリアクセスタグに関連付けられる命令によってアクセスされ得ない。
【００４６】
メモリアクセスタグは、安全なメモリ割振り対非安全なメモリ割振り(たとえば、メモリページおよび/またはメモリブロック)とは無関係であり得る点に留意されたい。代わりに、メモリアクセスタグは、1つまたは複数のメモリブロックを参照し、それらを他のメモリブロックと区別するための論理構造であり得る。同様に、複数の別個のタイプの読取りおよび/または書込み命令が実行可能コード内で使用され得、読取りおよび/または書込み命令の各タイプは別個のメモリアクセスタグに関連付けられる。
【００４７】
一例では、メモリブロックの保護は、サブページサイズのメモリブロックにおいて実装される。メモリブロックサイズは、異なるアプリケーションおよび/またはプロセスにメモリを割り振るためにページ割振りテーブル320によって使用されているどんなメモリページサイズよりも小さい。
【００４８】
さらに、メモリブロックと命令とを結合するためのメモリアクセスタグの使用は、処理デバイス312(または、そこにおいて実行されるオペレーティングシステム)に、任意のアプリケーション依存またはユーザ依存セキュリティコンテキスト、あるいは保護されたメモリ領域を確立させることとは無関係であり得る。すなわち、実行可能命令は、その命令とメモリブロックの両方が同じメモリアクセスタグに関連付けられている場合にのみ、メモリブロックにアクセスすることが許可される。このように、メモリブロック322は、アプリケーション単位ではなく、命令単位で保護され得る。したがって、同じアプリケーション/プロセス内からの異なる読取りまたは書込み命令は、同じメモリブロックにアクセスすることができない場合がある。たとえば、第1のメモリアクセスタグ(たとえば、タグA)に関連付けられる第1の読取りまたは書込み命令(たとえば、読取り/書込みA)は、やはり第1のメモリアクセスタグ(たとえば、タグA)に関連付けられる第1のメモリブロック(たとえば、ブロックC)にアクセスすることができ得る。しかし、第2のメモリアクセスタグ(たとえば、タグB)に関連付けられる、または、第1のメモリアクセスタグ(たとえば、タグA)に関連付けられていない第2の読取りまたは書込み命令(たとえば、読取り/書込みB)は、たとえ第1の読取りまたは書込み命令(たとえば、読取り/書込みA)と第2の読取りまたは書込み命令(たとえば、読取り/書込みB)との両方が同じ実行アプリケーションまたはプロセス内から発生した場合であっても、第1のメモリブロック(たとえば、ブロックC)にアクセスすることが許可されない。
【００４９】
例示的なコンパイラ
図4は、命令単位のメモリブロック保護を提供するためにコンパイラによって実装され得る方法を示す流れ図である。ソースコードが取得される(402)。ソースコードのコンパイルの前に、またはそれと同時に、複数のメモリアクセスタグが定義(たとえば、生成、計算など)され得る(404)。各メモリアクセスタグに固有の複数の読取りおよび/または書込み命令が定義される(406)。たとえば、複数の読取りおよび/または書込み命令内の各読取りおよび/または書込み命令は、別個のメモリアクセスタグに関連付けられ得る。
【００５０】
実行可能コードへのソースコードのコンパイル中に、複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックが定義され、対応するメモリアクセスタグに関連付けられ、各メモリブロックは、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である(408)。たとえば、メモリブロックが第1のメモリアクセスタグに関連付けられている場合、メモリブロックは、やはり第1のメモリアクセスに関連付けられる命令(たとえば、読取り/書込み命令)によってのみアクセス(たとえば、そこから読取り、またはそこに書込み)され得る。すなわち、命令は、命令とは異なるメモリアクセスタグに関連付けられるメモリブロックに適用される場合、実行(たとえば、読取りまたは書込み動作を実行)することが防止される。複数の読取りおよび/または書込み命令内の各読取りおよび/または書込み命令は、別個のメモリアクセスタグに関連付けられ得る。ソースコードから実行可能コードを生成する際に、複数の読取りおよび/または書込み命令が使用され得る。
【００５１】
代替の実装形態では、(たとえば、処理回路による)実行可能コードの実行時に、1つまたは複数のメモリブロックを定義するコンパイラではなく、1つまたは複数のメモリブロックが動的に定義および/または確立され得る。
【００５２】
一実装形態では、ソースコードを実行可能コードにコンパイルする間に、コンパイラは、どのソースコード読取りおよび/または書込み命令がどのメモリブロックにアクセスするべきかを識別するように構成され得る。次いで、識別された別個のメモリブロックごとに、別個の読取りおよび/または書込み命令(たとえば、別個のクラスおよび/またはタイプの命令)が使用される。前述のように、識別された各メモリブロックは、別個のメモリアクセスタグに関連付けられ得る。同様に、特定のメモリブロックにアクセスすることが許可された命令もまた、特定のメモリブロックと同じメモリアクセスタグに関連付けられる。このように、実行可能コード(または、その中の命令)は、あらかじめ決定されたメモリブロックまたはあらかじめ関連付けられたメモリブロック上でのみ動作するように制限される。
【００５３】
実行可能コードは、分配および/または送信のために記憶され得る(410)。複数の異なるメモリアクセスタグは、3つ以上の別個のタイプのメモリアクセスタグを含み得る。
【００５４】
一例では、複数の別個の読取りおよび書込み命令を定義するステップは、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を定義するステップと、第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令を定義するステップとを含み得る。第1の読取りおよび/または書込み命令は、第2のアクセスタグに関連付けられるメモリブロック上で動作を失敗するか、または動作することが防止され、その逆も同様である。
【００５５】
一例では、各メモリアクセスタグは、1つまたは複数の異なるメモリブロックに関連付けられ得る。
【００５６】
メモリブロックは、サブページメモリ領域(たとえば、ブロックはメモリページサイズよりも小さい)であり得る。たとえ第1のアプリケーション/プロセスからの第1の命令(たとえば、読取りA/書込みA)が第1のメモリブロックにアクセスする(たとえば、そこから読み取る/そこに書き込む)ことができるとしても、同じ第1のアプリケーション/プロセスからのものであるが、異なるメモリアクセスタグに関連付けられている第2の別個の命令(たとえば、読取りB/書込みB)は、第1のメモリブロックにアクセスすることを防止される。
【００５７】
様々な例では、メモリブロックは、メモリスタック領域またはメモリヒープ領域内に定義され得る。
【００５８】
細粒度のメモリ保護による、コードの例示的な実行
図5は、命令単位のメモリブロック保護を提供するための第1の方法を示す流れ図である。実行可能コードはストレージデバイスから取得され得、実行可能コードは複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令は、複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる(502)。様々な例では、複数の別個の読取りおよび/または書込み命令は、別個のクラスの読取りおよび/または書込み命令、別個のタイプの読取りおよび/または書込み命令などと解釈され得る。
【００５９】
次いで、各メモリブロックが複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックが定義される(504)。メモリブロックのそのような定義は、実行可能コードに従ってもよく(たとえば、実行可能コードによって事前に定義される)、実行可能コードの実行時に処理回路によって動的に定義されてもよい。各メモリブロックは、サブページサイズのメモリ領域であり得る(たとえば、ブロックはメモリページよりも小さい)。
【００６０】
実行可能コード内の複数の別個の読取りおよび/または書込み命令のうちの少なくともいくつかが実行され、各実行された読取りおよび/または書込み命令は、実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される(506)。たとえば、そのような制限は、実行可能コードを実行する処理回路によって課され得る。メモリブロックへのアクセスを許可する前に、処理回路は、そのメモリブロックへのアクセスを求める命令がメモリブロックと同じメモリアクセスタグに関連付けられていることを検証し得る(たとえば、属性、メモリアクセスタグマッピングテーブルなどを使用して)。すなわち、読取りおよび/または書込み命令が、読取りおよび/または書込み命令とは異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、読取りおよび/または書込み命令の実行は禁止または中止される(508)。
【００６１】
図6は、命令単位のメモリブロック保護を提供するための第2の方法を示す流れ図である。実行可能コードはストレージデバイスから取得され得、実行可能コードは複数の別個の読取りおよび書込み命令を含み、各読取りおよび/または書込み命令は複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である(602)。一例では、複数の異なるメモリアクセスタグは、3つ以上の別個のタイプのメモリアクセスタグを含み得る。そのようなメモリアクセスタグは、読取り専用属性などの一般的な属性とは別個であるか、および/または異なる可能性がある。
【００６２】
実行可能コードの実行(604)の一部として、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令が取得される(606)。第1のメモリアクセスタグは複数の別個のメモリブロックに関連付けられ得、複数の別個のメモリブロックはすべて同じメモリアクセスタグに関連付けられる。たとえば、第1の複数の別個のメモリブロックは、メモリブロックの第1のサブセットとメモリブロックの第2のサブセットとを含み得、メモリブロックの第1および第2のサブセットは、連続的または不連続なメモリ領域内にあり得る。
【００６３】
いくつかの事例では、メモリブロックは、サブページメモリ領域であり得る。いくつかの例では、第1の読取りおよび/または書込み命令が取得された後、どのメモリアクセスタグが第1の読取りおよび/または書込み命令に関連付けられているかの決定が行われる。第1の読取りおよび/または書込み命令によってアクセスされているメモリブロックが第1のメモリアクセスタグに関連付けられているかどうかの決定が行われる(608)。
【００６４】
第1の読取りおよび/または書込み命令が、(第1の読取りおよび/または書込み命令とは)異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行は禁止または中止される(610)。たとえば、第1の読取りおよび/または書込み命令が、第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとすることが確認され得る。
【００６５】
あるいは、第1の読取りおよび/または書込み命令が実行される(612)。このプロセスは、実行可能コードの命令のいくつかまたはすべてについて繰り返され得る(614)。
【００６６】
メモリデバイスにおいてマッピングが維持され得、複数のメモリブロックごとにメモリアクセスタグを定義する。
【００６７】
図7は、命令単位のメモリブロック保護を提供しながらコードを実行するように構成された例示的な処理デバイスを示すブロック図である。
【００６８】
処理デバイス702は、ストレージデバイス704、処理回路706、および/またはメモリデバイス708を含み得る。
【００６９】
ストレージデバイス704は、実行可能コードを記憶するように機能することができる。実行可能コードは、複数の別個の読取りおよび書込み命令を含み得、各読取りおよび/または書込み命令は、複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である。
【００７０】
処理回路706は、命令実行モジュール/回路710、メモリブロック設定モジュール/回路712、メモリアクセスタグマッピングモジュール/回路714、および/またはメモリアクセスタグコンパレータ716を含み得る。命令実行モジュール/回路710は、実行可能コードによって定義された命令を実行するように機能することができる。メモリブロック設定モジュール/回路712は、実行可能コードに従って(メモリデバイス708内の)メモリブロック718を確立するように機能することができる。メモリアクセスタグマッピングモジュール/回路714は、メモリブロックをメモリアクセスタグにマッピングするように機能することができる。メモリアクセスタグコンパレータ716は、命令に関連付けられるメモリアクセスタグを、アクセスされているメモリブロックのメモリアクセスタグと比較するように機能することができる。
【００７１】
メモリデバイス708は、メモリブロック718、メモリブロック属性720(たとえば、メモリブロックごとにメモリアクセスタグを定義し得る)、および/またはメモリアクセスタグをメモリブロックにマッピングするためのメモリアクセスタグマップ722を含み得る。
【００７２】
図7に記載のモジュール/回路は、図5および図6(および他の場所)において説明される1つまたは複数の特徴を実装するように機能することができる。たとえば、命令実行モジュール/回路710は、実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得し得る。命令実行モジュール/回路710は、(a)第1の読取りおよび/または書込み命令が第1のメモリアクセスタグに関連付けられること、または(b)第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとすることを確認するために、メモリアクセスタグマッピングモジュール/回路714および/またはメモリアクセスタグコンパレータ716を使用し得る。
本命令実行モジュール/回路710は、第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、第1の読取りおよび/または書込み命令の実行を禁止し得る。いくつかの実装形態では、メモリブロックは、サブページサイズのメモリ領域である。
【００７３】
図1、図2、図3、図4、図5、図6および/または図7に示す構成要素、ステップ、特徴および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴または機能に再構成され、および/または組み合わせられ、あるいは、いくつかの構成要素、ステップ、または機能で具現化され得る。本開示の範囲から逸脱することなしに、追加の要素、構成要素、ステップ、および/または機能を追加することもできる。図1、図3、および図7に示される装置、デバイス、および/または構成要素は、図2、図4、図5、および図6に記載の方法、特徴、またはステップのうちの1つまたは複数を実行するように構成され得る。本明細書で説明される新規のアルゴリズムはまた、ソフトウェアにおいて効率的に実施され、および/またはハードウェアに組み込まれ得る。
【００７４】
また、少なくともいくつかの実装形態が、フローチャート、流れ図、構造図、またはブロック図として示されるプロセスとして説明されている点に留意されたい。フローチャートでは動作を逐次プロセスとして説明する場合があるが、動作の多くは並行して実施されてもあるいは一斉に実施されてもよい。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了すると終了する。プロセスは、メソッド、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応する場合、その終了は呼出し関数またはメイン関数への関数の戻りに対応する。
【００７５】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードに実装されるとき、必要なタスクを実行するプログラムコードまたはコードセグメントは、記憶媒体または他のストレージなどの機械可読媒体に記憶することができる。プロセッサは、必要なタスクを実行することができる。コードセグメントは、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、あるいは命令、データ構造、またはプログラムステートメントの任意の組合せを表すことができる。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡すこと、および/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の適切な手段を介して渡され、転送され、または送信され得る。
【００７６】
非一時的な「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」という用語は、これに限定されないが、ポータブルまたは固定ストレージデバイス、光学ストレージデバイス、ならびに命令および/またはデータを記憶、格納、または搬送することができる様々な他の非一時的媒体を含み得る。したがって、本明細書に記載される様々な方法は、「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」に記憶され得る命令および/またはデータによって部分的または完全に実装され、1つまたは複数のプロセッサ、機械、および/またはデバイスによって実行され得る。
【００７７】
本明細書に開示された実施例に関連して説明された方法またはアルゴリズムは、ハードウェア、プロセッサによって実行可能なソフトウェアモジュール、またはその両方の組合せに、処理装置、プログラミング命令、または他の指示の形態で直接的に具現化されてもよく、単一のデバイスに含まれてもよく、複数のデバイスに分散されてもよい。ソフトウェアモジュールは、RAMメモリ(ランダムアクセスメモリ)、フラッシュメモリ、ROMメモリ(読取り専用メモリ)、EPROMメモリ(消去可能プログラマブル読取り専用メモリ)、EEPROMメモリ(電気的消去可能プログラマブル読取り専用メモリ)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で既知の任意の他の形態の記憶媒体内に存在してもよい。プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、記憶媒体がプロセッサに結合されてもよい。代替的に、記憶媒体はプロセッサと一体であってもよい。
【００７８】
当業者であれば、本明細書で開示された実施形態に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装され得ることをさらに理解するであろう。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるのか、それともソフトウェアとして実装されるのかは、特定の適用例および全体的なシステムに課された設計制約によって決まる。
【００７９】
本明細書に記載の実施形態の様々な特徴は、本開示の範囲から逸脱することなしに、異なるシステムにおいて実装され得る。上記の実施形態は例にすぎず、本開示を限定するものと解釈すべきではないことに留意されたい。実施形態の説明は例示的なものであることが意図されており、特許請求の範囲を限定するものではない。したがって、本教示は、他のタイプの装置に容易に適用することができ、多くの代替、修正、および変形が当業者には明らかであろう。
【符号の説明】
【００８０】
102  コンパイラデバイス
104  処理デバイス
106  コード
108  実行可能コード
110  ストレージデバイス
112  処理回路
114  メモリデバイス
202  メモリ領域
204  メモリブロック
206  メモリブロック
208  メモリブロック
210  メモリブロック
212  メモリブロック
214  メモリブロック
216  マッピングテーブル
220  読取りおよび書込み命令
302  ソースコード
304  実行可能コード
306  実行可能命令
308  メモリ割振り
310  メモリアクセスタグマッピング
312  処理デバイス
314  ストレージデバイス
316  処理回路
318  メモリデバイス
320  ページ割振りテーブル
322  メモリブロック
324  メモリブロック属性
326  命令
328  命令
702  処理デバイス
704  ストレージデバイス
706  処理回路
708  メモリデバイス
710  命令実行モジュール/回路
712  メモリブロック設定モジュール/回路
714  メモリアクセスタグマッピングモジュール/回路
716  メモリアクセスタグコンパレータ
718  メモリブロック
720  メモリブロック属性
722  メモリアクセスタグマップ
【図１】
2018514860.tif 000003
【図２】
2018514860.tif 000004
【図３】
2018514860.tif 000005
【図４】
2018514860.tif 000006
【図５】
2018514860.tif 000007
【図６】
2018514860.tif 000008
【図７】
2018514860.tif 000009
【手続補正書】
【提出日】平成29年10月25日(2017.10.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれのメモリブロックの複数のメモリアクセスタグを定義するステップと、
各メモリアクセスタグに固有の複数の読取りおよび/または書込み命令をマッピングするステップと、
実行可能コードへのソースコードのコンパイル中に、前記複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックを定義し、1つまたは複数のメモリブロックを対応するメモリアクセスタグに関連付けるステップであって、各メモリブロックが、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である、ステップと
を備える、方法。
【請求項２】
前記複数のメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項1に記載の方法。
【請求項３】
前記複数の読取りおよび/または書込み命令における各読取りおよび/または書込み命令が、別個のメモリアクセスタグに関連付けられる、請求項1に記載の方法。
【請求項４】
前記複数の別個の読取りおよび書込み命令をマッピングするステップが、
第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を定義するステップと、
第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令を定義するステップと
を含み、
前記第1の読取りおよび/または書込み命令が、第2のアクセスタグに関連付けられるメモリブロック上で動作しない、請求項1に記載の方法。
【請求項５】
前記第1のメモリアクセスタグが複数のメモリブロックに関連付けられる、請求項4に記載の方法。
【請求項６】
メモリブロックがサブページサイズのメモリ領域である、請求項1に記載の方法。
【請求項７】
前記1つまたは複数のメモリブロックが、メモリスタック領域またはメモリヒープ領域内に定義され得る、請求項1に記載の方法。
【請求項８】
処理回路によって実行されると、前記処理回路に、
それぞれのメモリブロックの複数のメモリアクセスタグを定義することと、
各メモリアクセスタグに固有の複数の読取りおよび/または書込み命令をマッピングすることと、
実行可能コードへのソースコードのコンパイル中に、前記複数の読取りおよび/または書込み命令のための1つまたは複数のメモリブロックを定義し、1つまたは複数のメモリブロックを対応するメモリアクセスタグに関連付けることであって、各メモリブロックが、同じ対応するメモリアクセスタグに関連付けられる読取りおよび/または書込み命令によってのみアクセス可能である、ことと
を行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体。
【請求項９】
ストレージデバイスから実行可能コードを取得するステップであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックについて定義された複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、ステップと、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックをマッピングするステップと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行するステップであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、ステップと
を備える、方法。
【請求項１０】
読取りおよび/または書込み命令が、前記読取りおよび/または書込み命令とは異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記読取りおよび/または書込み命令の実行が禁止または中止される、請求項9に記載の方法。
【請求項１１】
メモリブロックがサブページサイズのメモリ領域である、請求項9に記載の方法。
【請求項１２】
前記実行可能コードが単一のアプリケーションまたはプロセスである、請求項9に記載の方法。
【請求項１３】
前記複数の別個の読取りおよび書込み命令が、
第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令と、
第2のメモリアクセスタグに関連付けられる第2の読取りおよび/または書込み命令と
を含み、
前記第1の読取りおよび/または書込み命令が、第2のアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、禁止または中止される、請求項9に記載の方法。
【請求項１４】
前記1つまたは複数のメモリブロックが、実行可能ファイルがコンパイルされるときに事前に定義され、または前記実行可能コードが実行されるときに動的に定義される、請求項9に記載の方法。
【請求項１５】
実行可能コードを記憶するストレージデバイスであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックについて定義された複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、ストレージデバイスと、
前記ストレージデバイスに結合された処理回路であって、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックをマッピングすることと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行することであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、実行することと
を行うように構成された処理回路と
を備える、デバイス。
【請求項１６】
ストレージデバイスから実行可能コードを取得するための手段であって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックについて定義された複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、手段と、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックをマッピングするための手段と、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行する手段であって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、手段と
を備える、デバイス。
【請求項１７】
処理回路によって実行されると、前記処理回路に、
ストレージデバイスから実行可能コードを取得することであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックについて定義された複数の別個のメモリアクセスタグからの1つのメモリアクセスタグに関連付けられる、取得することと、
各メモリブロックが前記複数の別個のメモリアクセスタグのうちの1つに関連付けられる、1つまたは複数のメモリブロックをマッピングすることと、
前記実行可能コード内の前記複数の別個の読取りおよび/または書込み命令の少なくともいくつかを実行することであって、各実行された読取りおよび/または書込み命令が、前記実行された読取りおよび/または書込み命令と同じメモリアクセスタグに関連付けられるメモリブロックにのみアクセスするように制限される、実行することと
を行わせる1つまたは複数の命令を有する非一時的機械可読記憶媒体。
【請求項１８】
ストレージデバイスから実行可能コードを取得するステップであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックにマッピングされた複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、ステップと、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得するステップと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止するステップと
を備える、方法。
【請求項１９】
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認するステップをさらに備える、請求項18に記載の方法。
【請求項２０】
前記第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとするかどうかを確認するステップをさらに備える、請求項18に記載の方法。
【請求項２１】
複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持するステップをさらに備える、請求項18に記載の方法。
【請求項２２】
前記複数の異なるメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項18に記載の方法。
【請求項２３】
前記第1のメモリアクセスタグが複数の別個のメモリブロックに関連付けられ、前記複数の別個のメモリブロックがすべて同じメモリアクセスタグに関連付けられる、請求項18に記載の方法。
【請求項２４】
メモリブロックがサブページサイズのメモリ領域である、請求項18に記載の方法。
【請求項２５】
実行可能コードを記憶するストレージデバイスであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックにマッピングされた複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、ストレージデバイスと、
前記ストレージデバイスに結合された処理回路であって、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得することと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止することと
を行うように構成された処理回路と
を備える、デバイス。
【請求項２６】
前記処理回路が、
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認するようにさらに構成される、請求項25に記載のデバイス。
【請求項２７】
前記処理回路が、
前記第1の読取りおよび/または書込み命令が第2のメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとするかどうかを確認するようにさらに構成される、請求項25に記載のデバイス。
【請求項２８】
前記処理回路が、
メモリデバイスにおいて、複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持するようにさらに構成される、請求項25に記載のデバイス。
【請求項２９】
前記複数の異なるメモリアクセスタグが、3つ以上の別個のタイプのメモリアクセスタグを含む、請求項25に記載のデバイス。
【請求項３０】
前記第1のメモリアクセスタグが複数の別個のメモリブロックに関連付けられ、前記複数の別個のメモリブロックがすべて同じメモリアクセスタグに関連付けられる、請求項25に記載のデバイス。
【請求項３１】
メモリブロックがサブページサイズのメモリ領域である、請求項25に記載のデバイス。
【請求項３２】
ストレージデバイスから実行可能コードを取得するための手段であって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックにマッピングされた複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、手段と、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得するための手段と、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止するための手段と
を備える、デバイス。
【請求項３３】
不正アクセスからメモリブロックを保護するための非一時的機械可読記憶媒体であって、処理回路によって実行されると、前記処理回路に、
ストレージデバイスから実行可能コードを取得することであって、前記実行可能コードが複数の別個の読取りおよび/または書込み命令を含み、各読取りおよび/または書込み命令がそれぞれのメモリブロックにマッピングされた複数の異なるメモリアクセスタグからの1つのメモリアクセスタグに固有である、取得することと、
前記実行可能コードから、第1のメモリアクセスタグに関連付けられる第1の読取りおよび/または書込み命令を取得することと、
前記第1の読取りおよび/または書込み命令が異なるメモリアクセスタグに関連付けられるメモリブロックにアクセスしようとする場合、前記第1の読取りおよび/または書込み命令の実行を禁止することと
を行わせる1つまたは複数の命令を有する、非一時的機械可読記憶媒体。
【請求項３４】
処理回路によって実行されると、前記処理回路に、
メモリデバイスにおいて、複数のメモリブロックごとにメモリアクセスタグを定義するマッピングを維持することを行わせる1つまたは複数の命令をさらに有する、請求項33に記載の非一時的機械可読記憶媒体。
【請求項３５】
処理回路によって実行されると、前記処理回路に、
前記第1の読取りおよび/または書込み命令が前記第1のメモリアクセスタグに関連付けられることを確認することを行わせる1つまたは複数の命令をさらに有する、請求項33に記載の非一時的機械可読記憶媒体。
【国際調査報告】
2018514860.tif 000010
2018514860.tif 000011