IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許7495193ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強
<>
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図1
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図2
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図3
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図4
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図5
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図6
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図7
  • 特許-ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-27
(45)【発行日】2024-06-04
(54)【発明の名称】ページ・フレーム・タグを使用するメモリ・セーフ・プログラミングの増強
(51)【国際特許分類】
   G06F 21/54 20130101AFI20240528BHJP
【FI】
G06F21/54
【請求項の数】 20
(21)【出願番号】P 2022522958
(86)(22)【出願日】2020-10-16
(65)【公表番号】
(43)【公表日】2023-01-18
(86)【国際出願番号】 IB2020059767
(87)【国際公開番号】W WO2021090096
(87)【国際公開日】2021-05-14
【審査請求日】2023-03-24
(31)【優先権主張番号】16/678,904
(32)【優先日】2019-11-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】カンディード・デ・リマ・ジュニア、ジュセリーノ
(72)【発明者】
【氏名】セオ、カルロス・エデュラルド
【審査官】上島 拓也
(56)【参考文献】
【文献】国際公開第2019/180402(WO,A1)
【文献】特表2015-503815(JP,A)
【文献】特開2006-185233(JP,A)
【文献】米国特許出願公開第2019/0095612(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/54
(57)【特許請求の範囲】
【請求項1】
アプリケーションの実行の間に発生するリターン・オリエンテッド・プログラミング(ROP)攻撃を軽減するためのコンピュータ実装方法であって、前記コンピュータ実装方法は、
実行可能なアプリケーションへとコンパイルするためのソース・コードを受領すること、
前記ソース・コードのコンパイルの間に前記ソース・コードの中の1つ又はそれ以上の関数が、ROP攻撃内のガドゲッツに関連することを判断すること、
前記ソース・コードのコンパイルの間に前記実行可能なアプリケーションのためのメモリの保護された1つ又はそれ以上のページに前記1つ又はそれ以上の関数のそれぞれを指定すること、及び
前記ソース・コードのコンパイルの間に前記1つ又はそれ以上の関数のそれぞれにタグを指定することを含み、それぞれの関数についての前記タグが、前記関数が指定されたメモリの保護された前記ページをマップする、
コンピュータ実装方法。
【請求項2】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、前記ソース・コードの開発者から前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数のリストを受領することを含む
請求項1に記載のコンピュータ実装方法。
【請求項3】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、
前記ROP攻撃においてガドゲッツとして使用されることができる関数の1つ又はそれ以上のタイプを、前記ソース・コードの開発者から受領した前記ソース・コードに関連する情報を評価することに基づいて判断すること、及び
前記1つ又はそれ以上の関数のそれぞれが、前記ROP攻撃におけるガドゲッツとして使用される可能性のある関数と判断されたタイプの1つであることを判断することを含む
請求項1に記載のコンピュータ実装方法。
【請求項4】
さらに、前記実行可能なアプリケーションの実行の間に、
前記実行可能なアプリケーションの第1の関数の戻りが、前記実行可能なアプリケーションのためのメモリ内で第2の関数を呼び出すことを判断すること、及び
前記関数の戻りが、前記第2の関数に関連する前記タグを含まないと判断されると、前記実行可能なアプリケーションの実行を停止させること
を含む
請求項1に記載のコンピュータ実装方法。
【請求項5】
前記タグを前記1つ又はそれ以上の関数のそれぞれに指定することは、前記関数のプロローグ及び前記関数のエピローグの少なくとも1つを、前記タグへの参照を含むように修正すること
を含む
請求項1に記載のコンピュータ実装方法。
【請求項6】
前記1つ又はそれ以上の関数をメモリの前記1つ又はそれ以上の保護されたページに指定することは、それぞれの関数をメモリの異なる保護されたページに指定すること
を含む
請求項1に記載のコンピュータ実装方法。
【請求項7】
前記1つ又はそれ以上の関数をメモリの前記1つ又はそれ以上の保護されたページに指定することは、前記ソース・コード内の複数の関数をメモリの同一の保護されたページに指定すること
を含む
請求項1に記載のコンピュータ実装方法。
【請求項8】
システムであって、
少なくとも1つのプロセッサと、
前記プロセッサにより実行された場合に、アプリケーションの実行の間に発生するリターン・オリエンテッド・プログラミング(ROP)攻撃を軽減するための操作を実行する1つ又はそれ以上のアプリケーションを格納したメモリであって、前記操作は、
実行可能なアプリケーションへとコンパイルするためのソース・コードを受領すること、
前記ソース・コードのコンパイルの間に前記ソース・コードの中の1つ又はそれ以上の関数が、ROP攻撃内のガドゲッツに関連することを判断すること、
前記ソース・コードのコンパイルの間に前記実行可能なアプリケーションのためのメモリの保護された1つ又はそれ以上のページに前記1つ又はそれ以上の関数のそれぞれを指定すること、及び
前記ソース・コードのコンパイルの間に前記1つ又はそれ以上の関数のそれぞれにタグを指定することを含み、それぞれの関数についての前記タグが、前記関数が指定されたメモリの保護された前記ページをマップする、
システム。
【請求項9】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、前記ソース・コードの開発者から前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数のリストを受領することを含む
請求項8に記載のシステム。
【請求項10】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、
前記ROP攻撃においてガドゲッツとして使用されることができる関数の1つ又はそれ以上のタイプを、前記ソース・コードの開発者から受領した前記ソース・コードに関連する情報を評価することに基づいて判断すること、及び
前記1つ又はそれ以上の関数のそれぞれが、前記ROP攻撃におけるガドゲッツとして使用される可能性のある関数と判断されたタイプの1つであることを判断することを含む
請求項8に記載のシステム。
【請求項11】
さらに、前記実行可能なアプリケーションの実行の間に、
前記実行可能なアプリケーションの第1の関数の戻りが、前記実行可能なアプリケーションのためのメモリ内で第2の関数を呼び出すことを判断すること、及び
前記関数の戻りが、前記第2の関数に関連する前記タグを含まないと判断されると、前記実行可能なアプリケーションの実行を停止させること
を含む
請求項8に記載のシステム。
【請求項12】
前記タグを前記1つ又はそれ以上の関数のそれぞれに指定することは、前記関数のプロローグ及び前記関数のエピローグの少なくとも1つを、前記タグへの参照を含むように修正すること
を含む
請求項8に記載のシステム。
【請求項13】
前記1つ又はそれ以上の関数をメモリの前記1つ又はそれ以上の保護されたページに指定することは、それぞれの関数をメモリの異なる保護されたページに指定すること
を含む
請求項8に記載のシステム。
【請求項14】
前記1つ又はそれ以上の関数をメモリの前記1つ又はそれ以上の保護されたページに指定することは、前記ソース・コード内の複数の関数をメモリの同一の保護されたページに指定すること
を含む
請求項8に記載のシステム。
【請求項15】
リターン・オリエンテッド・プログラミング(ROP)を軽減するためのコンピュータ・プログラムであって、コンピュータが、
実行可能なアプリケーションへとコンパイルするためのソース・コードを受領すること、
前記ソース・コードのコンパイルの間に前記ソース・コードの中の1つ又はそれ以上の関数が、ROP攻撃内のガドゲッツに関連することを判断すること、
前記ソース・コードのコンパイルの間に前記実行可能なアプリケーションのためのメモリの保護された1つ又はそれ以上のページに前記1つ又はそれ以上の関数のそれぞれを指定すること、及び
前記ソース・コードのコンパイルの間に前記1つ又はそれ以上の関数のそれぞれにタグを指定することであって、それぞれの関数についての前記タグが、前記関数が指定されたメモリの保護された前記ページをマップすること
を含む
操作を実行するための、コンピュータ・プログラム。
【請求項16】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、前記ソース・コードの開発者から前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数のリストを受領することを含む
請求項15に記載のコンピュータ・プログラム。
【請求項17】
前記ソース・コードの中で、前記ROP攻撃におけるガドゲッツに関連する前記1つ又はそれ以上の関数を判断することは、
前記ROP攻撃においてガドゲッツとして使用されることができる関数の1つ又はそれ以上のタイプを、前記ソース・コードの開発者から受領した前記ソース・コードに関連する情報を評価することに基づいて判断すること、及び
前記1つ又はそれ以上の関数のそれぞれが、前記ROP攻撃におけるガドゲッツとして使用される可能性のある関数と判断されたタイプの1つであることを判断することを含む
請求項15に記載のコンピュータ・プログラム。
【請求項18】
さらに、前記実行可能なアプリケーションの実行の間に、
前記実行可能なアプリケーションの第1の関数の戻りが、前記実行可能なアプリケーションのためのメモリ内で第2の関数を呼び出すことを判断すること、及び
前記関数の戻りが、前記第2の関数に関連する前記タグを含まないと判断されると、前記実行可能なアプリケーションの実行を停止させること
を含む
請求項15に記載のコンピュータ・プログラム。
【請求項19】
前記タグを前記1つ又はそれ以上の関数のそれぞれに指定することは、前記関数のプロローグ及び前記関数のエピローグの少なくとも1つを、前記タグへの参照を含むように修正すること
を含む
請求項15に記載のコンピュータ・プログラム。
【請求項20】
前記1つ又はそれ以上の関数をメモリの前記1つ又はそれ以上の保護されたページに指定することは、それぞれの関数をメモリの異なる保護されたページに指定すること
を含む
請求項15に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ・セキュリティに関し、より具体的には、リターン・オリエンテッド・プログラミング(return oriented programming、ROP)攻撃を軽減するためのページ・フレーム・タグを使用するための技術に関する。
【背景技術】
【0002】
ソフトウェア・プログラム(又はアプリケーション)は、いくつかの場合において種々の種類の利用に攻撃されやすい。これらの利用は、例えば、プログラムへと悪意のあるコードの挿入及び実行を許容し、プログラムが、通常ではシステム管理者に対して限定されている動作を実行することを許容し、データの漏洩などの特権の段階的な拡張を許容する可能性がある。これらの利用のいくつかは、権限のないユーザがコンピュータ・システム上のデータへとアクセスすることを許容すると共に、密かにそのデータを抽出することを許容する可能性がある。
【0003】
1つの共通の利用は、呼び出しスタックを修正することによりプログラムの実行フローを攻撃することを含む。呼び出しスタックは、例えば、アプリケーションの実行全体を通して使用され、かつ維持される本質的なデータ構造である。実行フロー(プログラムの)は、コールされた関数の戻りアドレスをスタックに対して提供することにより制御することができる。悪意のある活動者は、したがって、呼び出しスタックを操作して、任意のコードを動作するようなプログラムの実行をリダイレクトすることができる。ROPの利用は、呼び出しスタックの修正を含む利用に普通に使用される1つの実施例である。ROP利用においては、悪意のある活動者は、典型的には、既存コードの多数の断片(一般に“ガドゲッツ(gadgets)”として参照される。)を、シェル・コードを動作させるために使用する。例えば、悪意のある活動者は、スタック上で戻りアドレスの値を、ガドゲットのそれに置き換えることによって、ガドケットを実行させる。互いにチェーン化された場合、これらの活動は、悪意のある活動者がプログラムの実行フローを損傷させる任意の操作の実行を可能とする。
【0004】
ROP技術を保護するために使用される従来の技術は、一般に、アドレス空間のレイアウト実装をランダム化するか、又は制御フロー一体化システムを含む。アドレス空間のレイアウトのランダム化は、例えば、メモリ内で攻撃者が利用された関数へと確実に分岐することを阻止するために、プロセスのデータ領域のアドレス空間位置をランダムに配列することを含む。制御フロー一体化システムは、典型的には、制御フローそれ自体が利用されることを阻止することを含む技術を利用する。これらの従来の技術は、しかしながら、大きなランタイム・オーバーヘッド、ハイパバイザの支援を制限することなどを伴う。追加的に、これらの技術を実装することは、膨大な量の労力集中的なコード・リファクタリングを含む。
【発明の概要】
【0005】
本明細書に示される1つの実施形態は、アプリケーションの実行の間に発生するリターン・オリエンテッド・プログラミング(ROP)攻撃を軽減するための方法を記載する。本方法は、概ね、実行可能なアプリケーションへとコンパイルするためのソース・コードを受領することを含む。本方法は、ソース・コードのコンパイルの間にソース・コードの中の1つ又はそれ以上の関数が、ROP攻撃内のガドゲッツに関連することを判断することを含む。本方法は、ソース・コードのコンパイルの間に実行可能なアプリケーションのためのメモリの保護された1つ又はそれ以上のページに1つ又はそれ以上の関数のそれぞれを指定することを含む。本方法は、ソース・コードのコンパイルの間に1つ又はそれ以上の関数のそれぞれにタグを指定することを含む。それぞれの関数についてのタグは、関数が指定されたメモリの保護されたページをマップする。
【0006】
他の実施形態は、限定ではなく、プロセッサ、メモリ、及び1つ又はそれ以上の開示された方法を実装するように構成されたアプリケーション・プログラムを有するコンピューティング・システムに加えて、プロセッシング・ユニットが開示された方法の1つ又はそれ以上の側面を実装することを可能とするコンピュータ可読なプログラム・コードを有するストレージ媒体を含むコンピュータ・プログラム製品を含む。
【0007】
本発明の実施形態を、実施例のみの目的により図面を参照してここに説明する:
【図面の簡単な説明】
【0008】
図1図1は、1つの本実施形態による、保護コンポーネントを搭載した実施例のコンピューティング・システムを示す。
図2図2は、1つの実施形態による、コンピューティング・システム内のメモリ保護のキー・メカニズムの実施例の実装を示す。
図3図3は、1つの実施形態による、リターン・オリエンテッド・プログラミング攻撃の実施例を示す。
図4図4は、1つの実施例による、リターン・オリエンテッド・プログラミング攻撃を軽減するための方法のフローチャートを示す。
図5図5は、1つの実施形態による、ページ・フレームを保護するために配置された関数の実施例を示す。
図6図6は、1つの実施形態による、アプリケーションへのROP攻撃を軽減することの実施例を示す。
図7図7は、1つの実施形態による、アプリケーションを実行するための方法のフローチャートを示す。
図8図8は、1つの実施形態による、アプリケーションへのROP攻撃を軽減するために構成された実施例のコンピューティング・システムを示す。
【発明を実施するための形態】
【0009】
理解を容易にすることのため、図面に共通する同一の要素を指定するために、可能である場合には、図面に共通する同一の要素を指定する同一の参照符号を使用した。1つの実施形態の要素及び特徴は、さらなる参照なく、他の実施形態において有利に含ませることができる。
【0010】
本明細書に記載する実施形態は、ソフトウェア・アプリケーションに対するリターン・オリエンテッド・プログラミング(ROP)攻撃を軽減するために、コンピューティング・システムのハードウェア内でサポートされるページ・フレーム・メカニズムを使用する方法、プロセッシング・システム及びコンピュータ可読な媒体を提供する。
【0011】
例えば、いくつかのコンピューティング・システムは、メモリ・キー保護特徴をサポートすることができ、これは、アクセス制御目的のために保護キーをメモリ・ページに割り当てることを可能とする。この特徴を可能とすることで、それぞれのページ・テーブル・エントリ内のビットのセット(例えば4ビット)が如何なる所与のページついてもキー値のセット(例えば16)のうちの1つを割り当てるために使用することができる。これらのキー値は、ページ基準の保護を増強するために使用することができる。例えば、本特徴をサポートするコンピューティング・システムは、それぞれのキー値について2ビットのレジスタを使用して、所与のページに対する書き込み及び読み出しの試行を制御する。所与のキー・ブロックに対して“書き込みディセーブル”ビットを設定することは、そのキー値を有するページへの書き込みの試行を阻止する。同様に、所与のキー・ブロックに“アクセス・ディセーブル”ビットを設定することは、そのキー値を有するページを読み出しする試行を阻止する。
【0012】
本明細書において記載する実施形態は、ROP攻撃を軽減するためにコンピューティング・システム内で、メモリ保護キー特徴(典型的には、ページ・ベースの保護を増強するために使用される。)を支配下に置くことができる。より具体的には、実施形態は、保護されたページ・フレーム内におけるそれぞれの関数にタグを割り当てるメモリ保護キー特徴を使用することができるので、プログラムは、特定の順序で実行し、活動する。より詳細に以下に説明される1つの実施形態においては、ソース・コードのコンパイル時間の間に、コンパイラは、ROP攻撃に関連するソース・コード内の関数(例えば、ROP攻撃内のガッドレッツとして使用されやすい、高リスクの関数のセットを識別することができ、保護されたページ・フレーム(例えば、メモリ保護キーで保護された)内の関数の識別されたセットを割り当てることができ、かつそれぞれの関数にタグを割り当てることができる。本方法において保護されたページ・フレームに高リスク関数を割り当てることによって、実施形態は、プログラムの実行を修正する試みである利用を軽減することができる。例えば、本明細書で提示された本技術を使用して保護されたプログラムは、呼び出されたマークされた関数が不正なタグを有している場合には実行されないので、実施形態は、悪意ある活動者は、ROP攻撃を構築するガドゲッツを支配下に置くことを防止することができる。
【0013】
図1は、1つの実施形態による保護コンポーネント110が構成された実施例のコンピューティング・システム100を示す。コンピューティング・システム100は、1つ又はそれ以上のアプリケーション102と、コンパイラ104と、オペレーティング・システム106と、ハードウェア108とを含む。コンピューティング・システム100は、例えば、デスクトップ・コンピュータ、ラップトップ・コンピュータ、モバイル・デバイス、タブレット・コンピュータなどを含む種々のコンピューティング・デバイスを表す。ハードウェア108は、プロセッサ(複数でもよい)120及びメモリ122を含む。プロセッサ(複数でもよい)120は、1つ又はそれ以上のプロセッサ(例えば、マイクロプロセッサ、中央処理ユニット(CPUs)など)、又はマルチ・コアプロセッサを表すことができる。プロセッサ120(複数でもよい)は、種々のレジスタ、バッファ、メモリ、及び集積回路により形成された他のユニットを含むことができ、かつ縮小命令セット・コンピューティング(“RISC”)技術に従って操作することができる。メモリ122は、例えば、揮発性、又は不揮発性の媒体、取り外し可能、又は取り外し不可能な媒体など、又はこれらの組み合わせを含む種々のコンピュータ可読な媒体を含むことができる。メモリ122は、1つ又はそれ以上のキャッシュ、ランダム・アクセス・メモリ、リード・オンリー・メモリなどを含むことができる。追加的に、メモリ122は、コンピューティング・システム100内に物理的に配置することができるメモリ、又はコンピューティング・システム100に結合されるもう1つのコンピューティング・デバイス上に含まれてもよい。
【0014】
コンピューティング・システム100は、オペレーティング・システム106の制御の下で操作し、これは、アプリケーション102の動作の責任を持つと共に、アプリケーション102がハードウェア108にアクセスすることを管理する。オペレーティング・システム106は、一般に如何なるオペレーティング・システムでも表し、Microsoft(登録商標)Windows(登録商標)及びUnix(登録商標)配布物などを含むものを例示する。図示されるように、オペレーティング・システム106は、オペレーティング・システム106のカーネル114内に配置された、システム呼び出しインタフェース116及びページ・フレーム・アロケータ118を含む。アプリケーション102(複数でもよい)は、システム呼び出しインタフェース116を介してオペレーティング・システム106からのサービス(例えば、システム呼び出しを行う)を要求することができる。サービスのための要求は、1つ又はそれ以上のプロセッサに対するリクエスト、新たなプロセスの生成及び実行のためのリクエスト、種々のハードウェア・デバイスに対するアクセスのためのリクエスト(例えば、一定の周辺デバイスなど)、通信サービスに対するリクエスト、その他を含むことができる。アプリケーション102は、メモリ122内に格納された命令のセットとして実装することができ、プロセッサ120(複数でもよい)は、命令を実行して特定のタスク、又はタスクのサービスを実行するように構成することができる。ページ・フレーム・アロケータ118は、それらの必要に応じて、アプリケーション・プロセスへとメモリ割り当て、又は割り当て解除、又はそれらの両方を行う。1つの実施形態では、ページ・フレーム・アロケータ118は、アプリケーション・プロセスへと割り当てることができる実メモリの空きページのリストを保持することができる。
【0015】
本明細書における実施形態においては、コンピューティング・システム100は、メモリ保護キー機構をサポートしており、これは、1つ又はそれ以上の保護キー(pkeys)124がアクセス制御目的のためにメモリ・ページ(例えば、ページ・フレーム・アロケータ118により割り当てられる。)に割り当てられることを許容する。この機構を使用して、所与のアプリケーション(又はプロセス)102は、そのメモリを多数の領域に構成することが可能となり、かつそれらの領域の何れに対してもアクセスを選択的にディセーブル、又はイネーブルすることが可能となる。例えば、保護キー124は、一般にはアプリケーションのアドレス空間内のそれぞれのページについてのページ・テーブル・エントリ内に格納することができる多ビット値(例えば、4ビット)である。したがって、保護キー124が、4ビット値であると仮定すると、ページは、16のキー値の内の1つに指定されることができる。これらのキーのそれぞれについて、アプリケーション102は、プロセッサ120(複数でもよい)が、キーによって保護されたそれぞれのメモリ・ページに対する書き込み操作又は読み出し操作を拒否するように構成することができる。1つの実施形態においては、アプリケーション102は、システム呼び出し“pkey_alloc()”で、システム呼び出しインタフェース119を介して保護キー124を取得することができ、これは、どのキーが割り当てられたのかを示す整数インデックスを返す。アプリケーション102は、システム呼び出し“pkey_mprotect()”で、システム呼び出しインタフェース116を介して所与のページにキーを割り当てることができる。アプリケーション102は、システム呼び出し“pkey_free()”を使用して、保護キーを割り当て、又は開放することができると共に、以後の割り当てのために利用可能にすることができる。
【0016】
図2は、1つの実施形態によるメモリ保護キー機構の実装の1つの実施例を示す。ここで、ページ・フレーム・アロケータ118は、ページ・テーブル202及びユーザ・ページ(PKRU)レジスタ204に対する保護キーの権限を含む。ページ・テーブル202は、1つ又はそれ以上のページ・テーブル・エントリ206を含み、それらのそれぞれに保護キー124を指定することができる。PKRUレジスタ204は、それぞれの保護キー124について、2つの別々のビット(例えば、アクセスディセーブル・ビット及び書き込みディセーブル・ビット)を含む制御レジスタである。この実施形態では、PKRUレジスタ204は、第1の保護キー124A(“foo”)及び第2の保護キー124B(“bar”)についての2つの別々のビットを含む。
【0017】
PKRUレジスタ204は、それぞれの保護キー124について、その保護キー124に関連するメモリ・ページ(ページ・テーブル・エントリ206の)がアクセス(例えば読み出し、又は書き込み)されることができるか否かを判断することができる。この特定の実施形態において、ページ・テーブル・エントリ206は、保護キー124のための保護キー・フィールド208を含み、これは、ユーザ・レベルのページ(例えば、U/S=1)に適用される。保護フィールド208内の保護キー124は、PKRU204に対するインデックスとして使用される。メモリ・ページへのアクセス・パーミッションは、その後、レガシー・ページ・パーミッション(ページ・テーブル・エントリ206から)及び保護キー124(ページ・テーブル・エントリ206に関連する)についてのPKRUパーミッションに基づいて判断される。もしも、例えば、PKRUパーミッションが所与のメモリ・ページへのアクセスを拒否する場合、アプリケーション102は、そのメモリ・ページへのアクセスを拒否することができる。同様に、カーネル114からそのメモリ・ページへのダイレクト・メモリ・アクセスをまた、拒否することができる。
【0018】
図1に戻ると、コンパイラ104は、一般に、実行可能なプログラム(例えば、アプリケーション102)を生成するために、高レベルのプログラミング言語(例えばC、C++など)から低レベル言語(例えば、アセンブラ、オブジェクト・コード、マシン・コードなど)へとソース・コードを翻訳することができる。図1は、コンピューティング・システム100内のコンパイラ104を図示しているが、他の実施形態では、コンパイラ104は、もう1つのコンピューティング・システム内に配置することができることについて留意されたい。いくつかの実施形態では、コンパイラ104は、クラウド・コンピューティング環境(不図示)にホストされたコンピューティング・システムに配置することができる。1つの実施例では、アプリケーション102は、メモリ122内に格納された、それ自身がプログラムへとコードされた、又はライブラリの部分(例えば、Cライブラリ(libc)としての関数を使用することができる。関数は、アプリケーション102(又はプログラム)内に定義することができるか、又は多数のアプリケーションにより使用することができるライブラリ内に別々に定義することができる。関数は、しばしば、アプリケーション102の実行の間に、開始され、又は他の関数からのものを含むいくつかの場所から呼び出しされ、かつその後、タスクが終了するやいなや、分岐戻り、又は呼び出し後の次の命令に戻ることができるようにコードされる。関数は、また、手順、サブルーチン、ルーチン、方法、サブプログラムなどとして参照することができる。
【0019】
プロセッサ120は、関数呼び出し及び返しを実装するために、呼び出しスタックを使用することができる。例えば、それぞれの関数呼び出しは、スタックの一端で、新たなエントリを生成するか、又はスタック・フレームを生成する。関数が返されると、スタック・フレームは、スタックから削除され、かつその空間が他の関数呼び出しのために使用可能となる。それぞれのスタック・フレームは、対応する呼び出し及び返りアドレス(例えば、呼び出し後の命令のアドレス)のプライベート・データ(例えば、パラメータ及び内部変数)を含むことができる。呼び出しスタックは、それぞれのアクティブな関数がその実行を終了した時点で制御を返すべきポイントの追跡を維持するために使用される。アクティブな関数とは、例えば、呼び出しされたが、未だ実行が完了しておらず、その後に、その制御が呼び出しのポイントに渡されるか、又は関数を呼び出しすることになるべきものである。
【0020】
関数は、また、関数の本体をブラケットすると共にスタックを取扱うために使用することができる関数プロローグ及び関数エピローグを含むことができる。例えば、関数プローグは、関数の開始に出現し、かつスタック及び関数内で使用するためのレジスタを準備する。同様に、関数エピローグは、関数の終点に出現し、かつスタック及びレジスタを、関数が呼び出される前のそれらの状態に復元する。関数エピローグは、典型的には、関数のイクジット・ポイント又はx86アセンブラ言語における“ret”といった戻り命令を含むことができる。
【0021】
上記のように、悪意ある活動者は、しばしばROP攻撃において多数のガドゲッツを使用して、呼び出しスタックを操作し、かつプログラム実行を変更する。本明細書で使用されるように、ガドゲットは、リターン・オリエンテッド・プログラムのための操作を提供する命令のシーケンスを参照する。それぞれのガドゲットは、戻り命令で終了することができる(例えば、x86のRET命令)。実施例として、“move eax. 10: ret”は、eaxを10(10進法)にセットするガドゲットである。ガドゲッツは、典型的には、アプリケーション102のメモリ内(例えばアドレス空間)に見出すことができる命令のシーケンスである。そのようなガドゲッツの1つの実施例のソースは、アプリケーション102がアクセス可能なlibcといったライブラリである。悪意のある活動者は、しばしばオペレーティング・システムのプログラム、又はライブラリのバイナリ・コードを分析することからガドゲッツとして使用することができる命令のシーケンスを識別する。一般には、ランタイムで決定することができる戻り命令といったターゲット・アドレスで終了する如何なる命令シーケンスでも、ガドゲットとして使用される可能性がある。頻繁に使用されるガドゲッツの実施例は、1つの場所から他へとデータを格納し、ロードするガドゲッツ(例えば、レジスタからレジスタ、レジスタからメモリ、メモリからレジスタへと、など)、数学的操作を実行するガドゲッツ(例えば、ADD、SUB、MUL、DIV、XOR、回転、シフトなど)などを含む。
【0022】
いくつかの場合においては、悪意のある活動者は、リターン・オリエンテッド・プログラムの形式においてROP攻撃を実行することができる。リターン・オリエンテッド・プログラムは、例えば、実行された場合に悪意のある活動者の意図する挙動を遂行させるような特定の順除で配列された、1つ又はそれ以上のガドゲッツを含むことができる。ガドゲッツを有するペイロードは、利用されたアプリケーション(例えば、アプリケーション102)のメモリ内に配置される可能性があり、かつスタック・ポインタは、第1のガドゲットをポイントするようにリダイレクトされる。1つの実施例においては、これは、スタックのバッファ・オーバーフローで達成することができる。ガドゲット・フレームは、典型的には、オーバーフロー・スタックに配置されるので、第1のガドゲットは、いくつかの関数の保存された命令ポインタを上書きさせる。その関数が戻そうとする場合、リターン・オリエンテッド・プログラムがその代わりに実行される。リターン・オリエンテッド・プログラムにおけるそれぞれのガドゲットは、ガドゲットのシーケンスの最後の命令における戻り命令が実行された場合、スタック・ポインタが実行されるべき次のガドゲットをポイントするように構成される。このようなやり方において、リターン・オリエンテッド・プログラムは、次々とガドゲットを実行することとなり、アプリケーション102の意図する実行フローを修正する。
【0023】
図3は、1つの実施形態によるROP攻撃の1つの参照実施例を示す。この参照実施例においては、アプリケーション102は、302で開始し、304でユーザ入力を待機する(例えば、アプリケーション102は、ユーザ入力を要求する関数を呼び出しすることができる。)。ここで、304でアプリケーション102は、既知の脆弱性を有している可能性がある(例えば、アプリケーションが呼び出しスタック内でバッファ・オーバーフローされやすい。)。306で、悪意のある活動者は、この脆弱性を使用して、任意のデータでスタック350を上書きする。示されるように、この場合、バッファ・オーバーフローは、関心のあるメモリアドレス内の呼び出された関数の戻りアドレス及び後続するスタック領域を上書きする。
【0024】
308で、アプリケーション102の実行が継続し、310で現在の関数に戻る。しかしながら、現在の関数に関連する以前の戻りアドレスにジャンプするのではなく、アプリケーション102は、その代わりに第1のガドゲットのアドレスにジャンプし(ライブラリ360内、これはアプリケーション102のメモリ内である。)、かつ312で、第1のガドゲットに関連する命令を実行する。第1のガドゲットの戻りアドレスが実行される場合、アプリケーション102は、第1のガドゲット(ライブラリ360内)のアドレスにジャンプして、314で、第2のガドゲットに関連する命令を実行する。第2のガドゲットの戻り命令が実行される場合、アプリケーション102は、第3のガドゲット(ライブラリ360内)のアドレスへとジャンプして、第3のガドゲット316に関連する命令を実行する。このプロセスにおいて、それぞれのガドゲットは、戻り関数(例えばret)を介して呼び出され、かつそれぞれのガドゲットは、次のガドゲットをポイントする戻り関数で終了する。悪意のある活動者は、ライブラリ360内のガドゲッツの引数を、スタック350を介して渡すことができる。
【0025】
このプロセスは、このようなやり方で悪意のある活動者がそれらの目的を達成するまで継続することができる。例えば、悪意のある活動者は、このROP攻撃を使用して、悪意のある活動者が利用することができるドアを開かせる(例えば、Unix上のルート・シェルを開かせる。)ため、関数実行の任意な命令を課すことができる。さらに、図3に図示したROP攻撃は、新たなコードを追加すること無しに実装することができる。すなわち、ROP攻撃は、メモリ内のライブラリ(例えば、libcといったライブラリ360)からの関数を再利用し、かつスタック350上の関数に任意のパラメータを渡す。
【0026】
本明細書で記載する実施形態は、コンピューティング・システム100によりサポートされる、メモリ保護キー機構を支配下に置くことによって(例えば、図2に図示した)、図3に示したROP攻撃といったROP攻撃を軽減することができる技術を提供する。図1を再度参照すると、コンパイラ104は、保護コンポーネント110を含み、これは、ROP攻撃を軽減するための本明細書で説明した1つ又はそれ以上の技術を実装するように構成される。図1は、コンピューティング・システム100の1つの可能な配置を例示し、コンピューティング・システムの他の配置は、本明細書で説明した技術を実装するために使用することができる。例えば、1つの実施形態では、コンパイラ104は、もう1つのコンピューティング・システム上に配置されることができ、かつコンピューティング・システム100による実行のため、本明細書に記載した技術を使用することができる。
【0027】
1つの実施形態では、保護コンポーネント110は、アプリケーション102のCPU命令を、例えばコンピューティング・システム100上で実行された場合に、ROP攻撃に対してアプリケーション102を保護するため、コンパイル時間中に1つ又はそれ以上の保護キー124で保護する。例えば、アプリケーション102のソース・コードをコンパイルする際に、保護コンポーネント110は、ガドゲッツとして使用されやすい“ハイ・リスク”関数を、1つ又はそれ以上の保護キー124で保護されるメモリ122内のページ・フレームに割り当てることができる。1つの実施形態では、保護コンポーネント110は、開発者(例えば、アプリケーション102の開発者)から受領した事前構成されたリストに基づいて関数が“ハイ・リスク”であることを判断することができる。
【0028】
ソース・コードをコンパイルしながら、保護コンポーネント110は、また、所与の保護キー124によって保護される“ハイ・リスク”関数のそれぞれに対して保護タグ112を割り当てることができる。それぞれの保護タグ112は、保護キー124によって保護される特定のページ・フレームに関連する。以下により詳細に説明する1つの実施形態においては、保護コンポーネント110は、保護タグ112を使用して、アプリケーション102のソース・コード内の関数の適正な実行順を定義することができるので、アプリケーション102の関数は、関数が配置されたページ・フレームが適切なタグ順を有する場合にのみ実行する。
【0029】
図4は、1つの実施形態による、ROP攻撃を軽減するための方法のフローチャートである。方法400は、コンパイラ(例えばコンパイラ104)によって実行することができる。1つの実施形態では、方法400は、アプリケーション102のコンパイル時間の間(例えば、ランタイム又は実行の前)に実行することができる。
【0030】
方法400は、ブロック402でエンターし、そこでは、コンパイラがビルド・フェーズを開始する。ブロック404でコンパイラは、ソース・コード内の1つ又はそれ以上の関数のタイプを識別する。ブロック406で、コンパイラは、ソース・コード内のどのタイプの関数がガドゲッツとして使用されやすい“ハイ・リスク”関数であるかを判断する。“ハイ・リスク”関数の実施例は、バッファ・オーバーフロー攻撃されやすい関数を含むことができる(例えば、copy関数、move関数など)。1つの実施形態では、コンパイラは、開発者から受領したそのような関数の事前決定されたリストに基づいて“ハイ・リスク”関数を判断することができる。もう1つの実施形態では、コンパイラは、ソース・コードの開発者から受領したソース・コードに関連する情報(例えば開発者のガイドラインのセット)を分析、又は評価して、“ハイ・リスク”関数を判断することができる。例えば、開発者のガイドラインは、ROP攻撃のガドゲッツとして使用されることから関数を保護するために、どのタイプの関数を異なるページ・フレームに割り当てるべきかを指定することができる。
【0031】
ブロック408では、コンパイラは、“ハイ・リスク”関数のセットのそれぞれを、1つ又はそれ以上の保護キー124で保護される1つ又はそれ以上のページ・フレームへの指定することをトリガする。1つの実施形態においては、コンパイラは、ページ・フレーム・アロケータ(例えば、ページ・フレーム・アロケータ118)に対し、“ハイ・リスク”関数のセットを1つ又はそれ以上の保護キー124で保護される1つ又はそれ以上のページ・フレームに割り当てることを指示することにより、指定をトリガすることができる。一度指定されると、コンパイラは、保護タグ112を“ハイ・リスク”関数のセットにあるそれぞれの関数に対して指定する(ブロック410)。1つの実施例においては、コンパイラは、システム呼び出しインタフェース116を介したシステム呼び出し(例えばpkey_alloc_flag())を使用して、それぞれの保護タグ112を指定することができる。保護タグ112の所与の関数への指定は、関数プロローグ及びエピローグを、保護タグ112を含ませるように修正する。コンパイラは、ソース・コード内の関数が保護タグ112のセットを介して実行されるべき順序を特定する。一度保護タグ112が指定されると、コンパイラは、ビルド・プロセスを終了することができ(ブロック412)、方法400はイクジットする。
【0032】
図5は、1つの実施形態により保護キーで保護されるページ・フレームへと割り当てられた関数の実施例を示す。この実施形態においては、コンパイラ104は、3つの異なる関数A()、B()、C()を、3つの異なるページ・フレーム502A、502B及び502Cにそれぞれ指定する。それぞれのページ・フレーム502A、502B及び502Cは、それぞれの保護キー124A、124B、及び124Cで保護される。示されるように、コンパイラ104はまた、保護タグ112A、112B、及び112Cを関数A()、B()、C()にそれぞれ指定する。それぞれの保護タグ112は、保護キー124の1つをマップする。コンパイラ104は、保護タグ112のセットを使用して、アプリケーション102のどの関数が実行され、若しくはアプリケーション102の“ハイ・リスク”関数が実行される順序を規定するか、又はそれら両方を制御することができることについて留意されたい。例えば、コンパイラ104は、保護キー124を有する適正な関数の順序を処理するので、関数は、それぞれのページ・フレームが適正なタグ順序を有する場合にのみ、実行することができる。このやり方において、悪意ある活動者が、関数呼び出しの順序を変更しようと試みても、アプリケーション102は、関数呼び出しが正確な保護キーを含まないために停止する。
【0033】
図5は、3つの異なる保護されたページ・フレームに対して割り当てられた3つの関数を図示しているが、他の実施形態においては、“ハイ・リスク”として識別された関数は、異なるやり方で保護されたページ・フレームに割り当てることができることに留意されたい。例えば、いくつかの実施形態においては、多数の関数を同一の保護されたページ・フレームに割り当てることができる。これらの実施例において、これらの関数のそれぞれは、同一の保護キー124に対してマップされる保護タグ112に割り当てられることができる。他の実施形態においては、多数の保護キー124で保護された同一のページ・フレームに指定された多数の関数とすることができる。例えば、これらの実施形態においては、ページ・フレーム内の異なるメモリ範囲(又は領域)を、異なる保護キー124で保護することができ、1つ又はそれ以上の関数を、異なるメモリ領域に指定(又は割り当て)することができる。
【0034】
アプリケーション102に対するROP攻撃の図6に図示された実施例のシナリオを考察する。アプリケーション102は、本明細書で説明したROP軽減技術を使用してコンパイルされたものである。図3のROP攻撃と同様に、このROP攻撃においては、悪意のある活動者は、306でアプリケーション内の脆弱性(例えば、バッファ・オーバーフロー)を利用する(例えば、プログラムは302で開始して、304で入力のため待機して停止する。)。特に、悪意のある活動者は、スタック350上にバッファ・オーバーフローを生じさせ、これが呼び出された関数の戻りアドレスを、メモリ・ページ502内のライブラリ360内のガドゲットのアドレスで上書きする。この実施形態では、しかしながら、不正な戻りアドレスが602でガドゲットを呼び出そうと試みる場合、呼び出された関数がタグ付けされ、かつ関数が正確な保護タグ112(メモリ・ページ502のための保護キー124に関連する保護タグ112)を与えないので、実行が停止される。このやり方で、実施形態は、コンパイラによって完全に実装することができるセキュアな機構を提供すると共に、これはユーザ及び開発者に透過的である。追加的に、実施形態は、最小のオーバーヘッド、かつソース・コードのリファクタリングを要求すること無しに、本明細書で説明された技術を実装することができる(例えば、従来の技術に関連するオーバーヘッドに比較して)。
【0035】
図7は、1つの実施形態による、コンパイラ(例えば、コンパイラ104)によりコンパイルされたアプリケーション(例えば、アプリケーション102)を実行するための方法700のフローチャートである。方法700は、コンピューティング・システム100の1つ又はそれ以上のコンポーネント(例えば、プロセッサ120(複数でもよい))によって実行することができる。
【0036】
方法700は、ブック702でエンターし、そこではコンピューティング・システム100は、1つ又はそれ以上のタグ(例えば、保護タグ112)を、アプリケーションに関連する(第1の)関数のプロローグから識別する。保護タグは、1つ又はそれ以上の保護キー(例えば保護キー124)で保護されたメモリ・ページ内に配置された関数に関連する保護タグであることに留意されたい。ブロック704では、コンピューティング・システム100は、関数の実行を開始する。1つの実施形態においては、例えば、コンピューティング・システム100は、ユーザ入力、又はもう1つの操作を実行するために待機することができる。いくつかの場合、実行の間に、悪意のある活動者は、アプリケーション内の脆弱性を使用して、第1の関数の戻りアドレスを、メモリ内のもう1つの(第2の)関数(又はガドゲット)で上書きするバッファ・オーバーフローを生じさせることができる。ブロック706では、例えば、コンピューティング・システム100は、関数の戻りがメモリ内のもう1つの関数を呼び出すことを判断する。
【0037】
ブロック708では、コンピューティング・システム100は、関数の戻り呼び出しが、他の関数に関連する保護タグ(複数でもよい)を含むか否かを判断する。関数の戻り呼び出しが、関連する保護タグ(複数でもよい)を含まない場合、その後、コンピューティング・システム100は、実行を停止し、他の関数へのアクセスをブロックする(ブロック710)。もし、関数の戻り呼び出しが関連する保護タグ(複数でもよい)を含む場合、その後、コンピューティング・システム100は、他の関数を実行する(ブロック712)。方法700は、その後イクジットする。1つの実施形態では、コンピューティング・システムは、702、704、706、及び708の操作を、操作712の実行部分として反復実行することができる。
【0038】
図8は、1つの実施形態による、デバイスの研修的説明を行うために構成されたコンピューティング・システム800を示す。示されるように、コンピューティング・システム800は、限定するわけではなく、それぞれバス817で接続された中央処理ユニット(CPU)805、ネットワーク・インタフェース815、メモリ820、及びストレージ860を含む。コンピューティング・システム800は、また、I/Oデバイス812(例えば、キーボード、マウス、及びディスプレイ・デバイス)をコンピューティング・システム800へと接続する、I/Oデバイス・インタフェース810を含むことができる。さらに、本開示のコンテキストにおいては、コンピューティング・システム800において示されたコンピューティング要素は、物理的なコンピューティング・システム(例えば、データ・センタ内のシステム)に対応するか、若しくはコンピューティング・クラウド内で実行する仮想コンピューティング・インスタンスとすることができる。
【0039】
CPU805は、メモリ820内に滞在するアプリケーション・データを格納し、かつ検索することに加え、メモリ820内に格納されたプログラミング命令を検索し、かつ実行する。相互接続817は、CPU805、I/Oデバイス810、ストレージ860、ネットワーク・インタフェース815及びメモリ820の間でプログラミング命令及びアプリケーション・データを通信するために使用される。CPU805は、単一のCPU、多数のCPUs、多数の処理コアを有する単一のCPUなどの例示であるべきものを含むことに留意されたい。メモリ820は、一般にランダム・アクセス・メモリの例示であるべきものを含む。ストレージ860は、ディスク・ストレージ・デバイスとすることができる。単一のユニットとして示されているが、ストレージ860は、固定ディスク・ドライブ、取り外し可能なメモリ・カード、又は光学的ストレージ、ネットワークに接続されたストレージ(NAS)、又はストレージ・エリア・ネットワーク(SAN)といった、固定、又は取り外し可能な、又はそれら両方のデバイスの組み合わせとすることができる。ストレージ860は、保護タグ112及び保護キー124を含み、これらは、上記により詳細に説明されたものである。例示的に、メモリ820は、コンパイラ104及びオペレーティング・システム106を含み、これらは、上記により詳細に説明したものである。
【0040】
本発明の種々の実施形態の説明は、例示の目的のために提示されたが、開示された実施形態に尽きるとか、又は限定を意図するものではない。多くの変更例又は変形例は、本開示の範囲及び精神から逸脱することなく、当業者において自明である。本明細書で使用する用語は、本実施形態の原理、実用的用途、又は市場において見出される技術を超える技術的改善を最良に説明するため、又は本明細書において開示された実施形態を当業者の他の者が理解できるようにするために選択したものである。
【0041】
以下のとおり、参照は、本開示において提示された実施形態に対してなされた。しかしながら、本開示の範囲は、特定的に開示された実施形態に限定されることはない。その代り、上述した如何なる特徴及び要素の如何なる組み合わせでも、異なる実施形態に関連するか否か、は、熟慮された実施形態を実装及び実施するために熟考される。さらに、本明細書において開示された実施形態は、他の可能なソリューションを超えるか、又は従来技術を超える効果を達成することができるが、所与の実施形態により特定の効果が達成されるか否かは、本開示の範囲を限定することはない。したがって、上記に開示した本側面、特徴、実施形態及び効果は、単に例示的であり、かつ請求項(複数でもよい)に明示的に列挙されたものを除き、添付する請求項の要素、又は限定と考えることはない。同様に、“本発明”を参照することは、本明細書で開示された如何なる発明性を有する主題が普遍的なものとして解釈されるべきではなく、かつ請求項(複数でもよい)に明示的に列挙されたものを除き、添付する請求項の要素又は限定と考えられるべきではない。
【0042】
本発明の側面は、完全なハードウェアの実施形態、完全なソフトウェアの実施形態(ファームウェア、滞在するソフトウェア、マイクロ・コードなど)、又は本明細書において“回路”、“モジュール”、又は“システム”としてすべて一般に参照することができる、ソフトウェア及びハードウェアの側面を組み合わせた実施形態の形態を取ることができる。
【0043】
本発明は、システム、方法、又はコンピュータ・プログラム製品、又はそれらの組み合わせとすることができる。コンピュータ・プログラム製品は、それ上に、プロセッサに対して本開示の特徴を遂行させるためのコンピュータ可読なプログラム命令を有する、コンピュータ可読な記録媒体(又は複数の媒体)を含む。
【0044】
コンピュータ可読な記録媒体は、命令実行デバイスが使用するための複数の命令を保持し格納することができる有形のデバイスとすることができる。コンピュータ可読な媒体は、例えば、これらに限定されないが、電気的記録デバイス、磁気的記録デバイス、光学的記録デバイス、電気磁気的記録デバイス、半導体記録デバイス、又はこれらの如何なる好ましい組み合わせとすることができる。コンピュータ可読な記録媒体のより具体的な実施例は、次のポータブル・コンピュータ・ディスク、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、消去可能なプログラマブル・リード・オンリー・メモリ(EPROM又はフラッシュ・メモリ(登録商標))、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・イオンリー・メモリ(CD-ROM)、デジタル多目的ディスク(DVD)、メモリ・スティック、フロッピー・ディスク(登録商標)、パンチ・カード又は命令を記録した溝内に突出する構造を有する機械的にエンコードされたデバイス、及びこれらの好ましい如何なる組合せを含む。本明細書で使用するように、コンピュータ可読な記録媒体は、ラジオ波又は他の自由に伝搬する電磁波、導波路又は他の通信媒体(例えば、光ファイバ・ケーブルを通過する光パルス)といった電磁波、又はワイヤを通して通信される電気信号といったそれ自体が一時的な信号として解釈されることはない。
【0045】
本明細書において説明されるコンピュータ・プログラム命令は、コンピュータ可読な記録媒体からそれぞれのコンピューティング/プロセッシング・デバイスにダウンロードでき、又は例えばインターネット、ローカル・エリア・ネットワーク、ワイドエリア・ネットワーク又はワイヤレス・ネットワーク及びそれからの組み合わせといったネットワークを介して外部コンピュータ又は外部記録デバイスにダウンロードすることができる。ネットワークは、銅通信ケーブル、光通信ファイバ、ワイヤレス通信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ及びエッジ・サーバ又はこれらの組み合わせを含むことができる。それぞれのコンピューティング/プロセッシング・デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インタフェースは、ネットワークからコンピュータ可読なプログラム命令を受領し、このコンピュータ可読なプログラム命令を格納するためにそれぞれのコンピューティング/プロセッシング・デバイス内のコンピュータ可読な記録媒体内に転送する。
【0046】
本発明の操作を遂行するためのコンピュータ可読なプログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、マシン依存命令、マイクロ・コード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は1つ又はそれ以上の、Smalltalk(登録商標)、C++などのオブジェクト指向プログラミング言語、“C”プログラミング言語又は類似のプログラム言語といった従来の手続き型プログラミング言語を含むプログラミング言語のいかなる組合せにおいて記述されたソース・コード、又はオブジェクト・コードのいずれかとすることができる。コンピュータ可読なプログラム命令は、全体がユーザ・コンピュータ上で、部分的にユーザ・コンピュータ上でスタンドアローン・ソフトウェア・パッケージとして、部分的にユーザ・コンピュータ上で、かつ部分的にリモート・コンピュータ上で、又は全体がリモート・コンピュータ又はサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)を含むいかなるタイプのネットワークを通してユーザ・コンピュータに接続することができ、又は接続は、外部コンピュータ(例えばインターネット・サービス・プロバイダを通じて)へと行うことができる。いくつかの実施形態では、例えばプログラマブル論理回路、フィールド・プログラマブル・ゲートアレイ(FPGA)、又はプログラマブル論理アレイ(PLA)を含む電気回路がコンピュータ可読なプログラム命令を、コンピュータ可読なプログラム命令の状態情報を使用して、本発明の特徴を実行するために電気回路をパーソナライズして実行することができる。
【0047】
本明細書で説明した本発明の側面を、本発明の実施形態にしたがい、フローチャート命令及び方法のブロック図、又はそれらの両方、装置(システム)、及びコンピュータ可読な記録媒体及びコンピュータ・プログラム製品を参照して説明した。フローチャートの図示及びブロック図又はそれら両方及びフローチャートの図示におけるブロック及びブロック図、又はそれらの両方のいかなる組合せでもコンピュータ可読なプログラム命令により実装することができることを理解されたい。
【0048】
これらのコンピュータ可読なプログラム命令は、汎用目的のコンピュータ、特定目的のコンピュータ、又は他のプロセッサ又は機械を生成するための他のプログラマブル・データ・プロセッシング装置に提供することができ、コンピュータのプロセッサ又は他のプログラマブル・データ・プロセッシング装置による実行がフローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装するための手段を生成する。コンピュータ、プログラマブル・データ・プロセッシング装置及び他の装置又はこれらの組み合わせが特定の仕方で機能するように指令するこれらのコンピュータ可読なプログラム命令は、またコンピュータ可読な記録媒体に格納することができ、その内に命令を格納したコンピュータ可読な記録媒体は、フローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作の特徴を実装する命令を含む製造品を構成する
【0049】
コンピュータ可読なプログラム命令は、またコンピュータ、他のプログラマブル・データ・プロセッシング装置、又は他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、又は他のデバイス上で操作ステップのシリーズに対してコンピュータ実装プロセスを生じさせることで、コンピュータ、他のプログラマブル装置又は他のデバイス上でフローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装させる。
【0050】
図のフローチャート及びブロック図は、本発明の種々の実施形態にしたがったシステム、方法及びコンピュータ・プログラムのアーキテクチャ、機能、及び可能な実装操作を示す。この観点において、フローチャート又はブロック図は、モジュール、セグメント又は命令の部分を表すことかでき、これらは、特定の論理的機能(又は複数の機能)を実装するための1つ又はそれ以上の実行可能な命令を含む。いくつかの代替的な実装においては、ブロックにおいて記述された機能は、図示した以外で実行することができる。例えば、連続して示された2つのブロックは、含まれる機能に応じて、実際上1つのステップとして遂行され、同時的、実質的に同時的に、部分的又は完全に一時的に重ね合わされた仕方で実行することができ、又は複数のブロックは、時として逆の順番で実行することができる。またブロック図及びフローチャートの図示、又はこれらの両方及びブロック図中のブロック及びフローチャートの図示又はこれらの組み合わせは、特定の機能又は動作を実行するか又は特定の目的のハードウェア及びコンピュータ命令を遂行する特定目的のハードウェアに基づいたシステムにより実装することができることを指摘する。
【0051】
本発明の実施形態は、クラウド・コンピューティング・インフラ基盤を通してエンド・ユーザに提供することができる。クラウド・コンピューティングは、一般にネットワーク越しにサービスとして、スケーラブルなコンピューティング・リソースの提供を参照する。より形式的には、クラウド・コンピューティングは、コンピューティング・リソースと、その底流の技術的アーキテクチャ(例えば、サーバ、ストレージ、ネットワーク)との間の抽象化を提供するコンピューティング能力として定義することができ、最小限の管理労力又はサービス提供者との交流をもって、迅速に提供及び開放構成可能なコンピューティング資源の構成可能な共有プールへとアクセスする、利便性のあるオンデマンドの、ネットワーク・アクセスを可能とする。したがって、クラウド・コンピューティングは、コンピューティング・リソースを提供するために使用される、底流にある物理的システム(又はこれらのシステムのロケーション)について考慮すること無しに、ユーザが“クラウド”内の仮想コンピューティング・リソース(例えば、ストレージ、データ、アプリケーション、及び完全に仮想化されたコンピューティング・システムでさえ)にアクセスすることを許容する。
【0052】
典型的には、クラウド・コンピューティング・リソースは、使用当たりの課金をユーザに対して提供し、そこでは、ユーザは、実際に使用されたコンピューティング・リソースについてのみ課金される(例えば、ユーザが使用したストレージ空間の量、又はユーザにより使用され、インスタンス化された仮想化システムの数)。本発明のコンテキストにおいて、ユーザは、クラウド内のアプリケーション(例えば、コンパイラ104)又は関連するデータにアクセスすることができる。例えば、コンパイラ104は、クラウド内のコンピューティング・システム上で実行し、本明細書で説明したROP軽減技術の1つ又はそれ以上を使用してアプリケーション(例えば、アプリケーション102)のためのソース・コードをコンパイルすることができる。このような場合、コンパイラ104は、アプリケーション内の“ハイ・リスク”関数を識別し、これらの“ハイ・リスク”関数を、1つ又はそれ以上の保護キーで保護されたメモリ・ページへと指定することをトリガし、かつ“ハイ・リスク”関数に保護タグを指定する。アプリケーション102は、その後のコンピューティング・システムによる検索のために格納することができる。例えばコンピューティング・システムは、アプリケーションを実行する際に、その後所与の関数がメモリ内でアクセスできるか否かを、関数が関連する保護タグを含むか否かに基づいて判断することができる。そのようにすることは、ユーザがクラウド(例えばインターネット)に接続されたネットワークに接続された如何なるコンピューティング・システムからでもこの情報にアクセスすることを許容する。
【0053】
上述のものは、本発明の実施形態に向けられるが、本発明の他の、及びさらなる実施形態は、その基本的な範囲から逸脱することなく成し得、かつ本発明の範囲は、以下の請求項により決定される。
図1
図2
図3
図4
図5
図6
図7
図8