JP2019513270A - 時間変動アドレス空間のレイアウトランダム化 - Google Patents

時間変動アドレス空間のレイアウトランダム化 Download PDF

Info

Publication number
JP2019513270A
JP2019513270A JP2018550779A JP2018550779A JP2019513270A JP 2019513270 A JP2019513270 A JP 2019513270A JP 2018550779 A JP2018550779 A JP 2018550779A JP 2018550779 A JP2018550779 A JP 2018550779A JP 2019513270 A JP2019513270 A JP 2019513270A
Authority
JP
Japan
Prior art keywords
system service
versions
version
identifier
perform
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018550779A
Other languages
English (en)
Inventor
ガタラ、スダ・アニル・クマー
カスカバル、ゲオルゲ・カリン
グプタ、ラジャルシ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2019513270A publication Critical patent/JP2019513270A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/188Virtual file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0623Securing storage systems in relation to content
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

実施形態は、時間変動アドレス空間レイアウトランダム化のための装置によってインプリメントされるコンピューティングデバイス、装置、方法を含む。装置は、システムサービスの第1の複数のバージョンを起動し、システムサービスの第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当て得る。装置は、第1のアプリケーションからシステムサービスを実行するための第1の要求を受信し得る。装置は、システムサービスの第1の複数のバージョンからシステムサービスの第1のバージョンをランダムに選択し、システムサービスの第1のバージョンのデータを使用してシステムサービスを実行し得る。【選択図】図4A

Description

