JP5777189B2 - 攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法 - Google Patents

攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法 Download PDF

Info

Publication number
JP5777189B2
JP5777189B2 JP2014500209A JP2014500209A JP5777189B2 JP 5777189 B2 JP5777189 B2 JP 5777189B2 JP 2014500209 A JP2014500209 A JP 2014500209A JP 2014500209 A JP2014500209 A JP 2014500209A JP 5777189 B2 JP5777189 B2 JP 5777189B2
Authority
JP
Japan
Prior art keywords
dependency
data
code
function
program
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.)
Expired - Fee Related
Application number
JP2014500209A
Other languages
English (en)
Other versions
JP2014509029A (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.)
Irdeto BV
Original Assignee
Irdeto BV
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 Irdeto BV filed Critical Irdeto BV
Publication of JP2014509029A publication Critical patent/JP2014509029A/ja
Application granted granted Critical
Publication of JP5777189B2 publication Critical patent/JP5777189B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • 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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Description

(著作権覚書)
本特許文献の開示の一部は、著作権保護に従うべき題材を含む。前記著作権保有者は、公認された特許包袋や特許記録に記載された通りであれば、特許文献または特許開示を誰が複写しようが異議を唱えないが、それ以外の場合はいかなる著作権もすべて保有する。
本発明は概して、隠匿および改ざん防止によるソフトウェア保護に関する。特に、本発明は、隠匿および改ざん防止技術を組み合わせて、保護されたアプリケーション全体にアグレッシブな依存関係群を自動的に張り巡らせる高度に依存したコードを形成し、それによって攻撃に対する耐性を強化する、ソフトウェアアプリケーションの保護に関する。
ますます発展するコンピュータソフトウェア産業において、アタッカー(例えば,ソフトウェアハッカー)が高価かつ繊細なソフトウェアアプリケーションを無許可または無認可で不正使用する例が多数存在する。さらに、本分野で新たなソフトウェアアプリケーションが展開されにつれ、その基礎となるプログラムコードのモジュール式であり関数ベースである構造によって、かかるソフトウェアアプリケーションが簡単にコードリフティングおよびデータリフティング攻撃の対象となってしまうことがよくある。
現在のソフトウェア保護技術は、主として、隠匿および改ざん防止という、防御の二つの主要な領域を中心とする。隠匿には、一般的に、高精度のアセットおよび関数をアタッカーから隠すためのメカニズムを提供することが含まれる。改ざん防止には、一般的に、保護されたソフトウェアの一部がアタッカーによって改変されたら、前記ソフトウェアがそれぞれ異なる反応をするようなメカニズムを提供することが含まれる。しかし、これら技術のいずれも、コードリフティングおよびデータリフティング攻撃に適切に対処していない。
例えば、単にアタッカーのアプリケーションから使用可能な関数を起動するだけで、動的リンクライブラリ(DLL)は容易に特定同定され不正に再使用されるだろう。また、関数またはコード断片は、元のプログラムからリフトされ、アタッカーのプログラムで再使用されるだろう。さらに、アタッカーによって一度データ使用が特定されると、どんなデータも、使用されるデータ量にかかわらず、実行ファイルの前記セクションから、またはデータファイルから、容易に抽出され、ハッカーのアプリケーションから読み込まれ使用されるだろう。さらに、ソフトウェアアプリケーションの設計者がプログラムの構造をわかりにくくできたとしても、アタッカーはそうしようと思えばきっと前記関数を起動するアセンブリコードをリフトするであろうし、その後アタッカー自身の不正ソフトウェアアプリケーションで前記コードを再実行するだろう。前記ソフトウェアを攻撃するこのプロセスを支援するハッカーツール(例えば,逆アセンブラや逆コンパイラ)がある。
ソフトウェア保護の別の例には、プログラムを特定の装置に結合させる公知のノードロッキングの手法がある。この手法では、固有の識別子(ID)がハードウェアから取得され、プログラムが当該IDに依存させられる。これは、媒体アクセス制御(MAC)アドレスのようなハードウェア識別子、ハードウェアディスクID、指紋情報の使用によって構築されるデバイスキーの算出であってもよい。前記キーを生成するためにこれら識別子を使用するアルゴリズムは、関数およびデータの精巧なプロセスであろう。しかし結局のところ、コードおよびデータ群全体としては、リフティング攻撃にたいして脆弱である。
したがって、改良された改ざん防止および隠匿特性を備える攻撃耐性を提供することが望まれる。
本発明は、従来のソフトウェア保護メカニズムの少なくとも一つの欠点を取り除く、または軽減することを目的とする。
本発明には、ソフトウェアアプリケーションの攻撃耐性を強化することを目的として、当該ソフトウェアアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法が含まれる。前記システムおよび方法は、かかるソフトウェアアプリケーションの基礎となる高度に依存したコードの生成を提供し、攻撃に耐性のある、改ざん防止と隠匿とを組み合わせたメカニズムを含む。概して、ソフトウェアアプリケーション全体に自動的に張り巡らされるアグレッシブな依存関係群が、本発明によって提供される。さらに重要なことには、これら依存関係は、前記所与のソフトウェアアプリケーションのどの部分も(すなわち,コード部分やソフトウェアモジュールなどを含む部分も)そのままで用いられないようにする。改ざん防止特性に加えて、本発明の技術は、前記所与のソフトウェアアプリケーションに挿入されている依存関係を特定し取り除くことを困難にする隠匿特性を備えている。
第1の態様において、本発明は、攻撃耐性をソフトウェアアプリケーション全体に提供する方法であって、前記ソフトウェアアプリケーションの重要なアセットを識別する工程であって、前記重要なアセットは一つ以上の所定のプログラム特性により成る工程と、プログラム特性関数を、前記重要なアセットのうちの対応する一つに関連付ける工程と、ユーザ定義のトレランスに従って前記関連付ける工程を調整する工程と、前記ソフトウェアアプリケーションの一つ以上のポイントで、前記プログラム特性関数から演算処理されたプログラム特性を生成する工程と、前記一つ以上の所定のプログラム特性のうちの対応する1つに対して前記演算処理されたプログラム特性を検証する工程とを含む、方法を提供する。
さらなる態様において、本発明は、攻撃耐性をソフトウェアアプリケーション全体に提供する方法であって、前記ソフトウェアアプリケーションの中間コンパイラ表現からの元のデータおよびプログラム依存関係とともに、重要なアセットを識別する工程と、ユーザ固有の基準に従って前記重要なアセットの優先順位を決める工程と、前記元のデータおよびプログラム依存関係を、前記優先順位が決まった重要なアセットに相互に関連させる工程と、前記ソフトウェアアプリケーションについてユーザ固有の制御トレランスを取得する工程と、前記ユーザ固有の基準と前記ユーザ固有の制御トレランスとに関して、新たなデータおよびプログラム依存関係要素を前記ソフトウェアアプリケーションの前記中間コンパイラ表現に挿入して、代替の中間表現を形成する工程と、前記代替の中間表現から変換済みソフトウェアアプリケーションを生成する工程とを含み、前記変換済みソフトウェアアプリケーションは、強化された攻撃耐性を提供する改善された依存関係ネットワークを含む、方法を提供する。
さらに別の態様において、本発明は、攻撃耐性をソフトウェアアプリケーション全体に提供するシステムであって、前記ソフトウェアアプリケーションの重要なアセットのユーザ仕様書と、ソフトウェアに実現された自動プログラム変換メカニズムとを含み、前記自動プログラム変換メカニズムは、前記ソフトウェアアプリケーションの中間コンパイラ表現からの元のデータおよびプログラム依存関係を識別し、ユーザ固有の基準に従って前記重要なアセットの優先順位を決め、前記元のデータおよびプログラム依存関係を、前記優先順位が決まった重要なアセットに相互に関連させ、前記ソフトウェアアプリケーションについてユーザ固有の制御トレランスを取得し、前記ユーザ固有の基準と前記ユーザ固有の制御トレランスとに関して、新たなデータおよびプログラム依存関係要素を前記ソフトウェアアプリケーションの前記中間コンパイラ表現に挿入して、代替の中間表現を形成し、かつ、前記代替の中間表現から変換済みソフトウェアアプリケーションを生成し、前記変換済みソフトウェアアプリケーションは、強化された攻撃耐性を提供する改善された依存関係ネットワークを含む、システムを提供する。
本発明のその他の態様および特徴は、当業者が添付の図とともに本発明の特定の実施形態についての以下の記載を参照すれば、明らかになるであろう。
添付の図を参照して本発明の実施形態が示されるが、これらはあくまでも例示である。図は以下のとおりである。
図1は、本発明の変換プロセスの一般化されたフロー図である。 図2は、本発明の関数呼び出しの挿入およびデータ依存関係を示す図である。 図3は、本発明のプログラム変換を示す図である。 図4は、本発明のプログラム変換用の方法工程のフローチャートである。 図5は、装置フィンガープリンティングの従来技術例を示す図である。 図6は、図5に示された装置フィンガープリンティング例にさらに本発明の変換を適用したものを示す図である。
概して言えば、本発明は、ソフトウェアアプリケーション(または単に「プログラム」と記載する)の一部から以前は無関係であった別の部分への従属関係を、自動的に伝搬させる方法およびシステムを提供する。前記プロセスは、所望の回数、反復されてもよい。
より詳しくは、本発明には、前記プログラムの他の部分への必須コード関数およびデータの伝搬が含まれる。本発明は、一般的な算術関数を、プログラムの既存の部分に結合している混合ブール演算(MBA)式と置き換える。前記プログラムはまず、コンパイラレベルで分析され、プログラム中に保持されている特性を特定する。その後、これら特性に基づいて条件を構築し、データおよび演算中の条件を暗号化する公式へ暗号化する。そしてこれが、実際の依存関係をアプリケーション全体に作り出すために使用され、もし依存関係が壊れた場合に前記プログラムが正常に機能しなくなるようにする。
本発明は、実行されると、ユーザが重要なプログラムアセットの識別を行うようにしてもよく、または、所定のプログラム特性基本命令群がライブラリに確立されて、アナライザが自動的にユーザのプログラムに当てはまる特性基本命令群を特定するようにしてもよい。どちらの場合も、依存関係キャリアおよびバインディングが依存関係のウェブを作り出すために用いられてもよく、これは前記プログラム特性の条件が持続することを要する。もしソフトウェアリフティング攻撃がコードの一部になされたら、プログラム特性の持続の見込みが小さくなり、条件が持続しなくなり、前記依存関係を保持する前記プログラムの一部は正常に動作しなくなる。
図1において、本発明の変換プロセス100の一般化されたフロー図が示される。ここに、本発明のプロセスへの3つの入力110、113、114が示されている。まず、ソースコード形式のアプリケーションプログラム114が提供される。次に、前記プログラムの重要なアセットのユーザ仕様書110(または、上述のようなユーザのプログラムに適用される特性基本命令群のライブラリでもよい)が提供される。このユーザ仕様書(または特性基本命令ライブラリ群)は、重要なアセットの相対的な優先順位を示す、元のアプリケーションのマークアップである。前記マークアップは、様々な形態をとってもよい。たとえば、プログラミング言語自体の上の言語拡張;前記プログラムを参照する別の記載;またはユーザが前記プログラムの領域を強調できるグラフィカル・ユーザー・インターフェース(GUI)であってもよい。前記第3の入力は、アプリケーションの安全性、性能、およびサイズ目標間でのトレードオフをユーザが特定できるようにする制御オプション(すなわち,トレランス)113を含む。これら入力110、113、114は自動プログラム変換ツール111によって処理され、プログラム依存関係が挿入された変換済みアプリケーションプログラムを作成する。得られた変換済みプログラム112は、正常な動作条件下では、元の入力プログラムと同じ挙動をする。ただし、重要なアセットが敵対者による攻撃にさらされているという条件下では、前記プログラムは期待されたようには挙動しない。かかる攻撃には、アプリケーションデータ値を他のデータ値と置き換える、コードまたはプログラムの一部を別のコードと置き換える、前記プログラムの制御のフローを別のソースへ向ける、または別のソースから導く、前記プログラムの、別のコンテクストで使用するための部分をリフティングする、などがあるが、これらに限定されるわけではない。
重要なアセットのユーザによる識別が含まれる本実施形態に関して、本発明はコンパイラベースの変換ツールを提供するが、この変換ツールは、重要なアセットから開始し、演算、関数呼び出し、およびデータ使用を挿入することによって前記アセットに対して依存関係の長大なウェブを築く。演算および関数は、アプリケーションの既存の関数にアグレッシブに統合される。前記アプリケーションからのデータは、分析され可能ならば再使用される。また、作り出されたデータは前記アプリケーションに使用されるデータ構造に統合される。依存関係のウェブは、ユーザのサイズおよび性能トレランスの範囲内でできるだけ広く拡張される。上記に示唆した通り、本発明は安全性と性能とをトレードオフするための自由度を提供する。高性能のためには、性能に影響の大きいコードを避けて安全性の目標を維持するように依存関係のウェブを調整してもよい。前記依存関係のウェブの端点は、安全性と性能とのトレードオフを最適化するために戦略的に設定されてもよい。極端な場合、前記依存関係のウェブはアプリケーション全体をカバーし、これは重要なアセットが例外なく依存関係にあることを意味する。
さらに、ライブラリに確立された所定のプログラム特性基本命令群が含まれる実施形態に関して、本発明は、ユーザのプログラムに適用される特性基本命令群を自動的に特定するアナライザを提供する。プログラム中の一つのソース点から別の対象点へ従属関係を広げ、各基本命令のアプリケーションに基づいて、前記プログラムが変更される。対象点では、もとは前記ソース点由来の一定の条件へ依存するように、前記プログラムに対して依存関係バインディングが作り出される。前記プログラム中の前記ソース点が変更によって直接的に攻撃されると、前記対象点で前記プログラムの演算中に副次的効果が発生することが、上記の依存によって確実になる。その結果、アタッカーの期待するパラメータ内で挙動しないプログラムが得られる。
多数の種類の特性基本命令があり、また、プログラムが特性基本命令に基づいて変更される方法もさらに多数ある。特性基本命令は各種それぞれ、一定の特徴を有する。例えば、積分定数特性とは、プログラムの実体が、プログラムの全実行寿命について定数を保持していることを意味する。この特徴は、前記実体がプログラム使用の時点で前記積分定数値を有していなければならず、かつ、決して他の値は取らないことを示唆する。これに基づいたプログラム操作の例としては、以下に示すものがあるが、これらに限定されるわけではない:元の定数値についてプログラム実体を複製する;プログラム中の他の値を演算処理するために定数値を使用する;イニシャライズ時間での定数値の演算処理;プログラムの他のフロー全体で定数値を演算処理し、プログラム中、使用時点で正しい値を含むことだけを確実にする;または、プログラム中の適切な時間に有効性を保持するという条件(例えば、equal(等しい)、greater-than(〜より大きい)、less-than(〜より小さい)など)(すなわち,プログラムの寿命、または前回点に記載された演算処理に従った使用時点)で実体を使用する、など。
図2は、本発明の関数呼び出し、およびデータ依存関係の挿入を示す、アプリケーションに対する変換の一般的な例である。変換は、元のアプリケーション側200と変換済みアプリケーション側201の間に示された大きな黒い矢印によって表されている。元のアプリケーション200は左に示され、呼び出しグラフを介して相関している関数(Fl、F2、F3、F4、F5)221〜225の群を含む。前記関数呼び出しグラフは、そのノードが関数を表し、その有向エッジ(関数から関数への矢印)が一つの端部の関数呼び出し元(矢印の元)と、他方の端部(矢印の先)の関数呼び出し先とを表すグラフである。図2のグラフはまた、有向エッジ(データから関数への矢印)を介した、メモリ(Dl、D2、D3)211〜213へのデータ依存関係を示す。この例は、読み出し専用(定数)データを示しているが、前記プロセスが読み取り・書き込みデータにも使用されてもよく、前記データの寿命は周知であるか、または分析されてもよい。図2は、右に変換済みアプリケーション201を示す。元の呼び出しグラフ依存関係221〜225およびデータ依存関係211〜213に加えて、新たな項目が挿入されている(破線に示される項目)。これら新たな項目には、下記に示す項目が含まれるが、これらに限定されるわけではない:
・元の依存とは異なる、データからコードおよび/または関数への依存関係
・元の依存とは異なる、コードおよび/または関数の間の依存関係を有する新たなデータ
・元のプログラムには存在しなかった、関数呼び出し依存関係
・関数統合、これは以前は関係が無かった二つの関数について共用関数APIを効果的に作り出す
・データ複製、これはデータ攻撃の有意な変形の危険を減少させる
・コード複製、これは、望ましいプログラム挙動を強制する試みにおいてコードを変更するというアタッカーの能力を低減する
・実行の際に、後にコードパスで使用されるであろうデータに必要なアドレスを演算処理する、ハッシュ・アルゴリズムの呼び出しの挿入
上記の項目リストは、プログラムを、当該プログラムよりも多くの依存関係を有する新たなプログラムに変換する手段のサンプルを提供している。
ただし、本発明では、プログラム特性とは、事前に(例えば,開発時、設置時、または初回実行時に)演算処理され、後の時点で(例えば、ランタイム時に)検証されるプログラムのなんらかの特徴として定義される。プログラム特性の例をいくつか挙げると、以下のものがある(ただし、これらに限定されるわけではない):
・プログラムの一部または全体における、コード片のハッシュ値
・プログラムの特定の実行状態における変数の特定の値
・プログラムのコード片にある命令の絶対的または相対的なアドレス
・プログラム中のコード片またはデータ片のうちいずれかのサイズ
・プログラムのレイアウト中の命令の種類と配置
・プログラム中の断片のサイズと配置
・プログラム中の関数の数とアドレス配置
・プログラム中のシステム呼び出しの数とアドレス配置
・プログラム中の命令の相対的なオフセット
本発明では、プログラム特性は特に重要である。具体的には、これら特性はある時点で演算処理され、その他の一つまたは複数の時点で検証されてもよい。前記検証をパスすることが期待される;さもなければ改ざん(例えば,逆行分析攻撃、コードおよびデータ変形例攻撃、コードおよびデータリフティング攻撃など)が推測され、検出される。依存関係としてのプログラム特性をプログラム全体に伝搬させると、最終的に得られるものは、影響を受けていないプログラム特性に依拠する、しっかりと結合されたプログラムである。プログラムが正常に機能するかどうかは、プログラム特性によるところが大きくなる。上述のように、前記プログラム特性関数は所与のプログラムに対してソフトウェア保護を適用する技術者が使用できるよう、特性基本命令のライブラリが開発者によってハンドコードされる方法か、またはコンパイラ解析フェーズがプログラムへの自動注入用の特性基本命令を決定する方法かの二つの方法で作成できる。なお、これら選択可能なアプローチはどちらも本発明の不可欠の要件である。
依存関係キャリアに関しては、かかるキャリアは、単純な変数から暗号化された値の計算を含む複合データ構造まですべてを含んでもよい。加えて、キャリアはデータに限定されず、依存関係はかわりに同様にプログラムコードに担持されてもよい。通常、本発明の依存関係キャリアは、個別の値を設定し、演算および/または条件を評価し、実行の異なる時点でその結果を使用し、また、設定されている元のデータ値を隠すように設計されたコード公式およびデータを備える。プログラム全体でデータとして担持されている依存関係は、好適には、変換済みの形態で暗号化され、元の値がアタッカーにわからないようにされる。このように、これらは簡単に逆行分析のような攻撃をかけられることはない。依存関係キャリアは、関連付けられたランダムな定数を有する様々な変換ファミリーを用いて暗号化される。暗号化方法のこの多様性により、依存関係が逆行分析されてプログラムから除去されるのを防ぐ一定レベルの曖昧性が提供される。デザイン志向に応じて、様々な公知の暗号化方法が、本発明の意図する範囲から外れることなくこの目的のために使用されてもよい。データ依存関係を暗号化する方法として可能なものは、米国特許第6,594,761号、第6,842,862号、および第7,350,085号に記載されている。参照文献の内容は当該参照により本明細書に包含される。
前記値は、上述のように、以下の通り暗号化されてもよい。ある関数をFとすると、
y=F(x)
であり、逆関数をF-1とすると
x=F-1(y)
である。この場合、Fは、xを依存関係キャリアyに暗号化する手段として用いることができる。さらに、FおよびF-1が、それら演算にさらにパラメータをいくつ取ろうとも、同じ全体的効果が得られる。加えて、xおよびyは、最も単純な場合、それぞれ単独の変数である。ただし、それらはまた、関数および逆関数の全体的効果が維持される限り、以下に示すもののいずれであってもよい:多数の変数、条件、データ構造、配列、大きな整数など。
さらなるバリエーションとして、演算が既存のプログラムコードと混ざり合って関数および逆関数の境界が不明になってもよい。例えば、Fを、
F(x)=c(b(a(x)))
とし、F-1を、
F-1(y)=a-1(b-1(c-1(y))
とする。
前記関数a->b->c->c-1->b-1->a-1は、全体として、依存関係を担持するというジョブを行い、最終的にその順序で実行されなければならない。ただし、関数および逆関数の関連を絶って、いくつかのサブ関数にする能力は、重要である。サブ関数は、ソース(すなわち,依存関係の発生元)によって対象(すなわち,コードの挙動が依存関係に依存しているところ)に対して離間されているコード位置の何個分に注入されてもよい。依存関係キャリアとして機能するサブ関数は、以下のようであってもよい。
・―起動数が適切になるような条件制御下で、呼び出しグラフの様々なレベル、例えば、メインレベル、呼び出された関数、リーフ関数などに設けられてもよい
・単一のコードとして統合されてもよい。例えば、もし演算においてbおよびb-1が同じまたは類似なら、それらは単一の関数に統合されてもよい
・既存のアプリケーション関数に統合されてもよい
・公知の特性(例えば、定数、その他の特性基本命令)で構築されてもよく、新たな依存関係キャリアおよびバインディングを、挿入される特性とする
・アプリケーションコードとブレンドしてもよい。例えば、a-1という最後の演算は、コードと区別がつかないように、値xの最終使用とブレンドしてもよい
依存関係キャリアのさらなる態様は、「状態」の概念である。依存関係キャリアは、一つの元の値の初期状態以上を担持してもよい。例えば、二つの初期値をxとx’とし、依存関係キャリアをyとすると、
y=F(x、x’)
である。ここで、以下の4つの初期状態がありうる:
1. 何も設定されていない
2. xが設定されている
3. x’が設定されている
4. xおよびx’の両方が、設定されている
さらに、「演算」の概念が、依存関係キャリア状態に付加されてもよい。例えば、xおよびx’の等価条件に関心があるという状況を考えると、下記の演算によって、5番目の状態が定義される:
5. 等価条件の評価。
同様に、さらにいくつかの暗号化演算または逆演算を、中間状態として考えることができる。これら暗号化は、算術演算またはブール演算から公式化できる。何らかの形式で情報が保有されている限り、前記データは、望ましい数の中間状態をとってもよい:
6. 中間状態
・・・
n. 中間状態。
なお、上記は一例であり、したがって、入力が一つや、入力が二つの、算術演算、ブール演算、条件付き演算のいずれも、新たなキャリア状態と考えられることは、容易に理解できよう。キャリア状態は、キャリア情報を元のアプリケーションプログラムのフローとブレンドするために重要である。概して、前記依存関係キャリア状態は、どんな数の入力値や、その値についてのどんな数やタイプの演算からも計算できる。依存関係キャリアの結果とその演算は、依存関係バインディングを介してアプリケーションプログラムと組み合わせられるが、それは以下に記載する通りである。
依存関係バインディングは、依存関係キャリアから情報を取得し、データおよび演算の結果をプログラム中の対象点に結合させる。ここでも、本発明の意図する範囲を逸脱することなく依存関係バインディングを作り出す方法がいくつかある。一つの可能な方法は、依存関係キャリアに基づいて演算処理された値を有するデータ実体を提供することである。演算処理された値は、プログラムの重要な演算の必須部分となる。さらに複雑なバインディングは、基本アルゴリズムの部分用の対象位置として必要なポインタの表をファイルすることによって提供できる。
依存関係バインディングは、依存関係キャリアとアプリケーションコードとの間を接続させて改ざん防止するという目的を達成するために使用されるプログラム変換群である。依存関係バインディングは、以下のコード形式を考慮して様々な変換を使用する:
1.依存関係キャリア、および
2.アプリケーションプログラムコード。
依存関係バインディングの目的は、上述した依存関係キャリアおよびアプリケーションプログラムコードを分かりにくくして、それらの分離を非常に困難にすることである。単にバインディング点で依存関係キャリア値を用いることにより、プログラムに対する直接的な依存関係バインディングを有することが可能である一方、アタッカーがこの依存関係を切り離すことも容易であろう。したがって、依存関係バインディングの機能は、依存関係キャリアをわかりにくくしてアプリケーションコードにブレンドすることによってバインディングの存在を不明にすることである。さらに、バインディングの挙動は、改ざん防止の有益性のために一定の基準を満たさなければならない。例えば、プログラムがその挙動を大きく変えることのないように非常に小さな変更を値に加えることをアタッカーができれば、そのアタッカーが成功する可能性が増える。
本発明に従って、依存関係バインディングを作り出すために混合ブール演算(MBA)式を立てるための方法を特定する。MBA式は、望ましい挙動を計算するために組み合わせたいくつかのブール演算および/または算術演算である。依存関係バインディングは、コードの演算がアプリケーションコードとブレンドされるように構築されてもよい。さらに、バインディングはまた、依存関係キャリアが期待値を含む時に演算値が正常な挙動を呈し、かつ、依存関係キャリアが予想外の値を含む時に演算値が外れた値になる(すなわち,非常に大きい、または非常に小さい値を含む)か、または異常な挙動を呈するように構築されてもよい。
依存関係バインディングは、C言語のようなハイレベルのプログラミング言語に見られるような構造から構築されてもよい。これらは、ブール演算:and、or、xor、not(すなわち&、|、Λ、!)、または算術演算:add(加算)、sub(減算)、mul(乗算)、div(除算)、mod(剰余)(すなわち+、−、*、/、%)を含んでもよい。加えて、前記バインディングは、条件(すなわち、equal(等しい)、not-equal(等しくない)、greater-than(〜より大きい)、less-than(〜より小さい)、greater-than-or-equal(〜より大きいか等しい)、less-than-or-equal(〜より小さいか等しい))、または制御フロー(すなわち、ジャンプ、分岐、ループ)を含んでもよい。
依存関係バインディングの形態は、依存関係キャリアに担持されている特性のタイプに関連付けられている。前記キャリアは、ダウンストリーム計算に用いられる単純な定数、または、条件(例えば,等価条件)など、ある量の情報を含んでもよい。ここで、入力が一つの関数、例えば,-x、~xのような演算が用いられてもよい。入力が二つの等価タイプの依存関係については、まず入力が二つで出力が一つの関数を考えることにより、バインディングを構築する。
int dep(int x、int y)
前記関数depは、xおよびyが同じ値を有する時に正常な挙動をし、xおよびyが異なる値を有する時に非常に異なる種類の挙動をするように構築されてもよい。さらに、関数に別の入力を加えてもよい:
int dep(int x、int y、int c)
前記入力cは、演算で用いられるが、依存関係演算処理をアプリケーションプログラム自体に結合させる働きだけを行う。関数への別の入力は、何個であってもよい。
望ましい演算処理は、次のような方法を用いて構築される:
1.演算とそれに対応する特徴とのパレットが作成される。特徴パラメータは、演算の数を含む。演算が多ければ安全性レベルが上がり、演算が少なければ性能が上がる。
2.安全性および性能の目標を念頭におきつつ、パレットからの選択がなされる。
3.選択を組み合わせて全演算処理を作り出す。
演算のパレットを以下に示す:
Figure 0005777189
演算パレットのこれら演算は、それぞれ異なる演算数で、同等に算術減算演算を行う。演算の数は、演算処理の安全性レベルおよび性能に寄与する。ハイレベルなプログラミング言語(例えば,C言語)用の算術演算およびブール演算はすべて、同じように特徴づけられてもよい。
加えて、演算のパレットから、恒等関数が作成される。恒等関数は、入力x、および、一つ以上の別の入力、c1、c2、・・・をとる演算処理群である。前記別の入力cl、c2、・・・はプログラム値であるが、恒等関数の演算処理中は一定でなければならない。恒等関数は、出力時に値xを生成する。恒等関数は以下のとおりである:
Figure 0005777189
このように恒等関数を作成することで、前記別の入力cl、c2、・・・などを用いて依存関係をアプリケーションに導入することが可能になる。これら入力は、アプリケーションプログラムのなんらかの変数に結合されてもよく、それによりアタッカーの前記演算処理を切り出す能力を低減する。なぜなら、アタッカーにはプログラムの残り部分に対する依存関係の陰にあるセマンティクスが分からないからである。恒等関数は、ハイレベルのプログラミング言語(例えば、C言語)用の算術演算およびブール演算すべてについて作成される。さらに、上記の記載以外に、恒等関数を作成するために演算を組み合わせるやり方は、他に多数ある。説明用に、アプリケーションコードを保護するために使用される依存関係バインディングの例を下記に詳細に示す。ただし、かかる詳細な例は、本発明の意図する範囲を限定するものとはみなされない。
以下の例は、アプリケーションコードを保護するために使用される依存関係バインディングの特徴を示す。関数depは、依存関係キャリアがどのようにプログラムコードに結合され、望ましい結果を達成するかを示す。関数main()に示されているように、定数値190にならなければならないプログラム特性があると想定する。前記プログラムは、変数xを使用して,ランタイム時に前記値を演算処理し、前記関数dep()が前記結果になりそれを担持するために用いられる。二つの状況が考えられる:
1.変数xが、正しい値(すなわち,190)を含む。その結果はd1にある。
2.変数xが、正しくない値(すなわち,183)を含む。その結果はd2にある。
依存関係キャリア関数dep()は以下のように働く:
・入力値aおよびbを64ビットの戻り変数に担持されるよう暗号化する。この例は、前記値が算術演算(sub)およびブール演算(xor)によって演算される非常に単純な例を使用している。
・演算処理に入力cを利用する;ただし、前記値は出力結果に影響しない。唯一の必須条件は、前記値cが演算処理中に一定であることである。これにより、アタッカーが容易に切り離せない、プログラムコード上の依存関係が提供される。
マクロで暗号化された、依存関係バインディング演算、BLEND1()、BLEND2()は、以下の属性を備えた構成である:
・入力aが入力bと同じ値を有していれば、バインディング演算は1を算出する。
・入力aが入力bとは異なる値を有していれば、バインディング演算は大きな値を算出する。
同様に、依存関係キャリアがゼロを生成すれば、PREBLEND()は大きな数の定数を加算する構成であり、POSTBLEND()はこの同じ大きさの定数を減算する構成である。一方で、依存関係キャリアが他の値を生成すれば、POSTBLEND()は前記の大きい定数値を加算する。これら依存関係バインディングマクロは、拡張して前記演算をアプリケーションコードにブレンドするので、アタッカーが容易に除去できない。前記マクロは、特性にブレンドされた依存関係を隠しつつ等価の関数を提供する手段を、効果的に提供する。関数main()において、100という値になるべきkとjという二つの加算がある。なお、この加算は、アプリケーションプログラムにおける有意な演算を示している。第1の加算は、正しい値が演算処理される結果となるd1に依存し、第2の加算はd2に依存し、これは非常に大きな正しくない数が演算処理される結果となる。
さらに本例について、以下の3つの部分がある:
1.元のソース形態のプログラム例
2.処理前のプログラム例。これは、コードをアプリケーションプログラムにブレンドしたものを示す
3.プログラムが実行されている時のランタイム出力。前記第1の出力は、前記特性が正しいことを示している。前記第2の出力は、前記特性が正しくないことを示している。前記第3の出力は、前記特性が正しいことを示している。
元のソース形態のプログラム例は以下を含む:
Figure 0005777189
Figure 0005777189
Figure 0005777189
Figure 0005777189
前記処理前のプログラム例は、以下を含む:
Figure 0005777189
Figure 0005777189
コンパイルおよび実行後のランタイム出力は、以下を含む:
one_hundred=100
one_hundred=81964804
one_hundred=100
依存関係キャリアおよびバインディングは、図3に図示される。ここに、本発明のプログラム変換を示す図が示されている。前記元のプログラム側300は、データ依存関係311〜313(またはそれ以上)、アプリケーション関数321〜324(またはそれ以上)、およびアセット331〜333(またはそれ以上)を含む。正常なプログラムフローは、矢印370により表されている。元のプログラム側300から変換済みプログラム側301へ向かう大きな黒矢印によって示されている変換の際に、前記元のデータ依存関係、関数、およびアセットは、注入された依存関係バインディング(D−バインディング)351〜355、および依存関係キャリア(D−キャリア)361〜365の依存関係ネットワーク(点線で表されている)を含む。この依存関係ネットワークは、変更プログラムフロー371を効果的に作り出す。前記依存関係ネットワークは、外部データの挿入と、注入データ314および注入関数325によって提供された新たな関数とによって、さらに改善される。
図3に示されたかかるプログラム変換の基礎となる方法は、本発明の方法に従った一般的な工程400を示す図4をさらに参照して、詳細に説明される。アプリケーションを依存関係ネットワークに変換する方法は、以下の工程を含む:
工程1)元のアプリケーションは、411でソース形態からパースされ、412で中間コンパイラ表現で表されている
工程2)重要なアセット(明示の、または非明示のプログラム特性を含む)が、413で認識され、ユーザの仕様書に基づいて優先順位が決められる
工程3)414で、前記アプリケーションが、元のデータおよびプログラム依存関係について解析される。解析情報は同様に、工程2からの情報に相互に関連付けられる
工程4)415で、ユーザが、所与のアプリケーションについての性能/サイズオプションおよび/またはトレランスを提供する
工程5)416で、アプリケーション内でできるだけ広く前記依存関係を拡張させることを目指して、新たなデータおよびコード依存関係の項目(上記のように)が挿入される。前記重要なアセットの優先順位(工程3)およびユーザのアプリケーションの前記性能/サイズトレランス(工程4)に基づき、トレードオフが行われる
工程6)417で、中間表現から変換済みアプリケーションが生成される。
上記工程5では、下記のサブ工程が含まれる:
サブ工程1)アセットの重要性、プログラム中の関係、および性能トレランスに基づいて、新たな依存関係についてデータおよびコードが識別される
サブ工程2)データとコードとの間で、データとデータとの間で、またはコードとコードとの間で、依存関係が作り出されるが、それは以下のいずれかによってなされる:
a)演算を「等価の依存関係関数」と置き換える。これら等価の依存関係関数はMBA演算で構築され、元の演算と同じ関数を行うが、外部データ依存関係も有するようになっている。前記外部データは、関数演算処理の一部であり、切り離せない状態で用いられる。前記データの変化または除去は、異常な挙動を引き起こす
b)定数データを演算処理するための演算の挿入
c)関数呼び出しを挿入
d)ハッシュ有効性チェックを挿入
e)使用時点でデータを複製
サブ工程3)関数と他の関数との間に依存関係が作り出される:
a)関数統合
b)新たなコードおよび関数呼び出しを挿入
c)等価の依存関係関数を挿入。
上記に参照した変換手順400の結果は、強固に結合したプログラムであり、これは図3を参照して示され、すでに記載されている。したがって、関数およびデータが、変換プロセスを経て互いに密接に依存するようになっていることは明らかである。これは、重要なアセット、ノードロックアルゴリズム、プログラム特性演算処理、などすべてが、プログラム全体でデータおよびコードを介して、互いに密接に結合し依存するようになっていることを意味している。これは改ざん攻撃の脅威を低減し、リフティング攻撃をより困難にしている。幅広いバリエーションのプログラムの大きな部分に一片のコードまたはデータが依拠している場合、別のプログラムに使用するために前記コードおよび/またはデータを分離することはとても困難である。プログラム特性チェック、ノードロック、透かしなど、前記プログラムの個別化された特徴を考えると、アタッカーは常に、全プログラムを全体として使用することを余儀なくされ、改ざんおよびソフトウェアリフティング攻撃が無効にされる。アタッカーがプログラムを全体でとらえることを余儀なくされているので、この場合、攻撃耐性という目標が達成されている。
本発明の別の例は、公知の装置フィンガープリンティングとともに、本発明のシステムおよび方法を実施することを含む。概して、プログラムが、スライス間に限定的な相互依存関係を有するプログラムスライス群に分解できることは知られている。かかるプログラムスライス依存関係が、従来技術の図5に示されている。
従来技術の図5は、特定のコンピュータ用のIPアドレス519とHardware GUID(すなわち、General Universal Identifier(グローバル一意識別子))510を読み出し、その後、署名518およびチェックサムアルゴリズム511をそれぞれ実行する公知の装置フィンガープリンティングのシナリオである。この工程は、ノード許可514をチェックし、プログラムの他の部分を進行させるか(515での「中間」および516での「終了」)または512でプログラムを中断させる関数への入力として用いられる、予想されるフィンガープリント517を生成する。これは、mainプログラム513の一部として行われる。この装置フィンガープリンティングシナリオは、事実上、単純化されたノードロッキングアルゴリズムであり、そこではユーザは、IPアドレスとHardware GUIDとの正しい組み合わせを用いた時のみコンピュータ上でプログラムを実行することが許可される。
安全性保護の観点から見ると、従来技術の図5に示された装置フィンガープリンティングシナリオにある主要な問題の1つは、それがプログラムスライスから成ることであり、そこでは依存関係(プログラムおよびデータの双方)のフローが一つの関数から次の関数へと向かっており予測可能になっていることである。これら依存関係は破線で示されている。この論理フローは、良好なモジュラープログラミングの実行に役立つ一方、いくつかの一目瞭然な攻撃ポイントを提供している。まず、データ(予期されたフィンガープリント定数517)が異なるデータと置き換えられるだろう。さらに、ハードウェア関数(IPアドレス読み出し519、ハードウェアGUID読み出し510)が、望ましいデータを生成するハードコードされた関数と置き換えられるだろう。また、フィンガープリント関数(署名作成518、チェックサム511)がハードコードされた関数と置き換えられるだろう。さらに、ノード許可チェック関数514での条件がプログラム開始を常に許可するように妨害されるだろう。さらに、ノード許可チェック関数514の呼び出しが除去されるだろう。かかる攻撃ポイントは、本発明を実行することによって低減されよう。
本発明を従来技術の図5に示された装置フィンガープリンティング実施形態に適用した後に、新たに挿入された依存関係が元のスライスすべてを相互に依存させ、プログラム全体が依存関係のネットワークになって、さらなる分解を困難なものにする。この本発明の装置フィンガープリンティング実施形態の変形例は図6に示される。これにより、本開示に記載の方法を使用して、同じ基礎となるアプリケーション例が変換され、変換済みアプリケーション600が生成される。この例では、依存関係キャリアおよびバインディングは、単純なデータ変数であり、使用は下流のプログラム点である。この例は、上述の効果的な依存関係キャリアおよびバインディングを考慮した、依存関係が効果的に配置される場所を点線によって示している。前記の例のように、外部データと挿入データ610によって提供された新たな関数との挿入によって、依存関係ネットワークがさらに改善される。
従来技術の図4に関連する元のプログラムコードは次のように実施される:
Figure 0005777189
Figure 0005777189
Figure 0005777189
Figure 0005777189
Figure 0005777189
先の段落に記載された、この元のコードの例は、変換図6に一般的に示された本発明の変換の時は、以下のように示される:
Figure 0005777189
Figure 0005777189
Figure 0005777189
Figure 0005777189
Figure 0005777189
本発明の上記の実施形態は、あくまでも例示である。当業者であれば、本明細書に添付の請求項によってのみ定義される本発明の範囲を逸脱することなく、前記特定の実施形態に改変、変更、およびバリエーションを加えるであろう。

