JP2010508583A - 多様化された不正操作耐性のための仮想化 - Google Patents

多様化された不正操作耐性のための仮想化 Download PDF

Info

Publication number
JP2010508583A
JP2010508583A JP2009534768A JP2009534768A JP2010508583A JP 2010508583 A JP2010508583 A JP 2010508583A JP 2009534768 A JP2009534768 A JP 2009534768A JP 2009534768 A JP2009534768 A JP 2009534768A JP 2010508583 A JP2010508583 A JP 2010508583A
Authority
JP
Japan
Prior art keywords
code
program
instruction
custom
virtual machine
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.)
Granted
Application number
JP2009534768A
Other languages
English (en)
Other versions
JP5302202B2 (ja
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 JP2010508583A publication Critical patent/JP2010508583A/ja
Application granted granted Critical
Publication of JP5302202B2 publication Critical patent/JP5302202B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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
    • 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
    • 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/45533Hypervisors; Virtual machine monitors
    • 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/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)
  • Adjustable Resistors (AREA)

Abstract

コンピュータ実施可能方法が、プログラムの多様なコピーを生成するフィーチャを備える命令セットアーキテクチャを提供すること、この命令セットアーキテクチャを使用して、プログラムの多様なコピーを生成すること、およびプログラムのこれらの多様なコピーの1つの実行のための仮想マシンを提供することを含む。様々な例示的な方法、デバイス、システムなどが、コードおよび/または仮想マシンを多様化するための仮想化を使用して、ソフトウェアセキュリティを強化する。

Description

本発明は、多様化された不正操作耐性のための仮想化に関する。
ソフトウェアプロバイダによる多大な努力にもかかわらず、ソフトウェア保護機構は、依然として、定常的に破られている。さらに、1つのコピーに対する成功した攻撃はしばしば、他のコピーに対しても自動的に再現することができる。例えば、ソフトウェアプロバイダが、或るソフトウェアの評価バージョンを配布する場合、1つのコピーから時間制限を取り除くクラッキングは、配布された他のすべてのコピーにも適用することができる。さらにまた、従来の配布モデルは、数千のユーザに急速に影響を及ぼす連続攻撃を許す可能性がある。
多様化は、ソフトウェアセキュリティを強化し、攻撃をくじくのに使用することができる概念である。しかし、ソフトウェアセキュリティのために開発された多様化技術は、異なる規則が適用される可能性があるので、いつもソフトウェア保護に移転可能とは限らない。例えば、セキュリティに関して導入されるランタイム多様化のほとんどは、攻撃者が、プログラムおよび実行環境への物理的アクセスを有する場合、容易にオフにすることができることになる。
本明細書で説明されるとおり、ソフトウェア保護のための様々な多様化技術は、例えば、ユーザごとに異なるコピーを与え、あつらえの更新で防御を更新することによって、空間的および時間的に再生可能な防御を提供する。
様々な例示的な技術が、コードおよび/または仮想マシン(VMs)を多様化して、ソフトウェアセキュリティを強化するための仮想化を使用する。例えば、コンピュータ実施可能方法が、プログラムの多様なコピーを生成するフィーチャを含む命令セットアーキテクチャ(ISA)を提供すること、この命令セットアーキテクチャを使用して、プログラムの多様なコピーを生成すること、およびプログラムのこれらの多様なコピーの1つの実行のためのVMを提供することを含む。また、他の様々な例示的な技術も開示される。限定的でなく、網羅的でない例を、以下の図を参照して説明する。
カスタム/変更された命令セットアーキテクチャ(ISA)および/または仮想マシン(VM)として仮想化層を含むシステムおよび全体的なアーキテクチャの図である。 カスタムコードおよび/またはカスタムVMを生成するセキュリティモジュールを含む例示的な方法のブロック図である。 カスタムVMを生成するための例示的な方法のブロック図である。 コードの中のファンクションを多様化して、カスタムコードを生成するための例示的な方法のブロック図である。 図4の方法と関係する例の図である。 データおよび/またはデータ構造を多様化するための例示的な方法のブロック図である。 多様化および不正操作耐性のために使用することができる様々なフレームワーク特徴のブロック図である。 多様化および不正操作耐性のために使用することができる特徴を有する実行モデルの図である。 多様化および不正操作耐性の目的で命令セマンティクスに適用することができる様々なアプローチのブロック図である。 多様化および不正操作耐性の目的で命令符号化に適用することができる様々なアプローチのブロック図である。 多様化および不正操作耐性の目的でフェッチサイクルに適用することができる様々なアプローチのブロック図である。 多様化の目的でプログラムカウンタ(PC)および/またはプログラム表現に適用することができる様々なアプローチのブロック図である。 多様化された不正操作耐性を目的とするスプレーツリーにおけるコード断片の例の図である。 多様化の目的で仮想マシン(VM)の実施に適用することができる様々なアプローチのブロック図である。 例示的なコンピューティングデバイスのブロック図である。
(概説)
例示的な技術は、仮想マシン上、または制御することができる(例えば、或る特定の仕方で動作することができる)他のマシン上で実行するコードに関して、ソフトウェアベースのセキュリティを使用する。様々な例は、協調的な仕方でコードを変更し、データを変更し、そして/または仮想マシン動作を変更して、セキュリティを強化する。例えば、コードに関連するフィーチャを、識別して、このコードのインスタンスを多様化するのに使用することができる。様々な例には、既存のアーキテクチャの上、または変更されたアーキテクチャの上でエミュレートされるカスタム命令セットアーキテクチャ(ISA)または変更された命令セットアーキテクチャの使用が含まれる。既存のアーキテクチャが、仮想化層(例えば、仮想マシンまたはランタイムエンジン、あるいは単に「ランタイム」)を含む場合、例示的なアプローチは、既存の仮想化層の上に別の仮想化層を追加することができる。様々な技術の実施を、基礎をなす仮想マシンの上で動作するカスタム仮想マシンの使用を介して、または変更された仮想マシン(例えば、基礎をなす仮想マシンの変更)の使用を介して行うことができる。パフォーマンスを犠牲にした、より高いセキュリティのために、そのようなプロセスを繰り返して、仮想マシンのスタックを生成することができ、仮想マシンのそれぞれは、直下のマシンの命令セットを仮想化する。
多様化に関して、共通の構成要素(例えば、DNAビルディングブロック)が、様々な仕方で組み立てられて、種の多様性を高める遺伝子多特性にたとえることができる。それで、悪質な因子(例えば、ウイルス)が、遺伝的に多様な種のすべてのメンバに影響を及ぼす可能性は低い。また、数百の遺伝子が、混ぜられ、合わされるタンパク質を生産することがある一部の寄生虫に関する類比も存在する。そのようなタンパク質の多様性は、そのような寄生虫が、免疫系検知を免れるのに役立つ。しかし、種における遺伝子の多様性は、しばしば、表現型の多様性(すなわち、表現または発現の多様性)に関連するが、本明細書で説明されるとおり、コードの多様性は、ユーザの体験を変えてはならない。つまり、同一の入力を与えられて、多様化されたコードのすべてのインスタンスは、同一の結果をもたらすように実行すべきである。
以下の一般化された式を考慮されたい。すなわち、
遺伝子型+環境=表現型 (1)
コード/データ+マシン=結果 (2)
式2において、多様化されたコードおよび/またはデータを使用して、マシンは、結果が実質的に同一であることを確実にするカスタムマシン、または変更された、または制御されたマシンであることが可能である。仮想マシン、または複数の仮想マシンが使用される場合、基礎をなすハードウェアおよび/またはオペレーティングシステムは、通常、本明細書で説明される例示的なセキュリティアプローチによる影響を受けないが、そのようなアプローチは、計算要求を増大させる可能性があることを付記しておく。
本明細書で説明されるとおり、コード多様化は、攻撃をくじくことによってセキュリティを強化する。さらに、コード多様性は、コードの1つのインスタンスに対して成功した攻撃の再現が、コードの「遺伝的に」異なるインスタンスに対して成功する可能性は低いので、連続攻撃をくじくことができる。さらに、データ(またはデータ構造)を多様化して、セキュリティを強化することができる。さらにまた、カスタム仮想マシンまたは変更された仮想マシンを多様化するための例示的な技術を使用して、コード多様化および/またはデータ多様化を伴って、または伴わずに、セキュリティを強化することができる。
様々な例は、MSILバイナリからの個別化されたバイトコードの生成に的を絞るが、様々な例示的な技術を、任意のプログラミング言語、任意の中間言語、任意のバイトコード、または任意の仕方で表現されたプログラムに関して使用することができる。
本明細書で説明されるとおり、仮想化のプロセス(例えば、仮想マシン上、または仮想環境におけるコードの実行)は、(i)プログラムの異なる多くのバージョンを作成する能力、および(ii)プログラムのあらゆるインスタンスを攻撃に対する耐性を持たせる能力を助長する。様々な例示的な技術が、仮想化を使用して、ポータブルで、検証可能な管理されたCLR環境の上でカスタム命令セットアーキテクチャ(ISA)をエミュレートする。カスタムランタイムまたは変更されたランタイムを使用して、カスタムISAをエミュレートすることができる。すなわち、何らかの仕方で、基礎をなすランタイムは、カスタムISAを介して導入された多様性を管理することができなければならない。
仮想化は、多様化において使用することができる自由度をもたらす。例えば、命令セットアーキテクチャ(ISA)(例えば、および/またはマイクロアーキテクチャ)は、通常、(1)命令セマンティクス、(2)命令符号化、(3)オペレーションコード符号化、(4)コード表現およびプログラムカウンタ、ならびに、(5)仮想マシンの対応する内部実装を含む。これらの自由度を所与として、様々な例示的な方法が、様々な保護機構のいずれかを使用して、プログラムの多様なコピーを生成することができる。
ISAに関連する自由度は、不正操作に耐性のあるプログラムの設計および選択を可能にする。例えば、不正操作耐性は、(1)(a)可変の命令長、(b)限られた命令セット、ならびに(c)物理的オーバラップ、および(d)セマンティックオーバラップを促進することを介して局所的な変更をより困難にすること、(2)前述したことのすべて、ならびにコード、データ、およびアドレスの間の境界をあいまいにすることによって、大域的な変更をより困難にすること、(3)命令セマンティクスを可変にすること、および(4)コードを絶えず再配置することの結果であることが可能である。
より具体的な例には、(i)より小さい命令の組合せを介して命令を構築することによって命令セマンティクスをランダム化すること、(ii)より多くのセマンティックオーバラップを可能にするように命令セマンティクスを選択すること、(iii)従来の線形コード表現を離れて、コードを、自己適応(スプレー)バイナリツリーなどのデータ構造として表すこと、(iv)オペレーションコードおよびオペランドに可変の長さを割り当てて、逆アセンブリを複雑にし、局所的な変更をより困難にすること、(v)命令セットを制限して、コードを解析し、変更する際に攻撃者に与えられるオプションをより少なくすること、および(vi)ビットパターン、オペレーションコード、およびオペランドの間のマッピングを可変にすることが含まれる。これらの例のいくつかを、以下により詳細に説明する。この詳細な説明は、現在、企図される最良の形態を含む。
様々な詳細を説明するのに先立って、文脈のため、図1は、一般的なシステム100と、仮想化を含むアーキテクチャ105とを示す。アーキテクチャ105は、共通言語ランタイム(CLR)と呼ばれる仮想マシンとの関係でカスタムの、または変更されたISAおよび/または仮想マシンをさらに示す。図1のCLRは、例えば、様々なオブジェクト指向プログラミング言語(OOPLs)のいずれかから導き出された中間言語コードを扱うことができるCLRであり、このため、「共通」と呼ばれる。図1は、.NET(商標)フレームワーク(ワシントン州レドモンド所在のマイクロソフトコーポレーション)を参照して説明されるが、例示的な技術は、他のアーキテクチャで使用することもできる。
システム100は、ネットワーク103を介して通信する様々なコンピューティングデバイス101、101’、102、102’を含む。デバイス101、101’は、クライアント(例えば、PC、ワークステーション、軽量デバイス、スマートデバイスなど)であることが可能であるのに対して、デバイス102、102’は、サーバである。アーキテクチャ105は、デバイス101、サーバ102’、およびネットワーク103に対するいくつかのリンクと共に示される。
.NET(商標)フレームワークは、2つの主な構成要素、すなわち、共通言語ランタイム(CLR)、および.NET(商標)フレームワーククラスライブラリを有する。これらは、管理されたアプリケーションに関連するものとして示される。CLRは、.NET(商標)フレームワークの基礎にある仮想マシン(VM)である。CLRは、実行時にコードを管理するエージェントの役割をし、メモリ管理、スレッド管理、およびリモーティングなどのコアサービスを提供するのと同時に、セキュリティおよび堅牢性を促進する厳格な型安全性、および他の形態のコード正確性の執行もする。コード管理の概念は、CLRの基礎的な原理である。CLRをターゲットとするコードは、マネージドコードとして知られているのに対して、ランタイムをターゲットとしないコードは、アンマネージドコードとして知られている(アーキテクチャの右半分)。
.NET(商標)フレームワークにおいて、プログラムは、CLRによって提供される管理された実行環境内で実行される。CLRは、プログラム間のランタイム対話性、ポータビリティ、セキュリティ、開発の簡易性、言語間統合を大幅に向上させ、豊かなクラスライブラリセットのための優れた基礎を提供する。.NET(商標)フレームワークCLRをターゲットとする各言語は、ソースコードをコンパイルし、メタデータおよびMicrosoft(登録商標)中間言語(MSIL)コードを生成する。様々な例は、MSILについて述べるが、様々な例示的なセキュリティ技術を、他の言語コードで使用することができる。例えば、様々な技術を、たいていの低レベルアセンブラスタイルの言語(例えば、任意の中間言語(IL)コード)で使用することができる。様々な技術を、JAVA(登録商標)フレームワーク(カリフォルニア州サニーベール所在のサンマイクロシステムズ社)のバイトコードなどのバイトコードで使用することができる。
.NET(商標)フレームワークにおいて、プログラムコードは、通常、「メタデータ」として知られる情報、つまり、データについてのデータを含む。メタデータは、しばしば各ファンクションの実際の実装とは別に、プログラムのすべての型を含め、プログラムに関する完全な仕様を含む。これらの実装は、プログラムの命令を記述するマシンに依存しないコードであるMSILとして格納される。CLRは、この「青写真」を使用して、.NET(商標)プログラムをランタイムに活性化することができ、コードをアセンブリ言語に直接にコンパイルすることに依拠する従来のアプローチで可能なものをはるかに超えるサービスをもたらす。
.NET(商標)フレームワークの他の主な構成要素であるクラスライブラリは、従来のコマンドラインアプリケーションまたはグラフィカルユーザインタフェース(GUI)アプリケーションから、Web FormsサービスおよびXML WebサービスなどのASP.NETによって提供される最新の技術革新に基づくアプリケーションにまで及ぶアプリケーションを開発する、再使用可能な型の包括的な、オブジェクト指向のコレクションである。
CLRは、アーキテクチャ105の管理されたアプリケーション側に示されているが、.NET(商標)フレームワークは、CLRをプロセスにロードし、マネージドコードの実行を開始する管理されない構成要素によってホストされて、管理されたフィーチャと管理されないフィーチャをともに活用することができるソフトウェア環境を作り出すこともできる。.NET(商標)フレームワークは、いくつかのランタイムホストを提供するだけでなく、第三者ランタイムホストの開発もサポートする。
例えば、ASP.NETが、ランタイム(RT)をホストして、マネージドコードのためのスケーラブルな、サーバ側の環境をもたらす。ASP.NETは、ランタイムと直接に協働して、ASP.NETアプリケーションおよびXML Webサービスを可能にする。
Internet Explorer(登録商標)ブラウザアプリケーション(マイクロソフトコーポレーション)が、ランタイムをホストする(例えば、MIME型拡張の形態で)管理されないアプリケーションの例である。Internet Explorer(登録商標)ソフトウェアを使用して、ランタイムをホストすることにより、ユーザが、管理された構成要素、またはWindows(登録商標)フォームコントロールをHTML文書に埋め込むことができるようになる。ランタイムをこのようにホストすることにより、管理されたモバイルコード(Microsoft(登録商標)ActiveX(登録商標)コントロールに類似した)が可能になるが、管理されたコードだけが提供することができる、半ば信頼される実行や隔離されたファイル格納などの大幅な改良が付随する。
本明細書で説明されるとおり、マネージドコードは、ランタイム(例えば、ランタイムが、ハードウェア(HW)の制御に通常、直接に関連する、基礎をなすオペレーティングシステム(OS)とインタフェースをとる、仮想マシン、ランタイムエンジンなど)をターゲットとする任意のコードであることが可能である。.NET(商標)フレームワークにおいて、マネージドコードは、CLRをターゲットとし、「自らを記述する」メタデータとして知られる追加の情報を通常、含む。マネージドコードとアンマネージドコードはともに、CLRにおいて実行することができるが、マネージドコードは、CLRが、例えば、安全な実行、および相互運用性を保証することを可能にする情報を含む。
マネージドコードに加えて、管理されたデータが、.NET(商標)フレームワークのアーキテクチャに存在する。一部の.NET(商標)言語は、管理されたデータをデフォルトで使用するのに対して(例えば、C#、Visual Basic.NET、JScript.NET)、他の言語(例えば、C++)は、そうはしない。マネージドコードとアンマネージドコードの場合と同様に、.NET(商標)アプリケーションにおける管理されたデータと管理されないデータの両方の使用が、可能である(例えば、ガーベッジコレクションを行われることはなく、代わりに、アンマネージドコードによって手入れをされるデータ)。
プログラムまたはコードは、通常、ポータブル実行可能ファイル(例えば、「PE」)として配布される。.NET(商標)PEにおいて、PEラッパ内の最初のデータブロックは、MSILであり、MSILは、既に述べたとおり、ほぼ低レベルアセンブラ言語コードのように見える。このMSILは、従来、.NET(商標)フレームワークにおいてコンパイルされ、実行されるものである。PEに関する第2のデータブロックは、従来、メタデータであり、PEの内容(例えば、PEがどのようなメソッドを提供するか、メソッドがどのようなパラメータをとるか、およびメソッドが何を戻すか)を記述する。第3のデータブロックは、マニフェストと呼ばれ、マニフェストは、実行可能ファイルが実行するために他のどのような構成要素を必要とするかを従来、記述する。また、マニフェストは、外部構成要素の公開鍵を含むことも可能であり、したがって、CLRは、外部構成要素が適切に識別される(すなわち、実行可能ファイルによって要求される構成要素)ことを確実にすることができる。
実行可能ファイルを実行している際、.NET(商標)CLRは、ジャストインタイム(JIT)コンパイルを使用することができる。JITコンパイルは、すべてのマネージドコードが、そのマネージドコードが実行されているシステム(OS/HW)のネイティブの機械語で実行することを可能にする。JITによれば、実行可能ファイル内の各メソッドが呼び出されるにつれ、そのメソッドがネイティブコードにコンパイルされ、構成に依存して、同一のメソッドに対する後続の呼び出しは、必ずしも同一のコンパイルを受ける必要はなく、オーバヘッドを少なくすることができる(すなわち、オーバヘッドは、メソッド呼び出しごとに1回だけしか生じない)。CLRは、多くの標準のランタイムサービスを提供するものの、マネージドコードは、決して解釈されない。その一方で、メモリマネージャは、断片化したメモリの可能性をなくし、メモリの参照の局所性を高めて、パフォーマンスをさらに向上させる。
アーキテクチャ105を再び参照すると、CLRとクラスライブラリの関係が、アプリケーションおよび全体的なシステム(例えば、システム100)に関して示され、マネージドコードが、より大きいアーキテクチャ内でどのように動作するかを示す。
CLRは、メモリ、スレッド実行、コード実行、コード安全性検証、コンパイル、およびその他のシステムサービスを管理する。これらのフィーチャは、CLR上で実行するマネージドコードに本来備わっている。
セキュリティに関して、管理された構成要素に、構成要素の出所(インターネット、企業ネットワーク、またはローカルコンピュータなどの)を含むいくつかの要因に依存して、様々な度合いの信頼を与えることができる。このことは、管理された構成要素が、同一の活性のアプリケーションにおいて使用されている場合でさえ、ファイルアクセス動作、レジストリアクセス動作、または他のセンシティブな機能を実行することができることも、できないこともあり得ることを意味する。
CLRは、コードアクセスセキュリティを執行することができる。例えば、ユーザは、Webページに埋め込まれた実行可能ファイルが、スクリーン上でアニメーションを再生する、または歌を歌うことができるが、ユーザの個人データ、ファイルシステム、またはネットワークにアクセスすることはできないことを信頼することができる。このため、CLRのセキュリティフィーチャは、正当なインターネット展開ソフトウェアが、並外れてフィーチャに富んでいることを可能にする。
また、CLRは、共通型システム(CTS)と呼ばれる厳密な型−コード検証インフラストラクチャを実施することによって、コード堅牢性も執行することができる。CTSは、すべてのマネージドコードが自己記述的であることを確実にする。マネージドコードは、型忠実性および型安全性を厳密に執行しながら、他の管理されたタイプおよびインスタンスを消費することができる。
CLRの管理された環境は、多くの共通のソフトウェア問題を解消することを目指す。例えば、CLRは、自動的に、オブジェクトレイアウトを扱い、オブジェクトへの参照を管理することができ、オブジェクトがもはや使用されていない場合、それらのオブジェクトを解放する。そのような自動メモリ管理は、2つの最もよくあるアプリケーションエラー、メモリリーク、および無効なメモリ参照を解決する。マネージドコードとアンマネージドコードの間の相互運用性は、開発者が、必要なCOM構成要素(コンポーネントオブジェクトモデル)およびdll(ダイナミックリンクライブラリ)を引き続き使用できるようになることを可能にする。
.NET(商標)フレームワークCLRは、Microsoft(登録商標)SQL Server(商標)やインターネット情報サービス(IIS)などの高パフォーマンスのサーバ側アプリケーションによってホストすることができる。このインフラストラクチャは、ランタイムホスティングをサポートする企業サーバを依然として使用しながら、ビジネスロジックを書くことのためのマネージドコードの使用を可能にする。
管理されたドメインにおけるサーバ側アプリケーションは、ランタイムホストを介して実施される。管理されないアプリケーションは、CLRをホストし、カスタムマネージドコードが、サーバの振舞いを制御することを可能にする。そのようなモデルは、ホストサーバのパフォーマンスおよびスケーラビリティを高めながら、CLRおよびクラスライブラリのフィーチャを提供する。
既に述べたとおり、様々な例示的な技術が、仮想化を使用して、ポータブルで、検証可能な、管理されたCLR環境の上でカスタムISAまたは変更されたISAをエミュレートする。このことが、CLRと管理されたアプリケーション空間の境界の上に位置する例示的なカスタムの/変更されたISAおよび/またはVM107(破線の弧)によってアーキテクチャ105において示される(様々な例が、管理されないアプリケーションについても説明することを付記しておく)。このことから、カスタムの/変更されたISAが、CLR、および基礎をなす環境、つまり、「ホスト」環境(例えば、OS/HW)の動作に干渉しないことが推測される。カスタムISAは、カスタムISAの様々なフィーチャを実施するのに必要な限りで、CLRまたは「VM」の制御を提供することができるが、様々な例は、基礎をなすVMの変更されたバージョン(すなわち、変更されたCLR)であることが可能な、カスタムVMに依拠する。このため、例示的なアーキテクチャは、単一の変更されたVM、または複数のVM(例えば、ターゲットとされるVMの上のカスタムVM)を含むことが可能である。セキュリティを高めるのに、パフォーマンスをいくらか犠牲にして、最低レベルのVMを除くすべてのVMが直下のVMの命令セットを仮想化するような仕方で、複数のVMを、スタック化することができる。
図1において、従来のCLRが、2つのタイプの仮想化VM1およびVM2が上にある仮想化層を有する例と、従来のCLRが、2つのスタック化された仮想化層VM1およびVM3を上に有するもう一つの例とを、矢印が指し示す。そのような例において、基礎をなすCLRは、追加の1つまたは複数の仮想化層がセキュリティをさらに強化するセキュリティフィーチャを有する、カスタムCLRまたは独自のCLRであることが可能である。例示的な方法は、各VMが、直下のマシンの命令セットを仮想化する、複数のスタック化されたVMを含む。最低レベルのVMは、ハードウェアを制御するオペレーティングシステムを通常、仮想化するのに対して、他のより高いレベルのVMは、別のVMを仮想化することに留意されたい。図1に示されるとおり、様々な構成が可能である(例えば、VMの上の2つのVM、スタック化されたVMなど)。複数の「カスタム」VMアプローチを、パフォーマンスをいくらか犠牲にして、より高いセキュリティを得るように仮想化を活用しているとみなすことができる。
遺伝的性質および環境との類比を再び参照すると、遺伝的性質は静的であると考えることができるのに対して、環境は動的であると考えることができる。同様に、不正操作耐性の様々な多様性ベースのアプローチが、静的および/または動的であってもよい。一般に、静的アプローチは、プログラムコードのコピーを多様化するのに対して、動的アプローチは、ランタイムにおける複数のVMまたはVM動作、あるいはプログラム動作を多様化する。このため、本明細書で説明されるとおり、様々な例示的な技術は、静的に機能する、動的に機能する、および/または静的に(例えば、個別化されたプログラムコードを生成するように)も、動的に(例えば、ランタイムにプログラム動作を変えるように)も機能する仮想化を含む。
例示的な方法は、第1の仮想化層を含むアーキテクチャを提供すること、および第1の仮想化層の上に第2の仮想化層を提供し、第1の仮想化層の上で、第2の仮想化は、プログラムの多様化されたコピーを受け取り、第1の仮想化層を使用してプログラムの実行を許すように構成されることを含むことができる。そのような方法は、本明細書で説明される多様化技術の使用を介してソフトウェアセキュリティを強化することができる。
例示的な方法は、プログラムコードの個別化されたコピーを生成すること、およびプログラムコードの個別化されたコピーの実行のための仮想マシンを提供することを含むことができ、仮想マシンは、ランタイムにプログラム動作を変えることができる。そのような方法は、本明細書で説明される多様化技術の使用を介して、ソフトウェアセキュリティを強化することができる。
便宜上、カスタムISAおよび変更されたISAを本明細書では、カスタムISAと呼ぶ。カスタムISAは、以下の特性を有するプログラムの様々なコピー(または「バージョン」)のセットを作成するのに使用されることが可能である。すなわち、(i)セットの中の各コピーは、不正操作に対する適当なレベルの防御を有し、さらに(ii)1つのコピーに対する既存の攻撃を別のコピーに対してうまく行くように向け直すことが困難である。多くの選択は、生成することができる意味的に等価なプログラムの大きい空間をもたらす。或るアプローチは、この空間全体を考慮して、より大きい多様性を可能にし、あるいは、代替として、或るアプローチは、他の部分と比べて、より不正操作耐性が高いと考えられる、またはそうであると証明された、この空間の部分だけを考慮することができる。
不正操作耐性特性には、(i)プログラムの静的解析を防止すること、(ii)プログラムの動的解析を防止すること、(iii)局所的な変更を防止すること、および(iv)大域的な変更を防止することが含まれる。最初の2つは、難読化の問題と緊密に関係しているのに対して、後の2つは、より不正操作耐性指向である。しかし、インテリジェントな不正操作は、少なくともある程度のプログラム理解を要求し、そのようなプログラム理解は、静的なバイナリを観察すること、実行中の実行可能ファイルを観察すること、または前述の2つの技術の組合せおよび/または繰り返しから通常、得られる。
様々なISA、例えば、CISC、RISC、ならびに、より新しくは、Java(登録商標)バイトコードおよび管理されたMSILが、存在する。しかし、後者の2つは、いくつかの理由で、より容易に解析される傾向がある。第1に、バイナリは、通常、ハードウェア上で直接に実行されないが、実行に先立ってエミュレートされる、またはネイティブコードに変換される必要がある。これを可能にするために、コードとデータの間の境界が、知られている必要があり、不変のデータと再配置可能なアドレスとの間で混乱があってはならない。このことには、もちろん、ポータビリティという利点が伴う。ポータビリティの他に、設計原理は、型付きのメモリ管理、および検証可能性のサポートを含む。検証可能性を保証するのに、ポインタ演算が許されず、制御フローが制限されるなどする。型付きのメモリ管理を可能にするのに、オブジェクトの型について多くの情報を、実行環境に通信する必要がある。
これらの設計原理のすべてが、実行環境によって解析されるのが容易であるが、攻撃者によって解析されるのも同様に容易であるバイナリをもたらした。このことが、Java(登録商標)バイナリと、管理されたMSILバイナリの両方に関して、逆コンパイラの作成につながった。
一般に、ISAの設計原理が、ソフトウェア保護を促進する設計原理とますます相反するようになっている傾向が、存在する。
本明細書で説明されるとおり、この傾向に対抗する例示的な技術は、さらなる仮想化層(または、オプションとして、複数のさらなる仮想化層)を追加する。より具体的には、仮想化を使用して、ポータブルで、検証可能な、管理されたランタイム環境の上でカスタムISAをエミュレートすることができる。以下の構成を考慮されたい。すなわち、(i)CLRの上で実行する環境に関するエミュレータ(例えば、カスタム仮想マシン)を書くこと、(ii)バイナリのバイナリ表現を選び、その表現をデータとしてエミュレータに追加すること、および(iii)元の実行可能ファイルの入口点でメインプロシージャにエミュレーションを開始させることである。この構成を与えられて、結果は、管理された、ポータブルで、検証可能なバイナリである。さらに、このバイナリは、ネイティブバイナリの攻撃者が、容易に、そのネイティブバイナリを選び、前述の構成をたどることができるので、ネイティブバイナリと同程度に保護されている。
一般に、バイナリに関して、経験および直観は、平均的なIA32バイナリが、平均的な管理されたバイナリと比べて、理解し、操作するのがはるかに複雑であることを示す。根底にあるいくつかの理由には、(i)可変の命令長、(ii)コードとデータの間に明確な区別がないこと、および(iii)不変のデータと再配置可能なアドレスの間に明確な区別がないことが含まれる。命令(オペレーションコード+オペランド)は、可変長(例えば、1〜17バイト)を有することができ、命令は、バイト整列されてさえいればよく、IA32上でパディングデータまたは通常のデータと混ぜ合わせることができるので、逆アセンブラを、容易に同期しないようにすることができる。コードとデータの間の明示的な分離は存在しないので、両方が、トランスペアレントに、読み取られ、書き込まれ、互いに変更可能に使用される。これは、解析するのが困難であり、攻撃者を混乱させることでよく知られているフィーチャである、自己変更コードを可能にする。
コードのバイナリ表現を容易に読み取ることができるという特徴は、自己検査機構を可能にするのに使用されてきたのに対して、制御フローに対する制限の欠如は、制御フロー平坦化や命令オーバラッピングなどの技術を可能にしてきた。
アドレスを計算することができ、さらに、アドレスが、通常のデータと容易に区別され得ないという事実は、バイナリを不正操作することを複雑にする。例えば、攻撃者は、バイナリ全体を再配置するのに十分な情報を有さないので、局所的な変更しか行うことができない。そのような所見を利用して、ISAを解析するのが困難であると実証される例示的なカスタムISAを生成することができる。そのようなISAは、セキュリティを加えることができる。
例示的な技術は、ISAにおける自己変更コード、および/または制御フロー平坦化、および/または命令オーバラッピングを含むことができるのに対して、本明細書で説明される特定の例は、命令の可変長に関する規定、およびより高い不正操作耐性のためのプログラムの諸部分のバイナリ表現の使用を含み、これらは、いくつかの自己検査機構と関係すると考えることができる。
ソフトウェアは、制御されていない仕方で共有されることを望まない事物をしばしば、知っている。例えば、試用バージョンは、所与のタスクを実行する機能を含むことができるが、時間制限が、その機能を余りにも長い間、使用することを防止する可能性がある。デジタルコンテナにおいて、ソフトウェアは、しばしば、コンテンツへの制御されたアクセスを与えるのに使用される。モバイルエージェントは、秘密のままである必要がある暗号鍵を含むことができる。
攻撃をくじくのに、例示的なアプローチは、(i)異なるインストールに関してプログラムを違えるようにすること、(ii)あつらえの更新を介して時とともにプログラムを違えるようにすること、および(iii)ランタイムランダム化を介して実行のたびにプログラムを違えるようにすることを含む。
図2は、仮想マシン上でポータブルな実行可能ファイルを実行するフレームワークに関連して実施される例示的なセキュリティモジュール200を示す。セキュリティモジュール200は、フロントエンドプロセスモジュール210と、バックエンドプロセスモジュール250とを含む。フロントエンドプロセスモジュール210は、VMをターゲットとする実行可能バイナリファイル110を読み取り、元のターゲットVMの変更されたバージョン、つまり、カスタムVMをターゲットとするカスタム実行可能バイナリファイル150を生成する。どちらの例においても、フロントエンドプロセスモジュール210は、ファイル110を使用して、VM記述115などの、元のターゲットVMについての情報を特定することができる。バックエンドプロセスモジュール250は、VM記述215を使用して、カスタムVM170に関するコード、dllなどを生成することができる。例えば、従来のVMは、共有ライブラリまたはdll(例えば、「ネイティブ」ライブラリ)として送り出すことができ、そのような技術を、カスタムVMに関して使用することができ、VMが、VMの上で動作する場合、基礎をなすVMの詳細を、カスタムVMの形態および/または特徴で考慮に入れることができることを付記しておく。便宜上、VMに適用される「カスタム」という語には、変更されたVM(例えば、コードの元のターゲットVMの変更されたバージョン)を含むことができる。
.NET(商標)フレームワークに向けられた例において、フロントエンドプロセスモジュール210は、管理されたMSILバイナリ110を読み取り、コードを数回、調べて、コードのISAを特定し、ターゲットとされるVMのXML記述215を生成する。ISAが特定されると、モジュール210は、元のバイナリをカスタムバイトコード言語150に書き換えることができる。
図3は、バックエンドプロセスモジュール250が、XML記述215を読み取り、カスタムVM172に関する管理されたdllを作成する例示的な方法300を示す。バックエンドとフロントエンドの分離は、多少、人為的であるが、よりモジュール性の高い設計を可能にし、さらに、デバッグを円滑にすることができる。例えば、バックエンドプロセスモジュール250に、dllを直接にコンパイルする代わりに、C#コード174を出力するように命令することができる(例えば、172を参照)。その後、コード174を、別個に検査して、デバッグすることができる。
図4は、元のバイナリの様々な部分が保持される例示的な方法400を示す。より具体的には、元のVM実行可能バイナリ110は、ファンクション115(1)〜(N)を囲むラッパ111を含み、フロントエンドプロセスモジュール210は、すべてのファンクション115(1)〜(N)を、必要な引数を渡してVMを呼び出すラッパ113に書き換える。そのような例では、すべての引数は、オブジェクトのアレイで渡されることが可能である。「インスタンス」ファンクションの場合、方法400は、「this」ポインタも含む。方法400は、各ファンクションを単一の構造として配置するように、すべてのファンクションに対して作用するので、フロントエンドプロセスモジュール210は、各ファンクションの入口点のIDを渡すことを規定することもできる。さらに、フロントエンドプロセスモジュール210は、適宜、戻されたオブジェクトが元のファンクションの戻り型にキャストされることを確実にするフィーチャを提供することもできる。
図5は、方法400の或る特定の実装をより詳細に示す。この例では、フロントエンドプロセスモジュール210は、VMを呼び出すラッパを使用して、ファンクションをスタブに変換している。より具体的には、ファンクション「foo」が、呼び出し「InvokeVM」でラップされる。
既に述べたとおり、データまたはデータ構造は、多様化のための手段を提供することができる。図6は、例示的な方法450を示し、例示的なフロントエンドプロセスモジュール210が、元のデータ構造の中にデータ117(1)〜(N)を有するバイナリ110を受け取り、変更された、またはカスタムのデータ構造156の中にデータ117(1)〜(N)を有するカスタムバイナリ150を出力する。方法450は、ファンクション115(1)〜(N)のラッピングも示すが、例示的な方法は、コードを多様化すること、データを多様化すること、および/またはコードおよびデータを多様化することによってカスタムバイナリを生成することができる。「データの多様化」という句には、データの多様化、およびデータ構造に基づく多様化を含むことができる。
ファンクションごとに元のプログラムを書き換えることを含む例示的な方法は、データ構造が、依然として、元のプログラムにおけるとおりに扱われるので、ガーベッジコレクションのような事柄が問題にならないという点においてしか利点を有さない。難読化のため、多様化のため、およびデータを不正操作耐性をより高くするために技術が適用される場合、変更が、ガーベッジコレクションのようなタスクをもたらすことができる。
前述した図1〜図6は、仮想化を、セキュリティを強化するのにどのように使用することができるか例示する。より具体的には、フロントエンドプロセスモジュールを使用して、カスタムバイナリコードを生成することができ、バックエンドプロセスを使用して、このカスタムバイナリコードを実行するカスタムVMを生成することができる。後段で説明される図7〜図14は、ISAおよび/またはVMの特定のフィーチャが、多様化を介してセキュリティを強化するのにどのように使用することができるか例示する。
本明細書で提示されるマネージドコードおよび様々な例示的な技術に関して、CLRに関する管理されたMSILと、Java(登録商標)ランタイム環境(JRE)に関するJava(登録商標)バイトコードの間の選択は、様々な例示的な技術を、.NET(商標)からJava(登録商標)ドメインに移すことができるので、多少、人為的である。さらに、Java(登録商標)バイトコードを難読化するための技術は、管理されたMSILバイナリに適用することができる。後段の説明は、「追加された」、つまり、カスタムの仮想化層から来る例示的な技術に主に的を絞る。例えば、インターネット配信を介した、配信されるコピーの自動化された多様化が、着実に受け入れられてきている。このため、例示的な技術のいずれかのオーバヘッド導入は、ますます経済的に実行可能となっている。
様々な例示的な技術は、人間対話がもはや要求されないポイントで保護を自動的に導入することができる。手に負えない数の多様な、意味的に等価なプログラムを生成することは、理論上、可能である。すなわち、300の命令を有するプログラムを考慮し、命令ごとに、その命令の先頭にノーオペレーションを追加するか否かを選択されたい。このことにより、異なる2300の意味的に等価なプログラムがもたらされ、2300は、全宇宙における粒子の推定される数である1087より大きい。
しかし、一意性だけは、結果のプログラムが、1つのインスタンスから得られた情報を別のインスタンス上にマッピングすることを複雑にするのに十分なだけ多様でなければならないので、必ずしも十分ではない。さらに、もたらされるプログラムは、好ましくは、破るのがそうたやすくないようでなければならない。様々な例示的な多様化技術の変域が、すべての意味的に等価なプログラムを含むものと期待するのは無理であるが、空間が大きいほど、内部で異なるプログラムを得ることが容易になるので、ダイバーシファイアの変域を最大化するように目標を設定することができる。
例示的なアプローチは、セマンティクス自体というよりむしろ、セマンティクスの既存の実装から始まる。いくつかのパラメータ化可能な変換を介して、異なるバージョンが獲得される。後段の様々な例では、独立に個別化されることが可能なISAのいくつかの構成要素が、特定される。
図7は、バイナリ構成要素505およびVM実装構成要素560としてグループ化された例示的なフレームワーク特徴500を示す。バイナリ構成要素505は、命令セマンティクス510、命令符号化520、オペランド符号化530、フェッチサイクル540、およびプログラムカウンタ(PC)−プログラム表現550を含む。これらの構成要素を、インタフェースが守られる限り、直交する仕方で個別化することができる。構成要素505は、カスタムバイトコード言語でバイナリを生成するのに、すなわち、例示的なカスタムISAを特定するのに十分である。さらに、多様化は、ターゲットVMまたはカスタムVMを多様化することによって行われてもよい(例えば、VM実装構成要素560を参照)。
図8は、実行モデルおよびインタフェース800を示す。モデル800は、コード802、データ構造804、メソッドフレームワーク810、およびカスタムバイナリ150を含む。図8において、矢印は、インタフェース依存関係を表し、アスタリスクは、いくつかの多様化可能な部分を表す。そのようなモデルを使用する例示的なアプローチは、モジュラー設計および独立の開発を可能にする。
モデル800およびフレームワーク500によれば、多様化には、(i)より小さい命令の組合せを介して命令を構築することによって命令セマンティクスをランダム化すること、(ii)より大きいセマンティックオーバラップを可能にするように命令セマンティクスを選択すること、(iii)従来の線形コード表現を離れて、コードを、自己適応(スプレー)バイナリツリーなどのデータ構造として表すこと、(iv)オペレーションコードおよびオペランドに可変の長さを割り当てて、逆アセンブリを複雑にし、局所的な変更をより困難にすること、(v)命令セットを制限して、コードを解析し、変更する際に攻撃者に与えられるオプションをより少なくすること、(vi)ビットパターン、オペレーションコード、およびオペランドの間のマッピングを可変にすることが含まれる。
図8におけるコード802は、フェッチ実行サイクルに基づく実行エンジンの高レベルの概観を与える。VMの主な内部データ構造は、メソッドフレームワーク810として示される。前述したとおり、矢印は、インタフェース依存関係を示す。例えば、DecodeOpcodeは、いくつかのビットをフェッチすることができるものと見込む。
図9は、図5の命令セマンティクス510と、多様化のために使用することができるいくつかのフィーチャとを示す。マイクロオペレーションの概念が、命令セマンティクスの多様化を可能にすることができる。例えば、カスタムバイトコード言語(例えば、カスタムISAに準拠する)における命令は、所定のマイクロオペレーションセットの任意のシーケンスであることが可能である。MSILに関して、マイクロオペレーションのセットは、現在、検証可能なMSIL命令と、以下を行う、いくつかのさらなる命令とを含む。すなわち、(i)適切な実行に要求されるメタ情報を通信すること、および(ii)セマンティクスを変えること(さらに後段でより詳細に説明される)などのさらなるフィーチャを可能にすることである。
以上のことは、P6マイクロアーキテクチャにおけるマイクロオペレーション(μオペレーション)の概念と比較することができる。各IA32命令が、一連のオペレーションに変換され、次に、これらのオペレーションが、パイプラインによって実行される。また、以上のことは、スーパーオペレーターと比較することもできる。スーパーオペレーターは、高いコストのオペレーション当たりのオーバヘッドを回避するとともに、実行可能ファイルサイズを小さくするように、より小さいオペレーションの組合せから自動的に合成された仮想マシンオペレーションである。
例示的な方法は、マイクロオペレーションのそれぞれをエミュレートするスタブを提供することを含んでもよく、これらのスタブを連結して、カスタムバイトコード言語(例えば、カスタムISA)におけるより表現豊かな命令がエミュレートすることができ、多くのエミュレーションファンクションは、反映に大きく依拠することができることを付記しておく。
以下のMSIL命令(加算、引数をロードする、および定数をロードする)、およびこれらの命令のエミュレーションスタブ(単純化されている)を使用する例を考慮されたい。すなわち、
Figure 2010508583
命令選択段階中、以下のセマンティクスを使用してカスタムバイトコード命令を作成することを所望するものと想定されたい。すなわち、
CustomIns n i:第n番の引数をロードし、定数iをロードし、これら2つの値を加算する。
次に、この命令が、大きい「スイッチ」ステートメントの中の「ケース」ステートメント(例えば、1)に割り当てられる。ケースステートメントは、マイクロオペレーションの異なるエミュレーションスタブの連結である。すなわち、
Figure 2010508583
不正操作耐性に関して、命令のセマンティクスの知識の欠如が、セマンティクスが規定されたマニュアルを有するのとは対照的に、プログラム理解を複雑にする。さらに1レベル進むのに、カスタム不正操作耐性ISAは、何らかの設計原理を遵守する命令セマンティクスを選択することができる。
図9を再び参照すると、条件付き実行512を、オプションとして、述語レジスタ513と併せて使用して、不正操作耐性を高めることができる。条件付き実行は、わずかに異なるコードをマージすることをさらに促進することができる。条件付き実行の存在下で、命令を、述語レジスタによって述語付きにすることができる。述語レジスタが偽に設定された場合、命令は、no−op(ノーオペレーション)として解釈され、さもなければ、命令は、エミュレートされる。このアプローチを使用して、レジスタは、わずかに異なるコードを実行することができるように、異なる実行パス上に、または異なる実行パスに沿って設定される。
例示的な方法は、元のプログラムにおける異なる2つのコンテキストにおいてコードシーケンスa、b、c、およびコードシーケンスa、d、cを提供し、次に、コードをa、[p1]b、[p2]d、cにマージして、p1が、「真」に設定され、p2が、「偽」に設定されて、第1のコンテキストでコードを実行し、逆に、第2のコンテキストでコードを実行することを含むことが可能である。1つまたは複数の述語レジスタを異なるように設定することの結果、異なるコードを実行することができる(例えば、a、b、ノーオペレーション、c、およびa、ノーオペレーション、d、c)。
制限された命令セット514を使用して、不正操作耐性を高めることができる。例えば、カスタムISAはノーオペレーション515を欠き、表現可能なオペランド516を制限し、さらに/または少なくともいくつかの条件付き分岐517をなくすことができる。別のアプローチは、カスタムVMを特定のプログラムに合わせてもよく、このため、例示的なアプローチは、VMが、そのプログラムによって要求されるオペレーションしかエミュレートすることができないことを確実にすることができる。
ノーオペレーションのないカスタムISA515を再び参照すると、このアプローチは、「望ましくない」機能(例えば、ライセンス検査、または負傷したゲームキャラクタの健康を低下させること)を、そのような機能にノーオペレーションを上書きすることによって取り除く、一般的な攻撃技術を考慮に入れる。多くの場合、カスタムISAにノーオペレーション命令を含める理由はほとんどなく、この命令を有さないことは、望ましくないコードをパディングによって消そうとする攻撃者の試みを複雑にする。
表現可能なオペランド516を制限することに関して、統計は、例えば、約600のJava(登録商標)プログラムからの整数リテラル(全部で140万行)のうち、80%が、0〜99までの範囲内にあり、95%が、0から999までの範囲内にあり、92%が、2のべき乗、または2のべき乗足す1もしくは2のべき乗引く1であることを示す。このため、例示的なカスタムISAは、表現可能なオペランドの数を制限することができ、やはり、攻撃の自由が制限される。
別の例示的なアプローチは、少なくともいくつかの条件付き分岐517の使用を変更する、または制限することができる。例えば、通常、各条件に関して2つのバージョンが存在する。すなわち、「条件が設定されている場合、分岐する、および条件が設定されていない場合、分岐する」である。2つの分岐の使用は冗長であるので、カスタムISAは、1つのバージョンだけが使用され、もう片方のバージョンは、ISAに含められないようにコードを書き換えることを含むことができることになる。この例示的な技術は、例えば、ライセンス検査が、通し番号の有効性に依存して条件的に分岐する場合、有用である可能性がある。それは、攻撃者が、分岐条件を単に反転させることを防止するだろう。
図10は、多様化のために使用されることが可能な命令符号化の様々な態様を有する図5の命令符号化ブロック520を示す。より具体的には、その態様には、可変命令サイズ522、物理的オーバラップのための単項符号化524、非局所的セマンティクス526、および復号構造を再構成すること529が含まれる。
命令セマンティクスが特定されると、これらの命令のためのオペレーションコード符号化を特定する必要性が、存在する。従来のアーキテクチャに関するすべてのオペレーションコードのサイズは、通常、一定であり、またはわずかにしか可変でない。例えば、MSILオペレーションコードは、通常、1バイトであり、それほど頻度の高くない命令に関して2バイトのオペレーションコードを可能にするエスケープ値(0xfe)を有する。制限された変動性は、テーブル解釈を介した高速のルックアップを容易にする。しかし、より一般的に、任意のプレフィックスコード(他のコードワードのプレフィックスであるコードワードは、存在しない)が、明瞭な解釈を可能にする。
最も一般的な形態において、オペレーションコードをセマンティクスに復号することを、バイナリツリー走査を介して行うことができる。復号は、通常、ルートノードで始まり、0ビットが読み取られると、左の子ノードへの移動が行われ、1ビットが読み取られると、右の子ノードへの移動が行われる。リーフノードに到達すると、オペレーションコードは成功して複合されている(例えば、命令のセマンティクスをエミュレートするケースステートメントへの参照を含むリーフノードを考慮されたい)。
カスタムISAが、任意のオペレーションコードサイズを許す場合、不正なオペレーションコードなしに、n個の命令に関する可能な符号化の数は、以下の数式によって与えられる。すなわち、
Figure 2010508583
式3において、この分数は、n個のリーフ(カタラン数)を有する平面バイナリツリーの数を表すのに対して、階乗は、リーフへのオペレーションコードの割り当てを表す。可能な最も短い符号化、すなわち、log2(n)ビットを有する固定のオペレーションコードサイズが選択された場合、それは、不正なオペレーションコードを導入する可能性がある。この場合、可能な符号化の数は、以下の表現(式4)によって与えられる。すなわち、
Figure 2010508583
カスタムISAが、最小限の固定オペレーションコードサイズ以外の理由で不正なオペレーションコードを許した場合、さらに多くの可能性が生じるだろう。しかし、このことは、利点をもたらすことなしに、カスタムISAにおいて書かれるバイナリのサイズを増大させる可能性がある。
.NET(商標)フレームワーク(例えば、MSIL)を対象とする、本明細書で提示される様々な例において、以下のモードをサポートすることができる。すなわち、(i)テーブルルックアップを伴う固定長のオペレーションコード、(ii)わずかに可変の命令サイズを可能にするマルチレベルテーブル符号化(より長いオペレーションコードに関して、エスケープコードが使用される)、および(iii)復号のためのバイナリツリー走査を伴う任意長のオペレーションコードである。そのようなモードを、適宜、他のフレームワークに適用することができる。
不正操作耐性に関して、この場合も、ビットシーケンスからセマンティクスへのマッピングについて知らないことは、例えば、マニュアルの中でそのような情報を有することと比べて、攻撃者に関して或る学習曲線を導入する。不正操作耐性特性を可能にするような仕方でマッピングを選択する、いくつかのさらなるアプローチが、存在する。
既に述べたとおり、図10の命令符号化ブロック520は、可変命令サイズアプローチ522を含む。例えば、カスタムISAは、CISCバイナリにおいて許されるよりもさらに大きい、オペレーションコードの長さの変動を生じさせてよい。また、可変命令サイズを使用して、局所的な変更をより複雑にすることもできる。一般に、より大きい命令は、より小さい命令に単に置き換わることが、そのことにより、次の命令が上書きされるため、可能でない。また、カスタムISAは、より小さい制御移行命令でない命令が、より大きい命令に置き換わることができないことを確実にすることもできる。例えば、このことは、そのような命令が、制御フローを次の命令に許すようにパディングによって消されることが可能でないことを確実にすることによって達せられることが可能である。
命令のそれぞれに、或る範囲のビット数(例えば、約64ビットから約127ビットまでの間)の一意のサイズが割り当てられることが可能な、64個の命令を有するコードまたはISAを考慮されたい。明らかに、より大きい命令は、より小さい命令のスペースに入らない。さらに、より小さい命令は、より大きい命令のスペースに入る。それでも、制御が、次のビットにまで抜ける際、制御が次の命令に流れることを確実にするように残りのビットをノーオペレーションで埋めるのに利用可能な命令は、存在しない。このため、このスキームの下では、制御移行命令を最長にして、攻撃者が、望むことを行うことができる別のロケーションにエスケープすることを防止することが有用である。
また、命令符号化ブロック520は、例えば、物理的オーバラップを実現する単項符号化アプローチ524も含む。単項符号化アプローチは、物理的オーバラップを大きくする、または最大化することによって、プログラムを込み入らせることができる。例えば、そのようなアプローチは、別の命令の途中にジャンプして入り、別の命令を復号することを始めることができる可能性がある。このアプローチを、良好な符号化を選択することによって円滑にすることができる。例えば、単項符号化を使用して、オペレーションコード(0、01、001、...0631)を符号化することができる。この例では、命令の先頭の後に1ビット、ジャンプすると、別の命令に出会う可能性が高い。すなわち、
1:add
01:mul
001:sub
0001:div
以上、4つの命令には、単項符号化を使用してオペレーションコードが割り当てられている。この例では、復号が、分割命令(div)の第2のビットで始まった場合、減算命令(sub)が、明らかにされる。同様に、分割命令、減算命令、および乗算(mul)命令の最期のビットを調べることは、加算命令を明らかにする。
命令符号化と関係するカスタムISAに関する別のアプローチは、非局所的なセマンティクス526を使用する。配布されるコピーごとに一意のバイトコード言語を有することは、攻撃者に対する相当な障壁を立てる。
一般に、ISAに関して、(i)ビットパターンから命令へのマッピング、(ii)命令のセマンティクス、(iii)ビットパターンからオペランドへのマッピング、(iv)データ構造の表現などについて利用可能なドキュメントは、全く存在しない。しかし、そのようなマッピングまたは表現は、静的な点検、または動的な点検を介して攻撃者によって最終的に学習される可能性がある。攻撃をくじくのに、カスタムISAは、非局所的なセマンティクス524を使用して、ビットパターンが、異なる実行パスに沿って異なる意味を有することを確実にすることができる。
バイナリプログラムは、プロセッサによって意味を与えられる「1」と「0」のシーケンスに過ぎない。ビットパターンと解釈の間の意味は、通常、ISAによって決定される。従来のアーキテクチャ上で、或る命令のオペレーションコードが、所与のビットパターンによって表される場合、このパターンは、このパターンが現れるすべての箇所で、すべてのバイナリに関して一定である。カスタムISAは、任意の特定のビットパターンを可変にすることができ、攻撃者に対する相当な障壁を立てるのに、すべての命令ビットパターンが可変にされる必要があるわけではないことを付記しておく。このため、非局所的なセマンティクスブロック526は、例えば、或る命令に関するオペレーションコードに関して、可変ビットパターンブロック527アプローチを含む。
カスタムISAにおいて、ビットパターンは、以前に実行されたコードに依存して、意味が割り当てられることしか可能でない。解釈が、以前に実行されたコードに依存するようにするのに、(完全に指定された)入力に依存して、カスタムISAは、異なる実行パスに沿って或るプログラムポイントに到達することを許すことが可能である。しかし、そのようなカスタムISAは、それでも、所与のプログラムポイントにおけるビットの解釈を支配することを望む可能性がある。この変動性に対処するのに、カスタムISAは、解釈変更を、他の何らかのイベントの副次的作用として暗黙にではなく、明示的にすることができる。このため、非局所的なセマンティクスブロック526は、例えば、以前のコード実行に基づいて意味を割り当てる、ビットパターンブロック528アプローチを含む。さらに、非局所的なセマンティクスブロック526は、例えば、異なる実行パスに沿ってプログラムポイントに到達するように、カスタムISAにおいて明示的な解釈変更にリンクする。
例示的な方法は、復号構造を再構成するように命令符号化を使用してプログラムの多様化コピーを生成して、2つ以上の実行パスに沿ってプログラムにおける或るポイントに到達することを許すことを含み、そのポイントにおけるビットパターンの割り当てられた意味は、そのポイントに至る実行パスに依存する。例えば、そのような方法は、異なる実行パスに関して異なることが可能な、以前のコード実行に基づく意味を割り当てることができる。
カスタムISAは、或る特定の解釈状態における実行環境に到達することに関して複雑度を制限しないことを目指すことができる。つまり、そのようなアプローチは、異なる解釈状態における異なる実行パスから或るプログラムポイントに到達することが許される場合、異なる解釈状態がどのようなものであるかにかかわらず、或る単一のターゲット解釈状態に移ることが比較的容易であることができることを確実にすることができる。
或る特定のアプローチには、構造を再構成すること529がかかわる。例えば、解釈を変更することは、復号ツリーを再構成することに他ならないとすることができる。以前の観察を考慮に入れて、カスタムISAは、多様化の限られた形態しか許さないことができる。この目的で、カスタムISAは、サブツリー(または他のサブ構造)があちこち動かされることが可能な選択されたレベルを有することができる。そのような選択は、どれだけの数の異なる解釈が可能であるかと、異なる可能性がある解釈状態のセットから決められた解釈に到達するのがどれだけ容易であるかとの間のトレードオフである。
或る例において、ツリー構造の第3のレベルを選択することを考慮されたい。最短のオペレーションコードが3ビットであるものと想定すると、このことにより、8!個の解釈状態が可能になる一方で、いずれの解釈状態も、せいぜい8回のマイクロオペレーションで到達可能である。そのようなアプローチを、MSILマイクロオペレーションのセットに適用することができる。例えば、以下のマイクロオペレーションを考慮されたい。すなわち、
位置、position1とposition2においてノードを交換するSwap(UInt3 position1,UInt3 position2)
ラベルを有する(ラベルがどこにあるかにかかわらず)ノードと、位置、positionにおけるノードとを交換する、Set(UInt3 label,UInt3 position)
テーブル解釈の場合、このことは、2レベルのテーブル解釈として実施される。第1のレベルは、スワップされることが可能な他のテーブルを参照することができる。
以上の例において、マイクロオペレーションは、MSIL命令に概ね対応し、オペランド型は、MSILオペランド型に概ね対応する。オペランドを使用するマイクロオペレーションエミュレーションスタブは、ファンクションコールを使用して、オペレーションコード符号化を、直交に多様化することができることを確実にする。そのようなコールバックは、呼び出し元であるカスタムVM命令(例えば、命令セマンティクス510の例を参照)を識別する引数「insNr」をさらに渡す。これは、異なるカスタムVM命令に関し異なってオペランドを符号化することを可能にする。スタブの連結のため、任意の数のオペランドが、オペレーションコードの後に続くことができることに留意されたい。このため、オペランド符号化530に関するアプローチは、そのような技術を含むことが可能である。このため、オペレーションコード符号化を多様化することに関する類似したアプローチを、命令符号化の場合と同様に作成することができる。
フェッチサイクルを多様化することは、「人為的な」形態の多様化と考えられることが可能である。図11は、「フィルタ」542を使用する様々なアプローチを含むものとしてフェッチサイクルブロック540を示す。基本的な「非カスタムの」フェッチサイクルは、現在のプログラムカウンタ(PC)に依存して、単に、カスタムバイトコードバイナリからいくつかのビットを取得する。しかし、1つまたは複数のフィルタ542の使用が、不正操作耐性を向上させるカスタムフェッチサイクルを可能にする。そのような1つまたは複数のフィルタは、バイナリにおける実際のビットを、VMによって解釈されるであろうビットに変換することができる。
フェッチサイクル542は、要求された1つまたは複数のビットを他の情報と組み合わせることによって複雑度を増加させることが可能である。例えば、要求された実際のビットを、プログラム543の他の部分と組み合わせることができる。そのようにして、プログラムは、プログラムの1つの部分を変更することが、他の部分も影響を及ぼす可能性があるので、より相互依存的になる。他のフィルタアプローチは、1つまたは複数のビットをランダムな値544(例えば、秘密鍵から導き出された)と組み合わせるフィルタと、1つまたは複数のビットをプログラムカウンタ(PC)545と組み合わせるフィルタとを含んで、パターンマッチング技術を複雑にする。
コードの最も慣例の表現は、バイトの線形シーケンスとしてである。そのようなアプローチでは、プログラムカウンタ(PC)は、単に、実行されるべき次のバイトをポイントし、制御移行は、相対オフセットまたは絶対アドレスとして、実行を続けるべきバイトを通常、指定する。これを、基本的に、バイトのアレイとしてコードを表す構造とみなすことができる。
図12は、プログラムカウンタ−プログラム表現ブロック550を、アレイ553、ツリー554、リンクリスト555、およびハッシュテーブル556を含む様々な構造的アプローチと一緒に示す。カスタムISAが、図13のスプレーツリー1320および1330などのスプレーツリーとしてコードを表すことができる。コードは、スプレーツリーとして表してもよいが、カスタムISAに関する例示的なアプローチは、代替として、またはさらに、データをスプレーツリー、または他の選択された構造において表現して、セキュリティを強化することができる。一般に、そのようなアプローチは、従来の線形表現(例えば、図13の線形アプローチ1310を参照)より容易に、多様化をもたらすことができる。
スプレーツリーは、いくつかの利点を有する。すなわち、それらは、自己平衡型であり、コードの自動再配置が可能になるだろう。さらに、それらは、任意のシーケンスに関するならしコストの点で、ほぼ最適である。最後に、最も新たにアクセスされたノードは、ツリーのルートの近くにある傾向にあり、これは、ほとんどの実行可能ファイルに存在する空間的および時間的な局所性の部分的な活用を可能にする。
自己平衡特性のため、コードは、或るコード断片に達した実行パスに依存して、メモリの中の多くの異なるロケーションに存在することができることになる。コード断片は、制御フロー移行のためにコード断片を参照する方法が存在し、したがって、制御が、これらのコード断片に移された際に、これらのコード断片を取り出すことができる限り、あちこち動かすことができる。例示的な構造アプローチは、制御移行が、制御が移される必要があるノードのキーを指定する場合、スプレーツリーにおけるノードのキーを使用する。そのような例では、制御フローのターゲットは、ノードであることが要求される(すなわち、ノード内に含まれるコードの途中に容易にジャンプして入ることができない)。実際上、このことは、実行が、基本ブロックごとに新たなノードを開始することを意味する。フォールスルーパスを、すべての制御フローを明示的にすることによって扱うことができる。そのような例では、すべての制御フローターゲットを、ターゲットコードを含むノードのキーとして指定することができる。さらに、ノードにおけるコードのサイズは、一定である可能性がある。さらに、ノードが基本ブロック全体を含むには小さすぎる場合、その基本ブロックは、別のノードにオーバフローして、その別のノードにおいて実行を続けることができる。
図13は、階数ファンクション「Fac」に関する所与の線形アプローチ1310のためにスプレーツリー1320、1330を使用する例示的なアプローチを示す。例えば、ファンクション「Fac」が、初めて呼び出されると、部分(2)に示されるとおり、キー1を有するノードが参照され、ルートまでパーコレートさせられる。この例で注目に値するもう1つのことは、このコードが検証を受けさせられないので、呼び出しがもはや、ファンクションシグネチャを指定しなくてもよいことである。
そのような技術が、単純に実施された場合、ポインタのみが、あちこち動かされ、実際のコードは、ヒープ上で同じ場所に留まる。このことをさらに複雑にすることに、それらのノードの実際の内容(プリミティブ型の)の明示的な交換が行われる可能性があり、または代替として、新たなコードバッファの割り当てが、そのコードバッファを、割り当てられたスペースにコピーすることと一緒に行われる可能性があり、場合により、再暗号化を伴い、さらに/または異なるガーベッジパディングが伴う。
図7のフレームワーク特徴500を再び参照すると、例示的なアプローチを、VM実装560に適用することができる。いくつかのアプローチが、図12に示される。所与の内部実装に関して、評価スタックは、ISAに基づいては特定されない(例えば、構成要素505を考慮されたい)。そのような例では、マイクロオペレーションに関するエミュレーションスタブは、「ポップ」や「プッシュ」などのいくつかのオペレーションをサポートするインタフェースだけにしか依拠しないことができる。スタックデータ構造562の内部実装に関する例示的なアプローチは、例えば、アレイ、リンクリストなどを介して、独立した多様性を導入する。例示的なアプローチは、オプションとして、そのようなインタフェースのいくつかの異なる実装をもたらすことができる。
別のアプローチは、VM生成を多様化すること564を目指す。例えば、前段で規定された形態の多様化に関するパラメータが、完全に指定されると、例示的なバックエンドプロセスが、様々なロケーションからのコードスニペット、および何らかの自己生成されたコードを組み合わせて、カスタムVMの実装のために管理されたC#表現をアセンブルすることができる。代替として、例示的なバックエンドプロセスは、dllを直接に出力することができる。
別の例示的なアプローチには、例えば、ソフトウェア最適化、ソフトウェア難読化、ソフトウェア多様化(の非仮想化ベースのアプローチ)などの、様々なドメインからの既存のコード変換のランダム化可能なバージョンを使用して、dllを多様化すること566がかかわる。
本明細書で説明される様々な例示的な技術は、一般に、いくらかのオーバヘッドをもたらすが、デジタル権利管理、センシティブな情報(例えば、政府の情報、専有の情報など)、ライセンスなどがかかわる場合、そのようなオーバヘッドを次いで、多様化を介してもたらされる強化されたセキュリティを所与として、許容することができる。そのような事例において、多様化技術は、通常、ターゲットとされる領域に適用され、ある程度の同時の、つまり、「リアルタイムの」実行を要求するランタイムフィーチャには適用されない可能性がある。例えば、多様化が、デジタル権利管理に関連するコードに適用され、実行に先立って何らかの形態のデジタル権利OKを要求する、関連するコードには適用されない可能性がある。
仮想化は、多様化と不正操作耐性の両方に関して広範な可能性を開く。実行環境を制御することは、攻撃者の作業を複雑にする相当なレバレッジをもたらす。様々な例は、仮想化の概念に基づくソフトウェア保護に関する或る特定のフレームワークを参照するが、多様性フィーチャおよび/または不正操作耐性フィーチャが、概ね独立した仕方で導入されることが可能な、様々なアプローチも、特定されてきた。モジュラー開発および/またはモジュラー展開を、使用することができる。
図15は、様々な例示的な構成要素を実装し、例示的なシステムを形成する際に使用することができる例示的なコンピューティングデバイス1500を示す。例えば、図1のシステムのサーバとクライアントが、デバイス1500の様々なフィーチャを含むことが可能である。
非常に基本的な構成において、コンピューティングデバイス1500は、通常、少なくとも1つの処理装置1502と、システムメモリ1504とを含む。コンピューティングデバイスの正確な構成およびタイプに依存して、システムメモリ1504は、揮発性(RAMのように)、不揮発性(ROM、フラッシュメモリなどのように)、またはこの2つの何らかの組合せであってもよい。システムメモリ1504は、通常、オペレーティングシステム1505、1つまたは複数のプログラムモジュール806を含み、プログラムデータ1507を含むことができる。オペレーティングシステム1506は、構成要素(特性およびイベントを含む)、オブジェクト、継承、多相性、反映をサポートする構成要素ベースのフレームワーク1520を含み、ワシントン州レドモンド所在のマイクロソフトコーポレーションによって製造される.NET(商標)フレームワークのAPI(アプリケーションプログラミングインタフェース)などの、オブジェクト指向構成要素ベースのAPIを提供する。また、オペレーティングシステム1505は、カスタムISAおよび/またはカスタムVMを有する例示的なフレームワークなどの、ただし、そのようなフレームワークに限定されない、例示的なフレームワーク1600も含む。さらに、コンピューティングデバイス1500は、カスタムISAおよび/またはカスタムVMを生成するためのソフトウェアモジュールを含むことができる。さらに、コンピューティングデバイス1500は、カスタムISAおよび/またはカスタムVMを試験するためのソフトウェアモジュールを含むことができる。コンピューティングデバイス1500は、少なくとも一部には、カスタムコードを実行するように、カスタムコードおよび/またはカスタムVMを生成するためのソフトウェアモジュールを含むことができる。デバイス1500は、破線1508によって境界を画定された非常に基本的な構成のものである。この場合も、端末装置は、より少ない構成要素を有することができるが、そのような基本的構成を有することができるコンピューティングデバイスと対話する。
コンピューティングデバイス1500は、さらなるフィーチャまたは機能を有してもよい。例えば、コンピューティングデバイス1500は、例えば、磁気ディスク、光ディスク、またはテープなどの、さらなるデータ記憶装置(リムーバブルな記憶装置、および/またはリムーバブルでない記憶装置)も含むこともできる。そのようなさらなるストレージが、リムーバブルなストレージ1509およびリムーバブルでないストレージ1510によって図15に示される。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のために任意の方法または技術で実装された、揮発性媒体と不揮発性媒体、リムーバブルな媒体とリムーバブルでない媒体を含んでよい。システムメモリ1504、リムーバブルなストレージ1509、およびリムーバブルでないストレージ1510はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、DVD(digital versatile disks)または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望される情報を格納するのに使用することができ、コンピューティングデバイス1500がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。いずれのそのようなコンピュータ記憶媒体も、デバイス1500の一部であってよい。また、コンピューティングデバイス1500は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス1512を有することも可能である。また、ディスプレイ、スピーカ、プリンタなどの出力デバイス1514を、含んでもよい。これらのデバイスは、当技術分野でよく知られており、本明細書で詳しく説明する必要はない。
また、コンピューティングデバイス1500は、デバイスが、ネットワーク(例えば、前述したWebまたはインターネットネットワーク103を考慮されたい)などを介して、他のコンピューティングデバイス1518と通信することを可能にする通信接続1516を含むこともできる。通信接続1516は、通信媒体の一例である。通信媒体は、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構で、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータによって実体化することができ、通信媒体には、あらゆる情報配信媒体が含まれる。「変調されたデータ信号」という用語は、信号内に情報を符号化するように特性の1つまたは複数が設定または変更された信号を意味する。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、RF媒体、赤外線媒体、およびその他の無線媒体などの無線媒体が含まれる。本明細書で使用されるコンピュータ可読媒体という用語には、記憶媒体と通信媒体がともに含まれる。
主題を、構造上の特徴、および/または方法上の動作に特有の言い回しで説明してきたが、添付の特許請求の範囲において規定される主題は、前述した特定の特徴または動作に必ずしも限定されないものと理解されたい。むしろ、前述した特定の特徴および動作は、特許請求の範囲を実施する例示的な形態として開示される。

Claims (10)

  1. コンピュータ実施可能方法であって、
    プログラムの多様なコピーを生成するフィーチャを備える命令セットアーキテクチャ(200)を提供するステップと
    前記命令セットアーキテクチャを使用して、プログラムの多様なコピー(150)を生成するステップと
    前記プログラムの前記多様なコピーの1つの実行のための仮想マシン(170)を提供するステップと
    を備えることを特徴とする方法。
  2. 請求項1に記載の方法において、仮想マシンを前記提供するステップは、仮想マシンダイナミックリンクライブラリ(172)を生成するステップを備えることを特徴とする方法。
  3. 請求項1に記載の方法において、プログラムの多様なコピーを生成する前記フィーチャは、述語レジスタ(513)を使用して条件付き実行(512)を可能にする命令セマンティクス(510)を備えることを特徴とする方法。
  4. 請求項1に記載の方法において、プログラムの多様なコピーを生成する前記フィーチャは、限られた命令セット(514)を有する命令セマンティクス(510)を備え、オプションとして、前記限られた命令セットは、「ノーオペレーション」命令を含まず(515)、オプションとして、前記限られた命令セットは、オペランド(516)の限られた表現を有し、オプションとして、前記限られた命令セットは、少なくともいくつかの条件付き分岐(517)を制限することを特徴とする方法。
  5. 請求項1に記載の方法において、プログラムの多様なコピーを生成する前記フィーチャは、可変命令サイズ(522)に関する命令符号化(520)を備え、オプションとして、プログラムの多様なコピーを生成する前記フィーチャは、単項符号化を使用してオペレーションコードを割り当てて、物理的オーバラップをもたらすための命令符号化(524)を備え、オプションとして、プログラムの多様なコピーを生成する前記フィーチャは、命令に関するオペレーションコードに関して可変のビットパターンをもたらす命令符号化(527)を備え、オプションとして、プログラムの多様なコピーを生成する前記フィーチャは、オペレーションコードの以前の実行に基づいてビットパターンを割り当てる命令符号化(528)を備え、さらに、オプションとして、プログラムの多様なコピーを生成する前記フィーチャは、復号構造を再構成して、2つ以上の実行パスに沿って前記プログラムにおける或るポイントに到達することを許す命令符号化(529)を備え、前記ポイントにおけるビットパターンの割り当てられた意味は、前記ポイントへの実行パスに依存することを特徴とする方法。
  6. 請求項1に記載の方法において、プログラムの多様なコピーを生成する前記フィーチャは、1つまたは複数のフェッチサイクルフィルタ(542)を備え、オプションとして、前記1つまたは複数のフェッチサイクルフィルタ(542)は、コードの要求される1つまたは複数のビットに情報を追加するフィルタ(543)を備え、オプションとして、前記情報は、ランダム値(544)を備え、オプションとして、前記情報は、プログラムカウンタ値(545)、またはプログラムカウンタ値に少なくともある程度、基づく情報を備えることを特徴とする方法。
  7. 請求項1に記載の方法において、プログラムの多様なコピーを生成する前記フィーチャは、前記プログラムを表すために、スプレーツリー、リンクリスト、およびハッシュテーブルから成るグループ(550)から選択された少なくとも1つの構造を備えることを特徴とする方法。
  8. コンピュータ実施可能方法であって、
    仮想マシンをターゲットとするコード(110)を提供するステップと
    様々なロケーションからの前記コードの断片、および何らかの自己生成されたコードを組み合わせて、仮想マシンの実装のための管理されたコード表現をアセンブルするか、または多様化された仮想マシンdllを出力することによって、多様化された仮想マシン(170)を生成するステップと
    を備えることを特徴とする方法。
  9. ソフトウェアセキュリティを強化するための方法であって(105)、前記方法は、
    命令セットを備える基本仮想化層を提供するステップと
    1つまたは複数のさらなる仮想化層を提供するステップであって、前記1つまたは複数のさらなる仮想化層のうち少なくとも1つは、前記基本仮想化層の前記命令セットを多様化するステップと
    を備えることを特徴とする方法。
  10. 請求項9に記載の方法であって、
    プログラムコードの個別化されたコピー(150)を生成するステップと
    前記プログラムコードの個別化されたコピーの実行のための仮想マシン(170)を提供するステップであって、前記仮想マシンは、ランタイムにプログラムオペレーションを変更することができるステップと
    をさらに備えることを特徴とする方法。
JP2009534768A 2006-10-27 2007-10-16 多様化された不正操作耐性のための仮想化 Active JP5302202B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/553,841 US8584109B2 (en) 2006-10-27 2006-10-27 Virtualization for diversified tamper resistance
US11/553,841 2006-10-27
PCT/US2007/081485 WO2008115279A2 (en) 2006-10-27 2007-10-16 Virtualization for diversified tamper resistance

Publications (2)

Publication Number Publication Date
JP2010508583A true JP2010508583A (ja) 2010-03-18
JP5302202B2 JP5302202B2 (ja) 2013-10-02

Family

ID=39495793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009534768A Active JP5302202B2 (ja) 2006-10-27 2007-10-16 多様化された不正操作耐性のための仮想化

Country Status (16)

Country Link
US (2) US8584109B2 (ja)
EP (1) EP2076863B1 (ja)
JP (1) JP5302202B2 (ja)
KR (1) KR101440646B1 (ja)
CN (1) CN101529436B (ja)
AU (1) AU2007349213B2 (ja)
BR (1) BRPI0716471A2 (ja)
CA (1) CA2662558C (ja)
ES (1) ES2675371T3 (ja)
IL (1) IL197361A0 (ja)
MX (1) MX2009003342A (ja)
MY (1) MY151697A (ja)
NO (1) NO344529B1 (ja)
RU (1) RU2458394C2 (ja)
TW (1) TWI431500B (ja)
WO (1) WO2008115279A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012008825A (ja) * 2010-06-25 2012-01-12 Nec Corp プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム

Families Citing this family (120)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8584109B2 (en) 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US20080184019A1 (en) * 2007-01-30 2008-07-31 International Business Machines Corporation Method for embedding short rare code sequences in hot code without branch-arounds
KR100922862B1 (ko) * 2007-11-14 2009-10-20 성균관대학교산학협력단 명령어의 부호화를 통한 시스템 보안방법
WO2009108245A2 (en) * 2007-12-21 2009-09-03 University Of Virginia Patent Foundation System, method and computer program product for protecting software via continuous anti-t ampering and obfuscation transforms
US8819647B2 (en) * 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8261254B2 (en) * 2008-03-31 2012-09-04 Symantec Corporation Dynamic insertion and removal of virtual software sub-layers
JP5151722B2 (ja) * 2008-06-20 2013-02-27 ソニー株式会社 データ処理装置およびその方法、並びにプログラム
US8434073B1 (en) * 2008-11-03 2013-04-30 Symantec Corporation Systems and methods for preventing exploitation of byte sequences that violate compiler-generated alignment
US8387031B2 (en) * 2009-01-23 2013-02-26 International Business Machines Corporation Providing code improvements for nested virtual machines
KR100985074B1 (ko) * 2009-02-05 2010-10-04 주식회사 안철수연구소 선별적 가상화를 이용한 악성 코드 사전 차단 장치, 방법 및 그 방법을 실행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
US20110099439A1 (en) * 2009-10-23 2011-04-28 Infineon Technologies Ag Automatic diverse software generation for use in high integrity systems
US20110208948A1 (en) * 2010-02-23 2011-08-25 Infineon Technologies Ag Reading to and writing from peripherals with temporally separated redundant processor execution
WO2011116446A1 (en) * 2010-03-24 2011-09-29 Irdeto Canada Corporation System and method for random algorithm selection to dynamically conceal the operation of software
EP2598987B1 (en) * 2010-07-29 2019-03-06 Irdeto B.V. System and method for efficiently deploying massively diverse program instances to resist differential attacks
CN101944042A (zh) * 2010-09-01 2011-01-12 深圳市拜特科技股份有限公司 一种Java程序的运行方法及电子终端
US9047101B2 (en) * 2010-12-06 2015-06-02 Google Inc. Method for compiling an intermediate code of an application
EP2482184A1 (en) * 2011-02-01 2012-08-01 Irdeto B.V. Adaptive obfuscated virtual machine
CN102231180B (zh) * 2011-07-30 2014-05-28 张鹏 处理器指令编码可重定义的方法
RU2620712C2 (ru) * 2012-01-09 2017-05-29 Конинклейке Филипс Н.В. Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US8533836B2 (en) 2012-01-13 2013-09-10 Accessdata Group, Llc Identifying software execution behavior
US8959577B2 (en) * 2012-04-13 2015-02-17 Cisco Technology, Inc. Automatic curation and modification of virtualized computer programs
JP6133409B2 (ja) * 2012-05-25 2017-05-24 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置
US9436474B2 (en) * 2012-07-27 2016-09-06 Microsoft Technology Licensing, Llc Lock free streaming of executable code data
CN102855139B (zh) * 2012-08-10 2015-04-22 浙江省电力公司电力科学研究院 一种反编译数据流分析中的寄存器清除方法及系统
CN103685399B (zh) 2012-09-17 2018-03-23 腾讯科技(深圳)有限公司 一种登录类Unix虚拟容器的方法、装置和系统
US9336370B2 (en) * 2012-12-06 2016-05-10 Apple Inc. Method and apparatus for dynamic obfuscation of static data
US9560014B2 (en) * 2013-01-23 2017-01-31 Mcafee, Inc. System and method for an endpoint hardware assisted network firewall in a security environment
US9116712B2 (en) * 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
KR101500512B1 (ko) * 2013-05-15 2015-03-18 소프트캠프(주) 데이터 프로세싱 시스템 보안 장치와 보안방법
KR101500714B1 (ko) * 2013-05-15 2015-03-10 주식회사 코스콤 시스템의 지연 방지 방법 및 그 시스템
WO2014210277A1 (en) 2013-06-28 2014-12-31 The Trustees Of Columbia University In The City Of New York Diversified instruction set processing to enhance security
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
US9223995B1 (en) * 2013-12-10 2015-12-29 Progress Software Corporation Semantic obfuscation of data in real time
WO2015149214A1 (en) * 2014-03-31 2015-10-08 Irdeto B.V. Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
RU2568282C2 (ru) * 2014-04-18 2015-11-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обеспечения отказоустойчивости антивирусной защиты, реализуемой в виртуальной среде
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code
US9715402B2 (en) 2014-09-30 2017-07-25 Amazon Technologies, Inc. Dynamic code deployment and versioning
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US10048974B1 (en) 2014-09-30 2018-08-14 Amazon Technologies, Inc. Message-based computation request scheduling
US9830193B1 (en) 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9537788B2 (en) 2014-12-05 2017-01-03 Amazon Technologies, Inc. Automatic determination of resource sizing
US9733967B2 (en) 2015-02-04 2017-08-15 Amazon Technologies, Inc. Security protocols for low latency execution of program code
US9588790B1 (en) 2015-02-04 2017-03-07 Amazon Technologies, Inc. Stateful virtual compute system
CN104680042B (zh) * 2015-03-10 2017-10-24 北京深思数盾科技股份有限公司 一种虚拟机性能分析的方法及系统
US9930103B2 (en) 2015-04-08 2018-03-27 Amazon Technologies, Inc. Endpoint management system providing an application programming interface proxy service
US9785476B2 (en) 2015-04-08 2017-10-10 Amazon Technologies, Inc. Endpoint management system and virtual compute system
CN105046117A (zh) * 2015-06-30 2015-11-11 西北大学 一种具有指令集随机化的代码虚拟化软件保护系统
CN105045605B (zh) * 2015-08-28 2019-05-24 成都卫士通信息产业股份有限公司 一种将dll注入目标进程的方法和系统
US9811434B1 (en) 2015-12-16 2017-11-07 Amazon Technologies, Inc. Predictive management of on-demand code execution
US10754701B1 (en) 2015-12-16 2020-08-25 Amazon Technologies, Inc. Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions
US10067801B1 (en) 2015-12-21 2018-09-04 Amazon Technologies, Inc. Acquisition and maintenance of compute capacity
US9910713B2 (en) 2015-12-21 2018-03-06 Amazon Technologies, Inc. Code execution request routing
CN106960141A (zh) * 2016-01-08 2017-07-18 阿里巴巴集团控股有限公司 虚拟机指令的编码、解码方法及装置、虚拟机保护系统
US10891145B2 (en) 2016-03-30 2021-01-12 Amazon Technologies, Inc. Processing pre-existing data sets at an on demand code execution environment
US11132213B1 (en) 2016-03-30 2021-09-28 Amazon Technologies, Inc. Dependency-based process of pre-existing data sets at an on demand code execution environment
EP3246837A1 (en) * 2016-05-19 2017-11-22 SFNT Germany GmbH Method to generate special purpose virtual machines
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10296331B2 (en) * 2016-07-12 2019-05-21 International Business Machines Corporation Log-based software porting
US10162605B2 (en) * 2016-07-20 2018-12-25 Microsoft Technology Licensing, Llc Code snippet content recommendation to define an object literal
EP3437011B1 (en) 2016-07-28 2020-12-16 Hewlett-Packard Development Company, L.P. Code package variants
US10884787B1 (en) 2016-09-23 2021-01-05 Amazon Technologies, Inc. Execution guarantees in an on-demand network code execution system
US11119813B1 (en) 2016-09-30 2021-09-14 Amazon Technologies, Inc. Mapreduce implementation using an on-demand network code execution system
US10325148B2 (en) * 2016-09-30 2019-06-18 Wipro Limited Method and a system for optical character recognition
US11017125B2 (en) * 2016-12-13 2021-05-25 University Of Florida Research Foundation, Incorporated Uniquified FPGA virtualization approach to hardware security
US10303861B2 (en) * 2017-01-26 2019-05-28 Immunant, Inc. Software diversification in external contexts
RU2638000C1 (ru) 2017-02-08 2017-12-08 Акционерное общество "Лаборатория Касперского" Способ контроля системы исполнения программируемого логического контроллера
EP3586229A4 (en) * 2017-02-21 2020-12-23 Privacy Software Solutions Ltd. METHOD AND SYSTEM FOR GENERATING MULTIPLE MOBILE TELEPHONE ENVIRONMENTS AND PAYMENTS ON A SINGLE HANDSET WITH A SINGLE SIM CARD
US10564946B1 (en) 2017-12-13 2020-02-18 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10733085B1 (en) 2018-02-05 2020-08-04 Amazon Technologies, Inc. Detecting impedance mismatches due to cross-service calls
US10831898B1 (en) 2018-02-05 2020-11-10 Amazon Technologies, Inc. Detecting privilege escalations in code including cross-service calls
US10725752B1 (en) 2018-02-13 2020-07-28 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10776091B1 (en) 2018-02-26 2020-09-15 Amazon Technologies, Inc. Logging endpoint in an on-demand code execution system
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US10649749B1 (en) 2018-06-26 2020-05-12 Amazon Technologies, Inc. Cross-environment application of tracing information for improved code execution
US11146569B1 (en) 2018-06-28 2021-10-12 Amazon Technologies, Inc. Escalation-resistant secure network services using request-scoped authentication information
US10949237B2 (en) 2018-06-29 2021-03-16 Amazon Technologies, Inc. Operating system customization in an on-demand network code execution system
US11099870B1 (en) 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
CA3106251A1 (en) * 2018-08-28 2020-03-05 Digital Immunity, Inc. Non-disruptive mitigation of malware attacks
US11243953B2 (en) 2018-09-27 2022-02-08 Amazon Technologies, Inc. Mapreduce implementation in an on-demand network code execution system and stream data processing system
US11099917B2 (en) 2018-09-27 2021-08-24 Amazon Technologies, Inc. Efficient state maintenance for execution environments in an on-demand code execution system
EP3884412A1 (en) 2018-11-19 2021-09-29 Secure Micro Ltd Computer implemented method
US11943093B1 (en) 2018-11-20 2024-03-26 Amazon Technologies, Inc. Network connection recovery after virtual machine transition in an on-demand network code execution system
US10884812B2 (en) 2018-12-13 2021-01-05 Amazon Technologies, Inc. Performance-based hardware emulation in an on-demand network code execution system
US11010188B1 (en) 2019-02-05 2021-05-18 Amazon Technologies, Inc. Simulated data object storage using on-demand computation of data objects
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11159528B2 (en) 2019-06-28 2021-10-26 Amazon Technologies, Inc. Authentication to network-services using hosted authentication information
US11190609B2 (en) 2019-06-28 2021-11-30 Amazon Technologies, Inc. Connection pooling for scalable network services
US11115404B2 (en) 2019-06-28 2021-09-07 Amazon Technologies, Inc. Facilitating service connections in serverless code executions
CN110430209B (zh) * 2019-08-13 2021-12-14 中科天御(苏州)科技有限公司 一种基于动态多样化的工控系统安全防御方法及装置
US11106477B2 (en) 2019-09-27 2021-08-31 Amazon Technologies, Inc. Execution of owner-specified code during input/output path to object storage service
US11386230B2 (en) 2019-09-27 2022-07-12 Amazon Technologies, Inc. On-demand code obfuscation of data in input path of object storage service
US11550944B2 (en) 2019-09-27 2023-01-10 Amazon Technologies, Inc. Code execution environment customization system for object storage service
US11023311B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. On-demand code execution in input path of data uploaded to storage service in multiple data portions
US11394761B1 (en) 2019-09-27 2022-07-19 Amazon Technologies, Inc. Execution of user-submitted code on a stream of data
US11263220B2 (en) 2019-09-27 2022-03-01 Amazon Technologies, Inc. On-demand execution of object transformation code in output path of object storage service
US10996961B2 (en) 2019-09-27 2021-05-04 Amazon Technologies, Inc. On-demand indexing of data in input path of object storage service
US11023416B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. Data access control system for object storage service based on owner-defined code
US10908927B1 (en) 2019-09-27 2021-02-02 Amazon Technologies, Inc. On-demand execution of object filter code in output path of object storage service
US11416628B2 (en) 2019-09-27 2022-08-16 Amazon Technologies, Inc. User-specific data manipulation system for object storage service based on user-submitted code
US11360948B2 (en) 2019-09-27 2022-06-14 Amazon Technologies, Inc. Inserting owner-specified data processing pipelines into input/output path of object storage service
US11250007B1 (en) 2019-09-27 2022-02-15 Amazon Technologies, Inc. On-demand execution of object combination code in output path of object storage service
US11055112B2 (en) 2019-09-27 2021-07-06 Amazon Technologies, Inc. Inserting executions of owner-specified code into input/output path of object storage service
US11656892B1 (en) 2019-09-27 2023-05-23 Amazon Technologies, Inc. Sequential execution of user-submitted code and native functions
US11119826B2 (en) 2019-11-27 2021-09-14 Amazon Technologies, Inc. Serverless call distribution to implement spillover while avoiding cold starts
US10942795B1 (en) 2019-11-27 2021-03-09 Amazon Technologies, Inc. Serverless call distribution to utilize reserved capacity without inhibiting scaling
CN113031930B (zh) * 2019-12-24 2022-07-05 武汉斗鱼鱼乐网络科技有限公司 一种控制流平坦化的源代码混淆生成方法及装置
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
US11188391B1 (en) 2020-03-11 2021-11-30 Amazon Technologies, Inc. Allocating resources to on-demand code executions under scarcity conditions
CN111314377B (zh) * 2020-03-17 2023-04-07 中科天御(苏州)科技有限公司 一种工控终端动态多样化云安全方法及系统
US11775640B1 (en) 2020-03-30 2023-10-03 Amazon Technologies, Inc. Resource utilization-based malicious task detection in an on-demand code execution system
US11593270B1 (en) 2020-11-25 2023-02-28 Amazon Technologies, Inc. Fast distributed caching using erasure coded object parts
US11550713B1 (en) 2020-11-25 2023-01-10 Amazon Technologies, Inc. Garbage collection in distributed systems using life cycled storage roots
KR102305845B1 (ko) 2020-12-21 2021-09-29 쿠팡 주식회사 코드의 검증을 위한 전자 장치 및 그 방법
US11388210B1 (en) 2021-06-30 2022-07-12 Amazon Technologies, Inc. Streaming analytics using a serverless compute system
US11968280B1 (en) 2021-11-24 2024-04-23 Amazon Technologies, Inc. Controlling ingestion of streaming data to serverless function executions
US12015603B2 (en) 2021-12-10 2024-06-18 Amazon Technologies, Inc. Multi-tenant mode for serverless code execution
CN114707124B (zh) * 2022-03-22 2022-11-29 广东技术师范大学 基于代码虚拟化的.net平台代码保护方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004348710A (ja) * 2003-05-20 2004-12-09 Samsung Electronics Co Ltd 固有番号を用いたプログラムの耐タンパ手法、及び難読化されたプログラムアップグレード方法、並びにこれらの方法のための装置
JP2005129066A (ja) * 2003-10-24 2005-05-19 Microsoft Corp オペレーティングシステムリソース保護
WO2005052841A2 (en) * 2003-11-26 2005-06-09 International Business Machines Corporation Tamper-resistant trusted virtual machine
JP2005266887A (ja) * 2004-03-16 2005-09-29 Kddi Corp プログラム難読化装置、プログラム配布システム、コンピュータプログラム
WO2005125081A2 (en) * 2004-06-12 2005-12-29 Microsoft Corporation Securing software
US20060136867A1 (en) * 2004-12-17 2006-06-22 Manfred Schneider Code diversification

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
EP1019794B1 (en) * 1997-10-02 2008-08-20 Koninklijke Philips Electronics N.V. Data processing device for processing virtual machine instructions
WO1999018485A2 (en) * 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. Variable instruction set computer
US6643775B1 (en) * 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
US6092202A (en) * 1998-05-22 2000-07-18 N*Able Technologies, Inc. Method and system for secure transactions in a computer system
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6832367B1 (en) * 2000-03-06 2004-12-14 International Business Machines Corporation Method and system for recording and replaying the execution of distributed java programs
US7051200B1 (en) 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US7093239B1 (en) * 2000-07-14 2006-08-15 Internet Security Systems, Inc. Computer immune system and method for detecting unwanted code in a computer system
US20030023960A1 (en) * 2001-07-25 2003-01-30 Shoab Khan Microprocessor instruction format using combination opcodes and destination prefixes
US7613930B2 (en) * 2001-01-19 2009-11-03 Trustware International Limited Method for protecting computer programs and data from hostile code
US7065755B2 (en) * 2001-03-15 2006-06-20 Sun Microsystems, Inc. Method and apparatus for removing class initialization barriers from shared compiled methods
US7543288B2 (en) * 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US7320075B2 (en) * 2001-11-20 2008-01-15 Safenet, Inc. Software protection method utilizing hidden application code in a protection dynamic link library object
US20030135719A1 (en) * 2002-01-14 2003-07-17 International Business Machines Corporation Method and system using hardware assistance for tracing instruction disposition information
US8843903B1 (en) * 2003-06-11 2014-09-23 Symantec Corporation Process tracking application layered system
WO2004046914A2 (en) * 2002-11-20 2004-06-03 Koninklijke Philips Electronics N.V. Vliw processor with copy register file
US7150003B2 (en) * 2002-11-25 2006-12-12 Matsushita Electric Industrial Co., Ltd. Class coalescence for obfuscation of object-oriented software
US20040117532A1 (en) * 2002-12-11 2004-06-17 Bennett Steven M. Mechanism for controlling external interrupts in a virtual machine system
US7162711B2 (en) * 2002-12-12 2007-01-09 Sun Microsystems, Inc. Method of automatically virtualizing core native libraries of a virtual machine
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7260815B1 (en) * 2003-06-30 2007-08-21 Vmware, Inc. Method and apparatus for managing registers in a binary translator
US9020801B2 (en) * 2003-08-11 2015-04-28 Scalemp Inc. Cluster-based operating system-agnostic virtual computing system
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
US20050066324A1 (en) 2003-09-22 2005-03-24 Microsoft Corporation Method and system for distributing and installing software
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7114055B1 (en) * 2003-09-29 2006-09-26 Xilinx, Inc. Reduced instruction set computer architecture with duplication of bit values from an immediate field of an instruction multiple times in a data word
US7376949B2 (en) * 2003-10-01 2008-05-20 Hewlett-Packard Development Company, L.P. Resource allocation and protection in a multi-virtual environment
US7421689B2 (en) * 2003-10-28 2008-09-02 Hewlett-Packard Development Company, L.P. Processor-architecture for facilitating a virtual machine monitor
US20050108440A1 (en) * 2003-11-19 2005-05-19 Intel Corporation Method and system for coalescing input output accesses to a virtual device
US20050177826A1 (en) * 2004-02-05 2005-08-11 Miller James S. Versioning support in object-oriented programming languages and tools
US20050216920A1 (en) * 2004-03-24 2005-09-29 Vijay Tewari Use of a virtual machine to emulate a hardware device
US7590867B2 (en) * 2004-06-24 2009-09-15 Intel Corporation Method and apparatus for providing secure virtualization of a trusted platform module
US8271976B2 (en) * 2004-06-30 2012-09-18 Microsoft Corporation Systems and methods for initializing multiple virtual processors within a single virtual machine
EP1669864B1 (en) * 2004-12-03 2010-06-02 STMicroelectronics Srl A process for managing virtual machines in a physical processing machine, corresponding processor system and computer program product therefor
US7472381B2 (en) * 2004-12-07 2008-12-30 Roaming Messenger, Inc. Method of and instruction set for executing operations on a device
US7409719B2 (en) * 2004-12-21 2008-08-05 Microsoft Corporation Computer security management, such as in a virtual machine or hardened operating system
US8370819B2 (en) * 2005-03-25 2013-02-05 Microsoft Corporation Mechanism to store information describing a virtual machine in a virtual disk image
JP4806402B2 (ja) * 2005-04-21 2011-11-02 パナソニック株式会社 プログラム難読化装置及び難読化方法
US20070022275A1 (en) * 2005-07-25 2007-01-25 Mistletoe Technologies, Inc. Processor cluster implementing conditional instruction skip
US7581085B1 (en) * 2005-09-08 2009-08-25 Parallels Software International, Inc. Fast stub and frame technology for virtual machine optimization
US8429630B2 (en) * 2005-09-15 2013-04-23 Ca, Inc. Globally distributed utility computing cloud
US8104033B2 (en) * 2005-09-30 2012-01-24 Computer Associates Think, Inc. Managing virtual machines based on business priorty
US7882499B2 (en) * 2005-10-24 2011-02-01 Microsoft Corporation Caching dynamically compiled code to storage
US8417796B2 (en) * 2006-01-17 2013-04-09 Leostream Corporation System and method for transferring a computing environment between computers of dissimilar configurations
US8296742B2 (en) * 2006-10-10 2012-10-23 Microsoft Corporation Automatic native generation
US8584109B2 (en) 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8078649B2 (en) * 2008-04-07 2011-12-13 Installfree, Inc. Method and system for centrally deploying and managing virtual software applications

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004348710A (ja) * 2003-05-20 2004-12-09 Samsung Electronics Co Ltd 固有番号を用いたプログラムの耐タンパ手法、及び難読化されたプログラムアップグレード方法、並びにこれらの方法のための装置
JP2005129066A (ja) * 2003-10-24 2005-05-19 Microsoft Corp オペレーティングシステムリソース保護
WO2005052841A2 (en) * 2003-11-26 2005-06-09 International Business Machines Corporation Tamper-resistant trusted virtual machine
JP2005266887A (ja) * 2004-03-16 2005-09-29 Kddi Corp プログラム難読化装置、プログラム配布システム、コンピュータプログラム
WO2005125081A2 (en) * 2004-06-12 2005-12-29 Microsoft Corporation Securing software
US20060136867A1 (en) * 2004-12-17 2006-06-22 Manfred Schneider Code diversification

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012008825A (ja) * 2010-06-25 2012-01-12 Nec Corp プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム

Also Published As

Publication number Publication date
US20080127125A1 (en) 2008-05-29
BRPI0716471A2 (pt) 2014-03-18
WO2008115279A2 (en) 2008-09-25
TW200832179A (en) 2008-08-01
US20140068580A1 (en) 2014-03-06
IL197361A0 (en) 2009-12-24
TWI431500B (zh) 2014-03-21
NO20091281L (no) 2009-05-22
US9459893B2 (en) 2016-10-04
KR20090082176A (ko) 2009-07-29
CN101529436A (zh) 2009-09-09
AU2007349213A1 (en) 2008-09-25
CA2662558A1 (en) 2008-09-25
RU2009115656A (ru) 2010-10-27
AU2007349213B2 (en) 2011-10-06
CA2662558C (en) 2015-12-01
EP2076863B1 (en) 2018-05-02
ES2675371T3 (es) 2018-07-10
US8584109B2 (en) 2013-11-12
NO344529B1 (no) 2020-01-27
MY151697A (en) 2014-06-30
WO2008115279A3 (en) 2009-02-19
CN101529436B (zh) 2012-12-12
EP2076863A4 (en) 2013-09-04
JP5302202B2 (ja) 2013-10-02
EP2076863A2 (en) 2009-07-08
KR101440646B1 (ko) 2014-09-22
MX2009003342A (es) 2009-05-12
RU2458394C2 (ru) 2012-08-10

Similar Documents

Publication Publication Date Title
JP5302202B2 (ja) 多様化された不正操作耐性のための仮想化
Narayan et al. Swivel: Hardening {WebAssembly} against spectre
TWI648648B (zh) 安卓平台上可執行程式的保護方法
US9536079B2 (en) Safely executing an untrusted native code module on a computing device
Suiche Porosity: A decompiler for blockchain-based smart contracts bytecode
EP2281234B1 (en) Method for validating an untrusted native code module
Jackson et al. Diversifying the software stack using randomized NOP insertion
Anckaert et al. Proteus: virtualization for diversified tamper-resistance
Popa Techniques of program code obfuscation for secure software
Pappas et al. Practical software diversification using in-place code randomization
Cha et al. Platform-independent programs
Bauer et al. Mechanisms for secure modular programming in Java
Cabral et al. Rail: code instrumentation for. net
Dai Zovi Security applications of dynamic binary translation
Wendland WebAssembly as a Multi-Language Platform
Yarom Software-based reference protection for component isolation.
Davi et al. Automated Software Diversity

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100921

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120323

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120625

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121012

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130212

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130213

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130305

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130521

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130620

R150 Certificate of patent or registration of utility model

Ref document number: 5302202

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250