JP2010511227A - 信頼性の低いアドレス空間への実行コードのコンパイル - Google Patents

信頼性の低いアドレス空間への実行コードのコンパイル Download PDF

Info

Publication number
JP2010511227A
JP2010511227A JP2009538535A JP2009538535A JP2010511227A JP 2010511227 A JP2010511227 A JP 2010511227A JP 2009538535 A JP2009538535 A JP 2009538535A JP 2009538535 A JP2009538535 A JP 2009538535A JP 2010511227 A JP2010511227 A JP 2010511227A
Authority
JP
Japan
Prior art keywords
code
address space
application program
jit compiler
requests
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.)
Withdrawn
Application number
JP2009538535A
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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2010511227A publication Critical patent/JP2010511227A/ja
Withdrawn 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/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
    • G06F21/53Monitoring 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 by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Abstract

管理されたコードを実行する安全でないアプリケーションプログラムが、安全な仕方で実行される。特に、オペレーティングシステムは、アプリケーションプログラムをユーザーモードで実行するが、カーネルモードで動作する型安全なJITコンパイラを介して、管理されたコードのコンパイルを処理するように構成される。オペレーティングシステムは、また、単一のメモリロケーションが、異なる許可セットを使用して、複数のアドレス空間を介してアクセスされることも指定可能である。ユーザーモードで動作するアプリケーションプログラムは、読み取り/実行アドレス空間で実行されうるが、JITコンパイラは、読み取り/書き込みアドレス空間で実行されうる。中間言語コードへの1つまたは複数のポインタに遭遇した場合、アプリケーションランタイムは、1つまたは複数のコンパイル要求を、その要求を検証するカーネルモードのセキュリティ構成要素に送出できる。要求が検証されると、JITコンパイラは、要求された中間言語コードをコンパイルし、アプリケーションプログラムは、共有メモリヒープからコンパイルされたコードにアクセスできる。

Description