Claims (30)

  1. 攻撃耐性をソフトウェアアプリケーション全体に提供する方法であって、
    前記ソフトウェアアプリケーションの中間コンパイラ表現から、アプリケーション関数を含む元のデータおよびプログラム依存関係重要なアセットを識別する工程と、
    ユーザ固有の基準に従って前記重要なアセットの優先順位を決める工程と、
    前記元のデータおよびプログラム依存関係を、前記優先順位が決まった重要なアセットに相互に関連させる工程と、
    前記ソフトウェアアプリケーションについてユーザ固有の制御トレランスを受け取る工程と、
    前記ユーザ固有の基準と前記ユーザ固有の制御トレランスとに基づいて少なくとも一つの依存関係キャリアおよび少なくとも一つの依存関係バインディングを前記ソフトウェアアプリケーションの前記中間コンパイラ表現に挿入して、代替の中間表現を形成する工程と、
    前記代替の中間表現から変換済みソフトウェアアプリケーションを生成する工程とを含み、
    前記少なくとも一つの依存関係キャリアはコードを含み、前記少なくとも一つの依存関係バインディングは前記少なくとも一つの依存関係キャリアを前記アプリケーション関数の一つに関連付け、
    前記変換済みソフトウェアアプリケーションは、改善された依存関係ネットワークを含むことにより、前記ネットワークを変更すると前記変換済みソフトウェアアプリケーションが予期されない挙動を生じる、方法。
  2. 前記挿入する工程が、アセットの重要性と、前記プログラムにおける関係と、性能トレランスとに基づいて、代替の依存関係についてデータおよびコードを識別する工程をさらに含む、請求項に記載の方法。
  3. 元の演算を等価の依存関係関数と置き換えることにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、またはコードとコードとの間に作り出される、請求項に記載の方法。
  4. 前記元の関数と同様に、ただし加えられた依存関係に基づいて機能するように、前記等価の依存関係関数が混合ブール算術演算で構築される、請求項に記載の方法。
  5. 前記等価の依存関係関数が、外部データを用いた関数演算処理の一部として構成され使用される外部データ依存関係を含み、前記外部データの変化または除去が、前記ソフトウェアアプリケーションの異常な挙動を引き起こすようにする、請求項に記載の方法。
  6. 定数データを演算処理するための演算を挿入することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項に記載の方法。
  7. 関数呼び出しを挿入することにより、前記代替の依存関係が、データとコードとの間に作り出される、請求項に記載の方法。
  8. ハッシュ、チェックサム、または特性有効チェックを挿入することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項に記載の方法。
  9. 使用時点でデータを複製することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項に記載の方法。
  10. 関数統合により、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項に記載の方法。
  11. 新たなコードおよび関数呼び出しを挿入することにより、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項に記載の方法。
  12. 等価の依存関係関数を挿入することにより、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項に記載の方法。
  13. 前記外部データが、特性基本命令のライブラリとして提供された一つ以上の所定のプログラム特性を含む、請求項に記載の方法。
  14. 前記外部データが、前記ソフトウェアアプリケーションのコンパイラ分析の結果として提供された一つ以上の所定のプログラム特性を含む、請求項に記載の方法。
  15. 攻撃耐性をソフトウェアアプリケーション全体に提供するシステムであって、前記システムは、
    前記ソフトウェアアプリケーションの重要なアセットのユーザ仕様書と、
    ソフトウェアに実現された自動プログラム変換メカニズムとを含み、
    前記自動プログラム変換メカニズムは、
    前記ソフトウェアアプリケーションの中間コンパイラ表現から、アプリケーション関数を含む元のデータとプログラムの依存関係とを識別し、
    ユーザ固有の基準に従って前記重要なアセットの優先順位を決め、
    前記元のデータおよびプログラム依存関係を、前記優先順位が決まった重要なアセットに相互に関連させ、
    前記ソフトウェアアプリケーションについてユーザ固有の制御トレランスを受け取り
    前記ユーザ固有の基準と前記ユーザ固有の制御トレランスとに基づいて少なくとも一つの依存関係キャリアおよび少なくとも一つの依存関係バインディングを前記ソフトウェアアプリケーションの前記中間コンパイラ表現に挿入して、代替の中間表現を形成し、かつ
    前記代替の中間表現から変換済みソフトウェアアプリケーションを生成し、
    前記少なくとも一つの依存関係キャリアはコードを含み、前記少なくとも一つの依存関係バインディングは前記少なくとも一つの依存関係キャリアを前記アプリケーション関数の一つに関連付け、
    前記変換済みソフトウェアアプリケーションは、改善された依存関係ネットワークを含むことにより、前記ネットワークを変更すると前記変換済みソフトウェアアプリケーションが予期されない挙動を生じる、システム。
  16. 少なくとも一つの依存関係キャリアおよび少なくとも一つの依存関係バインディングを挿入するように構成された前記ソフトウェアは、アセットの重要性と、前記プログラムにおける関係と、性能トレランスとに基づいて、代替の依存関係についてデータおよびコードを識別するようにさらに構成される、請求項15に記載のシステム。
  17. 元の演算を等価の依存関係関数と置き換えることにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、またはコードとコードとの間に作り出される、請求項16に記載のシステム。
  18. 前記元の演算と同じ機能を実行するように、前記等価の依存関係関数が混合ブール算術演算で構築される、請求項17に記載のシステム。
  19. 前記等価の依存関係関数が、外部データを用いた関数演算処理の一部として構成され使用される外部データ依存関係を含み、前記外部データの変化または除去が、前記ソフトウェアアプリケーションの異常な挙動を引き起こすようにする、請求項18に記載のシステム。
  20. 定数データを演算処理するための演算を挿入することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項19に記載のシステム。
  21. 関数呼び出しを挿入することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項19に記載のシステム。
  22. ハッシュ有効チェックを挿入することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項19に記載のシステム。
  23. 使用時点でデータを複製することにより、前記代替の依存関係が、データとコードとの間に、データとデータとの間に、または、コードとコードとの間に作り出される、請求項19に記載のシステム。
  24. 関数統合により、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項19に記載のシステム。
  25. 新たなコードおよび関数呼び出しを挿入することにより、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項19に記載のシステム。
  26. 等価の依存関係関数を挿入することにより、前記代替の依存関係が、少なくとも第1の関数と第2の関数との間にさらに作り出される、請求項19に記載のシステム。
  27. 特性基本命令のライブラリをさらに含み、前記外部データが、前記ライブラリに設けられた一つ以上の所定のプログラム特性を含む、請求項19に記載のシステム。
  28. 前記ソフトウェアアプリケーションのコンパイラ分析用に構成されたソフトウェアをさらに含み、前記コンパイラ分析は、前記ソフトウェアアプリケーションからの一つ以上の所定のプログラム特性を識別して前記外部データを形成する、請求項19に記載のシステム。
  29. 攻撃耐性をソフトウェアアプリケーション全体に提供する方法をコンピュータに実行させるためのコンピュータ読み取り可能な命令を含むプログラムであって、
    前記プログラムは、
    前記ソフトウェアアプリケーションの中間コンパイラ表現から、アプリケーション関数を含む元のデータおよびプログラム依存関係の重要なアセットを識別する工程と、
    ユーザ固有の基準に従って前記重要なアセットの優先順位を決める工程と、
    前記元のデータおよびプログラム依存関係を、前記優先順位が決まった重要なアセットに相互に関連させる工程と、
    前記ソフトウェアアプリケーションについてユーザ固有の制御トレランスを受け取る工程と、
    前記ユーザ固有の基準と前記ユーザ固有の制御トレランスとに基づいて、少なくとも一つの依存関係キャリアおよび少なくとも一つの依存関係バインディングを前記ソフトウェアアプリケーションの前記中間コンパイラ表現に挿入して、代替の中間表現を形成する工程と、
    前記代替の中間表現から変換済みソフトウェアアプリケーションを生成する工程と、
    をコンピュータに実行させるための命令を含み、
    前記少なくとも一つの依存関係キャリアはコードを含み、前記少なくとも一つの依存関係バインディングは前記少なくとも一つの依存関係キャリアを前記アプリケーション関数の一つに関連付け、
    前記変換済みソフトウェアアプリケーションは、改善された依存関係ネットワークを含むことにより、前記ネットワークを変更すると前記変換済みソフトウェアアプリケーションが予期されない挙動を生じる、プログラム。
  30. 請求項29に記載のプログラムを記録した、コンピュータ読み取り可能なプログラム記録媒体。