[0001]ハッカーは、モバイデバイスを含む、コンピューティングデバイスを攻撃するために様々な戦略を使用する。多くの戦略は、システムサービスにおける既知の脆弱性が分かることによって違法に使われることができるようにアプリケーションのメモリレイアウトを識別するように試みを包含し、ここで、サービスは、メモリ中に位置付けられる。こうした攻撃は、リターン指向プログラミング(ROP:return oriented programming)のような、システムサービスを標的とする「制御ハイジャック攻撃」を具体化し得る。ROP攻撃の目標は、特権増大であり、利益を追及する。このような攻撃はしばしば、攻撃者が脆弱なまたはガジェットコード/データロケーションを見出すために処理アドレス空間を徹底的に探索する総当たり戦術を採用する。力づくな戦術は、攻撃の被害者システムサービスがクラッシュすることを引き起こさせることができる。攻撃の別の形式は、情報漏洩の利点を用いる。こうした技法は、ある情報(例えば、復帰アドレスおよびそれについてのいくつかのライブラリ関数ロケーション)を得るために書式文字列脆弱を違法に使う。脆弱な処理の情報漏洩は、別の処理、特に動的共有されるライブラリを使用する処理に不正アクセスすることができる。攻撃は、1つまたは複数の処理によって使用されるアドレス空間の不正利用可能な脆弱性をより効率的に発見する技法を組み合わせることが出来る。
[0002]アドレス空間レイアウトランダム化(ASLR)は、実行時間でのメモリ中のランダムな選択ロケーション中にプログラムの異なるセクションを記憶することと、プログラム実行を可能にするためにアドレス空間を使用することとによってハッキング攻撃に対抗する保護アプリケーションの周知の技法である。ASLRは、プログラムセクションが特定の固定(例えば、連続的な)ロケーションでロードされる従来のアプリケーションマッピングによってもたらすことができないハッキングに対抗する保護を提供する。ASLRは、攻撃者がアクティブに実行している処理のアドレス空間中の異なるコードロケーションを見出すのを困難にすることを行う。しかしながら、ASLRは、まだ攻撃される可能性が有る。アプリケーションコードがASLRを使用してランダムかされるときでさえ、総当たり攻撃中に攻撃者によって集められた情報は、被害者システムサービスの再初期化に使用されることができ、何故なら、同じアドレス空間が使用されることができる空である。
[0003]様々な実施形態の方法および装置は、システムサービスの第1の複数のバージョンを起動することと、システムサービスの第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることとを含む、コンピューティングデバイス上の時間変動アドレス空間レイアウトランダム化のための装置および方法を提供する。様々な実施形態は、第1のアプリケーションからシステムサービスを実行するために第1の要求を受信することと、システムサービスの第1の複数のバージョンからシステムサービスの第1のバージョンをランダムに選択することと、システムサービスの第1のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
[0004]様々な実施形態は、第1のアプリケーションからシステムサービスを実行するために第2の要求を受信することと、システムサービスの第1の複数のバージョンからシステムサービスの第2のバージョンをランダムに選択することと、システムサービスの第2のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
[0005]いくつかの実施形態は、システムサービスの第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることを含み得る。システムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子は、異なり得る。様々な実施形態は、システムサービスのシステムサービス識別子にシステムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることと、システムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子およびシステムサービス識別子の相関を記憶することとをさらに含み得る。様々な実施形態は、システムサービスの第1の複数のバージョンの各々のランダム仮想アドレス空間レイアウトのうちの対応する1つとシステムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることをさらに含み得る。様々な実施形態は、システムサービスの第1の複数のバージョンの各々のランダム仮想アドレス空間レイアウトのうちの対応する1つとシステムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子を記憶することをさらに含み得る。
[0006]いくつかの実施形態では、システムサービスを実行するための第1の要求は、システムサービス識別子を含み、システムサービス第1の複数のバージョンからシステムサービスの第1のバージョンをランダムに選択することは、システムサービス識別子と相関されたシステムサービスの第1の複数のバージョンからシステムサービス第1のバージョンをランダムに選択することとを含み得る。様々な実施形態は、システムサービスの第1のバージョンの第1のシステムサービスバージョン識別子で第1のアプリケーションを適用することと、第1のアプリケーションから第1のシステムサービスバージョン識別子を有するシステムサービスの第1のバージョンを実行するあtめの要求を受信することとをさらに含み得る。
[0007]いくつかの実施形態は、第1のシステムサービスバージョン識別子と第1のシステムサービスバージョンのランダム仮想アドレス空間レイアウトとの間の相関を使用して第1のシステムサービスバージョンのランダム仮想アドレスを位置付けることをさらに含み得る。こうした実施形態は、システムサービスの第1のバージョンのデータが記憶される物理アドレスに第1のシステムサービスバージョンのランダム仮想アドレスを翻訳することと、システムサービスの第1のバージョンのデータを検索することとをさらに含み得る。
[0008]いくつかの実施形態は、システムサービスの第1の複数のバージョンの各々に処理識別子を割り当てることをさらに含み得る。こうした実施形態では、システムサービスの第1の複数のバージョンの各々のための処理識別子は、同じであり得る。こうした実施形態では、システムサービスの第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、システムサービスの第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、およびシステムサービスのシステムサービス識別子にシステムサービスの第1の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることは、処理識別子を割り当てたシステムサービスの第1の複数のバージョンの各々のために生じ得る。
[0009]いくつかの実施形態は、システムサービスの第1のバージョンの実行の動的に生成されたコードのためにコードバッファ空間を割り振るための要求を受信することと、コードバッファアドレスをランダムに選択することと、コードバッファアドレスに関連付けられたコードバッファ空間が動的に生成されたコードを記憶するために十分に大きく利用可能かどうかを決定することとをさらに含み得る。このような実施形態は、コードバッファ空間が動的に生成されたコードを記憶するために十分に大きいと決定することに応答してコードバッファアドレスで動的に生成されたコードを記憶得することをさらに含み得る。
[0010]いくつかの実施形態は、第2のアプリケーションからシステムサービスを実行するために第2の要求を受信することと、第2のアプリケーションからシステムサービスをじっくするための第2の要求が第2のアプリケーションからシステムサービスを実行するための第2の要求市捨て得サービス上の攻撃であると検出することと、システムサービスの第2の複数のバージョンからを起動することとをさらに含み得る。このような実施形態は、システムサービスの第2の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることをさらに含み得る。システムサービスの第1の複数のバージョンの各々のランダム仮想アドレス空間レイアウトおよびシステムサービスの第2の複数のバージョンの各々のランダム仮想アドレス空間レイアウトは、異なり得る。このような実施形態は、システムサービスの第1のアプリケーションからシステムサービスの第2のバージョンおよびシステムサービスの第2の複数のバージョンをランダムに選択することと、システムサービスの第2のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
[0011]いくつかの実施形態では、システムサービスの第1の複数のバージョンを起動することは、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの1つ上でシステムサービスの第1の複数のバージョンのシステムサービスの複数のバージョンの各々を起動することを含み得る。こうした実施形態では、システムサービスの第1の複数のバージョンのからシステムサービスの第1のバージョンをランダムに選択することは、システムサービスの第1のバージョンが起動された複数の異種のプロセッサコアのうちの第1の異種のプロセッサコアをランダムに選択することを含み得る。こうした実施形態では、システムサービスの第1のバージョンのデータを使用するシステムサービスは、第1の異種のプロセッサコアによってシステムサービスを実行することを含み得る。こうした実施形態は、第1のアプリケーションから第1の異種のプロセッサコアにシステムサービスを実行するための第1の要求を転送することと、第1の異種のプロセッサコアによってシステムサービスの実行の出力を受信することと、第1のアプリケーションに出力を返すこととをさらに含み得る。
[0012]様々な実施形態は、ラウンチャ(launcher)と、ラウンチャにを有するコンピューティングデバイスに通信のために結合されるマッパと、ラウンチャに通信のために結合される要求調整器と、要求調整器に通信のために結合されるプロセッサとを含み得る。ラウンチャ、マッパ、要求調整器、およびプロセッサは、上で要約された実施形態の方法のうちの1つまたは複数の動作を事項するように構成され得る。
[0013]様座な実施形態は、上で要約された実施形態の方法のうちの1つまたは複数の機能を実行するための手段を有するコンピューティングデバイスを含み得る。
[0014]様々な実施形態は、コンピューティングデバイスのプロセッサに、上で要約された実施形態の方法農地の1つまたは複数の動作を実行させる、プロセッサ実行可能な命令を記憶した非一時的なプロセッサ可読記憶媒体を含み得る。
[0015]本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、様々な実施形態の例の実施形態を例示し、上記で述べられた概略的な説明および下記で述べられる詳細な説明とともに、請求項の特徴を説明する役目をする。
実施形態をインプリメントするために適切な、コンピューティングデバイスを例示するコンポーネントブロック図。 実施形態をインプリメントするために適切な、実例となる複数コアプロセッサを例示するコンポーネントブロック図。 システムサービスの様々なバージョンを生成する時間変動アドレス空間レイアウトランダム化の実例を例示する図。 実施形態をインプリメントするために適切な実例となる時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 実施形態をインプリメントするために適切な動的コード生成システムを用いる、実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 システムサービスのバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 システムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 複数のアプリケーションのためのシステムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 システムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切なオブジェクトマネージャを用いて、実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。 実施形態に従って時間変動アドレス空間レイアウトランダム化をインプリメントするための方法を例示する処理フローチャート。 実施形態に従って時間変動アドレス空間レイアウトにおけるシステムサービスのバージョンに仮想アドレス空間レイアウトのランダム割当てをインプリメントするための方法を例示する処理フローチャート。 実施形態に従って時間変動アドレス空間レイアウトランダム化を使用してシステムサービス実行をインプリメントするための方法を例示する処理フローチャート。 実施形態に従って動的コード生成を用いて、時間変動アドレス空間レイアウトランダム化を使用してシステムサービス実行をインプリメントするための方法を例示する処理フローチャート。 様々な実施形態を用いた使用に適した実例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図。 様々な実施形態を用いた使用に適した実例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図。 様々な実施形態を用いた使用に適した実例となるサーバを例示するコンポーネントブロック図。
[0032]様々な態様が、添付の図面を参照して詳細に説明されることになる。可能な限り、同じ参照番号は、同じまたは類似の部分を指すように、図面全体で使用されることになる。特定の例およびインプリメンテーションについての参照は、例示を目的としており、特許請求の範囲を限定するようには意図されない。
[0033]本明細書では、「コンピューティングデバイス」、および「モバイルコンピューティングデバイス」という用語は、セルラ電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ/タブレット(2−in−1コンピュータ)、スマートブック、ウルトラブック、ネットブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラ電話、モバイルゲーミングコンソール、ワイヤレスゲーミングコントローラ、ならびに、プログラマブルプロセッサおよびメモリを含む類似したパーソナル電子デバイスのうちのいずれか1つまたはすべてを指すために、交換可能に使用される。「コンピューティングデバイス」という用語は、パーソナルコンピュータ、デスクトップコンピュータ、オールインワン(all−in−one)コンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、組込型コンピュータ、サーバ、ホームシアターコンピュータ、ならびにゲームコンソールを含む固定されたコンピューティングデバイスをさらに指し得る。
[0034]様々な実施形態は、アドレス空間レイアウトランダム化(ASLR)が時間次元においてアプリケーションによって使用されるシステムサービスのアドレス空間レイアウトもランダム化することによって攻撃を防ぐためのこうした方法をインプリメントする方法、システム、およびデバイスを含む。様々な実施形態は、ランダムに選ばれ得る異なるアドレス空間レイアウトを有するシステムサービスの各バージョンを持つ、システムサービスの複数のバージョンを起動することを含み得、アプリケーションによるシステムサービスのための各要求は、システムサービスバージョンのうちのランダムに選ばれた1つに向けられ得る。
[0035]概して、時間変動ASLRは、システムのブート時間またはシステムをブートした後のシステムサービスのための第1の要求に応答してシステムサービスの様々なバージョンを作り出し得る。システムサービスの各バージョンは、ランダムに生成されたアドレス空間レイアウトを割り当てられ得る。各システムサービスのための各アドレス空間レイアウトは、処理スタック、ヒープ、データ、関数ポインタ、またはライブラリメモリマップを含む、対応するシステムサービスをインプリメントするための項目を記憶し得る。システムサービスの各バージョンのためのアドレス空間は、仮想アドレス空間中に作り出され得、各仮想アドレス空間は、物理アドレス空間中に記憶される、システムサービスのコード、例えばシステムサービスのためのコードライブラリにマッピングする異なるメモリを有し得る。要求調整器は、システムサービスのための要求を受信し、要求されたシステムサービスを実行するためにシステムサービスの様々なバージョンのうちの1つをランダムに割り当てるようにインプリメントされ得る。
[0036]時間変動ADLRに対して、毎回、要求が同じシステムサービスのために受信され、要求調整器は、要求されたシステムサービスに対応するシステムサービスのバージョンのうちの1つにランダム割り当てを行い得る。これは、時間変動ASLRと呼ばれ、システムサービスのための各要求のためのシステムサービスの異なるバージョンをランダムに割り当てることによって遂行される。様々な実施形態の時間変動ASLRがインプリメントされるとき、総当たり攻撃を実行している攻撃者は、攻撃者がシステムサービスのために提出する各要求のための異なる仮想アドレス空間を観測することになる。また、システムサービスのうちの1つのバージョンのために取得された情報がシステムサービスの他のバージョンに適用されないので、漏洩情報は、使用するのにより困難になるだろう。これは、システムサービス上で成功裏の総当たり攻撃のために必要とされる試行数を大幅に増大させることになる。
[0037]いくつかの実施形態では、要求調整器は、通常でない要求パターンを認識するために要求をモニタすることによって攻撃を検出または疑うように構成され得る。攻撃が検出または疑われるとき、要求調整器は、システムサービスの新規コピー(または複数のシステムサービス)を作り出し得、ランダムアドレス空間レイアウトを使用して新規コピーを記憶することににより、ASLRシステムにおけるランダム性をさらに増大させる。
[0038]粗粒の(coarse-grained)時間変動ASLRについて、ヒープ、スタック、実行ファイル、共有ライブラリ、等の開始ロケーションは、同じシステムサービスの可変バージョンのために変化し得る。実例のシステムでは、ラウンチャのような、ユーザ空間コンポーネントは、同じシステムサービスの複数のバージョンを起動し得る。各バージョンは、異なるアドレス空間レイアウトを持つ分離処理として起動され得る。異なるバージョンは、処理グループ中に含まれ得、同じ処理グループ識別子(処理グループID)に関連付けられ得る。カーネル空間マッピング関数は、システムサービスのバージョンであるすべての処理を認識するために処理グループIDを使用し、異なるランダムアクセス空間レイアウトに各処理をマップし得る。
[0039]作成処理およびマッピングフェーズの間、カーネルコードは、新規にランダムに生成されたアドレスがシステムサービスの既存のバージョンの任意のものと衝突しないことを保証し得る。システムサービスの各バージョンは、ハンドル、ラベル、または他の参照のような、システムサービスバージョン識別子を割り当てられ得、それは、システムサービスのバージョンおよびオブジェクトの実際のアドレスを一意に認識するように使用される。
[0040]システムによって実行されるアプリケーションは、処理またはシステムサービスのバージョンのためのシステムサービスバージョン識別子を検索するためにルックアップ方法を使用してシステムサービスをルックアップし得る。要求調整器は、要求アプリケーションに要求されたシステムサービスのバージョンに対応するランダムに選択されたシステムサービスバージョン識別子を返し得る。アプリケーションは、システムサービスにその呼の全てにおいてこのシステムサービスバージョン識別子を使用し得る。要求調整器は、同じシステムサービスのためにルックアップ方法の異なる実行のためにランダムに選択されたシステムサービスバージョン識別子を返し得る。
[0041]仮想マシン内で動的に生成されたコードを有するシステムサービスにおける細粒の(fine-grained)時間変動ASLRについて、コードバッファ中の動的コードの異なるピースのロケーションは、(コードバッファの開始を含む)コードバッファ中のランダムロケーションに位置され得る。コードバッファ中の動的コードのランダム化は、組み込みコードライブラリのメモリ割り振り関数を使用するランダムメモリ割り振り器によってインプリメントされる、またはカーネルのランダムメモリ割り振り器によって同様の手法においてインプリメントされ得る。どちらか一方の例では、ランダムメモリ割り振り器は、システムサービスの各バージョンのための動的コードのために割り当てられたバッファアドレスおよびシステムサービスのバージョンを識別するシステムサービスバージョン識別子のリストを維持し得る。システムサービスバージョン識別子によって識別されたシステムサービスの異なるバージョンがサイズnバイトのバッファアドレスを割り振るために試みるとき、ランダムメモリ割り振り器は、各バージョンのためのリストをトラバースし、システムサービスのバージョンのために使用されていないバッファアドレスがあるかどうか決定し、システムサービスバージョン識別子のために使用されていないバッファアドレスを割り当て得る。
[0042]図1は、様々な実施形態で使用のために適切なリモートコンピューティングデバイス50と通信しているコンピューティングデバイス10を含むシステムを示す。コンピューティングデバイス10は、プロセッサ14、メモリ16、通信インターフェース18、および記憶メモリインターフェース20を持つシステムオンチップ(SoC)12を含み得る。コンピューティングデバイスは、ワイヤレス通信リンクを確立するための、ワイヤード又はワイヤレスモデム、記憶メモリ24、アンテナ26のような通信コンポーネント22をさらに含み得る。プロセッサ14は、様々なハードウェアコア、例えば、多数のプロセッサコアのうちの任意のものを含み得る。
[0043]「システムオンチップ」(SoC)という用語は、典型的であるが排他的でない、ハードウェアコア、メモリ、および通信インターフェースを含む、相互接続電子回路のセットを参照するように本明細書において使用される。ハードウェアコアは、汎用プロセッサ、中央処理ユニット(CPU)、デジタル信号プロセッサ(DSP)、グラフィック処理プロセッサ(GPU)、アクセレーテッド処理ユニット(APU:accelerated processing unit)、補助プロセッサ、単一コアプロセッサ、およびマルチコアプロセッサのような様々な異なるタイプのプロセッサを含み得る。ハードウェアコアは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、他のプログラマブル論理デバイス、ディスクリートゲート論理、トランジスタ論理、性能モニタハードウェア、モニタハードウェア、および時間基準のような、他のハードウェアおよびハードウェアの組み合わせをさらに統合し得る。集積回路は、集積回路のコンポーネントが、シリコンのような、半導体材料の単一ピースに存在するとして構成され得る。
[0044]SoC12は、1つまたは複数のプロセッサ14を含み得る。コンピューティングデバイス10は、1つより多くのSoC12を含み、それによって、プロセッサ14およびプロセッサコアの数を増大させ得る。コンピューティングデバイス10はまた、SoC12に関連付けられないプロセッサ14を含み得る。個別のプロセッサ14は、図2を参照して以下で説明されるようなマルチコアプロセッサであり得る。プロセッサ14は、各々、コンピューティングデバイス10の他のプロセッサ14と同じまたは異なり得る特定の目的のために構成され得る。同じまたは異なる構成のプロセッサ14およびプロセッサコアのうちの1つまたは複数は、互いにグループ化され得る。プロセッサ14またはプロセッサコアのグループは、マルチコアプロセッサクラスタと呼ばれ得る。
[0045]SoC12のメモリ16は、プロセッサ14によってアクセスするためのデータおよびプロセッサ実行可能コードを記憶するために構成される揮発性または不揮発性メモリであり得る。コンピューティングデバイス10および/またはSoC12は、様々な目的のために構成される1つまたは複数のメモリ16を含み得る。1つまたは複数のメモリ16は、ランダムアクセスメモリ(RAM)またはメインメモリ、あるいはキャッシュメモリのような、揮発性メモリを含み得る。これらのメモリ16は、データセンサまたはサブシステムから受信した限定された量のデータ、不揮発性メモリから要求されるデータおよび/またはプロセッサ実行可能コード命令、様々な要素に基づいて将来のアクセスの予測における不揮発性メモリからメモリ16にロードされたもの、および/または不揮発性メモリ中に記憶されずに将来の迅速なアクセスのために一時的に記憶され、プロセッサによって生成される中間処理データおよび/またはプロセッサ実行可能コード命令を一時的に保持するように構成され得る。
[0046]メモリ16は、プロセッサ14のうちの1つまたは複数によってアクセスするために、別のメモリ16または記憶メモリ24のような別のメモリからメモリ16にロードされる、データおよびプロセッサ実行可能コードを、少なくとも一時的に、記憶するように構成され得る。メモリにロードされたデータまたはプロセッサ実行可能コードは、プロセッサ14によって関数の実行に応答してロードされ得る。関数の実行に応答してメモリ16にデータまたはプロセッサ実行可能コードをロードすることは、不成功、またはミスになるメモリ16へのメモリアクセス要求から生じ得る、なぜなら、要求データまたはプロセッサ実行可能コードがメモリ16中にロードされないからである。ミスに応答して、別のメモリ16または記憶メモリ24からメモリデバイス16に要求データまたはプロセッサ実行可能コードをロードするために、別のメモリ16または記憶メモリ24へのメモリアクセス要求が行われ得る。関数の実行に応答してメモリ16にデータまたはプロセッサ実行可能コードをロードすることは、別のメモリ16または記憶メモリ24にメモリアクセス要求から生じ得、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ16にロードされ得る。
[0047]メモリ16は、センサまたはサブシステムのような、生データソースデバイスからメモリにロードされる、生データを、少なくとも一時的に、記憶するように構成され得る。生データは、生データソースデバイスからメモリ16に流れ、図3−図19を参照して本明細書でさらに説明されるように機械学習アクセレータによって生データが受信および処理されることが出来るまで、メモリに記憶され得る。
[0048]記憶メモリインターフェース20および記憶メモリ24は、コンピューティングデバイス10が不揮発性メモリ上でデータおよびプロセッサ実行可能コードを記憶することが出来るように調和して働き得る。記憶メモリ24は、記憶メモリ24がプロセッサ14のうちの1つまたは複数によってアクセスするためのデータまたはプロセッサ実行可能コードをその中に記憶し得るメモリ16の実施形態そっくりに構成され得る。不揮発性である、記憶メモリ24は、コンピューティングデバイス10の電力が止まったあと情報を保持し得る。電力が再び入りコンピューティングデバイス10が再ブートするとき、記憶メモリ24上に記憶された情報は、コンピューティングデバイス10に利用可能であり得る。記憶メモリインターフェース20は、記憶メモリ24へのアクセスを制御し、プロセッサ14が記憶メモリ24からデータを読み出し、記憶メモリ24にデータを書き込むことを可能にし得る。
[0049]コンピューティングデバイス10のコンポーネントのうちのいくつかまたはすべては、異なってアレンジされるおよび/または組合され得る一方、引き続き必要な機能の役目を果たしている。さらに、コンピューティングデバイス10は、コンポーネントの各々のうちの1つに限定されず、各コンポーネントの複数の例がコンピューティングデバイス10の様々な構成中に含まれ得る。
[0050]図2は、実施形態をインプリメントするために適切なマルチコアプロセッサ14を例示する。マルチコアプロセッサ14は、複数の同種または異種プロセッサコア200、201、202、203を有する。単一プロセッサ14のプロセッサコア200、201、202、203が同じ目的のために構成され同じまたは同様の性能特性を有するという点において、プロセッサコア200、201、202、203は、同種であり得る。例えば、プロセッサ14は、汎用プロセッサであり、プロセッサコア200、201、202、203は、同種の汎用プロセッサコアであり得る。代替として、プロセッサ14は、画像処理ユニットまたはデジタル信号プロセッサであり得、プロセッサコア200、201、202、203は、それぞれ、同種の画像処理プロセッサまたはデジタル信号プロセッサコアであり得る。容易に参照できるように、「プロセッサ」および「プロセッサコア」という用語は、本面明細書において交換可能に使用され得る。
[0051]単一プロセッサ14のプロセッサコア200、201、202、203が異なる目的のために構成され異なる性能特性を有するという点において、プロセッサコア200、201、202、203は、異種であり得る。このような異種のプロセッサコアの異種性は、異なる命令セットアーキテクチャ、パイプライン、動作周波数、等を含み得る。このような異種のプロセッサコアの例は、より遅い、低電力プロセッサコアがよりパワフルで電力を大量消費するプロセッサコアと結合する、「big.LITTLE」アーキテクチャとして知られるものを含み得る。同様の実施形態では、SoC12は、多数の同種または異種のプロセッサ14を含み得る。
[0052]図2において例示される例では、マルチコアプロセッサ14は、4つのプロセッサコア200、201、202、203(つまりプロセッサコア0、プロセッサコア1、プロセッサコア2、およびプロセッサコア3)を含む。説明を簡単にするために、本明細書の例は、図2に例示される4つのプロセッサコア200、201、202、203を参照し得る。4つのプロセッサコア200、201、202、203が、図2に例示され説明されるけれども、本明細書は、例として単に提供され、4つのコアプロセッサシステムに様々な実施形態を限定することを全く意図したものではない。コンピューティングデバイス10、SoC12、またはマルチコアプロセッサ14は、本明細書で例示され説明される4つのプロセッサコア200、201、202、203より少ないまたは多くを別個にまたは組み合わせて含み得る。
[0053]図3は、いくつかの実施形態に従うメモリ中に記憶されるシステムサービスの様々なバージョンを生成する時間変動ASLRの限定されない例を例示する。図3のグラフ300は、異なるコンピューティングデバイスが、「x」の任意の整数値として、例えばコンピューティングデバイスD1、D2、Dxまでを指定する横軸を含む。グラフ300はまた、増大する時間を表わし、表わされた時間の至る所で異なるシステムサービス要求を表わす、縦軸を含む。グラフ30におけるプロットは、異なるシステムサービス要求に応答して異なる時間に割り当てられた異なるコンピューティングデバイスの各々上で要求された複数のシステムサービスの様々なバージョン310−336である。例えば、コンピューティングデバイスD1は、単一システムサービス(S1)について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスS1の異なるバージョン(「N」の任意の整数として、SV1−1 314、SV1−2 312、SV1−3 310、SV1−N 316まで)を受信することとして例示される。様々なインプリメンテーションでは、システムサービスS1の異なるバージョン310−316の各々は、システムサービスS1のためのシステムサービス要求に応答してランダムに割り当てられ、システムサービスS1 310−316の他のバージョンから異なる仮想メモリアドレスに位置付けられ得る。
[0054]グラフ300は、単一システムサービス(S1)について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスS1の異なるバージョン(「N」の任意の整数として、SV1−1 320、SV1−2 326、SV1−3 324、SV1−M 322)を受信する、コンピューティングデバイスD2をさらに例示する。コンピューティングデバイスD1と同様に、様々なインプリメンテーションでは、システムサービスS1の異なるバージョン320−326の各々は、システムサービスS1のためのシステムサービス要求に応答してランダムに割り当てられ、システムサービスS1 320−326の他のバージョンから異なる仮想メモリアドレスに位置付けられ得る。システムサービスS1の異なるバージョン320−326のランダム割当てのために、グラフ300における例は、コンピューティングデバイスD2のシステムサービスS1の異なるバージョン320−326がコンピューティングデバイスD1のシステムサービスS1の異なるバージョン310−316と時間にわたって異なる順序において割り当てられることを例示する。システムサービスS1の異なるバージョン310−316および320−326がシステムサービスバージョン識別子(例えば、SV1−1、SV1−2、SV1−3)を共有するが、システムサービスS1の対応して識別されるバージョン310−316および320−326の各々の個別のインプリメンテーションは、異なり得る。例えば、システムサービスS1の対応して識別されるバージョン310−316および320−326の各インプリメンテーションは、異なるランダム仮想アドレス空間レイアウトを割り当てられ、これらそれぞれのコンピューティングデバイスD1またはD2上にシステムサービスS1のバージョン310−316および320−326または異なるインプリメンテーションについての異なるデータを包含し得る。
[0055]グラフ300は、複数のシステムサービス(S1およびS2)について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスS1およびS2の異なるバージョン(「Q」の任意の整数として、SV1−1 336、SV1−2 332、SV2−1 334、SV2−Q 330)を受信する、コンピューティングデバイスDxをさらに例示する。グラフ300における例は、コンピューティングデバイスD1およびD2によって要求される同じシステムサービスS1がコンピューティングデバイスD3によって要求されることを例示する。システムサービスS1 332および336の異なるバージョンは、同じ手法でシステムサービスS1の異なるバージョン310−316および320−326とは異なり得る。システムサービスS2の異なるバージョン330および334は、同様に、ランダムに割り当てられた仮想アドレス空間レイアウトであり、システムサービスS2のバージョン310−316および320−326、異なるインプリメンテーションについての異なるデータを包含し、システムサービスS2のためのシステムサービス要求に応答してランダムに選択される。
[0056]図3において例示される例は、限定されず、コンピューティングデバイスは、任意の番号のシステムサービスの任意の番号のバージョンを有し得る。システムサービスの様々なバージョンは、対応するシステムサービスのための複数のシステムサービス要求に応答して任意の番号の時間を割り当てられ得る。
[0057]図4Aは、様々な実施形態をインプリメントするために適切な実例の時間変動ASLRシステムを例示する。コンピューティングデバイスは、図1を参照して説明されたメモリ16および記憶メモリ24のような、物理メモリ400の様々な形式を含み得る。物理メモリ400は、システムサービスS1 402のためのコードのような、様々なシステムサービスのコードを記憶し得る。
[0058]コンピューティングデバイスは、様々な時間で、システムサービスS1 403のためのコードにアクセスするように試み得る。例えば、コンピューティングデバイス上で実行されるブート処理404は、ブート時間の間システムサービスS1 402のためのコードにアクセスするように試み得る。コンピューティングデバイス上で実行しているアプリケーション406はまた、コンピューティングデバイスが電源を入れられアプリケーション406を実行することができる任意の時間の間システムサービスのためのコードにアクセスするように試み得る。
[0059]時間変動ASLRをインプリメントするために、システムサービス310−316の複数のバージョンは、ブート処理404またはアプリケーション406の何れかによってシステムサービス要求に応答するラウンチャによって起動され得る。様々なインプリメンテーションでは、コンピューティングデバイスは、これらのシステムサービス310−316の様々なバージョンの起動を生じる、システムサービスの任意の数のためのシステムサービス要求をブート処理404が行うように、事前プログラムされ得る。
[0060]様々なインプリメンテーションでは、アプリケーション406は、既に起動したシステムサービスのためのシステムサービス要求を行い、システムサービスの様々なバージョンが既に起動され得る。様々なインプリメンテーションでは、ラウンチャ408は、システムサービスの1つより多くのバージョンが既に存在するとき、システムサービスの更なるバージョンを起動することを控え得る。様々なインプリメンテーションでは、ラウンチャ408は、システムサービスの1つまたは複数のバージョンが既に存在するとき、システムサービスの限定された番号のバージョンを起動し得る。
[0061]様々なインプリメンテーションでは、アプリケーション406は、その時点で起動されたシステムサービスのバージョンを有していないシステムサービスのためのシステムサービス要求を行い得る。例えば、要求されたシステムサービスは、アプリケーションによるシステムサービス要求より前にコンピューティングデバイスの電源オンセッションの間に要求なされ得なかった。同様にコンピューティングデバイスの電源オンセッションの間に起動したシステムサービスの前のバージョンは、使用の欠如、限定されたメモリ空間、限定されたコンピューティングデバイス電力、および他の交換ポリシー並びにアルゴリズムのような、様々な理由のために破棄されてい得る。要求されたシステムサービスのバージョンがアプリケーション406によるシステムサービス要求の時点で存在しないとき、ラウンチャ408は、要求されたシステムサービスの指定された番号のバージョンを起動し得る。
[0062]本明細書に説明されるように、ラウンチャ408は、複数のソースからシステムサービス要求に応答して、要求されたシステムサービスの指定された番号のバージョンを起動し得る。要求されたシステムサービスのバージョンの番号は、要求調整器を参照して本明細書にさらに説明されるような、事前プログラムされた値、要求されたシステムサービスの測定あるいは予測された使用、要求されたシステムサービスの優先度または脆弱性、メモリ空間および電力可用性を含む)コンピューティングデバイスの状態、またはシステムサービスへの検出あるいは疑われた脅威に基づいて変更し得る。システムサービスの各バージョンは、ラウンチャ408によって、同じシステムサービスの他のバージョンの各々と同じ処理グループ識別子(ID)と関連付けられ得る。処理グループ識別子は、同じ処理グループ識別子を有する要求されたシステムサービス310−316のバージョンを含む処理グループ416を定義し得る。
[0063]ラウンチャ408は、指定された異種のプロッサ上で走り続けるべきシステムサービスの異なるバージョンを起動し得る。例えば、起動されたシステムサービスの第1のバージョンは、コンピューティングデバイスのCPUによって起動されるように構成され、起動されたシステムサービスの第2のバージョンは、コンピューティングデバイスのDSPによって起動されるように構成され得る。ラウンチャ408は、プロセッサの任意のタイプによって実行されるべきシステムサービスの異なるバージョンを起動し得る。異種のプロセッサ上で実行されるべきシステムサービスの様々なバージョンは、異なるプロセッサによるバージョンのインプリメンテーションのための異なる命令セットを要求することによって攻撃者からシステムサービスを曖昧にするのを助け得る。第2のプロセッサの実行されたバージョンからのデータを使用して第1のプロセッサのシステムサービスのバージョンを実行するように試みる攻撃者は、第1のプロセッサのための命令セットを使用してシステムサービスのバージョンを実行するために、正しいデータまたは正しいフォーマットにおけるデータを提供し得ない。
[0064]コンピューティングデバイスは、マッパを含み得、それは、仮想メモリ414にシステムサービスの様々なバージョン310−316をマップし得る。マッパ410は、システムサービスの様々なバージョン310−316のための仮想メモリアドレス空間レイアウトをランダムに選択することと、システムサービスのバージョン310−316を記憶するために利用可能である、ランダムに選択された仮想アドレス空間レイアウトにシステムサービスの様々なバージョン310−316をマップし得る。マッパ410は、前のランダム選択がシステムサービスのバージョン310−316を記憶するために利用不可能である仮想アドレス空間レイアウトをもたらすことに応答して、システムサービスのバージョン310−316のために異なる仮想アドレス空間レイアウトをランダムに選択し得る。マッパ410はまた、システムサービスの対応するバージョン310−316のためのシステムサービスバージョン識別子と仮想アドレス空間レイアウトを相関させ、システムサービス要求に応答してシステムサービスのバージョン310−316を割り当て、位置付けるために相関情報を記憶し得る。マッパ410はまた、物理メモリ400中に対応するシステムサービス402の物理アドレスにシステムサービスの様々なバージョン310−316の仮想アドレス空間レイアウトのためのマッピングを提供し得る。対応するシステムサービス402へのシステムサービスの様々なバージョン310−316のマッピングは、システムサービス402の実行のためにシステムサービス402にシステムサービスのバージョン310−316のデータを提供するように使用され得る。
[0065]マッパ410は、システムサービスのバージョン310−316の物理アドレスにシステムサービスのバージョン310−316のための仮想アドレス空間レイアウトをマップし得る、ここで、システムサービスのバージョン310−316のデータは、記憶される。システムサービスのバージョン310−316のデータは、システムサービスのバージョン310−316をインプリメントするための、ヒープ、スタック、実行テーブル、共有ライブラリ、等を含み得る。コンピューティングデバイスは、システムサービスのバージョン310−316の仮想アドレス空間レイアウトを使用してシステムサービスのバージョン310−316のデータを検索し、システムサービスのバージョン310−316のデータを使用してシステムサービス402を実行し得る。いくつかの実施形態では、システムサービス310−316のバージョンのデータは、物理メモリ400中にシステムサービス402を位置付けるために、ポインタのような、リファレンスを含み得る。
[0066]コンピューティングデバイスは、アプリケーション406からシステムサービス要求を受信するように構成され得る要求調整器を含み得る。システムサービス要求は、システムサービスS1 402のような、システムサービスを指定するためにあり得る。要求調整器412は、システムサービスのバージョン310−316と要求されたシステムサービスを一致させるようにシステムサービス要求中に含まれたシステムサービスのシステムサービス識別子(例えば、名前、ハンドル、ラベル、または他のリファレンス)を使用し得る。要求調整器412は、要求されたシステムサービスを実行する際に使用するためにシステムサービスのバージョン310−316のうちの1つをランダムに選択し得る。要求調整器412は、システムサービスバージョン310−316のデータを位置付け、検索するために、ランダムに選択されたアドレス空間レイアウトの開始仮想アドレスのような、システムサービスのランダムに選択されたバージョン310−316の仮想アドレスを検索し得る。指定されたプロセッサによって実行されるように構成されたシステムサービスのランダムに選択されたバージョン310−316について、要求調整器412は、システムサービスのバージョンを有する異種のプロセッサをランダムに選択し、システムサービス要求を生じるアプリケーション406またはブート処理404あるいは異種のプロセッサ上のバージョンにまたはから、受信したシステムサービス要求および異種のプロセッサによって実行されたシステムサービスのバージョンの出力を含む、メッセージを送受信するためにプロセッサ間のメッセージを使用し得る。
[0067]様々なインプリメンテーションでは、システムサービスの起動されたバージョンの変動する番号は、アクティビティの異なる状態においてであり得る。アクティビティ状態は、覚醒状態、睡眠状態、様々な準覚醒/睡眠状態を含み得る。覚醒状態では、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってランダムに選択され得る。睡眠状態では、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってより高いアクティビティ状態バージョンを選択不可能である、またはにより高いアクティビティ状態バージョンに比べて容易にランダムに選択でき得ない。準覚醒/睡眠状態のうちの1つでは、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってランダムに選択され得る。要求調整器412は、より低いレベルの準覚醒/睡眠状態または睡眠状態におけるシステムサービスのバージョンよりも、覚醒状態におけるまたはより高いレベルの準覚醒/睡眠状態におけるシステムサービスのバージョンを優先させ得る。準覚醒/睡眠状態におけるシステムサービスのバージョンは、覚醒状態におけるバージョンと比べてより遅くアクセス可能であるおよび/または実行するために覚醒状態に持ってくる電力よりも多くの電力を要求し得る。同様に、睡眠状態におけるシステムサービスのバージョンは、準覚醒/睡眠状態バージョンと比べてより時間が掛かるおよび/または覚醒状態に持ってくる電力より多くの電力を必要とし得る。
[0068]要求調整器412は、システムサービスのバージョンが様々な因子に依存して覚醒状態、準覚醒/睡眠状態、または睡眠状態にあるかどうかを制御し得る。例えば、このような因子は、プロセッサ、コンピューティングデバイス、および/またはアプリケーションのアクティビティ状態と、コンピューティングデバイス、システムサービスへの最近および/または予測される呼の数の電力状態と、プロセッサ、コンピューティングデバイス、および/またはアプリケーションの脅威状態とを含み得る。複数の呼が様々な因子に基づいてシステムサービスのために行われる可能性が高くなるほど、要求調整器412は、覚醒状態および/または準覚醒/睡眠状態になるために、システムサービスのバージョンのより高い番号を制御し得る。実例の因子を使用して、プロセッサ、コンピューティングデバイス、および/またはアプリケーションのアクティビティ状態が高くなるほど、覚醒状態および/または準覚醒/睡眠状態にあり得るシステムサービスのバージョンの番号が高くなる。同様に、システムサービスへの最近および/または予測される呼の番号が高くなるほど、覚醒状態および/または準覚醒/睡眠状態にあるシステムサービスのバージョンの番号が高くなる。コンピューティングデバイスに利用可能な電力が大きくなるほど、覚醒状態および/または準覚醒/睡眠状態にあるシステムサービスのバージョンの番号が高くなる。さらに、脆弱性または攻撃の可能性を示す、プロセッサ、コンピューティングデバイス、および/またはアプリケーションの脅威状態が高くなるほど、覚醒状態および/または準覚醒/睡眠状態にあり得るシステムサービスのバージョンの番号が高くなる。
[0069]システムサービスのバージョンの合計番号、覚醒状態におけるバージョンの番号、準覚醒/睡眠状態のバージョンの番号、および/または睡眠状態におけるバージョンの番号についての制限されたセットがある。制限は、合計および様々な状態におけるシステムサービスのバージョンの番号を制御するために使用されるプロファイルに依存して変動し得る。プロファイルは、所定の制限を含み得うる、または様々な因子に基づく制限を割り当て得る。
[0070]いくつかのインプリメンテーションでは、要求調整器412は、要求されたシステムサービスに向けられた潜在的な攻撃を検出または疑い得る。要求調整器412は、通常ではないアクセスパターンおよびシステムサービス要求を検出し得る。潜在的な攻撃を検出または疑うことに応じて、要求調整器412は、ラウンチャ408が要求されたシステムサービスのより多くのバージョンを起動するおよび/または増加させることを促す、警告信号をランチャ408に送り得る。要求されたシステムサービスの追加で起動したおよび/または増加したアクティビティ状態バージョンは、システムサービスの関係のない実行のための異なるデータのより多くのビューを生成することによって攻撃者からシステムサービスをより曖昧にするように動作し得る。追加のデータおよびデータの間の一貫性の欠如は、システムサービスを利用するために使用され得るデータを攻撃者が取得することを防ぐのに役立つ、なぜなら、1つの実行からのデータを使用することが悪意のあるシステムサービス要求に応答してシステムサービスの異なるバージョンを使用する後の実行に対応し得ないからである。悪意のあるシステムサービス要求におけるこのような対応しないデータを使用することは、システムサービスの実行を防ぐ、システムサービスを実行する無効な試みをもたらし得る。
[0071]図4Bは、いくつかの実施形態をインプリメントするために適切な動的コード生成システムを持つ時間変動ASLRシステムの例を例示する。コンピューティングデバイスは、ユーザ空間またはカーネル空間においてインプリメントされる割り振り器420、システムサービスを実行するために動的に生成されたコードを記憶するためのコードバッファ424を含み得る。メモリ割り振り器420は、相関したシステムサービスを実行するために動的に生成されたコードに対応するコードバッファアドレスと相関されるシステムサービスバージョン識別子のリスト422(またはあるデータを別のデータとリンクするように構成される他のデータ構造)を記憶するように構成され得る。
[0072]システムサービスのバージョン310−316の実行は、システムサービス402のために動的に生成されたコードをもたらし得る。動的に生成されたコードは、再びコードを動的に生成する必要なしにシステムサービスの後の実行における使用のために生成されたコードにアクセスするために、コードバッファ424中に記憶され得る。メモリ割り振り器420は、対応するシステムサービスのシステムサービスバージョン識別子、および動的に生成されたコードのサイズを含む、動的に生成されたコードを記憶するためのパラメータを受信し得る。メモリ割り振り器420は、動的に生成されたコードを記憶するために利用可能であり、十分なサイズのロケーションを見出すためにコードバッファ424をトラバースし得る。メモリ割り振り器420は、コードバッファアドレスのランダム選択を含む、様々なアルゴリズムまたはパターンを使用してコードバッファ424をトラバースし得る。十分な大きさのロケーションを見出すと、メモリ割り振り器420は、ロケーションの任意のアドレスがシステムサービスバージョン識別子に既に関連付けられているかどうか決定するために、コードバッファ424におけるロケーションのアドレスをリスト422と比較し得る。システムサービスバージョン識別子と関連付けられていないロケーションは、動的に生成されたコードを記憶するために利用可能なロケーションであり得る。コードバッファ424において十分な大きさで利用可能なロケーションを見出すと、メモリ割り振り器420は、コードバッファ424の動的なコードロケーション(例えば、動的コードロケーション1乃至Y)において動的なコードを記憶するためにコードバッファアドレスを提供し、コードバッファアドレスに動的に生成されたコードの記憶を反映するようにリスト422を更新し得る。コードバッファアドレスは、それについての実行が動的に生成されたコードをもたらすシステムサービスのバージョン310−316の他のデータと共に記憶され得る。
[0073]図5は、システムサービスのバージョンを実行するためのいくつかの実施形態をインプリメントするために適切な実例の時間変動ASLRシステムを例示する。システムは、ユーザ空間500およびカーネル空間516を含み得る。ユーザ空間500では、複数のシステムサービス処理、例えば、システムサービスS1処理508a、508bは、システムサービスの異なるバージョンを実行するためにインプリメントされ得る、例えば、システムサービスS1処理508aがシステムサービスバージョンSV1−1を実行し、システムサービスS2処理508bがシステムサービスバージョンS1−2を実行し得る。各システムサービス処理508a、508bは、対応するシステムサービス処理508a、508bのコードを実行するためのシステムサービススレッドプール510a、510bを含み得る。システムサービスのバージョンを起動すると、システムサービス処理508a、508bは、要求調整器412またはシステムサービスマネージャでシステムサービスの対応するバージョンを登録するために、登録信号530a、530bを送り得る。
[0074]要求調整器412は、システムサービスのバージョンを登録し、要求アプリケーション406にシステムサービスの割り当てられたバージョンを提供するように構成され得る。いくつかのインプリメンテーションでは、アプリケーション406は、ユーザ空間500において実行し得る。要求調整器412は、ストレージを取り扱い、システムサービスのバージョンとシステムサービスを相関するために使用される情報およびシステムサービスのランダム選択の更新するための時間変動ASLRコテンキストマネージャ504を含み得る。時間変動ASLRコンテキストマネージャ504は、システムサービスの複数のバージョンのオブジェクトまたはバインダリファレンス(ハンドルまたはラベル)と、システムサービス識別子を相関するために登録テーブル506または複数のあるデータを他のデータとリンクするように構成される他のデータ構造を使用し得る。登録テーブル506は、少なくとも1つのバインダ/オブジェクトとシステムサービス識別子を相関する、各システムサービス識別子のための1つまたは複数のエントリを含み得る。図5における非限定の例は、Nの任意の整数値に対して、システムサービスバージョンSV1−1のためのB1、システムサービスバージョンSV1−2のためのB2、BNまでを含む、システムサービスの異なるバージョンに各々対応するバインダリファレンスのリストと相関される、システムサービス識別子、システムサービスS1、のためのエントリを示す。
[0075]カーネル空間516の関数は、コンピューティングデバイスのプロセッサ(例えば、図1および図2におけるプロセッサ14)によってインプリメントされ得る。カーネル空間516は、システムサービスのバージョンのオブジェクトの仮想アドレスおよびオーナー処理とシステムサービスの複数のバージョンのバインダリファレンスを相関する、マッピングテーブル520または複数のあるデータを他のデータとリンクするように構成される他のデータ構造を含み得る。マッピングテーブル520は、システムサービスのバージョンが起動したとき追加され(populated)、更新され得る。図5における非限定の例は、登録テーブル506のバインダリファレンスのためのマッピングテーブル520におけるエントリを示す。バインダリファレンスB1は、仮想アドレスVA1およびオーナー処理Piとマッピングテーブル520において相関される。同様に、バインダリファレンスB2は、仮想アドレスV2およびオーナー処理Pjと相関され、バインダリファレンスBNは、仮想アドレスVANおよびオーナー処理Pkと相関される。
[0076]アプリケーション406のアプリケーション処理512は、要求されたシステムサービスのシステムサービス識別子を使用してシステムサービス532のバージョンのための要求を送り得る。要求調整器412は、システムサービス532のバージョンのための要求を受信し得る。時間変動ASLRコンテキストマネージャ504は、登録テーブル506における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの1つをランダムに選択し得る。
[0077]いくつかのインプリメンテーションでは、時間変動ASLRコンテキストマネージャ504は、アプリケーション406に要求されたシステムサービスのバージョンの以前の割当てのトラックを保持し、アプリケーション406に前に提供されなかったバインダリファレンスをランダムに選択し得る。時間変動ASLRコンテキストマネージャ504は、以前に提供されたバインダリファレンスを割り当てることを避け得る。例えば、時間変動ASLRコンテキストマネージャ504は、ランダム選択より前に、以前に提供されたバインダリファレンスを無視することによって以前に提供されたバインダリファレンスを割り当てることを避け得る。別の例として、時間変動ASLRコンテキストマネージャ504は、以前に提供されたバインダリファレンスをランダムに選択することに応答して後続のランダム選択を行うことによって以前に提供されたバインダリファレンスを割り当てることを避け得る。
[0078]要求調整器412は、アプリケーション406にランダムに選択されたバインダリファレンスを返し得る。アプリケーション406は、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択されたバインダリファレンスを受信し、要求されたシステムサービス534を呼ぶためにバインダリファレンスを使用し得る。
[0079]サービスマネージャプロキシ514は、要求されたシステムサービスのバージョンにアクセスするためにカーネル空間とインターフェースし得る。サービスマネージャプロキシ514は、要求されたシステムサービス536のバージョンのための呼をバインダリファレンスに提供し得る。カーネル空間516におけるバインダドライバ518は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるためにバインダリファレンスを使用して、要求されたシステムサービス536のバージョンのための呼を受信し得る。バインダドライバ518は、要求されたシステムサービスのバージョンについての対応するシステムサービス処理508a、508bと通信し得る。そうすることで、バインダドライバ518は、バインダリファレンスと相関された仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス538のバージョンの実行を要求し得る。
[0080]対応するシステムサービス処理508a、508bは、システムサービス処理508a、508bによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス540の実行の結果を返し得る。バインダドライバ518は、アプリケーション処理512に結果544aを転送し得る、サービスマネージャプロキシ514に結果542を転送し得る。
[0081]図6は、システムサービスの複数のバージョンを実行することの実施形態をインプリメントするために適切な実例の時間変動ASLRシステムを例示する。図6に示される例は、図5を参照して上で説明された例に類似する。両方の例が同じコンポーネントを共有し、システムサービスを実行するために第1の要求を表す、通信信号532a、534a、536a、538a、540a、542a、および544aは、図5を参照して説明した通信信号532、534、536、538、540、542、および544に対応し得る。図6に示される例は、システムサービスを実行するために第2の要求をさらに含む。
[0082]アプリケーション処理512は、要求されたシステムサービスのシステムサービス識別子を使用して同じシステムサービス532bのバージョンのための第2の要求を送り得る。要求調整器412は、システムサービス532bのバージョンのための第2の要求を受信し得る。時間変動ASLRコンテキストマネージャ504は、登録テーブル506における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの1つをランダムに選択し得る。図5を参照して説明されたように、時間変動ASLRコンテキストマネージャ504は、アプリケーション406に要求されたシステムサービスのバージョンの以前の割り当てのトラック、例えば、システムサービスを実行するために第1の要求のための第1の割り当てのトラックを保持し得る。時間変動ASLRコンテキストマネージャ504は、アプリケーション406に前に提供されなかった第2のバインダリファレンスをランダムに選択し得る。 [0078]要求調整器412は、アプリケーション406にランダムに選択された第2のバインダリファレンスを返し得る。
[0083]アプリケーション406は、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択された第2のバインダリファレンスを受信し、要求されたシステムサービス534bを呼ぶためにバインダリファレンスを使用し得る。サービスマネージャプロキシ514は、要求されたシステムサービス536bのバージョンのための呼を第2のバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間516とインターフェースし得る。バインダドライバ518は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるために第2のバインダリファレンスを使用して、要求されたシステムサービス536bのバージョンのための呼を受信し得る。バインダドライバ518は、要求されたシステムサービスのバージョンのための対応するシステムサービス処理508bと通信し得る。そうすることで、バインダドライバ518は、第2のバインダリファレンスと相関された仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービスのバージョン538bの実行を要求し得る。
[0084]対応するシステムサービス処理508a、508bは、システムサービス処理508a、508bによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス540の実行の結果を返し得る。バインダドライバ518は、アプリケーション処理512に結果544bを転送し得る、サービスマネージャプロキシ514に結果542bを転送し得る。
[0085]図7は、複数のアプリケーションのためのシステムサービスの複数のバージョンバージョンを実行することの実施形態をインプリメントするために適切な実例の時間変動ASLRシステムを例示する。図7に示される例は、図5および図6を参照して上で説明された例に類似する。例のすべてが同じコンポーネントを共有するが、図7に例示される例は、複数のアプリケーション406a、406b、複数のアプリケーションプロセッサ512a、512b、および複数のサービスマネージャプロキシ514a、514bを含む。第1のアプリケーション406aは、図5および図6を参照して説明されたアプリケーション406に対応し得る。第2のアプリケーション406bは、第1のアプリケーション406aとして同じシステムサービスを呼ぶ任意のアプリケーションであり得る。さらに図6および図7の例は、通信信号532a、532b、534a、534b、536a、536b、538a、538b、540a、540b、542a、542b、544a、および544bを共有する。しかしながら、図7において例示される例では、通信信号532a、534a、536a、538a、540a、542a、および544aは、第1のアプリケーションによってシステムサービスを実行するために第1の要求に関連し、通信信号532b、534b、536b、538b、540b、542b、および544bは、第2のアプリケーション406bによってシステムサービスを実行するために第2の要求に関連し得る。
[0086]様々なインプリメンテーションでは、同じアプリケーションによる同じシステムサービスを実行するための複数の要求と同様に、要求調整器412は、要求しているアプリケーションが同じか異なるかにかかわらず、システムサービスを実行するための連続的要求に要求されたシステムサービスの同じバージョンを割り当てることを避けるように構成され得る。システムサービスを実行するための要求が異なるアプリケーションから起こったとしても、システムサービスの同じバージョンを使用することを避けることは、ASLRを無効にする試みにおいて複数のアプリケーションを使用する攻撃者からシステムサービスを曖昧にするのに役立ち得る。
[0087]要求調整器412は、第2のアプリケーションの第2のアプリケーション処理からシステムサービス532bのバージョンのための第2の要求を受信し得る。時間変動ASLRコンテキストマネージャ504は、登録テーブル506における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの1つをランダムに選択し得る。時間変動ASLRコンテキストマネージャ504は、すべてのアプリケーション406a、406bへの要求されたシステムサービスのバージョンの以前の割り当てのトラックを保持し得る。時間変動ASLRコンテキストマネージャ504は、アプリケーション406aに前に提供されなかった第2のバインダリファレンスをランダムに選択し得る。要求調整器412は、アプリケーション406bにランダムに選択された第2のバインダリファレンスを返し得る。
[0088]アプリケーション406bは、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択された第2のバインダリファレンスを受信し、要求されたシステムサービス534bを呼ぶためにバインダリファレンスを使用し得る。サービスマネージャプロキシ514bは、要求されたシステムサービス536bのバージョンのための呼を第2のバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間516とインターフェースし得る。バインダドライバ518は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるために第2のバインダリファレンスを使用して、要求されたシステムサービス536bのバージョンのための呼を受信し得る。バインダドライバ518は、第2のバインダリファレンスと相関される仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス538bのバージョンの実行を要求するために、要求されたシステムサービスのバージョンのための対応するシステムサービス処理508bと通信し得る。
[0089]対応するシステムサービス処理508a、508bは、システムサービス処理508a、508bによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス540の実行の結果を返し得る。バインダドライバ518は、第2のアプリケーション処理512bに結果544bを転送し得る、第2のサービスマネージャプロキシ514bに結果542bを転送し得る。
[0090]図8は、システムサービスの複数のバージョンを実行することの実施形態をインプリメントするために適切なオブジェクトマネージャを持つ実例の時間変動ASLRシステムを例示する。図8に示される例は、図5および図6を参照して上で説明された例に類似する。例のすべては同じコンポーネントを共有するが、図8の例は、アプリケーション406のオブジェクトマネージャ800を含む。さらに図6および図8の例は、通信信号536a、536b、538a、538b、540a、540b、542a、および542bを共有する。
[0091]アプリケーション406のアプリケーション処理512は、要求されたシステムサービスのシステムサービス識別子を使用してシステムサービス802a、802bを実行するための要求を送り得る。オブジェクトマネージャ800は、システムサービス802a、802bを実行するための要求を受信し、システムサービス識別子を含む、システムサービス804a、804bのバージョンのための要求を送り得る。オブジェクトマネージャ800は、個々に、システムサービス802a、802bを実行するための要求のうちの1つを受信することに応答して、システムサービス804a、804bのバージョンのための各々要求を送り得る。要求調整器412は、システムサービス804a、804bのバージョンのための要求を受信し得る。
[0092]時間変動ASLRコンテキストマネージャ504は、システムサービス804a、804bのための要求のうちの1つに応答して、登録テーブル506中に要求されたシステムサービスのためのシステムサービス識別子と相関された第1のバインダリファレンスをランダムに選択し得る。図5を参照して説明されたように、時間変動ASLRコンテキストマネージャ504は、アプリケーション406に要求されたシステムサービスのバージョンの以前の割り当てのトラック、例えば、システムサービス804を実行するための第1の要求のための第1のバインダリファレンスの第1の割り当てのトラックを保持し得る。時間変動ASLRコンテキストマネージャ504は、システムサービス804a、804bのバージョンのための要求のうちの他のものに応答してアプリケーション406に以前に提供されなかった第2のバインダリファレンスをランダムに選択し得る。要求調整器412は、アプリケーション406にランダムに選択されたバインダリファレンスを個々に返し得る。
[0093]オブジェクトマネージャ800は、ランダムに選択されたバインダリファレンスを受信し、サービスマネージャプロキシ514に、それぞれランダムに選択されたバインダリファレンスでシステムサービス806a、806bを実行するために要求を送り得る。サービスマネージャプロキシ514bは、要求されたシステムサービス536a、536bのバージョンのための呼をバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間516とインターフェースし得る。
[0094]バインダドライバ518は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるためにバインダリファレンスを使用して、要求されたシステムサービス536a、536bのバージョンのための呼を受信し得る。バインダドライバ518は、バインダリファレンスと相関される仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス538a、538bのバージョンの実行を要求する、要求されたシステムサービスのバージョンのための対応するシステムサービス処理508a、508bと通信し得る。
[0095]対応するシステムサービス処理508a、508bは、システムサービス処理508a、508bによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス540の実行の結果を返し得る。バインダドライバ518は、オブジェクトマネージャ800に結果808a、808bを転送し得る、サービスマネージャプロキシ514に結果542bを転送し得る。オブジェクトマネージャ800は、アプリケーション処理に結果810a、810bを転送し得る。
[0096]図9は、実装形態に従う時間変動ASLRをインプリメントするための方法900を例示する。方法900は、プロセッサ(例えば、図1および図2中のプロセッサ14)中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ASLR内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法900をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
[0097]ブロック902ではコンピューティングデバイスは、システムサービスを起動または実行するための要求を受信し得る。システムサービスを起動または実行するための要求は、システムサービスのシステムサービス識別子を含み得る。
[0098]ブロック902で受信したシステムサービスを起動するための要求は、コンピューティングデバイスによって実行されるブート処理から起こり得る。システムサービスを起動するための要求は、サービスがシステムサービスを実行するための要求に応答して後の実行のために利用可能になるだろうシステムサービスを起動するためのものであり得る。言い換えると、システムサービスを起動するための要求は、コンピューティングデバイスにシステムサービスを実行せずにシステムサービスを起動するように促し得る。
[0099]ブロック902で受信したシステムサービスを起動するための要求は、コンピューティングデバイスによって実行されるアプリケーションから起こり得る。システムサービスを実行するためのこのような要求は、システムサービスが要求の時間において起動していない場合、コンピューティングデバイスにシステムサービスを起動するように促し得る。
[0100]決定ブロック904では、要求されたシステムサービスが既に起動しているかどうかを決定し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービス識別子と相関されるシステムサービスのバージョンのオブジェクトを有する、記録が存在するかどうかを決定するために(例えば、図5−図8を参照して説明された登録テーブル506中の)記録を探索し得る。
[0101]いくつかのインプリメンテーションでは、コンピューティングデバイスの動作の間の任意の時間で、コンピューティングデバイスは、オプションブロック918において任意のシステムサービス上で攻撃を検出するまたは疑い得る。様々なインプリメンテーションでは、コンピューティングデバイスは、システムサービスのためのリクエスタおよび要求パターンまたは通常ではないアクセスを認識することによってシステムサービス上での攻撃を検出または疑い得る。
[0102]ブロック918においてシステムサービス上での攻撃を検出または疑うこと、または要求されたシステムサービスが既に起動していなかったという決定(つまり決定ブロック904=「No」)に応答して、コンピューティングデバイスは、ブロック906においてシステムサービスの複数のバージョンを起動し得る。コンピューティングデバイスは、システムサービスのバージョンの任意の番号を起動し得る。様々なインプリメンテーションでは、起動された任意のシステムサービスのバージョンの番号は、別のシステムサービスのバージョンの番号と同じまたは異なり得る。起動されたシステムサービスのバージョンの番号は、予測されたシステムサービスあるいはシステムサービスの測定使用、システムサービスの優先度あるいは脆弱性、(利用可能なメモリ空間および電力を含む)コンピューティングデバイスの状態、システムサービス上での攻撃の検出または嫌疑を含む、多くの因子によって決まり得る、または事前プログラムされ得る。
[0103]ブロック908では、コンピューティングデバイスは、システムサービスの各バージョンに、システムサービスバージョン識別子、バインダリファレンス、オブジェクトを割り当て得る。システムサービスバージョン識別子、バインダリファレンス、またはオブジェクトは、システムサービスのバージョンを一意に識別する関数であり得る。
[0104]ブロック910では、コンピューティングデバイスは、システムサービスの各バージョンにランダム仮想メモリアドレス空間レイアウトを割り当て得る。システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトは、システムサービスのバージョンを起動するためのデータが記憶される場合には、物理メモリロケーションにマップされ得る。データは、スタック、ヒープ、データ、実行ファイル、関数ポインタ、またはライブラリメモリマップ、等を含み得る。いくつかのインプリメンテーションでは、システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトはまた、システムサービスを実行するためのコードの物理メモリロケーションにマップされ得る。いくつかのインプリメンテーションでは、データは、システムサービスを実行するためのコードの物理メモリロケーションへのポインタを含み得る。ブロック910においてシステムサービスの各バージョンにランダム仮想メモリアドレス空間レイアウトを割り当てるための例示の方法1000が図10を参照して説明される。
[0105]ブロック912では、コンピューティングデバイスは、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、システムサービス各バージョンのオブジェクト、およびシステムサービスの各バージョンのランダム仮想メモリアドレスを相関または記憶し得る。いくつかのインプリメンテーションでは、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトの割り当ては、システムサービスの識別子と、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトを相関する手法においてコンピューティングデバイスによって記録され得る。例えば、方法900の記録は、図5−図8を参照して説明されたように、登録テーブル506の一部であり得る。いくつかのインプリメンテーションでは、システムサービスバージョンへのランダム仮想メモリアドレスの割り当ては、ランダム仮想メモリアドレスと、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトを相関する手法においてコンピューティングデバイスによって記録され得る。例えば、相関の記録は、図5−図8を参照して説明されたように、登録テーブル520の一部であり得る。
[0106]ブロック912において、システムサービス、システムサービスのバージョン、システムサービスのバージョンのランダム仮想メモリアドレスの関係性のすべてを相関および記憶した後、または要求されたシステムサービスが既に起動していたとの決定(つまり決定ブロック904=「Yes」)に応答して、コンピューティングデバイスは、ブロック914においてシステムサービスのバージョンをランダムに選択し得る。ランダム選択は、疑似ランダムアルゴリズムを使用してインプリメントされ得る。
[0107]いくつかのインプリメンテーションでは、ブロック914におけるランダム選択は、様々なまたは単一のアプリケーションのいずれかによって、時間期間内である数のシステムサービスの同じバージョンの選択に応答して複数回、またはシステムサービスのための要求のしきい値数、実行され得る。
[0108]いくつかのインプリメンテーションでは、ブロック914におけるランダム選択は、現在使用されているまたは最近使用されたシステムサービスのバージョンを実行しているシステムサービスのバージョンのセットからの選択を含む。最近の使用は、システムサービスのための要求のしきい値数内のシステムサービスバージョンの使用または時間期間内のシステムサービスのバージョンの使用によって、様々なまたは単一のアプリケーションのいずれかによって決定される。
[0109]ブロック916では、コンピューティングデバイスは、リクエスタに、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのランダムに選択されたバージョンのオブジェクトを提供し得る。
[0110]図10は、実施形態に従って時間変動アドレス空間レイアウトにおけるシステムサービスのバージョンに、仮想アドレス空間レイアウトのランダム割当てをインプリメントするための実例の方法1000を例示する。方法1000は、プロセッサ(例えば、図1および図2中のプロセッサ14)中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ASLR内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法1000をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
[0111]ブロック1002では、コンピューティングデバイスは、システムサービスの各バージョンに同じ処理グループ識別子(ID)を割り当て得る。
[0112]ブロック1004では、コンピューティングデバイスは、物理メモリ中のロケーション(物理アドレス)でシステムサービスのバージョンを記憶し得る。いくつかのインプリメンテーションでは、あるメモリデバイス、またはメモリデバイスの区分は、システムサービスのバージョンを記憶するために指定され得る。コンピューティングデバイスは、物理メモリ中の未使用のロケーション中に、または様々なメモリ置き換えポリシーに従って物理メモリ中のロケーションにおいて記憶された現在のデータを上書きすることによって物理メモリ中の使用されたロケーション中にシステムサービスのバージョンを記憶し得る。
[0113]ブロック1006では、コンピューティングデバイスは、システムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、仮想アドレス空間レイアウトを選択するための疑似ランダム選択アルゴリズムをインプリメントし得る。いくつかのインプリメンテーションでは、他の目的のために使用される仮想アドレス(例えば、同じまたは他のシステムサービスの他のバージョンに割り当てられた仮想アドレス空間レイアウトの仮想アドレス)は、システムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択するために使用される仮想アドレスのセットから除外され得る。
[0114]オプションの決定ブロック1008では、コンピューティングデバイスは、ランダムに選択された仮想アドレス空間レイアウトが利用可能かどうかを決定し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、ランダムに選択された仮想アドレス空間レイアウトが別の目的のために既に使用中かどうかを決定するために、他の使用された仮想アドレスとランダムに選択された仮想アドレス空間レイアウトを比較し得る。
[0115]ランダムに選択された仮想アドレス空間レイアウトが利用不可能(つまり、オプション決定ブロック1008=「No」)であると決定することに応答して、コンピューティングデバイスは、ブロック1006においてシステムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択し得る。
[0116]ランダムに選択された仮想アドレス空間レイアウトが利用可能(つまり、オプション決定ブロック1008=「Yes」)であると決定することに応答して、コンピューティングデバイスは、物理アドレスにシステムサービスのバージョンのためのランダムに選択された仮想アドレス空間レイアウトをマップし得、ここで、システムサービスのバージョンは、ブロック1010において記憶される。
[0117]決定ブロック1012では、コンピューティングデバイスは、システムサービスのより多くのバージョンが物理メモリ中に記憶されランダム仮想アドレス空間レイアウトに割り当てられるために残っているかどうかを決定し得る。コンピューティングデバイスは、システムサービスのより多くのバージョンが残っているかどうかを決定するために同じシステムサービスのバージョンに共通の処理グループ識別子を使用し得る。同じ処理グループ識別子を持つバージョンがランダム仮想アドレス空間レイアウトの割り当ておよび記憶のためのキュー中に残っているとき、コンピューティングデバイスは、残こっているシステムサービスのバージョンがあると認識し得る。
[0118]システムサービスのより多くのバージョンが物理メモリ中に記憶され、ランダム仮想アドレス空間レイアウトに割り当てられるために残っていると決定すること(つまり決定ブロック1012=「Yes」)に応答して、コンピューティングデバイスは、説明されるように、ブロック1014において同じ処理識別子を持つシステムサービスの記憶されていないバージョンが選択され、ブロック1004において物理メモリ中のロケーションにおいてシステムサービスバージョンを記憶し、ブロック1006においてシステムサービスのバージョンのための仮想アドレス空間レイアウトを選択し得る。
[0119]いくつかのインプリメンテーションでは、コンピューティングデバイスのバージョンのすべては、メモリ中に既に記憶され得る。そこで、システムサービスのより多くのバージョンが物理メモリ中に記憶され、ランダム仮想アドレス空間レイアウトに割り当てられるために残っていないと決定すること(つまり決定ブロック1012=「No」)に応答して、コンピューティングデバイスは、図9を参照して説明したように、方法900のブロック912において、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスの各バージョンのオブジェクトと、システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトとを相関し記憶し得る。様々な実装形態では、ブロック912中の動作は、決定ブロック1012の結果にかかわらず実行され得、方法1000の様々なブロック1002−1014の動作と同時に実行され得る。
[0120]図11は、実装形態に従う時間変動ASLRを使用してシステムサービス実行をインプリメントするための方法1100を例示する。方法1100は、プロセッサ(例えば、図1および図2中のプロセッサ14)中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ASLR内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法1100をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
[0121]方法1100は、システムサービスのリクエスタがアプリケーションである図9を参照して説明された方法900のインプリメンテーションの続きであり得る。ブロック1102では、コンピューティングデバイスは、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのためのオブジェクトを含む、アプリケーションからシステムサービスのバージョンについての要求を受信し得る。
[0122]ブロック1104では、コンピューティングデバイスは、システムサービスのバージョンのランダムに選択された仮想アドレス空間レイアウトの開始仮想アドレスのような、システムサービスのバージョンの仮想アドレスを位置付け得る。様々なインプリメンテーションでは、コンピューティングデバイスは、仮想アドレスと、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのオブジェクトを相関することの記録を見出すために、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトの割り当てを使用し得る。例えば、コンピューティングデバイスは、図5−図8を参照して説明されたように、マッピングテーブル520の記録を探索し得る。
[0123]ブロック1106では、コンピューティングデバイスは、物理メモリ中のロケーションの物理アドレスに、システムサービスのバージョンの仮想アドレスを変換し得、ここで、システムサービスのバージョンのデータは、記憶される。この動作では、コンピューティングデバイスは、図10を参照して本明細書で説明されるように、ブロック1010におけるシステムサービスのバージョンのために生成され物理アドレスマッピングに仮想アドレスを使用し得る。
[0124]ブロック1108では、コンピューティングデバイスは、物理アドレスから実行のために使用されるシステムサービスのバージョンのデータを検索し得る。
[0125]ブロック1110では、コンピューティングデバイスは、システムサービスを起動するために検索されたデータを使用し得る。コンピューティングデバイスは、システムサービスを実行するための変数、条件、およびコードインジェクションまたは交換を提供するためにデータを使用し得る。
[0126]ブロック1112では、コンピューティングデバイスは、アプリケーションにシステムサービスの実行の結果を返し得る。
[0127]図12は、実装形態に従う、動的コード生成を持つ時間変動ASLRを使用してシステムサービス実行をインプリメントするための方法1200を例示する。方法1200は、プロセッサ(例えば、図1および図2中のプロセッサ14)中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ASLR内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法1200をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
[0128]様々なインプリメンテーションでは、システムサービスの以前の実行は、システムサービスの後続の実行に使用される動的に生成されたコードをもたらし得、システムサービスの実行効率を改善し得る。ブロック1202では、コンピューティングデバイスは、システムサービスから動的に生成されたコードのためのコードバッファ空間を割り当てるために要求を受信し得る。システムサービスの異なるバージョンは、システムサービスのバージョンの後続の実行に使用され得る異なる動的に生成されたコードを生成し得る。
[0129]ブロック1204では、コンピューティングデバイスは、動的に生成されたコードを記憶するための空のコードバッファ空間を探索してコードバッファをトラバースし得る。様々なインプリメンテーションでは、コンピューティングデバイスは、コードバッファのランダムに選択するアドレスを含む、様々なアルゴリズム及びパターンを使用してコードバッファをトラバースし得る。コンピューティングデバイスは、アドレスが動的に生成されたコードを記憶するために利用可能であり、十分な大きさであるコードバッファ空間と関連付けられたかどうかを検査するために、コードバッファのアドレスを選択し得る。動的に生成されたコードを記憶するために十分な大きさのコードバッファ空間は、少なくとも、動的に生成されたコードのサイズおよび選択されたアドレスを含む、任意のコードバッファ空間であり得る。
[0130]決定ブロック1206では、コンピューティングデバイスは、選択されたコードバッファアドレスに関連付けられたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードために使用可能であるかどうか決定し得る。様々なインプリメンテーションでは、識別されたコードバッファ空間が使用可能かどうか決定することは、コードバッファ空間が動的に生成されたコードを記憶するために利用可能であり十分な大きさであるかどうかを決定することを含み得る。コンピューティングデバイスは、コードバッファ空間がコードバッファ空間をリスト、別のデータとあるデータをリンクするように構成された他のデータ構造、システムサービスバージョン識別子を相関すること、バインダリファレンス、またはコードバッファメモリアドレスを持つシステムサービスのバージョンのオブジェクトと比較することによって利用可能であり十分な大きさであるかどうか決定し得る。例えば、コンピューティングデバイスは、図4Bを参照して説明されたように、リスト422の記録とコードバッファ空間を比較し得る。利用可能であり十分な大きさであるコードバッファ空間は、コードバッファ空間のアドレスが他の動的に生成されたコードと相関されるリスト中のコードバッファアドレスと衝突しないものであり得る。
[0131]選択されたコードバッファアドレスに関連付けられたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードのために使用可能であると決定すること(つまり、決定ブロック1206=「Yes」)に応答して、コンピューティングデバイスは、ブロック1208において、識別されたコードバッファアドレス中のコードバッファ中に、システムサービスのバージョンから動的に生成されたコードを記憶し得る。
[0132]ブロック1210では、コンピューティングデバイスは、システムサービスのバージョンからの記憶された動的に生成されたコードのコードバッファアドレスが利用不可能であるまたは使用されたことを示すために、リストまたは別のデータと1つのデータをリンクするように構成される他のデータ構造を更新し得る。
[0133]システムサービスのバージョンと相関されたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードのために使用不可能であると決定すること(つまり、決定ブロック1206=「No」)に応答して、コンピューティングデバイスは、決定ブロック1212において、コードバッファがトラバースされたかどうかを決定し得る。様々な実施形態では、コードバッファをトラバースするために、コンピューティングデバイスは、動的に生成されたコードを記憶するために利用可能であり十分な大きさであるコードバッファ空間のための各コードバッファアドレスを検査し得る。様々な実施形態では、コードバッファをトラバースするために、コンピューティングデバイスは、残りのコードバッファアドレスが動的に生成されたコードを記憶するための十分な空間とコードバッファ空間を相関させることが出来ない程度のコードバッファアドレスを検査し得る。
[0134]コードバッファがトラバースされないと決定すること(つまり、決定ブロック1212=「No」)に応答して、コンピューティングデバイスは、ブロック1204において動的に生成されたコードを記憶するための空のコードバッファ空間を探索してコードバッファをトラバースすることを続け得る。
[0135]コードバッファがトラバースされると決定すること(つまり、決定ブロック1212=「Yes」)に応答して、コンピューティングデバイスは、ブロック1212においてシステムサービスのバージョンから動的に生成されたコードを廃棄または他のメモリ中に記憶し得る。
[0136](図1−図12を参照して上で説明された実施形態を含むがこれらに限定されない)様々な実施形態は、モバイルコンピューティングデバイスを含むコンピューティングシステムの多種多様においてインプリメントされ、様々な実施形態での使用のために適切なものの実例が図13に例示される。モバイルコンピューティングデバイス1300は、タッチスクリーンコントローラ1304および内部メモリ1306に結合されたプロセッサ1302を含み得る。プロセッサ1302は、汎用または特殊処理タスクのために指定された1つまたは複数のマルチコア集積回路であり得る。内部メモリ1306は、揮発性または不揮発メモリであり得、安全なおよび/もしくは暗号化されたメモリ、または安全でないおよび/もしくは暗号化されていないメモリ、あるいはそれらのあらゆる組み合わせであり得る。利用することができるメモリタイプの例は、DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P−RAM、R−RAM、M−RAM、STT−RAM、および埋め込みDRAMを含むがそれらに限定されない。タッチスクリーンコントローラ1304およびプロセッサ1302はまた、抵抗センシングタッチスクリーン、容量センシングタッチスクリーン、赤外線センシングタッチスクリーン、等のような、タッチスクリーンパネル1312に結合され得る。加えて、コンピューティングデバイス1300のディスプレイは、タッチスクリーン能力を有する必要はない。
[0137]モバイルコンピューティングデバイス1300は、互いに結合されたおよび/またはプロセッサ1302に結合された、通信を送るまたは受信するために、1つまたは複数の無線信号トランシーバ1308(例えば、Peanut、Bluetooth(登録商標)、Zigbee(登録商標)、Wi−Fi,RF無線)およびアンテナ1310を有し得る。トランシーバ1308およびアンテナ1310は、様々な送信プロトコルスタックおよびインターフェースをインプリメントするために上で述べられた回路で使用され得る。モバイルコンピューティングデバイス1300は、セルラネットワークを介して通信可能であり、プロセッサに結合されるセルラネットワークワイヤレスモデムチップを含み得る。
[0138]モバイルデバイス1300は、プロセッサ1302に結合された周辺デバイス接続インターフェース1318を含み得る。周辺デバイス接続インターフェース1318は、接続の1つのタイプを受け入れるように構成される、またはユニバーサルシリアルバス(USB)、ファイアウォール、サンダーボルト、またはPCIeのような、共通または専有の、物理および通信接続の様々なタイプを受け入れるように構成される。周辺デバイス接続インターフェース1318はまた、同様に構成された周辺デバイス接続ポート(図視されていない)に結合され得る。
[0139]モバイルコンピューティングデバイス1300はまた、無線出力を提供するためのスピーカーを含み得る。モバイルコンピューティングデバイス1300はまた、本明細書で説明されたコンポーネントのすべてまたはいくつかを包含すための、プラスチック、金属、または材料の組み合わせ構築されたハウジング1320を含み得る。モバイルコンピューティングデバイス1300は、使い捨てまたは再充電可能なバッテリーのような、ぷりせっさに結合される電力ソース1322を含み得る。再充電可能なバッテリーは、外部のソースからモバイルコンピューティングデバイス1300に充電電流を受信するために周辺デバイス接続ポートに結合され得る。モバイルデバイス1300はまた、ユーザ入力を受信するための物理的なボタン1324を含むみ得る。モバイルデバイス1300はまた、モバイルデバイス1300をオンおよびオフにするための電力ボタン1326を含み得る。
[0140](図1−図12を参照して上で説明された実施形態を含むがこれらに限定されない)様々な実施形態は、図14に例示されるものの実例の、ラップトップコンピュータ1400を含む多種多様なコンピューティングシステムにおいてインプリメントされ、実例が図14に例示される。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとしてサービスするタッチパッドタッチサーフェス1417を含み、したがって、タッチスクリーンディスプレイを搭載し、上で説明されたコンピューティングデバイス上でインプリメントされるそれらと同様に、ドラッグ、スクロール、およびフリックジェスチャを受信し得る。ラップトップコンピュータ1400は典型的に、揮発性メモリ1412に結合されたプロセッサ1411、およびフラッシュメモリのディスクドライブ1413のような、大容量の不揮発性メモリを含む。追加として、コンピュータ1400は、ワイヤレスデータリンクに結合される電磁放射を送受信するための1つまたは複数のアンテナ1408および/またはプロセッサに結合される携帯電話トランシーバ1416を有し得る。サーバ1400はまた、プロセッサ1411に結合されたフロッピー(登録商標)ディスクドライブ1414、コンパクトディスク(CD)ドライプ1415を含み得る。ノートブック構成では、すべてがプロセッサ1411に結合される、コンピュータハウジングは、タッチパッド1417、キーボード1418、およびディスプレイ1419を含む。コンピューティングデバイスの他の構成は、様々な実施形態と連動しても使用され得る、周知であるような、(例えばUSB入力を介して)プロセッサに結合されるコンピュータマウスまたはトラックボールを含み得る。
[0141](図1−図12を参照して上で説明された実施形態を含むがこれらに限定されない)様々な実施形態はまた、様々な商業的に利用可能なサーバのうちの任意のもののような、固定コンピューティングシステムにおいてインプリメントされ得る。実例的なサーバ1500は、図15で例示される。このようなサーバ1500は典型的に、揮発性メモリ1502およびディスクドライブ1504のような大容量の不揮発性メモリに結合された1つまたは複数のマルチコアアセンブリ1501を含む。図15において例示されるように、マルチコアアセンブリ1501は、アセンブリのラック中にそれらを挿入することによってサーバ1500に加えられ得る。サーバ1500はまた、プロセッサ1501に結合されたフロッピーディスクドライブ、コンパクトディスク(CD)、またはデジタル多用途ディスク(DVD)ディスクドライブ1506を含み得る。サーバ1500はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話ネットワーク、および/またはセルラデータネットワーク(例えば、CDMA、TDMA、GSM(登録商標)、PCS、3G、4G、LTE(登録商標)、もしくはあらゆる他のタイプのセルラネットワーク)のような、ネットワーク1505とのネットワークインターフェース接続を確立するためのプロセッサ1501に結合されたネットワークアクセスポイント1503を含み得る。
[0142]様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaSctipt、Visual Basic Stuctured Query Language(例えば、Transact−SQL)または様々な他のプログラマブル言語のような、高レベルプログラミング言語で書かれ得る。このアプリケーションにおいて使用されるコンピュータ可読記憶媒体上に記憶されるプログラムコード又はプログラムは、フォーマットがプロセッサによって理解不可能である、(オブジェクトコードのような)機械言語コードを参照し得る。
[0143]前述の方法の説明および処理フロー図は、単に例示的な例として提供されているだけであり、様々な実施形態の動作が、提示された順序で行われなければならないことを要求または意味するようには意図されていない。当業者によって理解されるように、前述の実施形態における動作の順序は、任意の順序で実行され得る。「その後に(thereafter)」、「その後(then)」、「次に(next)」などの用語は、動作の順序を限定することを意図したものではなく、これらの用語は、単に、方法の説明を通じて読者を導くために使用される。さらに、例えば、冠詞「a」、「an」、または「the」を使用した、請求項の要素への単数形でのいずれの言及も、その要素を単数であると限定するように解釈されるべきではない。
[0144]様々な実施形態に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとしてインプリメントされ得る。ハードウェアおよびソフトウェアのこの互換性を明確に例示するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、および動作が、概してそれらの機能の観点から上述されてきた。このような機能性がハードウェアとして実施されるかソフトウェアとして実施されるかは、特定のアプリケーション及びシステム全体に課せられる設計制約に依存する。当業者は、各特定のアプリケーションに関して、多様な方法で、説明された機能をインプリメントし得るが、このようなインプリメンテーションの決定は、特許請求の範囲から逸脱を引き起こしていると解釈されるべきでない。
[0145]本明細書に開示されている実施形態に関係して説明された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するように使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、あるいは本明細書で説明された機能を実行するように設計されたこれらの任意の組み合わせで実装または実行されうる。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つまたは複数のマイクロプロセッサ、またはいずれの他のこのような構成としても実装され得る。代替として、いくつかの動作または方法は、所与の機能に特有の回路によって実行され得る。
[0146]1つ又は複数の実施形態では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア又はこれらの任意の組み合わせで実現され得る。ソフトウェアでインプリメントされる場合、これら機能は、非一時的なコンピュータ可読媒体または非一時的なプロセッサ可読媒体上で、1つまたは複数の命令またはコードとして記憶されうる。本明細書に開示されたアルゴリズムまたは方法の動作は、非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体上に存在し得るプロセッサ実行可能なソフトウェアモジュールにおいて具現化され得る。非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得るいかなる記憶媒体でもあり得る。限定ではなく例として、そのような非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体は、RAM、ROM、EEPROM(登録商標)、FLASHメモリ、CD−ROMまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、または命令またはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、かつコンピュータによってアクセスされ得るいかなる他の媒体も含み得る。本明細書で使用されるとき、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびBlu−ray(登録商標)ディスクを含み、ここで、ディスク(disk)は通常、磁気的にデータを再生するが、ディスク(disc)は、レーザーを用いて光学的にデータを再生する。上記の組合せもまた、非一時的なコンピュータ読み取り可能なおよびプロセッサ読み取り可能な媒体の範囲内に含まれる。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれうる、非一時的なプロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の1つ、または任意の組み合わせ、またはそのセットとして存在しうる。
[0147]開示された実施形態についての前の説明は、当業者が本発明を製造又は使用することを可能にするために提供される。これらの実施形態への様々な修正は、当業者には容易に明らかとなり、ここで定義した一般原理は、特許請求の範囲から逸脱することなく他の実施形態およびインプリメンテーションに適用され得る。したがって、本開示は、本明細書に記載された実施形態およびインプリメンテーションに限定されるようには意図されず、以下の特許請求の範囲およびここで開示された原理および新規な特徴に合致する最も広い範囲を与えられることとなる。

Claims (36)

  1. コンピューティングデバイス上の時間変動アドレス空間ランダム化の方法であって、
    システムサービスの第1の複数のバージョンを起動することと、
    前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることと、
    第1のアプリケーションから前記システムサービスを実行するための第1の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することと、
    前記システムサービスの前記第1のバージョンのデータを使用して前記システムサービスを実行することと
    を備える、方法。
  2. 前記第1のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することと、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することと
    を備える、請求項1に記載の方法。
  3. 前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
    前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることと、
    前記システムサービス識別子および前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の相関を記憶することと、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることと、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
    をさらに備える、請求項1に記載の方法。
  4. 前記システムサービスを実行するための前記第1の要求は、前記システムサービス識別子を含み、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第1の複数のバージョンから前記システムサービスの前記第1のバージョンをランダムに選択することを備え、
    前記方法は、
    前記システムサービスの前記第1のバージョンの第1のシステムサービスバージョン識別子を前記第1のアプリケーションに提供することと、
    前記第1のアプリケーションから前記第1のシステムサービスバージョン識別子を有する前記システムサービスの前記第1のバージョンを実行するための要求を受信することと
    をさらに備える、請求項3に記載の方法。
  5. 前記第1のシステムサービスバージョン識別子と前記第1のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第1のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
    前記システムサービスの前記第1のバージョンの前記データが記憶される物理アドレスに前記第1のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
    前記システムサービスの前記第1のバージョンの前記データを検索することと
    を備える、請求項4に記載の方法。
  6. 前記システムサービスの前記第1の複数のバージョンの各々に処理識別子を割り当てることをさらに備え、
    前記システムサービスの前記第1の複数のバージョンの各々のための前記処理識別子は、同じであり、
    前記システムサービスの前記第1の複数のバージョンの各々に、ランダム仮想アドレス空間レイアウトを割り当てること、前記システムサービスの前記第1の複数のバージョンの各々に、システムサービスバージョン識別子を割り当てること、および前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることは、前記処理識別子を割り当てた前記システムサービスの前記第1の複数のバージョンの各々のために生じる、
    請求項3に記載の方法。
  7. コードバッファ空間に、前記システムサービスの前記第1のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
    コードバッファアドレスをランダムに選択することと、
    前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
    前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで動的に生成されたコードを記憶することと
    をさらに備える、請求項1に記載の方法。
  8. 第2のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記第2のアプリケーションから前記システムサービスを実行するための前記第2の要求が前記システムサービスに対する攻撃であると検出することと、
    前記システムサービスの第2の複数のバージョンを起動することと、
    前記システムサービスの前記第2の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第2の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
    前記システムサービスの前記第1の複数のバージョンおよび前記システムサービスの前記第2の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することと、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することと
    を備える、請求項1に記載の方法。
  9. システムサービスの第1の複数のバージョンを起動することは、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの1つ上で前記システムサービスの前記第1の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備え、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することは、前記システムサービスの前記第1のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第1の異種のプロセッサコアをランダムに選択することを備え、
    前記システムサービスの前記第1のバージョンの前記データを使用する前記システムサービスは、前記第1の異種のプロセッサコアによって前記システムサービスを実行することを備え、
    前記方法は、
    前記第1のアプリケーションから前記第1の異種のプロセッサコアに前記システムサービスを実行するための前記第1の要求を転送することと、
    前記第1の異種のプロセッサコアによる前記システムサービスの前記実行の出力を受信することと、
    前記第1のアプリケーションに前記出力を返すことと
    さらに備える、請求項1に記載の方法。
  10. コンピューティングデバイスであって、
    システムサービスの第1の複数のバージョンを起動することを備える動作を実行するように構成されるラウンチャと、
    前記ラウンチャに通信可能に結合され、前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることを備える動作を実行するように構成されるマッパと、
    前記ラウンチャと通信可能に結合され、
    第1のアプリケーションから前記システムサービスを実行するための第1の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することと
    を備える動作を実行するように構成された要求調整器と、
    前記要求調整器に通信可能に結合され、前記システムサービスの前記第1のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成されるプロセッサと
    を備える、コンピューティングデバイス。
  11. 前記要求調整器は、
    前記第1のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することと
    をさらに備える動作を実行するように構成され、
    前記プロセッサは、前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成される、
    請求項10に記載のコンピューティングデバイス。
  12. 前記ラウンチャは、前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なり、
    前記要求調整器は、
    前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させることと、
    前記システムサービス識別子および前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
    をさらに備える動作を実行するように構成される、
    前記プロセッサは、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させることと、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
    をさらに備える動作を実行するように実行可能な命令で構成される、請求項10に記載のコンピューティングデバイス。
  13. 前記要求調整器は、
    前記第1のアプリケーションから前記システムサービスを実行するための前記第1の要求を受信することは、前記システムサービス識別子を受信することを備え、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第1の複数のバージョンから前記システムサービスの前記第1のバージョンをランダムに選択することを備える、
    ような動作を実行するように構成され、
    前記プロセッサは、
    前記システムサービスの前記第1のバージョンの第1のシステムサービスバージョン識別子を前記第1のアプリケーションに提供することと、
    前記第1のアプリケーションから前記第1のシステムサービスバージョン識別子を有する前記システムサービスの前記第1のバージョンを実行するための要求を受信することと
    をさらに備える動作を実行するように実行可能な命令で構成される、請求項12に記載のコンピューティングデバイス。
  14. 前記プロセッサは、
    前記第1のシステムサービスバージョン識別子と前記第1のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第1のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
    前記システムサービスの前記第1のバージョンの前記データが記憶される物理アドレスに前記第1のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
    前記システムサービスの前記第1のバージョンの前記データを検索することと
    をさらに備える動作を実行するように実行可能な命令で構成される、請求項13に記載のコンピューティングデバイス。
  15. 前記ラウンチャは、前記システムサービスの前記第1の複数のバージョンの各々に処理識別子を割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第1の複数のバージョンの各々の前記処理識別子は、同じであり、
    前記マッパは、前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることが、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々について生じるような動作を実行するように構成され、
    前記ラウンチャは、前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることが、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々について生じるような動作を実行するように構成され、
    前記プロセッサは、前記システムサービスのシステムサービス識別子に前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることが、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々について生じるような動作を実行するように実行可能な命令で構成される、
    請求項12に記載のコンピューティングデバイス。
  16. 前記要求調整器に通信可能に結合され、
    コードバッファ空間に、前記システムサービスの前記第1のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
    コードバッファアドレスをランダムに選択することと、
    前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
    前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで動的に生成されたコードを記憶することと
    を備える動作を実行するように構成されるメモリ割り振り器をさらに備える、請求項10に記載のコンピューティングデバイス。
  17. 前記要求調整器は、
    第2のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記第2のアプリケーションから前記システムサービスを実行するための前記第2の要求が前記システムサービスに対する攻撃であると検出することと
    をさらに備える動作を実行するように構成され、
    前記ラウンチャは、前記システムサービスの第2の複数のバージョンを起動することをさらに備える動作を実行するように構成され、
    前記マッパは、前記システムサービスの前記第2の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第2の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
    前記要求調整器は、前記システムサービスの前記第1の複数のバージョンおよび前記システムサービスの前記第2の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することをさらに備える動作を実行するように構成され、
    前記プロセッサは、前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成される、
    請求項10に記載のコンピューティングデバイス。
  18. 前記ラウンチャは、システムサービスの第1の複数のバージョンを起動することが、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの1つ上で前記システムサービスの前記第1の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備えるような動作を実行するように構成され、
    前記要求調整器は、前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することが、前記システムサービスの前記第1のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第1の異種のプロセッサコアをランダムに選択することを備えような動作を実行するように構成され、
    前記プロセッサは、前記第1の異種のプロセッサコアであり、前記システムサービスの前記第1のバージョンのデータを使用する前記システムサービスが、前記第1の異種のプロセッサコアによって前記システムサービスを実行するような動作を実行するように実行可能な命令で構成され、
    前記要求調整器は、
    前記第1のアプリケーションから前記第1の異種のプロセッサコアに前記システムサービスを実行するための前記第1の要求を転送することと、
    前記第1の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信することと、
    前記第1のアプリケーションに前記出力を返すことと
    をさらに備える動作を実行するように構成される、請求項10に記載のコンピューティングデバイス。
  19. コンピューティングデバイスであって、
    システムサービスの第1の複数のバージョンを起動するための手段と、
    前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段と、
    第1のアプリケーションからシステムサービスを実行するための第1の要求を受信するための手段と、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択するための手段と、
    前記システムサービスの前記第1のバージョンのデータを使用して前記システムサービスを実行するための手段と
    を備える、コンピューティングデバイス。
  20. 前記第1のアプリケーションから前記システムサービスを実行するための第2の要求を受信するための手段と、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択するための手段と、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行するための手段と
    を備える、請求項19に記載のコンピューティングデバイス。
  21. 前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てるための手段、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
    前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させるための手段と、
    前記システムサービス識別子および前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶するための手段と、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させるための手段と、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶するための手段と
    をさらに備える、請求項19に記載のコンピューティングデバイス。
  22. 前記システムサービスを実行するための前記第1の要求は、前記システムサービス識別子を含み、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択するための手段は、前記システムサービス識別子と相関された前記システムサービスの前記第1の複数のバージョンから前記システムサービスの前記第1のバージョンをランダムに選択するための手段を備え、
    前記コンピューティングデバイスは、
    前記システムサービスの前記第1のバージョンの第1のシステムサービスバージョン識別子を前記第1のアプリケーションに提供するための手段と、
    前記第1のアプリケーションから前記第1のシステムサービスバージョン識別子を有する前記システムサービスの前記第1のバージョンを実行するための要求を受信するための手段と
    をさらに備える、請求項21に記載のコンピューティングデバイス。
  23. 前記第1のシステムサービスバージョン識別子と前記第1のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第1のシステムサービスバージョンのランダム仮想アドレスを位置付けるための手段と、
    前記システムサービスの前記第1のバージョンの前記データが記憶される物理アドレスに前記第1のシステムサービスバージョンの前記ランダム仮想アドレスを変換するための手段と、
    前記システムサービスの前記第1のバージョンの前記データを検索するための手段と
    をさらに備える、請求項22に記載のコンピューティングデバイス。
  24. 前記システムサービスの前記第1の複数のバージョンの各々に処理識別子を割り当てるための手段をさらに備え、前記システムサービスの前記第1の複数のバージョンの各々の前記処理識別子は、同じであり、
    前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々のための前記システムサービスの前記第1の複数のバージョンの各々に、前記ランダム仮想アドレス空間レイアウトを割り当てるための手段を備え、
    前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々のための前記システムサービスの前記第1の複数のバージョンの各々に、前記システムサービスバージョン識別子を割り当てるための手段を備え、
    前記システムサービスの前記システムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第1の複数のバージョンの各々のための前記システムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させるための手段を備える、
    請求項21に記載のコンピューティングデバイス。
  25. コードバッファ空間に、前記システムサービスの前記第1のバージョンの実行の動的に生成されたコードに割り振るための要求を受信するための手段と、
    コードバッファアドレスをランダムに選択するための手段と、
    前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定するための手段と、
    前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで前記動的に生成されたコードを記憶するための手段と
    を備える、請求項19に記載のコンピューティングデバイス。
  26. 第2のアプリケーションから前記システムサービスを実行するための第2の要求を受信するための手段と、
    前記第2のアプリケーションから前記システムサービスを実行するための前記第2の要求が前記システムサービスに対する攻撃であると検出するための手段と、
    前記システムサービスの第2の複数のバージョンを起動するための手段と、
    前記システムサービスの前記第2の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第2の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
    前記システムサービスの前記第1の複数のバージョンおよび前記システムサービスの前記第2の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択するための手段と、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行するための手段と
    を備える、請求項19に記載のコンピューティングデバイス。
  27. システムサービスの第1の複数のバージョンを起動するための手段は、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの1つ上で前記システムサービスの前記第1の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動するための手段を備え、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択するための手段は、前記システムサービスの前記第1のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第1の異種のプロセッサコアをランダムに選択するための手段を備え、
    前記システムサービスの前記第1のバージョンのデータを使用する前記システムサービスは、前記第1の異種のプロセッサコアによって前記システムサービスを実行するための手段を備え、
    前記コンピューティングデバイスは、
    前記第1のアプリケーションから前記第1の異種のプロセッサコアに前記システムサービスを実行するための前記第1の要求を転送するための手段と、
    前記第1の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信するための手段 と、
    前記第1のアプリケーションに前記出力を返すための手段と
    さらに備える、請求項19に記載のコンピューティングデバイス。
  28. コンピューティングデバイスのプロセッサに、
    システムサービスの第1の複数のバージョンを起動することと、
    前記システムサービスの前記第1の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることと、
    第1のアプリケーションから前記システムサービスを実行するための第1の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することと
    を備える動作を実行するように構成された要求調整器と、
    前記システムサービスの前記第1のバージョンのデータを使用して前記システムサービスを実行することと
    を備える動作を実行させるように構成された、その上に記憶されたプロセッサ実行可能命令を有する非一時的プロセッサ可読記憶媒体。
  29. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    前記第1のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することと、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することと
    をさらに備える動作を実行させるように構成される、請求項28に記載の非一時的プロセッサ可読記憶媒体。
  30. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    前記システムサービスの前記第1の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
    前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させることと、
    前記システムサービス識別子および前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと、
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させることと
    前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する1つと、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
    をさらに備える動作を実行させるように構成される、請求項28に記載の非一時的プロセッサ可読記憶媒体。
  31. 前記システムサービスを実行するための前記第1の要求は、前記システムサービス識別子を含み、
    前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第1の複数のバージョンから前記システムサービスの前記第1のバージョンをランダムに選択することを行わせるように構成され、
    前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    前記システムサービスの前記第1のバージョンの第1のシステムサービスバージョン識別子を前記第1のアプリケーションに提供することと、
    前記第1のアプリケーションから前記第1のシステムサービスバージョン識別子を有する前記システムサービスの前記第1のバージョンを実行するための要求を受信することと
    をさらに備える動作を実行させるように構成される、請求項30に記載の非一時的プロセッサ可読記憶媒体。
  32. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    前記第1のシステムサービスバージョン識別子と前記第1のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第1のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
    前記システムサービスの前記第1のバージョンの前記データが記憶される物理アドレスに前記第1のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
    前記システムサービスの前記第1のバージョンの前記データを検索することと
    をさらに備える動作を実行させるように構成される、請求項31に記載の非一時的プロセッサ可読記憶媒体。
  33. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第1の複数のバージョンの各々に処理識別子を割り当てることをさらに備える動作を実行させるように構成され、前記システムサービスの前記第1の複数のバージョンの各々の前記処理識別子は、同じであり、
    前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第1の複数のバージョンの各々に、ランダム仮想アドレス空間レイアウトを割り当てること、前記システムサービスの前記第1の複数のバージョンの各々に、システムサービスバージョン識別子を割り当てること、および前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第1の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることが、前記処理識別子を割り当てた前記システムサービスの前記第1の複数のバージョンの各々のために生じるような動作を実行させるように構成される、
    請求項30に記載の非一時的プロセッサ可読記憶媒体。
  34. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    コードバッファ空間に、前記システムサービスの前記第1のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
    コードバッファアドレスをランダムに選択することと、
    前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
    前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで前記動的に生成されたコードを記憶することと
    をさらに備える動作を実行させるように構成される、請求項28に記載の非一時的プロセッサ可読記憶媒体。
  35. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    第2のアプリケーションから前記システムサービスを実行するための第2の要求を受信することと、
    前記第2のアプリケーションから前記システムサービスを実行するための前記第2の要求が前記システムサービスに対する攻撃であると検出することと、
    前記システムサービスの第2の複数のバージョンを起動することと、
    前記システムサービスの前記第2の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、ここにおいて、前記システムサービスの前記第1の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第2の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
    前記システムサービスの前記第1の複数のバージョンおよび前記システムサービスの前記第2の複数のバージョンから前記システムサービスの第2のバージョンをランダムに選択することと、
    前記システムサービスの前記第2のバージョンのデータを使用して前記システムサービスを実行することと
    をさらに備える動作を実行させるように構成される、請求項28に記載の非一時的プロセッサ可読記憶媒体。
  36. 前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    システムサービスの第1の複数のバージョンを起動することが、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの1つ上で前記システムサービスの前記第1の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備え、
    前記システムサービスの前記第1の複数のバージョンから前記システムサービスの第1のバージョンをランダムに選択することが、前記システムサービスの前記第1のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第1の異種のプロセッサコアをランダムに選択することを備え、
    前記システムサービスの前記第1のバージョンのデータを使用する前記システムサービスが、前記第1の異種のプロセッサコアによって前記システムサービスを実行することを備える、
    ような動作を実行させるように構成され、
    前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
    前記第1のアプリケーションから前記第1の異種のプロセッサコアに前記システムサービスを実行するための前記第1の要求を転送することと、
    前記第1の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信することと、
    前記第1のアプリケーションに前記出力を返すことと
    をさらに備える動作を実行させるように構成される、請求項28に記載の非一時的プロセッサ可読記憶媒体。
JP2018550779A 2016-03-31 2017-02-27 時間変動アドレス空間のレイアウトランダム化 Pending JP2019513270A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/087,198 2016-03-31
US15/087,198 US10013554B2 (en) 2016-03-31 2016-03-31 Time varying address space layout randomization
PCT/US2017/019716 WO2017172164A1 (en) 2016-03-31 2017-02-27 Time varying address space layout randomization

Publications (1)

Publication Number Publication Date
JP2019513270A true JP2019513270A (ja) 2019-05-23

Family

ID=58358838

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018550779A Pending JP2019513270A (ja) 2016-03-31 2017-02-27 時間変動アドレス空間のレイアウトランダム化

Country Status (9)

Country Link
US (2) US10013554B2 (ja)
EP (1) EP3437008A1 (ja)
JP (1) JP2019513270A (ja)
KR (1) KR20180125976A (ja)
CN (1) CN108885661A (ja)
BR (1) BR112018069707A2 (ja)
CA (1) CA3016005A1 (ja)
TW (1) TW201737150A (ja)
WO (1) WO2017172164A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10291391B2 (en) * 2014-06-04 2019-05-14 Giesecke+Devrient Mobile Security Gmbh Method for enhanced security of computational device with multiple cores
US10268601B2 (en) 2016-06-17 2019-04-23 Massachusetts Institute Of Technology Timely randomized memory protection
US10191791B2 (en) * 2016-07-02 2019-01-29 Intel Corporation Enhanced address space layout randomization
US10310991B2 (en) * 2016-08-11 2019-06-04 Massachusetts Institute Of Technology Timely address space randomization
US10481816B2 (en) * 2017-10-18 2019-11-19 Western Digital Technologies, Inc. Dynamically assigning data latches
GB2568527B (en) 2017-11-20 2020-04-15 Trustonic Ltd Address layout varying process
US11070373B2 (en) * 2018-02-21 2021-07-20 Ebay Inc. Masked key hopping
KR102186221B1 (ko) * 2018-11-29 2020-12-03 한국전자통신연구원 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치
US11681794B2 (en) 2021-04-07 2023-06-20 Oracle International Corporation ASLR bypass

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4875159A (en) * 1987-12-22 1989-10-17 Amdahl Corporation Version management system using plural control fields for synchronizing two versions of files in a multiprocessor system
EP1870814B1 (en) * 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
GB0504326D0 (en) * 2005-03-02 2005-04-06 Symbian Software Ltd Dual mode operating system for a computing device
US8756363B2 (en) * 2011-07-07 2014-06-17 Oracle International Corporation Efficient storage of memory version data
US8694738B2 (en) 2011-10-11 2014-04-08 Mcafee, Inc. System and method for critical address space protection in a hypervisor environment

Also Published As

Publication number Publication date
BR112018069707A2 (pt) 2019-02-05
EP3437008A1 (en) 2019-02-06
US10013554B2 (en) 2018-07-03
US20180314825A1 (en) 2018-11-01
WO2017172164A1 (en) 2017-10-05
US20170286674A1 (en) 2017-10-05
CN108885661A (zh) 2018-11-23
TW201737150A (zh) 2017-10-16
KR20180125976A (ko) 2018-11-26
CA3016005A1 (en) 2017-10-05

Similar Documents

Publication Publication Date Title
JP2019513270A (ja) 時間変動アドレス空間のレイアウトランダム化
JP6903682B2 (ja) 仮想リソースビューを使用するデータ保護
EP3295315B1 (en) Method and apparatus for virtualized control of a shared system cache
JP6378417B2 (ja) 動的パーティショニングを用いる共有されるキャッシュのための方法および装置
TWI610172B (zh) 用於經由集合和通道來靈活地將快取記憶體劃分成分量快取記憶體的方法和裝置
US10503656B2 (en) Performance by retaining high locality data in higher level cache memory
US20190073305A1 (en) Reuse Aware Cache Line Insertion And Victim Selection In Large Cache Memory
US11954051B2 (en) Managed NAND Flash memory region control against endurance hacking
US20190235938A1 (en) Enhanced address space layout randomization
CN112825041A (zh) 一种内存隔离的装置、内存隔离方法和相关设备
JP7264806B2 (ja) キャッシュエントリでメモリアクセス要求のペンデンシを識別するシステム及び方法
US9542318B2 (en) Temporary cache memory eviction
WO2017035813A1 (zh) 一种数据访问方法、装置及系统
US20230100230A1 (en) Using request class and reuse recording in one cache for insertion policies of another cache
CN110832462B (zh) 反向平铺
KR20240067951A (ko) 다른 캐시의 삽입 정책에 대해 한 캐시의 요청 클래스 및 재사용 기록 사용
US20160103612A1 (en) Approximation of Execution Events Using Memory Hierarchy Monitoring