本発明は、信頼性の低いアドレス空間へ実行コードをコンパイルするための情報処理に関する。
コンピュータシステムは、大衆性が高まり、またコンピュータシステム上で使用される様々なアプリケーションプログラムも同様である。特に、現在では、複雑なオペレーティングシステム、データベースなどとして、または単純な計算器として機能する、多数の目的のために構成された広範なアプリケーションプログラムがある。多くの場合、ソフトウェア開発者は、様々な適切な言語を使用して、特定のオペレーティングシステムを念頭に、新規のアプリケーションプログラムを書くはずである。ソフトウェアが完成すると、開発者は、アプリケーションを、適切なオペレーティングシステムを有するコンピュータシステム上にインストールすることが可能な機械実行コードにコンパイルするはずである。
したがって、しばしば、オペレーティングシステムの開発者および個々のアプリケーションプログラムの開発者によって考慮されなければならない多くの考慮事項があることが理解されよう。これらの関心事の多くは、競合することさえある。たとえば、多くのアプリケーションプログラム開発者は、素早く高速な動作に関係することについて関心を持つが、一方で多くのオペレーティングシステム開発者は、セキュリティおよび安定性に関係することについて関心を持つ。ある場合には、セキュリティおよび安定性の要件は、いくつかのアプリケーションプログラムにより遅い実行および/またはより低い性能をもたせうる。
たとえば、オペレーティングシステムは、アプリケーションプログラムを信頼性の低い「ユーザー」レベルで実行させるが、他のシステム構成要素を信頼できる「カーネル」レベルで実行させるように構成されている。その結果、ユーザーレベルで実行しているアプリケーションプログラムは、中間の信頼できる構成要素を介して所与の機能を要求することにより、ある種類の機能を実行することのみが可能となる。中間の構成要素は、次いで要求を検証し、機能についての要求を、その要求を実行可能なカーネルレベルの構成要素に渡す。
セキュリティ管理の他の方法は、様々なアプリケーションおよび構成要素を制限して特有の読み取り可能、書き込み可能、および/または実行可能とする許可空間を制限する方法である。たとえば、オペレーティングシステムは、あるアプリケーションプログラムを読み取り/実行アドレス空間でのみ実行可能とする。これは、アプリケーションプログラムが任意の既存の命令を実行できるが、アプリケーションが任意の書き込み動作を実行するのを禁止することになる。対照的に、オペレーティングシステムは、他のセンシティブ(sensitive)なシステム構成要素を読み取り/書き込みアドレス空間でのみ動作可能にすることができる。これは、センシティブな構成要素が新規に書き込むことを行うことはできるが、それらの書き込み(書き込まれた情報)を実行することを禁止することになる。
さらに他の場合では、オペレーティングシステムは、あるコード標準に準拠するある種類のアプリケーションプログラムのみを、読み取り可能、書き込み可能、および実行可能な空間で実行可能とすることができる。たとえば、オペレーティングシステムは、「型安全(type−safe)」なアプリケーションのみを、読み取り/書き込み/実行アドレス空間で実行可能とすることができる。型安全性(type−safety)規則の一例は、浮動小数点値でなく、他の整数値にのみに加算される整数値を要求することである。型安全なコンパイラは、型安全な、したがってオペレーティングシステムによって信頼される、実行可能なプログラムコードのみをコンパイルするのに使用可能である。
残念ながら、アプリケーションプログラム開発における最近のいくつかの傾向は、前述のセキュリティ管理のアプローチの様々な態様を複雑にしている。たとえば、広範なアプリケーション開発者は、現在、「管理されたコード」を使用してビデオゲームのアプリケーションプログラムを作成している。一般に、管理されたコードは、実行可能なプログラムコード、および必要に応じてコンパイルされる中間言語コードを含む。たとえば、アプリケーションプログラムの開発者は、中間コードへの1つまたは複数の参照を(コンパイルされた、実行コードに)含める。したがって、実行コードが、中間言語コードでのみ利用可能な機能を使用する必要が生じた時点で、JIT(ジャストインタイム)コンパイラがある中間言語コードを実行可能命令にコンパイルするのに使用される。
したがって、オペレーティングシステムは、場合によっては、管理されたコードの使用を型安全なアプリケーションに制限することが理解できよう。特に、JITコンパイラは書き込む必要があり、アプリケーションは実行する必要があり、さらにアプリケーションプログラムは、JITコンパイラによって書かれたコンパイルされたコードにアクセスする必要があるので、JITコンパイラおよび実行するアプリケーションプログラムは、通常、読み取り可能、書き込み可能、および実行可能な、同じアドレス空間で動作することになる。したがって、中間言語コードが型安全でない(または、他のあるプログラムコード制約に準拠していない)場合、悪意のある関係者は、JITコンパイラを騙して実行される有害な命令を生成することができる。
残念ながら、型安全性などのプログラムコードの制約は、しばしば、速度および性能上の考慮事項と競合すると考えられている。これは、特に、速度および性能上の考慮事項が重要視されるビデオゲームアプリケーションに関して問題となる。したがって、ある場合には、ビデオゲームアプリケーションの開発者は、型安全性などの特有のコード仕様を無視することが、より良いまたはより効率的であると考えることがある。
本発明の実施形態は、管理されたコードが必ずしも任意の特定なコード標準に準拠するとは限らないオペレーティングシステムで、管理されたコードを使用できるように構成された、システム、方法、およびコンピュータプログラム製品を提供する。ある実施形態では、たとえば、オペレーティングシステムは、メモリロケーションが、2つの異なるアドレス空間から異なる許可を使用してアクセス可能であるように、2つの異なるアドレス空間にあるメモリロケーションへのアクセスを提供し、アドレス空間に許可を設定する。ある実施形態では、あるアドレス空間で動作するJITコンパイラは、コンパイルされたコードを共有メモリヒープに渡す。実行可能なプログラムコードは、メモリヒープからコンパイルされたコードにアクセスし、そのコードを他のメモリアドレス空間で実行する。
たとえば、システムの安全性を脅かさないまたは危うくしないやり方で、信頼できないプログラムコードがコンパイルおよび実行されうるように、管理されたコードを実行する方法は、アプリケーションプログラムをメモリロケーションの第1アドレス空間で実行することを含みうる。その方法は、アプリケーションプログラムから1組または複数組の中間言語命令をコンパイルするための1つまたは複数の要求を受け取ることも含みうる。さらに、その方法は、メモリロケーションの第2アドレス空間で実行するJITコンパイラを使用して、1組または複数組の中間言語命令を新規にコンパイルされたコードにコンパイルすることを含みうる。さらに、その方法は、新規にコンパイルされたコードを共有メモリヒープに渡すことを含みうる。アプリケーションプログラムは、次いで、第1アドレス空間への共有メモリヒープから、新規にコンパイルされたコードを取得しうる。
同様に、セキュリティ違反を回避しながらJITコンパイルを使用するやり方で、コンピュータ実行可能なプログラムコードを生成する別の方法は、実行コードおよびコンパイルされるコードを含むアプリケーションプログラムコードを受け取ることを含みうる。その方法は、実行コードをより低い特権モードおよび第1アドレス空間で実行することも含みうる。さらに、その方法は、コンパイルされる少なくともいくつかのコード用の実行コードで1つまたは複数のポインタを識別することを含みうる。さらに、その方法は、より高い特権モードに切り替えることを含みうる。さらに、その方法は、より高い特権モードで動作するコンパイラを使用して、異なるアドレス空間で少なくともいくつかのコードをコンパイルすることを含みうる。
この概要は、下記の詳細な説明でさらに説明する、簡略化した形態での概念の選択を紹介するために提供される。この概要は、請求される主題の主要な特徴または本質的な特徴を識別することを意図しておらず、請求される主題の範囲を決定する助けとして使用されることも意図していない。
本発明のさらなる特徴および利点は、下記で説明され、その一部は説明から自明であり、また本発明の実施によって明らかになるであろう。本発明の特徴および利点は、特に添付の特許請求の範囲で指摘する機器および組合せによって、実現および獲得されうる。これらおよび他の本発明の特徴は、下記の説明および添付の特許請求の範囲から、より完全に明らかになり、また下記に説明する本発明の実施によって明らかになるであろう。
本発明の前述および他の利点および特徴が得られるやり方を説明するために、簡潔に前述した本発明の説明を、添付の図面に示す本発明の特有の実施形態を参照して、より具体的に表す。これらの図面は、本発明の典型的な実施形態を示すのみであり、したがって、その範囲を限定すると見なすべきではないことを理解して、本発明を添付の図面を使用して、さらに具体的および詳細に説明する。
信頼できるセキュリティモードでJITコンパイラによってコンパイルされる管理されたコードを、信頼性の低いセキュリティモードで実行しているアプリケーションプログラムが呼び出す、本発明による実施形態の全体概略図である。 オペレーティングシステムによって管理されるメモリロケーションが、メモリロケーションへの異なるアクセス許可を有する、2つの異なるアドレス空間にある構成要素によってアクセス可能であることを示す概略図である。 JITコンパイラが、中間言語命令の1つまたは複数の要求を受け取り、処理する、本発明の実施形態による一連の動作のフローチャートである。 オペレーティングシステムが、管理されたコードへの1つまたは複数の参照を含むアプリケーションプログラムを受け取り、1つまたは複数のセキュリティ機構に従ってアプリケーションプログラムを実行する、一連の動作の概略のフローチャートである。
本発明の実施形態は、管理されたコードが必ずしも任意の特定なコード標準に準拠するとは限らないオペレーティングシステムで、管理されたコードを使用できるように構成された、システム、方法、およびコンピュータプログラム製品に及ぶ。ある実施形態では、たとえば、オペレーティングシステムは、メモリロケーションが、2つの異なるアドレス空間から異なる許可を使用してアクセス可能であるように、2つの異なるアドレス空間にあるメモリロケーションへのアクセスを提供し、アドレス空間に許可を設定する。ある実施形態では、あるアドレス空間で動作するJITコンパイラは、コンパイルされたコードを共有メモリヒープに渡す。実行可能なプログラムコードは、メモリヒープからコンパイルされたコードにアクセスし、そのコードを他のメモリアドレス空間で実行する。
ここでより完全に理解されるように、本発明の実施形態は、生成されたコードがシステムのセキュリティ制約に違反しないことを必ずしも検証する必要なしに、安全なシステムを提供することができる。これは、コンパイルされたコードおよび実行されている他の任意のコードを、少なくとも部分的に「サンドボックス」することにより実現されうる。特に、本発明の実施形態は、任意の種類のコードが実行されうる、本質的には事前定義された1組の境界である、「サンドボックス」を定義できる。具体的には、本明細書で説明するサンドボックス境界は、オペレーティングシステムによって拒否された(ユーザーモード構成要素から来ているので)、または事前定義された許可内のみの動作または機能に制限された(たとえば、読み取り/実行アドレス空間への書き込みを拒否する)、コードを実行することによって作成される、悪意のある(1つまたは複数の)要求を生じることになる。
その結果、JITコンパイラ(たとえば、105)によって、さらには最終的にJITコンパイラを呼び出すアプリケーションプログラム(たとえば、110)によってコンパイルされるコードは、必ずしも「型安全」ではなく、またいくつかの他のセキュリティ上の考慮事項に準拠することなく、サンドボックス内で実行されうる。これは、これまで可能であったよりも潜在的に制約が少なく、潜在的に高速および性能主導型のやり方で、アプリケーションプログラムコードを書く任意の開発者を解放しうることが理解されよう。
コードが正しく実行されるようにすることに加えて、本発明の実施形態は、JITコンパイラ自体が、中間言語コードを受け取り、コンパイルする場合などに、「ハイジャック」されないようにする機構も提供する。特に、本発明の実施形態は、入ってくるコードを型安全性について必ずチェックする、または必ず型安全なコードのみをコンパイルするのではなく、型安全な実行のために構成されたJITコンパイラを含む。したがって、本発明の実施形態によるJITコンパイラは、JITコンパイラ自体を安全性定義(たとえば、型安全定義)に違反させることになる要求に対して保護されうる。
ある実施形態では、たとえば、JITコンパイラは、それ自体のデータ構造、またはシステム100のランタイムの部分として定義されるデータ構造の外部にJITコンパイラが到達するのを制限する、型安全性定義を使用して構成されうる。たとえば、JITコンパイラは、ある型から別の型へのキャストを実行する場合はいつでも、有効なキャストのみが実行されるようにするために、一連のチェックを実行するように構成されうる。同様に、JITコンパイラは、配列から読み取るように要求された場合はいつでも、JITコンパイラが配列の範囲内にあるようにする1つまたは複数の境界のチェックを実行するように構成されうる。また、Cプログラミング言語内での使用に関して、たとえば、JITコンパイラは、「合併集合(union)」を使用する場合はいつでも、合併集合の適切な部分を読み取り、また適切な部分に書き込むようにも構成されうる。さらに、JITコンパイラは、型スタック(JITコンパイラ内の型スタック)を読み取る、または型スタックに書き込む間、オーバーフローまたはアンダーフローを起こさないように構成されうる。
一般に、JITコンパイラの型スタックは、正確さなどを維持するのに全体に重要な、内部データ構造である。たとえば、中間言語コードは、通常、JITコンパイラがスタック内のオブジェクトに対して順番に動作し、結果を順番にスタックに戻して配置する、スタックベースのシステムである。本発明の実施形態によるJITコンパイラは、予想どおりに動作するように、スタックをシミュレートするように構成される。たとえば、JITコンパイラは、中間言語コードをコンパイルしながら、スタックのシミュレーションを実行できる。シミュレートされたスタックが、JITコンパイラが供給されている内容から著しく逸脱する場合、JITコンパイラは、コンパイルを停止でき、またはエラーを生成できる。これは、JITコンパイラが所定の境界内で動作するようにし、したがって1つまたは複数のセキュリティ規則への違反から保護されるようにするのに役立つ。
図1Aに、アプリケーションプログラム(すなわち、110)が実行されている、コンピュータシステム100(たとえば、ビデオゲームのオペレーティングシステム)の全体概略図を示す。ある実施形態では、アプリケーションプログラム110は、ビデオゲームアプリケーションであるが、アプリケーションプログラム110は、任意の種類の実行可能なプログラムコードでよいことが理解されよう。図1Aは、どのような場合でも、アプリケーションプログラム110が、中間言語(「IL」)コード120へのポインタ140を含むコンパイルされたコード135などの、1組または複数組の実行可能命令を含むことも示す。同様に、図1Aは、アプリケーションプログラム110が、中間言語コード125へのポインタ150を含むコンパイルされたコード145を含むことを示す。中間言語コード125は、コード120、125、130などの、実行されうる前にさらにコンパイルを必要とする、いくつかの異なる構成要素またはモジュールを含む。
アプリケーションプログラム110がコンピュータシステム100で実行されるまたは実行されうる、いくつもの異なる方法がある。たとえば、ユーザーは、記憶装置を、システム100がインストールされた別の装置にロードできる。その記憶装置は、アプリケーションプログラム110用のバイナリ実行コード、および中間言語コード115の形態での管理されたコードを含みうる。アプリケーションプログラム110の実行コードおよび中間言語コードは両方とも、その後、コンピュータシステム100にロードされうる。他の場合では、開発者などのユーザーは、ネットワーク接続を介して、中間言語コード115を含むアプリケーションプログラム110をアップロードできる。そのような場合には、ユーザーは、新規に開発されたアプリケーションプログラム(たとえば、110)をテストするために、アプリケーションプログラム110を実行することができる。
どのような場合でも、図1Aは、アプリケーションプログラム110がより低い特権モード(たとえば、「ユーザー」モード)で実行され、一方JITコンパイラ105はより高い特権モード(たとえば、「カーネル」モード)で動作していることも示す。たとえば、図1Aは、アプリケーションプログラム110がユーザー特権を有するユーザーモード113で動作し、一方JITコンパイラ105は対応するカーネル特権を有するカーネルモード103で動作していることを示す。さらに、図1Aは、中間言語コード115が、カーネル103レベルの特権を有する1つまたは複数の構成要素によってアクセスされることを示す。反対に、また本明細書でより完全に理解されるように、実行コードは、ユーザー113レベルの特権で動作する構成要素によってのみ実行されることになる。
したがって、アプリケーションプログラム110用のランタイムはコンパイルされた命令135、145のそれぞれをユーザー113モードで実行するので、ランタイムは、中間言語コードへの任意の1つまたは複数のポインタに遭遇することになる。たとえば、実行中に、アプリケーションプログラム110用のランタイムは、中間言語コード120へのポインタ140に遭遇する。ポインタ140は、カーネル103モードでのみアクセスされうるコードを参照するので、ランタイムはユーザーモードから抜け出し、システム100はカーネル103モードに切り替わることになる。
要求143は、次いで、カーネル103モードで動作するセキュリティ構成要素155によって処理されることになる。一般に、セキュリティ構成要素155は、ユーザーモード113の構成要素の要求(たとえば、143)を受け取り、その要求が適切かどうかを検証するように構成された、任意の数または種類の構成要素またはモジュールを含みうる。ユーザーモード113は信頼できず、アプリケーションプログラム110は、危険なまたは悪意のあるコードを表す(もしくは含む)、または表さない(もしくは含まない)可能性があるので、検証が行われる。
したがって、ユーザーモード113の実行からの要求がシステム100を損なわないようにするために、セキュリティ構成要素155は、任意の数または種類の検証機能を実行できる。たとえば、セキュリティ構成要素155は、任意の数のハンドル、トークンなどについてメッセージ143を確認できる。さらに、セキュリティ構成要素155は、特有のメモリアドレス要求などの、システム100に危害を与えるのに使用されうる、アプリケーション命令についての要求143、またはバッファオーバーランを引き起こしうる要求などを確認できる。要求143の検証時に、セキュリティ構成要素155は、JITコンパイラ105をカーネルモードで開始できる。
カーネルモードで動作すると、JITコンパイラは、次いで要求されたコード(すなわち、120)を供給され、コンパイルを開始できる。たとえば、図1Aは、セキュリティ構成要素155が、JITコンパイラ105に中間言語コード120を受け取らせ、コンパイルさせる、1つまたは複数の要求147を実行することを示す。コード120を実行可能バイナリ命令(すなわち、コンパイルされたコード123)にコンパイルした後、図1Aは、JITコンパイラ105が、次いで、メモリヒープ160にコード123を渡し引き渡し可能であることも示す。
図1Bに関連してより完全に理解されるように、メモリヒープ160は、ユーザーモード113動作とカーネルモード103動作の境界をまたいでいる。実際には、メモリヒープ160は、カーネルモード103および/またはユーザーモード113で動作する構成要素によってアクセス可能な、許可横断(cross−permission)/境界横断(cross−boundary)の記憶装置として動作する。コンパイルが完了すると、システム100は、ユーザーモードに戻って、アプリケーションプログラム110の実行を継続できる。特に、ユーザーモードで動作しているアプリケーション110は、コンパイルされたコード123を、利用可能になるとすぐにプルすることができ、ユーザーモード113でその実行を開始できる。したがって、メモリヒープ160は、JITコンパイラ105およびユーザー113が、直接通信することなく、異なる特権モードで、独立して機能できるようにすることにより、2つのセキュリティ層間のセキュリティ境界の維持に役立つように使用可能なことが理解されよう。
図1Bに、JITコンパイラ105とアプリケーションプログラム110の間のセキュリティ境界が、達成または維持される方法についての、追加の詳細を示す。特に、図1Bは、JITコンパイラ105およびアプリケーションプログラム110が、それぞれ異なる許可セットを使用して、特定の同じメモリロケーションに対して動作する実施形態を示す。特に、図1Bは、同じメモリロケーションが、あるアドレス空間の1組の許可を使用して、あるアドレス空間の構成要素によってアクセス可能であり、異なる1組の許可を使用して、別のアドレス空間の異なる構成要素によってアクセス可能である実施形態を示す。たとえば、図1Bは、読み取り/書き込み許可を使用してアドレス空間170で、および読み取り/実行許可を使用してアドレス空間165で、利用可能なメモリロケーション160を示す。
一般に、オペレーティングシステム100の1つまたは複数のカーネル層103の構成要素は、任意の所与のアドレスロケーションおよび対応するアドレス空間用のメモリページテーブル180を保持することになる。たとえば、図1Bは、メモリページテーブル180が、システム100のカーネル103層(すなわち、1つまたは複数のカーネルモードの構成要素)に保持されていることを示す。これがカーネル103モードの構成要素に保持されている理由の1つは、信頼できないアプリケーションプログラム(すなわち、ユーザーモードで動作する)が、ページテーブルにアクセスできないようにする、またはページテーブルを不正に操作できないようにすることである。
どのような場合でも、図1Bは、ページテーブル180が、メモリロケーション160および165をアドレス空間170、175、190、および195に相互に関連付けることを示す。たとえば、メモリロケーション160は共有メモリヒープであり、メモリロケーション165は、アプリケーションプログラム110が実行のためにロードされるロケーションである。さらに、ページテーブル180は、アドレス空間170および190がそれぞれロケーション160または165への「読み取り/書き込み」アクセスを有するように、メモリロケーション160および165のアクセス許可をマップする。同様に、ページテーブル180は、アドレス空間175または195についてのメモリロケーション160および165の許可を「読み取り/実行」としてそれぞれマップする。したがって、セキュリティ構成要素155(図1A)がユーザーモード113の構成要素から要求(たとえば、143)を受け取る場合、セキュリティ構成要素155は、要求(たとえば、143)を発生した構成要素のアドレス空間を、JITコンパイラの出力(たとえば、123)のアドレス空間に相互に関連付けることができる。
前述のように、システム100が許可およびセキュリティ層の境界を強制する方法の1つは、説明したセキュリティ/許可の境界にまたがるメモリヒープ160を介することである。一般に、「メモリヒープ」は、ランタイムの間にまたはランタイムの直前に、システム100によって取っておかれた1組のメモリアドレスを含む。この特定の例では、システム100は、カーネル層の構成要素(たとえば、JITコンパイラ105)のみがメモリヒープ160に書き込むことができ(たとえば、ページテーブル180を介して)、一方、ユーザー層の構成要素はメモリヒープ160から読み取りのみが可能なように、メモリヒープ160を割り振り、構成することができる。その結果、アプリケーションプログラム110は、メモリヒープ160ではJITコンパイラ105からの任意のコンパイルされたコードを実行できないが、アドレス空間175のみでは実行しなければならない。
したがって、「サンドボックス」は、ユーザーモードでのみアプリケーションの動作を要求すること、および異なる許可セットに関連したメモリアドレスから一定の構成要素またはデータ構造にアクセスするように、アプリケーションおよびJITコンパイラに要求することにより、設定可能であることが理解されよう。したがって、図1A〜図1Bおよび対応する文言は、管理されたコードを安全な方法で含む、実質的には任意の種類の実行コードにアクセスおよび/または実行コードを実行するのに使用される、多くの異なるアーキテクチャの構成要素を示す。特に、図1A〜図1Bおよび対応する文言は、アプリケーションが、ユーザー113モードで実行でき、JITでコンパイルされたコードについての読み取り専用許可または読み取り/実行許可を使用して、メモリヒープにアクセスできる方法を示す。さらに、その図および対応する文言は、アプリケーションが、メモリヒープ160についての読み取り/書き込み許可を有する、異なるアドレス空間170にある1つまたは複数のカーネル層の構成要素を呼び出すことができ、したがって、管理されたコードをコンパイルして、メモリヒープ160に渡すことができるが、実行はできない方法を示す。
前述のように、この種の分散アドレス空間構成は、プログラムの実行および開発に多くの異なる利点をもたらす。まず、たとえば、アプリケーションプログラムの開発者は、安全上の考慮事項(たとえば、型安全性)について心配することなく、実質的に任意の種類のコードを書くことができる。さらに、オペレーティングシステムの開発者は、すべての実行しているプログラムコードを強制的に安全(たとえば、型安全)にさせる、ランタイム検証コードを開発する速度消耗的なリソース(speed exhaustive resource)を必要としない。
上記に加えて、本発明の実施形態はまた、特定の結果を達成する方法における1つまたは複数の動作を有するフローチャートに関連して説明される。特に、図2および図3、および対応する文言は、安全なおよび安全でないアプリケーションプログラムコードがセキュリティを脅かすまたは危うくすることなく実行されるように、管理されたコードを実行する、1つまたは複数の動作のフローチャートを示す。図2および図3に示す方法を、図1A〜図1Bの構成要素および概略図を参照して、以下に説明する。
したがって、図2は、第1アドレス空間でのアプリケーションの実行の動作200を含み、クライアントコンピュータシステムから見た方法を示す。動作200は、メモリロケーションの第1アドレス空間でのアプリケーションプログラムの実行を含む。たとえば、図1Bは、アプリケーションプログラム110が、メモリロケーション160にアクセスするための読み取り/実行許可を有する(すなわち、JITでコンパイルされたコードが配置され、したがって読み取り/実行として指定される)、アドレス空間175から実行されていることを示す。
図2は、その方法が、中間言語命令についてのアプリケーションからの要求を受け取る動作210を含むことも示す。動作210は、アプリケーションプログラムから、1組または複数組の中間言語命令をコンパイルするための1つまたは複数の要求を受け取ることを含む。たとえば、アプリケーションプログラム110用のランタイムは、カーネル103モードでのみアクセス可能な、中間言語コード120へのポインタ140に遭遇する。したがって、ランタイムは、カーネルモードでの要求を処理するセキュリティ構成要素155に、メッセージ143としてポインタ120を渡す。
さらに、図2は、その方法が、第2アドレス空間で中間言語命令をコンパイルする動作220を含むことを示す。動作220は、第2アドレス空間で実行するJITコンパイラを使用して、1組または複数組の中間言語命令を新規にコンパイルされたコードにコンパイルすることを含む。たとえば、要求143の検証時に、セキュリティ構成要素155は、1つまたは複数の要求147を準備および実行して、要求された中間言語コードをJITコンパイラ105に渡す。JITコンパイラ105は、次いで、この図では共有メモリヒープ160への読み取り/書き込み許可を与えられている、第2アドレス空間170で中間言語コード120をコンパイルする。
さらに、図2は、その方法が、コンパイルされたコードを共有メモリヒープに渡す動作230を含むことを示す。動作230は、新規にコンパイルされたコードを、アプリケーションプログラムが新規にコンパイルされたコードを第1アドレス空間に取得できる、共有メモリヒープに渡すことを含む。たとえば、図1Aおよび図1Bは、JITコンパイラ105およびアプリケーションプログラム110が、メモリヒープ160へのアクセスを有することを示す。特に、JITコンパイラ105は、メモリヒープ160に書き込める(しかしそこでの実行はできない)が、アプリケーションプログラム110は、メモリヒープ160からの読み取りおよび実行のみ可能である。したがって、JITコンパイラ105がコード123をコンパイルおよび作成する場合、アプリケーションプログラム110用のランタイムは、コンパイルされたコード123をアドレス空間175に取得でき、そのコードをユーザーモードで実行できる。
上記に加えて、図3は、セキュリティ違反を回避しながらJITコンパイルを使用するやり方で、コンピュータシステム用のコンピュータ実行可能なプログラムコードを生成する、本発明の実施形態による方法は、実行コードおよびコンパイルされるコードを受け取る動作300を含むことを示す。動作300は、実行コードおよびコンパイルされるコードを含むプログラムコードを受け取ることを含む。たとえば、オペレーティングシステム100は、1つまたは複数の記憶媒体を受け取り、および/またはアプリケーションプログラム110のネットワークベースのアップロードを受け取る。アプリケーションプログラム110は、実行可能なプログラムコード、および1つまたは複数のカーネル層103の構成要素によって個別にアクセスされる中間言語コード115を含む。
図3は、その方法が、より低い特権モードで実行コードを実行する動作310を含むことも示す。動作310は、より低い特権モードおよび第1アドレス空間で実行コードを実行することを含む。たとえば、図1Aは、アプリケーションプログラム110の実行可能部分が、ユーザーモード113でのみアクセスまたは実行され、これに対して、中間言語コード115はカーネルモードの構成要素によってのみアクセスされることを示す。
さらに、図3は、その方法が、コンパイルされるコードへのポインタを受け取る動作310を含むことを示す。動作310は、実行コードで、コンパイルされる少なくともいくつかのコードへの1つまたは複数のポインタを受け取ることを含む。たとえば、図1A〜図1Bは、ユーザーモード113で、およびアドレス空間175で/から動作するアプリケーションプログラム110が、コンパイルされたコード135、中間言語コード120へのポインタ140、コンパイルされたコード145、および中間言語コード125へのポインタ150を含むことを示す。アプリケーションプログラム110がユーザーモードで実行されている間に、ポインタ140および/または150は識別されることになる。
さらに、図3は、その方法が、より高い特権モードに切り替える動作330を含むことを示す。たとえば、アプリケーションプログラム110用のランタイムは、実行中にポインタ140を識別し、JITコンパイラ105の開始が必要であることを識別する。JITコンパイラ105は、カーネルモードで動作する必要があるので、システム100は瞬間的にアプリケーション110の実行を一時停止し、ユーザーモードからカーネルモードへ切り替え、JITコンパイラ105をカーネルモード103構成要素として開始する。ポインタ140を含むメッセージ143は、次いで、カーネルモード103のセキュリティ構成要素155に渡される。カーネルモードで動作するセキュリティ構成要素155は、次いで要求を評価して、要求143が正しく形成され、および/または適切なハンドル、セキュリティ識別子などを含むようにする。
さらに、図3は、その方法が、要求されたコードをより高い特権モードでコンパイルする動作340を含むことを示す。動作340は、より高い特権モードで動作するコンパイラを使用して、要求されたコードを異なるアドレス空間でコンパイルすることを含む。たとえば、図1Aおよび図1Bは、より高い特権のカーネル層103で動作するJITコンパイラ105が、あるアドレス空間(アドレス空間170)でコード120をコンパイルでき、コンパイルされたコード123を、JITコンパイラが読み取り/書き込みアクセスを有するメモリヒープ160にさらに渡すことを示す。ユーザーモードに戻ると、アプリケーションプログラム110は、メモリヒープ160についての読み取り/実行許可を有する異なるアドレス空間(アドレス空間175)から、コンパイルされたコード123にアクセスでき、このコードを実行できる。
したがって、図1A〜図2および対応する文言は、重要なセキュリティの保証を犠牲にすることなく、管理されたコードを含む信頼できないコードを実行するのに使用可能な、多くの構成要素、モジュール、および機構を示す。前述のとおり、これは、同じプログラムのための別個のアドレス空間で、中間言語コードのコンパイルとバイナリコードの実行を分離することによって、少なくとも一部分において達成される。さらに、これは、中間コードをコンパイルし、コンパイルされたコードを共有メモリヒープに渡す、型安全なJITコンパイラを使用して達成される。型安全なJITコンパイラは、型安全でないコードを受け入れ、コンパイルできる一方、JITコンパイラ自体は、一定の所定の型安全性境界の外部で動作することを制限されるように構成される。さらに、これは、実行コードが、ユーザーモードで動作する構成要素によってのみアクセスされるようにし、中間言語コードが、読み取り/書き込みアドレス空間で、カーネルモードで動作する構成要素によってのみアクセスされるようにすることにより達成される。
本発明の実施形態は、下記でより詳細に説明する様々なコンピュータハードウェアを含む、専用または汎用コンピュータを含むことが可能である。本発明の範囲内の実施形態は、その中に格納されたコンピュータ実行可能命令またはデータ構造を搬送し、または有するコンピュータ可読媒体も含む。そのようなコンピュータ可読媒体は、汎用または専用コンピュータによってアクセスされる、任意の入手可能な媒体でよい。
例として、限定としてではなく、そのようなコンピュータ可読媒体は、所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造の形態で搬送または格納するのに使用でき、汎用または専用コンピュータによってアクセスされる、RAM、ROM、EEPROM、CD−ROMもしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の任意の媒体を含むことができる。情報が、ネットワークまたは別の通信接続(ハードワイヤード、ワイヤレス、またはハードワイヤードもしくはワイヤレスの組合せ)を介してコンピュータに伝送または供給される場合、コンピュータは、その接続をコンピュータ可読媒体として適切に表示する。したがって、そのような任意の接続は、適切にコンピュータ可読媒体と呼ばれる。上記媒体の組合せも、コンピュータ可読媒体の範囲に含まれるべきである。
コンピュータ実行可能命令は、たとえば、汎用コンピュータ、専用コンピュータ、または専用処理装置に一定の機能または1群の機能を実行させる命令およびデータを含む。主題を構造的な特徴および/または方法論的な動作に特有の用語で説明したが、添付の特許請求の範囲に定義された主題は、必ずしも前述の特有の特徴または動作に限定されるとは限らないことが理解されるべきである。むしろ、前述の特有の特徴および動作は、特許請求の範囲を実施する実例の形態として開示される。
本発明は、その精神または本質的な特徴から逸脱することなく、他の特有の形態で実施可能である。説明した実施形態は、すべての点において例示のみと見なされるべきであり、制限と見なされるべきではない。したがって、本発明の範囲は、前述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の等価物の意味および範囲に入るすべての変更は、特許請求の範囲に包含される。

Claims (20)

  1. メモリ、および前記メモリにロードされたJITコンパイラおよび1つまたは複数のアプリケーションプログラムを含むコンピュータ化された環境において、システムの安全性を脅かさないまたは危うくしないやり方で、信頼できないプログラムコードがコンパイルおよび実行されるように、管理されたコードを実行する方法であって、
    共有メモリヒープにアクセスするための第1の1組の許可が設定された第1アドレス空間からアプリケーションプログラムを実行するステップと、
    前記アプリケーションプログラムから、1組または複数組の中間言語命令をコンパイルするための1つまたは複数の要求を受け取るステップと、
    前記共有メモリヒープにアクセスするための第2の1組の許可を有する第2アドレス空間で実行するJITコンパイラを使用して、前記1組または複数組の中間言語命令を新規にコンパイルされたコードにコンパイルするステップと、
    前記アプリケーションプログラムは、前記第1アドレス空間から前記新規にコンパイルされたコードを取得および実行できる、前記新規にコンパイルされたコードを前記共有メモリヒープに渡すステップと
    を含むことを特徴とする方法。
  2. 前記新規にコンパイルされたコードが前記共有メモリヒープに渡されたことが示されると、カーネルモードからユーザーモード動作レベルに切り替える動作をさらに含むことを特徴とする請求項1に記載の方法。
  3. 前記アプリケーションプログラムが前記コンパイルされたコードを受け取り、前記第1アドレス空間から前記コンパイルされたコードを実行する動作をさらに含むことを特徴とする請求項2に記載の方法。
  4. 前記第1アドレス空間で動作する構成要素が前記共有メモリヒープに書き込めないように、前記第1アドレス空間が、前記共有メモリヒープへのアクセスに対する読み取り/実行許可を伴って構成されることを特徴とする請求項1に記載の方法。
  5. 前記第2アドレス空間で動作する構成要素が前記メモリヒープでコードを実行できないように、前記第2アドレス空間が、読み取り/書き込み許可を使用して前記メモリヒープにアクセスするように構成されることを特徴とする請求項1に記載の方法。
  6. 前記JITコンパイラは、より高い特権モードで実行し、前記アプリケーションプログラムは、より低い特権モードで実行することを特徴とする請求項1に記載の方法。
  7. 前記JITコンパイラは、1つまたは複数の型安全性制約内で実行するように制限されるが、型安全でない中間言語コードを受け入れ、コンパイルするように構成されることを特徴とする請求項1に記載の方法。
  8. 前記JITコンパイラは、
    前記JITコンパイラ用のセキュリティ制約に違反する機能を実行するための1つまたは複数の要求を受け取り、
    前記機能を実行するための前記1つまたは複数の要求を拒否し、または前記1組または複数組の中間言語命令のコンパイルを中止する、動作を実行することを特徴とする請求項7に記載の方法。
  9. 前記アプリケーションプログラムから前記1つまたは複数の要求を受け取ると、カーネルモード動作レベルを活性化する動作をさらに含むことを特徴とする請求項1に記載の方法。
  10. カーネルモード動作レベルを活性化する前記動作は、カーネルモードのセキュリティ構成要素を開始する動作を含むことを特徴とする請求項9に記載の方法。
  11. 前記アプリケーションプログラムからの前記1つまたは複数の要求は、カーネルモードのセキュリティ構成要素によって受け取られることを特徴とする請求項10に記載の方法。
  12. 前記カーネルモードのセキュリティ構成要素が前記アプリケーションプログラムからの前記1つまたは複数の要求を検証する動作をさらに含むことを特徴とする請求項11に記載の方法。
  13. 前記1つまたは複数の要求を検証する前記動作は、前記1つまたは複数の要求に含まれたハンドルが有効かどうかを判定する動作を含むことを特徴とする請求項12に記載の方法。
  14. 記憶装置、JITコンパイラ、およびメモリにロードされた1つまたは複数のアプリケーションプログラムを含むコンピュータ化された環境において、セキュリティ違反を回避しながらJITコンパイルを使用するやり方で、コンピュータ実行可能なプログラムコードを生成する方法であって、
    実行コードおよびコンパイルされるコードを含むアプリケーションプログラムコードを受け取るステップと、
    より低い特権モードおよび第1アドレス空間で前記実行コードを実行するステップと、
    コンパイルされる少なくともいくつかのコード用の前記実行コードで1つまたは複数のポインタを識別するステップと、
    より高い特権モードに切り替えるステップと、
    前記より高い特権モードで動作するコンパイラを使用して、異なるアドレス空間で前記少なくともいくつかのコードをコンパイルするステップと
    を含むことを特徴とする方法。
  15. 前記アプリケーションプログラムコードは、ビデオゲームのオペレーティングシステムの前記記憶装置から受け取ったビデオゲームアプリケーションの部分を含むことを特徴とする請求項14に記載の方法。
  16. 前記コンパイラは、型安全な要求のみを処理するように構成されるが、そうでなければ型安全または型安全でない中間言語コードをコンパイルするように構成される、型安全なJITコンパイラであることを特徴とする請求項14に記載の方法。
  17. 前記より高い特権モードはカーネルモード動作レベルであり、前記より低い特権モードはユーザー動作レベルであることを特徴とする請求項14に記載の方法。
  18. 前記第1アドレス空間は、読み取り/実行許可を使用して、メモリヒープにアクセスするように構成され、第2アドレス空間は、読み取り/書き込み許可を使用して、前記メモリヒープにアクセスするように構成されることを特徴とする請求項14に記載の方法。
  19. 前記少なくともいくつかのコードがコンパイルされたことを識別すると、前記より低い特権モードに切り替え、
    前記第1アドレス空間で、前記コンパイルされた少なくともいくつかのコードを実行する、動作をさらに含むことを特徴とする請求項14に記載の方法。
  20. メモリ、JITコンパイラ、および前記メモリにロードされた1つまたは複数のアプリケーションプログラムを含むコンピュータ化された環境において、実行時に1つまたは複数のプロセッサに方法を実行させる、その中に格納されたコンピュータ実行可能命令を有するコンピュータプログラム記憶装置製品であって、前記方法は、
    共有メモリヒープにアクセスするための第1の1組の許可が設定された第1アドレス空間からアプリケーションプログラムを実行するステップと、
    前記アプリケーションプログラムから、1組または複数組の中間言語命令をコンパイルするための1つまたは複数の要求を受け取るステップと、
    前記共有メモリヒープにアクセスするための第2の1組の許可を有する第2アドレス空間で実行するJITコンパイラを使用して、前記1組または複数組の中間言語命令を新規にコンパイルされたコードにコンパイルするステップと、
    前記アプリケーションプログラムは、前記第1アドレス空間から前記新規にコンパイルされたコードを取得および実行できる、前記新規にコンパイルされたコードを前記共有メモリヒープに渡すステップと
    を含むことを特徴とする方法。
JP2009538535A 2006-11-28 2007-11-27 信頼性の低いアドレス空間への実行コードのコンパイル Withdrawn JP2010511227A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/564,249 US20080127142A1 (en) 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space
PCT/US2007/085664 WO2008067329A1 (en) 2006-11-28 2007-11-27 Compiling executable code into a less-trusted address space

Publications (1)

Publication Number Publication Date
JP2010511227A true JP2010511227A (ja) 2010-04-08

Family

ID=39469533

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009538535A Withdrawn JP2010511227A (ja) 2006-11-28 2007-11-27 信頼性の低いアドレス空間への実行コードのコンパイル

Country Status (13)

Country Link
US (2) US20080127142A1 (ja)
EP (1) EP2115580A4 (ja)
JP (1) JP2010511227A (ja)
KR (1) KR20090093967A (ja)
CN (1) CN101553784A (ja)
AU (1) AU2007325237B2 (ja)
BR (1) BRPI0719800A2 (ja)
CA (1) CA2665027A1 (ja)
IL (1) IL198058A0 (ja)
MX (1) MX2009004893A (ja)
RU (1) RU2439665C2 (ja)
TW (1) TW200830184A (ja)
WO (1) WO2008067329A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018152061A (ja) * 2017-03-05 2018-09-27 エンサイロ リミテッドenSilo Ltd. 安全なジャストインタイム(jit)コード生成

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US8281293B2 (en) * 2007-07-24 2012-10-02 International Business Machines Corporation Copy-on-write optimization of immutable objects for objects oriented languages
US8296730B2 (en) * 2008-03-12 2012-10-23 Microsoft Corporation Using extension methods to extend COM objects
US20090319991A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Managed code type equivalence
US20100058016A1 (en) * 2008-08-26 2010-03-04 Jari Nikara Method, apparatus and software product for multi-channel memory sandbox
US8180986B2 (en) * 2008-09-17 2012-05-15 Microsoft Corporation Memory conflict detection via mapping of the physical heap to control access permissions to the memory
US8190636B2 (en) * 2008-09-30 2012-05-29 Nokia Corporation Method, apparatus and computer program product for providing object privilege modification
US8276111B2 (en) * 2008-12-19 2012-09-25 Microsoft Corporation Providing access to a dataset in a type-safe manner
US20100199357A1 (en) * 2009-02-02 2010-08-05 Microsoft Corporation Secure hosting for untrusted code
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9117071B2 (en) * 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8850573B1 (en) * 2010-04-14 2014-09-30 Google Inc. Computing device with untrusted user execution mode
US8495750B2 (en) 2010-08-31 2013-07-23 International Business Machines Corporation Filesystem management and security system
US9147085B2 (en) * 2010-09-24 2015-09-29 Blackberry Limited Method for establishing a plurality of modes of operation on a mobile device
KR20120031756A (ko) 2010-09-27 2012-04-04 삼성전자주식회사 Cpu와 gpu를 사용하는 이종 시스템에서 가상화를 이용한 어플리케이션 컴파일 및 실행 방법 및 장치
US20120159193A1 (en) * 2010-12-18 2012-06-21 Microsoft Corporation Security through opcode randomization
US8646050B2 (en) 2011-01-18 2014-02-04 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
AU2013202876B2 (en) * 2011-01-18 2016-07-07 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
CN103620547B (zh) * 2011-01-27 2018-07-10 英特尔公司 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
KR101895453B1 (ko) 2011-11-09 2018-10-25 삼성전자주식회사 이기종 컴퓨팅 환경에서 보안 강화 방법 및 장치
US8972952B2 (en) * 2012-02-03 2015-03-03 Apple Inc. Tracer based runtime optimization for dynamic programming languages
US9626507B2 (en) * 2012-04-06 2017-04-18 Google Inc. Hosted application sandboxing
CN103377120B (zh) * 2012-04-24 2017-06-30 财付通支付科技有限公司 一种应用程序测试方法及装置
RU2015121749A (ru) 2012-11-07 2016-12-27 Конинклейке Филипс Н.В. Компилятор, генерирующий безоператорный код
JP2016505891A (ja) 2012-12-21 2016-02-25 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. テーブルネットワークを有する計算装置
JP6129702B2 (ja) * 2013-09-24 2017-05-17 株式会社東芝 情報処理装置、情報処理システム、プログラム
US9336413B2 (en) * 2013-11-22 2016-05-10 Oracle International Corporation Method and system for fast permission changes for virtual addresses
CN105723377B (zh) * 2013-12-17 2019-06-04 英特尔公司 供内核模式应用使用的安全区域
US10311228B2 (en) 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
US10311227B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Obfuscation of an address space layout randomization mapping in a data processing system
US9930050B2 (en) * 2015-04-01 2018-03-27 Hand Held Products, Inc. Device management proxy for secure devices
JP6589505B2 (ja) * 2015-09-24 2019-10-16 ヤマハ株式会社 ルータ
FR3047587B1 (fr) * 2016-02-10 2023-01-13 Dolphin Integration Sa Dispositif de traitement muni d'un mode d'acces a des donnees sensibles.
US10303885B2 (en) 2016-03-02 2019-05-28 Apple Inc. Methods and systems for securely executing untrusted software
US10572275B2 (en) * 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
US10579520B2 (en) 2017-11-30 2020-03-03 Webroot Inc. Multi-ring shared, traversable, and dynamic advanced database
US10846211B2 (en) * 2018-03-21 2020-11-24 Microsoft Technology Licensing, Llc Testing kernel mode computer code by executing the computer code in user mode
US10983926B2 (en) 2018-08-29 2021-04-20 Red Hat, Inc. Efficient userspace driver isolation for virtual machines
US10754796B2 (en) 2018-08-29 2020-08-25 Red Hat, Inc. Efficient user space driver isolation by CPU page table switching
US11029968B1 (en) * 2019-07-31 2021-06-08 Facebook Technologies, Llc Operating system with a single kernel stack per processor
CN113268349B (zh) * 2021-06-04 2022-02-18 科东(广州)软件科技有限公司 一种计算机内存管理方法、装置、设备及存储介质
US11816203B2 (en) * 2021-11-23 2023-11-14 Malwarebytes Inc. Stack execution detection in a sandbox environment
CN115842927B (zh) * 2023-02-24 2023-06-06 湖北芯擎科技有限公司 一种视频流的安全显示方法、装置和电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001514411A (ja) * 1997-08-28 2001-09-11 マイクロソフト コーポレイション 信頼できない実行可能コードに関するセキュリティ向上
WO2003050662A1 (fr) * 2001-12-13 2003-06-19 Japan Science And Technology Agency Systeme d'execution securisee d'un logiciel
JP2003233508A (ja) * 2002-01-04 2003-08-22 Microsoft Corp コンピューティングシステム中のコプロセッサの計算リソースを制御するための方法およびコンピューティング装置
JP2005056415A (ja) * 2003-08-01 2005-03-03 Kw-Software Gmbh 産業オートメーション用のcilコード・プログラムのオンライン修正
WO2005098570A1 (ja) * 2004-04-05 2005-10-20 Matsushita Electric Industrial Co., Ltd. 実行装置
JP2006048186A (ja) * 2004-08-02 2006-02-16 Hitachi Ltd 動的コンパイラの生成コードを保護する言語処理系

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4926476A (en) * 1989-02-03 1990-05-15 Motorola, Inc. Method and apparatus for secure execution of untrusted software
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6505300B2 (en) * 1998-06-12 2003-01-07 Microsoft Corporation Method and system for secure running of untrusted content
US6412053B2 (en) * 1998-08-26 2002-06-25 Compaq Computer Corporation System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager
US6651171B1 (en) * 1999-04-06 2003-11-18 Microsoft Corporation Secure execution of program code
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
US6622300B1 (en) * 1999-04-21 2003-09-16 Hewlett-Packard Development Company, L.P. Dynamic optimization of computer programs using code-rewriting kernal module
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US7111307B1 (en) * 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US6883098B1 (en) * 2000-09-20 2005-04-19 International Business Machines Corporation Method and computer system for controlling access by applications to this and other computer systems
US6978018B2 (en) * 2001-09-28 2005-12-20 Intel Corporation Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment
US7346901B2 (en) * 2001-12-18 2008-03-18 Microsoft Corporation Efficient generic code in a dynamic execution environment
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
US7124445B2 (en) 2002-06-21 2006-10-17 Pace Anti-Piracy, Inc. Protecting software from unauthorized use by converting source code modules to byte codes
US7296154B2 (en) * 2002-06-24 2007-11-13 Microsoft Corporation Secure media path methods, systems, and architectures
US20040025009A1 (en) * 2002-07-31 2004-02-05 Camber August A. Method and apparatus for acceleration of multimedia content
US7216341B2 (en) * 2003-05-09 2007-05-08 Microsoft Corporation Instrumenting software for enhanced diagnosability
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US7162626B2 (en) * 2003-09-25 2007-01-09 Intel Corporation Use of common language infrastructure for sharing drivers and executable content across execution environments
US7549145B2 (en) * 2003-09-25 2009-06-16 International Business Machines Corporation Processor dedicated code handling in a multi-processor environment
JP4652680B2 (ja) * 2003-12-22 2011-03-16 パナソニック株式会社 コンパイル方法および装置、ならびにコンパイラ
US7647629B2 (en) 2004-02-03 2010-01-12 Microsoft Corporation Hosted code runtime protection
US7743423B2 (en) * 2004-02-03 2010-06-22 Microsoft Corporation Security requirement determination
US8607299B2 (en) * 2004-04-27 2013-12-10 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
US7380276B2 (en) * 2004-05-20 2008-05-27 Intel Corporation Processor extensions and software verification to support type-safe language environments running with untrusted code
US7665077B2 (en) * 2004-10-18 2010-02-16 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
DE102004057490B4 (de) 2004-11-29 2007-02-22 Infineon Technologies Ag Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes
US7587724B2 (en) * 2005-07-13 2009-09-08 Symantec Corporation Kernel validation layer
JP4519738B2 (ja) * 2005-08-26 2010-08-04 株式会社東芝 メモリアクセス制御装置
US8769672B2 (en) * 2006-08-03 2014-07-01 Symantec Corporation Code injection prevention
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001514411A (ja) * 1997-08-28 2001-09-11 マイクロソフト コーポレイション 信頼できない実行可能コードに関するセキュリティ向上
WO2003050662A1 (fr) * 2001-12-13 2003-06-19 Japan Science And Technology Agency Systeme d'execution securisee d'un logiciel
JP2003233508A (ja) * 2002-01-04 2003-08-22 Microsoft Corp コンピューティングシステム中のコプロセッサの計算リソースを制御するための方法およびコンピューティング装置
JP2005056415A (ja) * 2003-08-01 2005-03-03 Kw-Software Gmbh 産業オートメーション用のcilコード・プログラムのオンライン修正
WO2005098570A1 (ja) * 2004-04-05 2005-10-20 Matsushita Electric Industrial Co., Ltd. 実行装置
JP2006048186A (ja) * 2004-08-02 2006-02-16 Hitachi Ltd 動的コンパイラの生成コードを保護する言語処理系

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018152061A (ja) * 2017-03-05 2018-09-27 エンサイロ リミテッドenSilo Ltd. 安全なジャストインタイム(jit)コード生成

Also Published As

Publication number Publication date
TW200830184A (en) 2008-07-16
CN101553784A (zh) 2009-10-07
RU2439665C2 (ru) 2012-01-10
WO2008067329A1 (en) 2008-06-05
IL198058A0 (en) 2009-12-24
AU2007325237A1 (en) 2008-06-05
EP2115580A4 (en) 2012-03-07
BRPI0719800A2 (pt) 2014-04-22
MX2009004893A (es) 2009-05-19
US7673109B2 (en) 2010-03-02
KR20090093967A (ko) 2009-09-02
EP2115580A1 (en) 2009-11-11
CA2665027A1 (en) 2008-06-05
RU2009120207A (ru) 2010-12-10
AU2007325237B2 (en) 2011-10-27
US20080127142A1 (en) 2008-05-29
US20080126740A1 (en) 2008-05-29

Similar Documents

Publication Publication Date Title
JP2010511227A (ja) 信頼性の低いアドレス空間への実行コードのコンパイル
Jang et al. SafeDispatch: Securing C++ Virtual Calls from Memory Corruption Attacks.
JP6248153B2 (ja) 信頼レベルのアクティブ化
Erlingsson The inlined reference monitor approach to security policy enforcement
Wang et al. Undefined behavior: what happened to my code?
US9027075B2 (en) Enforcing security rules at runtime
US8104021B2 (en) Verifiable integrity guarantees for machine code programs
Kirth et al. PKRU-Safe: Automatically locking down the heap between safe and unsafe languages
CN109840410A (zh) 一种进程内数据隔离与保护的方法和系统
Ghosn et al. Enclosure: language-based restriction of untrusted libraries
US20080047023A1 (en) User space virtualization system
MX2014007102A (es) Facilitacion de interacciones de solicitud de servicio de sistema para aplicaciones protegidas por hardware.
Guanciale et al. Provably secure memory isolation for Linux on ARM
Hussein et al. Security-policy monitoring and enforcement with JavaMOP
Ramakesavan et al. Intel memory protection extensions (intel mpx) enabling guide
Bouffard et al. Hardening a Java Card Virtual Machine Implementation with the MPU
EP3033674B1 (en) Runtime memory throttling
van Oorschot Memory errors and memory safety: C as a case study
AU2011239288A1 (en) Compiling executable code into a less-trusted address space
Shao et al. Advanced development of certified OS kernels
Brown Control-flow Integrity for Real-time Embedded Systems
Criswell Secure virtual architecture: security for commodity software systems
Chen Defending In-process Memory Abuse with Mitigation and Testing
Mostowski et al. Testing the java card applet firewall
Narayan Retrofitting fast and secure sandboxing in real systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120510

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120914

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20121024