JP2014500209A 2011-03-24 2011-03-24 攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法 Expired - Fee Related JP5777189B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CA2011/050157 WO2012126083A1 (en) 2011-03-24 2011-03-24 System and method providing dependency networks throughout applications for attack resistance

Publications (2)

Publication Number Publication Date
JP2014509029A JP2014509029A (ja) 2014-04-10
JP5777189B2 true JP5777189B2 (ja) 2015-09-09

Family

ID=46878564

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014500209A Expired - Fee Related JP5777189B2 (ja) 2011-03-24 2011-03-24 攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法

Country Status (9)

Country Link
US (1) US9811666B2 (ja)
EP (1) EP2689376B1 (ja)
JP (1) JP5777189B2 (ja)
KR (1) KR20140058419A (ja)
CN (1) CN103858128B (ja)
AU (1) AU2011362967B2 (ja)
CA (1) CA2830761C (ja)
WO (1) WO2012126083A1 (ja)
ZA (1) ZA201307185B (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8752032B2 (en) 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
US9858440B1 (en) * 2014-05-23 2018-01-02 Shape Security, Inc. Encoding of sensitive data
US20160232470A1 (en) * 2015-02-05 2016-08-11 Keguo Zhou Automated Generation of Process Flow Charts
US20160328539A1 (en) * 2015-05-05 2016-11-10 Nxp B.V. Obscuring Software Code With Split Variables
US10068070B2 (en) * 2015-05-05 2018-09-04 Nxp B.V. White-box elliptic curve point multiplication
EP3502935A1 (en) 2017-12-20 2019-06-26 Koninklijke Philips N.V. Compiling device and method
EP3786818A1 (de) * 2019-08-27 2021-03-03 Siemens Aktiengesellschaft Verfahren zum schützen einer softwareanwendung gegen ein unbefugtes nutzen

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088452A (en) * 1996-03-07 2000-07-11 Northern Telecom Limited Encoding technique for software and hardware
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6779114B1 (en) 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US7757097B2 (en) 1999-09-03 2010-07-13 Purdue Research Foundation Method and system for tamperproofing software
US7054443B1 (en) 2000-03-27 2006-05-30 Microsoft Corporation System and method for protecting digital goods using random and automatic code obfuscation
CA2327911A1 (en) 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
CA2348355A1 (en) 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
CA2363795A1 (en) * 2001-11-26 2003-05-26 Cloakware Corporation Computer system protection by communication diversity
JP3970856B2 (ja) * 2004-03-16 2007-09-05 Kddi株式会社 プログラム難読化装置、プログラム配布システム、コンピュータプログラム
FR2871255B1 (fr) * 2004-06-04 2006-08-04 Gemplus Sa Procede d'obfuscation de code compile, terminal et logiciel associes
US7841009B1 (en) * 2004-07-09 2010-11-23 Angel Secure Networks System and method for defending against reverse engineering of software, firmware and hardware
US20060101047A1 (en) 2004-07-29 2006-05-11 Rice John R Method and system for fortifying software
US8056138B2 (en) 2005-02-26 2011-11-08 International Business Machines Corporation System, method, and service for detecting improper manipulation of an application
US8176473B2 (en) * 2007-05-14 2012-05-08 Microsoft Corporation Transformations for software obfuscation and individualization
GB0719250D0 (en) * 2007-10-02 2007-11-14 Iti Scotland Ltd Anti-hack method
US8112636B1 (en) * 2007-11-06 2012-02-07 Lockheed Martin Corporation Protection of code or data from exposure by use of code injection service
EP2240857A4 (en) * 2007-12-21 2013-12-25 Univ Virginia Patent Found SYSTEM, METHOD AND COMPUTER PROGRAM FOR PROTECTING SOFTWARE THROUGH ANTI-FALSIFICATION AND OBSCURING TRANSFORMATIONS
CN101939749A (zh) * 2008-02-11 2011-01-05 Nxp股份有限公司 程序模糊方法和用于执行模糊程序的处理设备
US8185749B2 (en) * 2008-09-02 2012-05-22 Apple Inc. System and method for revising boolean and arithmetic operations
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
JP5277825B2 (ja) * 2008-09-18 2013-08-28 富士ゼロックス株式会社 プログラム難読化装置及び難読化プログラム
US8171306B2 (en) * 2008-11-05 2012-05-01 Microsoft Corporation Universal secure token for obfuscation and tamper resistance
KR101676326B1 (ko) * 2009-05-06 2016-11-15 이르데토 비.브이. 화이트박스 암호화를 사용하는 연동 바이너리 보호 방법
US8819637B2 (en) * 2010-06-03 2014-08-26 International Business Machines Corporation Fixing security vulnerability in a source code
US8775826B2 (en) * 2011-02-09 2014-07-08 Apple Inc. Counteracting memory tracing on computing systems by code obfuscation
US8615735B2 (en) * 2011-05-03 2013-12-24 Apple Inc. System and method for blurring instructions and data via binary obfuscation
US8756435B2 (en) * 2012-03-02 2014-06-17 Apple Inc. Obfuscation of control flow of software

Also Published As

Publication number Publication date
KR20140058419A (ko) 2014-05-14
CA2830761A1 (en) 2012-09-27
EP2689376A1 (en) 2014-01-29
WO2012126083A1 (en) 2012-09-27
CN103858128A (zh) 2014-06-11
ZA201307185B (en) 2014-08-27
AU2011362967A1 (en) 2013-10-24
CN103858128B (zh) 2017-06-16
EP2689376A4 (en) 2015-05-20
US20140013427A1 (en) 2014-01-09
EP2689376B1 (en) 2020-12-23
AU2011362967B2 (en) 2016-10-06
CA2830761C (en) 2019-01-15
JP2014509029A (ja) 2014-04-10
US9811666B2 (en) 2017-11-07

Similar Documents

Publication Publication Date Title
JP5777189B2 (ja) 攻撃耐性のためにアプリケーション全体に依存関係ネットワークを提供するシステムおよび方法
Preda et al. A semantics-based approach to malware detection
Behera et al. Different obfuscation techniques for code protection
JP4976991B2 (ja) 情報処理装置、プログラム検証方法及びプログラム
Preda et al. A semantics-based approach to malware detection
Collberg et al. Dynamic path-based software watermarking
US7996685B2 (en) Method for effective tamper resistance
Hachez A comparative study of software protection tools suited for e-commerce with contributions to software watermarking and smart cards
Chang et al. A blind dynamic fingerprinting technique for sequential circuit intellectual property protection
Zhu Concepts and techniques in software watermarking and obfuscation
Darwish et al. Stealthy code obfuscation technique for software security
Dalla Preda et al. Software watermarking: a semantics-based approach
Ceccato et al. Codebender: Remote software protection using orthogonal replacement
EP2045748B1 (en) Anti-tamper techniques
US9081962B2 (en) Anti-tamper techniques
Dalla Preda Code obfuscation and malware detection by abstract interpretation
Bruni et al. Code obfuscation against abstract model checking attacks
US7552342B1 (en) Method and system for increasing the tamper resistance of a software application
Gautam et al. A novel software protection approach for code obfuscation to enhance software security
Fu et al. Some new approaches for preventing software tampering
Choi et al. Bypassing the integrity checking of rights objects in OMA DRM: A case study with the MelOn music service
Delledonne et al. CASCA: A design automation approach for designing hardware countermeasures against side-channel attacks
Ceccato et al. Remote software protection by orthogonal client replacement
Ceccato et al. Codebender: a tool for remote software protection using orthogonal replacement
Eberhardt et al. Copy protection through software watermarking and obfuscation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140307

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150424

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: 20150623

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150702

R150 Certificate of patent or registration of utility model

Ref document number: 5777189

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees