JP2015043221A - コンピュータプログラムコードを保護する方法 - Google Patents
コンピュータプログラムコードを保護する方法 Download PDFInfo
- Publication number
- JP2015043221A JP2015043221A JP2014205692A JP2014205692A JP2015043221A JP 2015043221 A JP2015043221 A JP 2015043221A JP 2014205692 A JP2014205692 A JP 2014205692A JP 2014205692 A JP2014205692 A JP 2014205692A JP 2015043221 A JP2015043221 A JP 2015043221A
- Authority
- JP
- Japan
- Prior art keywords
- code
- repair
- program
- data
- probe
- 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
Links
- 238000000034 method Methods 0.000 title claims description 110
- 238000004590 computer program Methods 0.000 title claims description 7
- 230000008439 repair process Effects 0.000 claims abstract description 288
- 230000001360 synchronised effect Effects 0.000 claims abstract description 8
- 239000000523 sample Substances 0.000 claims description 116
- 230000006870 function Effects 0.000 claims description 90
- 230000007246 mechanism Effects 0.000 claims description 40
- 230000004048 modification Effects 0.000 claims description 28
- 238000012986 modification Methods 0.000 claims description 27
- 238000013481 data capture Methods 0.000 claims description 19
- 238000001514 detection method Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 11
- 238000004088 simulation Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 4
- 230000007257 malfunction Effects 0.000 claims description 3
- 230000001419 dependent effect Effects 0.000 claims 1
- 230000036316 preload Effects 0.000 claims 1
- 238000007689 inspection Methods 0.000 description 45
- 239000000243 solution Substances 0.000 description 26
- 230000007123 defense Effects 0.000 description 21
- 230000006399 behavior Effects 0.000 description 16
- 230000002265 prevention Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 230000002441 reversible effect Effects 0.000 description 13
- 238000012360 testing method Methods 0.000 description 13
- 230000003068 static effect Effects 0.000 description 12
- 230000000694 effects Effects 0.000 description 11
- 238000013507 mapping Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000008260 defense mechanism Effects 0.000 description 6
- 238000006467 substitution reaction Methods 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 239000012634 fragment Substances 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000037406 food intake Effects 0.000 description 2
- 238000011835 investigation Methods 0.000 description 2
- 230000001788 irregular Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000008263 repair mechanism Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/145—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
Description
リバースエンジニアリングを困難にするか又はユーザの製造業者の意に反した改変(例えば、使用法に関する制限を取り除くこと)を防止する手段を含む場合には、ソフトウエアは改竄を防止できると言われている。共通に使用される方法の一つはコードの難読化(code obfuscation)である。
・ハッカの改変後のコピーが正常に動作しているコードに基づくようにプログラムの改変後のコピーにコード置換を構築できる方法を探し出すこと.
○ これが可能であったとしても、本発明によりこれを技術の組み合わせで達成することは実際に困難となる。
・2つのコピー上の修復対象が同時に修復されるように、プログラムの2つのコピーへのデータの書き込みを経路指定できる機構を実現すること.
○ 既存のMMUハードウエアがそのような機能性を提供することは知られていない。従って、プログラムの2つのコピーに同一のデータを書き込み可能とする例外をプログラムメモリページへのデータの書き込みで生成することによりソフトウエアにこの機能性を現時点では実現する必要がある。これは通常プログラム実行速度に大きな影響を及ぼし、本明細書中ではそれを実際の攻撃とは考えないこととする。
・本発明の間接的な非検出機構を介してMMU攻撃を実際に検出すること.
・静的コード置換によりシミュレート不可能であるためハッカにより取り除くのが困難になる動的な修復ノード」である特別な種類の修復ノード.
1. 本明細書で説明した方法はMMU攻撃に対する一意の公知の防御である。全ての自己検査改竄防止システムは効果を持続するためにこのような(又は類似の機能を有する)防御を必要とする。
2. 本明細書中で説明した方法は間接的にMMU攻撃を打破する。これによりハッカは防御を容易に除去できる範囲がなくなる。(例えば成りすましは使用できなくなる。成りすましは、ハッカが正規のリソースのプログラム使用をハッカ自身のコードを介して再経路指定し、且つリソースを使用する方法を改変し且つ/又はリソースから戻るあらゆる情報を改変するハッカ共通の技術である。例えば、ハッカはOSの関数が他の日付を戻すように、今日の日付を返すOS関数に対して成りすましている。)
3. 本明細書で説明した方法は、現時点では実際に見られないMMU攻撃の可能な拡張形態を打破する。
4. 本明細書で説明した方法の障害点は単一ではない。すなわち機構は時間的・空間的に効果的に分散され、ハッカはMMU攻撃を再度有効にするために全ての段階で改竄を有効にする必要がある。
5. 防御機構はMMU攻撃を間接的に打破するが、この機構は攻撃を検出するために使用される。
6. MMU攻撃に対する全ての可能な具体的な防御は基本的にはこの方法に類似する。この方法は、プログラム自身に対するプログラムの低レベルの意味に対するMMU攻撃の影響の基本的性質を使用する。MMU攻撃はデータ及びコードの取り込みを分離させるので、これらが分離された場合にコードが正しく構築されず間違って挙動するように、コードをデータの取り込みを使用して構築する。換言すれば、MMU攻撃が存在する場合に機器のメモリサブシステムの低レベル挙動を開示するために、データ及びコードの取り込みを同一の記憶場所で文字通り使用する。同様な開示を達成する目的の他の機構は、取り込みの詳細な構成が異なるが同一の記憶場所にデータ及びコードの同期した取り込みの形態を使用する必要がある。これらの機構は本発明の範囲に含まれる。MMU攻撃を検出したり防御したりする全ての他の考え得る方法(上述の開示を使用しない)は、MMU攻撃が存在し且つハッカがいかなる方法をも打破すると思われる場合には、機器の挙動と基本的に相いれない性質を持たない。これらの方法は実際の防御を構成するとは思われない。
・システムが上述の方法を実行するように動作可能であるコンピュータプログラムコードを保護するコンピュータにより実現されたシステム.
・コンピュータ上で実行された場合、上述の方法をコンピュータに実行させることを可能にするコンピュータ可読媒体上に格納されたコンピュータソフトウエアプログラム.
・上述したコンピュータにより実現されたシステムによる改変されたコンピュータソフトウエアプログラムか又は同一の論理アドレスへのコード及びデータの取り込みが異なる物理アドレスに経路指定される攻撃を継続して回避するような上述のコンピュータソフトウエアプログラム.
MMU攻撃に対する防御は、攻撃が何らかの基本的な方法で(攻撃が明白な高水準の影響を全く及ぼさない場合であっても)保護プログラムの挙動を変化させる必要があるため、プログラムをそのような変化と相いれないものにさせることができなければならないという概念に基づいて動作する。
move eax, ABCD1234h
mov ebx, FFFF0000h
lea esi, DWORD PTR[label + 1]
mov DWORD PTR[esi], ebx
label:
move eax ABCD1234h
図3A及び図3Bは、通常の実行環境、並びにコードアクセス及びデータアクセスがそれぞれ経路指定される環境におけるコードの影響を示している。この例により、コードアクセス及びデータアクセスが分離されているため同期されていない環境、すなわち異なる物理アドレスが同一の論理アドレスを共有するコードアクセス及びデータアクセスに対して使用される環境においてプログラムが実行される場合、単一の形態の自己改変コードがどのようにプログラムに障害を起こすかを示す。この技術は、MMU攻撃に対する防御の基礎を形成する。コードアクセス及びデータアクセスは、本発明の実現例において同期される必要がある。すなわち、物理アドレスと論理アドレスとの間のマッピングは適合しなければならない。MMU攻撃において発生するように、物理アドレスと論理アドレスとの間のマッピングが適合しない場合、実行され且つハッキングされたコードは正しく実行しないだろう。明確にするために、論理アドレス及び物理アドレスは互いに適合する必要はない(実際には殆ど適合しない)が、論理アドレスと物理アドレスとの間のマッピングは、データの取り込みに対するものと同一のコードの取り込みでなければならない。
全てのプログラムコードが単にデータの形態であることを認識することにより、上記の簡単な例において使用された技術を一般化した。mov命令において使用された値を改変したが、代わりに命令自体を改変できたかもしれない。実際に、命令の元のコピーがmov命令である必要は全くない。すなわち、命令の元のコピーは、実行される前に正しい命令に置換されるため、ランダムデータで構成されてもよい。「ランダムデータ」という用語は、特に乱数又は擬似乱数発生器により生成されたデータではなく、「あらゆるデータセットの値」を意味する。
データの読み取りと書き込みとを区別できるMMUを含み、且つデータの読み取り及び書き込みを別個の物理場所に再経路指定するためにこれを使用するコンピュータシステム上において、上述したような修復ノード方式は、MMU攻撃の拡張形態でハッカにより回避動作される。
1. 2つの正しいバイトの最初の書き込みは、ハッカのコードのコピーに経路指定される。これらは逆順序であるため、この時点では間違っている。
2. 最後の逆動作に対する2バイトの読み取りは、ハッカのコードのコピーにおける(正確であり且つ逆にされた)2バイトからではなく、元の(未定の)コードから2バイトを取り込む。
3. 逆動作後の2バイトの最後の書き込みは、2バイトの元の(未定の)コードをハッのコードのコピーに書き込む。
4. ハッカのコードのコピーは、正しく実行できない。
改竄防止システムは、主に修復ノードが依存する種類のプログラム改変を阻止するように設計されるため、修復ノードを改竄防止システムにより保護されたプログラムに単純に注入することにより、プログラム機能に伴う問題が発生する可能性が高い。従って、殆どの場合において、基礎となる改竄防止方式が修復ノードを支持するように改変されることが必要である。
1. 修復対象を含むコードの領域が、一方が修復される前のコードを範囲に含み且つ他方が修復された後のコードを範囲に含む2つのチェックサムに適合できるように自己検査システムを拡張する。
2. 自己検査方式があらゆる所定の修復対象に対して修復前又は修復後のコードのいずれかのみを確認するように、連係して自己検査方式及び修復ノード方式を構築する。
3. 修復対象を範囲に含まないように自己検査方式を構築することにより、修復対象に含まれたコードが自己検査機構をトリガせずに任意に変更できるようにする。
要するに、本発明の解決法によれば、MMU攻撃をデプロイしたいハッカは以下のオプションを利用できる。
・ハッカの改変後のコピーが正常に動作しているコードに基づくようにプログラムの改変後のコピーにコード置換を構築できる方法を探し出すこと.
・2つのコピー上の修復対象が同時に修復されるように、プログラムの2つのコピーへのデータの書き込みを経路指定できる機構を実現すること.
例えば以下により、これらの残りの攻撃オプションを多数の方法で達成しにくくする。
1. 多数の修復ノードを使用すること。
2. 各修復プローブを相対的固有にさせること。
3. 修復対象に配置された間違ったコードが周囲のコードと調和するようにそれを区別すること。
4. 修復プローブが関連する修復対象の直前ではなく少し前に実行されるようにそれらを配置すること。
5. あまり頻繁に実行されないコードにある割合の修復ノードを配置すること。
6. 修復対象が実行された後、修復プローブにより行われた修復を取り消す「損傷プローブ」を追加すること。
プログラム全体にわたって分散された多数の修復ノードを使用することにより、ハッカが手動でそれらを除去するのを困難にする。例えば、各ノードが除去されるのに10分(例えば)必要な場合、1000ノードは、ハッカ側に対してかなり非現実的なレベルの手動労力を要求するだろう。
多数の修復ノードが与えられたとすると、ハッカは、保護されたプログラムが実行するのに必要なコード置換を判定し且つハッカのプログラムの改変後のコピーが更に正しく動作するようにそれを修復するのにコード置換を使用するために、全てのノードを自動的に探し出し且つ解析するツールを作成しようとする可能性が高い。
最も簡単な可能な修復プローブ方式は、プログラムが開始する際に全ての修復プローブが実行されるようにそれらをプログラムに注入することである。これは、全ての修復対象のいずれかが発生する前にそれらが修復されることを保証する。しかし、ハッカは、プローブが実行された直後にプログラムのコピーをディスクにダンプすることにより、完全に修復されたコードのコピーを簡単に取得できるため、そのような方式は比較的簡単にハッカに攻撃される。
1. 入れ子関数呼び出しのみを介して関数順序を判定する。すなわち、関数Aが関数Bを呼び出す場合にのみ、関数Aが関数Bの前に常に入力されると考える(又は関数Aが呼び出すあらゆる関数があらゆるレベルの入れ子に対してそのように実行する)。
2. 修復対象を含むあらゆる所定の関数に対して、この関数を呼び出し且つ関連する修復プローブを各関数に注入する全ての関数を判定する。これは、修復対象に対する全ての経路指定が修復プローブにより範囲に含まれることを保証する。
ハッカは、パターンに基づく探索を介してプログラムにおいて全ての修復ノードを探し出せない場合、挙動解析を介してそれらを探し出そうとする可能性が最も高い。これを実行する1つの方法は、プログラムコードへの全てのメモリの書き込みが検出及び解析されるシミュレーション環境においてプログラムを実行することである。これを実行する方法は多数あり、その範囲はエミュレーション(超低速)から専用のハードウエア解析器(超高速)にわたる。
上述したように、ハッカが修復を行うことを可能にすることによりそのような方式を攻撃し、且つ修復されたコードをディスクにダンプしてコードの改変後のバージョンに対する基礎として使用するため、全ての修復プローブをプログラムの開始時に単に配置しない。
本発明の防御機構は、保護されたプログラムを攻撃により課された実行モデルと基本的に相いれないものとすることによりMMU攻撃を打破する間接的な方式であるが、ある環境においてMMU攻撃の存在を検出できるようにするのに有用である。間接的な検出は、実現するのが非常に困難であるか又は不可能である可能性が高く、且つハッカが打破するのが非常に容易であるため、本発明の間接的な防御を拡張し、MMU攻撃を検出するために使用できるようにした。
上述したように、種々の手段を介して本発明の修復ノード方式を打破するのを困難にするが、十分長くシミュレータを介してそれを実行すること(及び全てのコードパスを実行すること)により、保護されたプログラムにより必要とされる全てのコード置換をハッカが取得できる可能性が依然としてある。
push eax
push offset string ”%d\n”
call DWORD PTR [printf]
add esp, 8
ret
lea esi DWORD PTR[label + 1]
mov DWORD PTR[esi], eax
label:
push 0
push offset string ”%d\n”
call dword ptr [printf]
add esp, 8
ret
1. 修復対象を含む関数に入力するまでコードに書き込むパラメータ値は常に認識されないため、修復プローブ及び修復対象を別々な関数に分離しない。それらを正常に分離することが更に可能であってもよい。
2. 関数が呼び出される度に修復対象に書き込まれたコードが変化するため、損傷プローブは必要とされない。実質的に、コードは、いずれにしても関数に対する今後の呼び出しに対してほぼ疑いなく間違っているため、修復する必要がある。これは、選択したパラメータが偶然あまり頻繁に変化しないか又は全く変化しない関数には当てはまらない。パラメータは殆どの場合で変化するがこれは保証されないことを現時点で仮定する。
上述したように、本発明の修復ノード方式は、ハッカがMMU攻撃を使用する場合にプログラムが正しく機能するのを中止することを意味する。しかし、ハッカは、アプリケーションへの変更をローカライズするためにMMUシステムの細分性を使用できるため、考慮すべき修復対象の数を制限できる。
コード1:
xor eax, eax
push offset string ”%d\n”
call dword ptr [printf]
コード2:
xor ecx, ecx
mov edx, ABCD1234h
call dword ptr [process_value]
並びに、注入後:
プローブ1:
lea esi, DWORD PTR [label]
mov DWORD PTR[esi], 90C3C033h // xor eax, eax; ret; nop;に対するオペコード
call label // xor eax, eax; ret;を実行
push offset string ”%d\n”
call dword ptr [printf]
プローブ2:
lea esi, DWORD PTR [label]
mov DWORD PTR[esi], 90C3C933h // xor ecx, ecx; ret;のオペコード
nop;
call label // xor ecx, ecx; ret;を実行
mov edx, ABCD1234h
call dword ptr [process_value]
Target(対象):
label:
nop
nop
nop
nop
以下の説明は、本明細書の開示内容を解釈するのに有用だろう。
最新のOSは、主にハードメモリを制限することなく又は互いにクラッシュすることなく多くの処理が共存できるように、仮想メモリ(ディスクにページングされるメモリを含む)及びメモリ保護を提供する。
本明細書において開示された概念のうちのいくつかは、以下の通り要約されてもよい。
・プログラムの異なる改変後のコピーを実行しながら自己検査改竄防止システムに保護されたプログラムの改変前のコピーを検査させることによりそのような自己検査機構を打破する自己検査改竄防止システム上の攻撃(「MMU攻撃」)に対する防御方法であり、防御は以下のことを含む:
a.この状態で実行される場合にプログラムに障害を起こさせる間違ったコード(「修復対象」)でプログラムコードの多数の小さな部分を置換すること.
b.間違ったコード(修復対象)が実行される前にそれらを修復するが、MMU攻撃が存在する場合は実際に実行中のプログラムのコピーを修復しないプログラム(「修復プローブ」)に新しいコードを注入すること.
c.必要に応じて、実行される前に修復対象におけるコードを間違ったコードに置換するプログラム(「損傷プローブ」)に新しいコードを注入すること.
d.「修復ノード」を形成するための修復対象、1つ以上の修復プローブ及びゼロ以上の損傷プローブから構成される組み合わせ.
e.修復対象に書き込み、書き込まれたデータのうちのいくつかを再度読み取って再度それを書き込む種類の修復プローブであり、データの読み取り、データの書き込み及び命令の読み取りが全て同一の場所に経路指定される場合にのみ結果として得られるデータが一貫するように、処理においてそれを移動すること及び/又は改変すること.
f.データの書き込み及び命令の読み取りが全て同一の場所に経路指定される場合にのみ実行された結果として生じるコードが一貫するように、修復対象に書き込んでそこでコードを実行する種類の修復プローブ.
a.人により手動で検出すること及び取り除くことを時間がかかり且つ非現実的なものにするために、多くの修復ノードを使用すること.
b.自動で検出すること及び取り除くことを困難にするために、コード生成方法を介して修復ノードが全て一意であることを保証すること.
c.自動で検出することをより困難にするために、時間的・空間的に関連する修復ノードの構成要素(修復対象、修復プローブ及び損傷プローブ)を互いから分離すること(通常、独立した関数に).
d.シミュレーションに基づく検出を妨害するために、修復ノードをあまり頻繁に実行されないコードに配置すること.
・動的なコード置換(「動的な修復ノード」)を使用して、ハッカにより取り除かれることに対する防御を更に強化する主な防御方法への拡張は以下のことを含む.
a.実行時にのみ知られるプログラム変数への割り当てに対してコードを識別すること.
b.割り当てられた値が正しいランタイム値と等しい可能性が低い即値であるように、コード(「動的な修復対象」)を改変すること.
c.元の割り当ての適切な値を含むようにコードにおいて即値を改変する動的な修復対象の前に新しいコード(「動的な修復プローブ」)を注入することであり、この改変は、攻撃が存在する場合に実際に実行中のコードのバージョンにおいて反映されない.
a.修復ノードを含むように選択された関数に渡されたパラメータを識別すること及びこれらのパラメータのうちの1つがありふれたデータの種類の渡された値であり且つ関数のコード内で使用されるようにそれを選択すること.
b.コード自体に組み込まれた即値を代わりに使用するために選択された関数パラメータ(「動的な修復対象」)を使用する1つのコードを改変すること.
c.実行される前に選択された関数パラメータの値を含むようにコードにおいて即値を改変する動的な修復対象の前に新しいコード(「動的な修復プローブ」)を注入すること。この改変は、MMU攻撃が存在する場合に実際に実行中のコードのバージョンにおいて反映されない.
d.動的な修復ノードに対して通常の修復ノードを検出すること及び取り除くことを阻止するために使用された方法を適用することであるが、以下のことを含まない:
i.動的な修復ノードの構成要素を独立した関数に分離すること.
ii.必要とされない「動的な損傷プローブ」を使用すること.
e.動的な修復ノードに対してデータの読み取りと書き込みとを区別するMMUを含むコンピュータシステム上で継続した防御を可能にするために通常の修復ノードを用いて使用された方法を適用すること.
Claims (21)
- コンピュータプログラムコードを保護する方法であって、
コード及びデータのメモリアクセス/取り込みが同期される場合、すなわちデータ及びコードのアクセス/取り込みがコンピュータメモリにおいて同一の物理アドレスに経路指定される場合にのみ正しく動作するように、プログラムコードを改変することをコンピュータプログラムコードを保護する方法。 - 同一の論理アドレスへのコード及びデータのメモリアクセス/取り込みが異なる物理アドレスに経路指定されるMMU攻撃等の攻撃を間接的に打破するために使用されることを特徴とする請求項1に記載の方法。
- 前記プログラムコードは、前記コード(「修復対象」)のうちの1つ以上のセクションが意図的に破壊されるために前記プログラムコードが正しく実行しないように改変され、前記修復対象は、前記修復対象が実行される前に実行時に正しいコードに置換されることを特徴とする請求項1又は2に記載の方法。
- 新しいコードセクション(「修復プローブ」)が前記プログラムコードに注入され、これらの修復プローブは実行される前に実行時に前記修復対象を修復し、この修復処理は、前記プログラムに対する攻撃が前記同一の論理アドレスへのコード及びデータの取り込みを異なる物理アドレスに経路指定しようとする場合には効果的でないことを特徴とする請求項3に記載の方法。
- 前記修復対象が実行された後、新しいコードセクション(「損傷プローブ」)は前記プログラムコードに注入され、これらの損傷プローブは、元の間違った値等の前記間違った値又は値の新しい集合を事前に修復された修復対象に書き込むことを特徴とする請求項4に記載の方法。
- 「修復ノード」を共に形成する修復対象、1つ以上の修復ゾーン及びゼロ以上の修復プローブが存在することを特徴とする請求項5に記載の方法。
- 人により手動で検出すること及び取り除くことを時間がかかり且つ非現実的なものにするために、多くの修復ノードを使用するステップを含むことを特徴とする請求項6に記載の方法。
- 自動で検出すること及び取り除くことを困難にするために、コード生成方法を介して修復ノードが全て一意であることを保証するステップを含むことを特徴とする請求項6又は7に記載の方法。
- 自動で検出することをより困難にするために、時間的・空間的に関連する修復ノードの構成要素(修復対象、修復プローブ及び損傷プローブ)を互いから分離することを特徴とするステップを含むことを特徴とする請求項6乃至8のいずれか1項に記載の方法。
- シミュレーションに基づく検出を妨害するために、修復ノードをあまり頻繁に実行されないコードに配置するステップを含むことを特徴とする請求項6乃至9のいずれか1項に記載の方法。
- 前記修復対象に書き込み、前記書き込まれたデータのうちのいくつかを再度読み取って再度それを書き込む種類の修復プローブが存在し、データの読み取り、データの書き込み及び命令の読み取りが全て同一の場所に経路指定される場合にのみ結果として得られるデータが一貫するように、前記処理においてそれを移動すること及び/又は改変することであることを特徴とする請求項4乃至10のいずれか1項に記載の方法。
- 前記修復対象がある他の場所において前記プログラムの動作をプロキシし、且つデータの書き込み及び命令の読み取りが全て同一の場所に経路指定される場合にのみ前記他の場所においてその代わりに前記修復対象において実行するようにされた結果として生じるコードが一貫するように、コード及び/又はデータを書き込む種類の修復プローブ(「プロキシ修復プローブ」)が存在することを特徴とする請求項4乃至11に記載の方法。
- 同一の論理アドレスへのコード及びデータの取り込みが異なる物理アドレスに経路指定されるMMU攻撃等の攻撃を検出するために使用されることを特徴とする請求項1乃至12のいずれか1項に記載の方法。
- 改変後の修復対象が存在し、前記改変後の修復対象に配置された間違ったコードは、プログラムの不具合を引き起こさないが、前記攻撃が存在することを示すためにフラグを設定する等の応答機構を実行させることを特徴とする請求項13に記載の方法。
- (i)実行時にのみ知られるプログラム変数への割り当てに対して前記コードを識別するステップと;
(ii)前記割り当てられた値が前記正しいランタイム値と等しい可能性が低い即値であるように、そこの前記コード(「動的な修復対象」)を改変するステップと;
(iii)前記元の割り当ての適正値を含むように前記コードにおいて前記即値を改変する前記動的な修復対象の前に新しいコード(「動的な修復プローブ」)を注入するステップであり、この改変は、攻撃が存在する場合に実際に実行中の前記コードのバージョンにおいて反映されないステップとを含むことを特徴とする請求項6、又は、請求項6に従属する場合の請求項7乃至14のいずれか1項に記載の方法。 - (i)修復ノードを含むように選択された機能に渡された前記パラメータを識別するステップ及びこれらのパラメータのうちの1つがありふれたデータの種類の渡された値であり且つ前記機能のコード内で使用されるようにそれを選択するステップと;
(ii)前記コード自体に組み込まれた即値を代わりに使用するために前記選択された機能パラメータ(「動的な修復対象」)を使用する1つのコードを改変するステップと;
(iii)実行される前に前記選択された機能パラメータの値を含むように前記コードにおいて前記即値を改変する前記動的な修復対象の前に新しいコード(「動的な修復プローブ」)を注入するステップであり、この改変は、攻撃が存在する場合に実際に実行中の前記コードのバージョンにおいて反映されないステップとを含むことを特徴とする請求項15に記載の方法。 - 前記動的な修復対象及び動的な修復プローブの構成要素を独立した機能に分離するステップを含むことを特徴とする請求項15又は16に記載の方法。
- 前記動的な修復対象が実行された後、新しいコードセクション(「動的な損傷プローブ」)は前記プログラムコードに注入され、これらの動的な損傷プローブは、元の間違った値等の前記間違った値又は値の新しい集合を事前に修復された動的な修復対象に書き込むことを特徴とする請求項15又は16に記載の方法。
- コンピュータプログラムコードを保護するコンピュータシステムであって、請求項1乃至18のいずれか1項に記載の方法を実行する可能であることを特徴とするコンピュータシステム。
- コンピュータ上で実行された場合、請求項1乃至18のいずれか1項に記載の方法を前記コンピュータに実行させることを可能にするコンピュータ可読媒体上に格納されたことを特徴とするコンピュータソフトウエアプログラム。
- 請求項19記載のコンピュータにより実現されたシステムにより改変されたコンピュータソフトウエアプログラムか又は同一の論理アドレスへのコード及びデータの取り込みが異なる物理アドレスに経路指定される攻撃を継続して回避することを特徴とする請求項20に記載のコンピュータソフトウエアプログラム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB0810695.7A GB0810695D0 (en) | 2008-06-12 | 2008-06-12 | Anti-tampering MMU defence |
GB0810695.7 | 2008-06-12 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011513058A Division JP2011525650A (ja) | 2008-06-12 | 2009-06-12 | コンピュータプログラムコードを保護する方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015043221A true JP2015043221A (ja) | 2015-03-05 |
JP5886926B2 JP5886926B2 (ja) | 2016-03-16 |
Family
ID=39650832
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011513058A Pending JP2011525650A (ja) | 2008-06-12 | 2009-06-12 | コンピュータプログラムコードを保護する方法 |
JP2014205692A Active JP5886926B2 (ja) | 2008-06-12 | 2014-10-06 | コンピュータプログラムコードを保護する方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011513058A Pending JP2011525650A (ja) | 2008-06-12 | 2009-06-12 | コンピュータプログラムコードを保護する方法 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9690914B2 (ja) |
EP (1) | EP2304638B1 (ja) |
JP (2) | JP2011525650A (ja) |
GB (2) | GB0810695D0 (ja) |
WO (1) | WO2009150475A1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0810695D0 (en) | 2008-06-12 | 2008-07-16 | Metaforic Ltd | Anti-tampering MMU defence |
TWI396994B (zh) * | 2009-05-05 | 2013-05-21 | Phison Electronics Corp | 防電腦病毒擴散的控制器及其儲存系統與方法 |
WO2011041871A1 (en) * | 2009-10-08 | 2011-04-14 | Irdeto Canada Corporation | A system and method for aggressive self-modification in dynamic function call systems |
EP2362314A1 (en) * | 2010-02-18 | 2011-08-31 | Thomson Licensing | Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code |
US9268720B2 (en) * | 2010-08-31 | 2016-02-23 | Qualcomm Incorporated | Load balancing scheme in multiple channel DRAM systems |
US9298911B2 (en) | 2013-03-15 | 2016-03-29 | Intel Corporation | Method, apparatus, system, and computer readable medium for providing apparatus security |
KR101482700B1 (ko) * | 2013-09-27 | 2015-01-14 | (주)잉카엔트웍스 | 해시를 이용한 프로그램의 무결성 검증 방법 |
DE102014212018A1 (de) | 2014-06-23 | 2015-12-24 | Continental Teves Ag & Co. Ohg | Verfahren und Schaltkreis zur Vermeidung von Speicherschutzverletzungen |
EP3179402A4 (en) * | 2014-08-04 | 2018-03-28 | Fumio Negoro | Definition structure of program for autonomously disabling invading virus, program equipped with structure, recording medium installed with program, and method/device for autonomously solving virus problem |
US10114984B2 (en) * | 2015-09-04 | 2018-10-30 | Xerox Corporation | Symmetric bit coding for printed memory devices |
KR20170073944A (ko) * | 2015-12-21 | 2017-06-29 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법 |
CN105912893A (zh) * | 2016-01-19 | 2016-08-31 | 北京鼎源科技有限公司 | 一种基于Android系统微指令即时编译的加固方法 |
EP3355219A1 (en) * | 2017-01-26 | 2018-08-01 | Gemalto Sa | Method to secure a software code |
WO2018236733A1 (en) * | 2017-06-18 | 2018-12-27 | Indiana University Research And Technology Corporation | SYSTEMS AND METHODS FOR REALIZING PROBE INJECTION USING INSTRUMENT PILONNATION |
KR20190093370A (ko) * | 2018-02-01 | 2019-08-09 | 에스케이하이닉스 주식회사 | 반도체 메모리 장치 및 그 동작 방법 |
CN110018954B (zh) * | 2018-12-25 | 2023-03-31 | 创新先进技术有限公司 | 代码质量检测、代码检测质量的评估方法、装置及设备 |
KR102485137B1 (ko) * | 2020-12-07 | 2023-01-06 | 한국전자기술연구원 | 프로그램 오류 자동 수정 방법 및 이를 지원하는 시스템 |
US11687440B2 (en) * | 2021-02-02 | 2023-06-27 | Thales Dis Cpl Usa, Inc. | Method and device of protecting a first software application to generate a protected software application |
US11799857B2 (en) * | 2021-08-31 | 2023-10-24 | Cisco Technology, Inc. | Software posture for zero trust access |
US20230098640A1 (en) * | 2021-09-26 | 2023-03-30 | Ceremorphic, Inc. | Core Processor and Redundant Branch Processor with Control Flow Attack Detection |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004006075A1 (ja) * | 2002-07-09 | 2004-01-15 | Fujitsu Limited | 開放型汎用耐攻撃cpu及びその応用システム |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2260004B (en) * | 1991-09-30 | 1995-02-08 | Apple Computer | Memory management unit for a computer system |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US7287166B1 (en) * | 1999-09-03 | 2007-10-23 | Purdue Research Foundation | Guards for application in software tamperproofing |
US7526811B1 (en) * | 2001-05-22 | 2009-04-28 | Novell, Inc. | Methods for detecting executable code which has been altered |
US7346781B2 (en) * | 2001-12-06 | 2008-03-18 | Mcafee, Inc. | Initiating execution of a computer program from an encrypted version of a computer program |
US8510571B1 (en) * | 2003-03-24 | 2013-08-13 | Hoi Chang | System and method for inserting security mechanisms into a software program |
EP1870814B1 (en) * | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
US20060101047A1 (en) * | 2004-07-29 | 2006-05-11 | Rice John R | Method and system for fortifying software |
US20060230288A1 (en) * | 2005-03-29 | 2006-10-12 | International Business Machines Corporation | Source code classification method for malicious code detection |
US20070050848A1 (en) * | 2005-08-31 | 2007-03-01 | Microsoft Corporation | Preventing malware from accessing operating system services |
US20070226795A1 (en) * | 2006-02-09 | 2007-09-27 | Texas Instruments Incorporated | Virtual cores and hardware-supported hypervisor integrated circuits, systems, methods and processes of manufacture |
US8065736B2 (en) * | 2006-06-06 | 2011-11-22 | Microsoft Corporation | Using asynchronous changes to memory to detect malware |
US20090172346A1 (en) * | 2007-12-31 | 2009-07-02 | Ravi Sahita | Transitioning between software component partitions using a page table pointer target list |
GB0810695D0 (en) | 2008-06-12 | 2008-07-16 | Metaforic Ltd | Anti-tampering MMU defence |
-
2008
- 2008-06-12 GB GBGB0810695.7A patent/GB0810695D0/en not_active Ceased
-
2009
- 2009-06-12 GB GB0910159A patent/GB2460766B/en active Active
- 2009-06-12 EP EP09762024.9A patent/EP2304638B1/en active Active
- 2009-06-12 WO PCT/GB2009/050672 patent/WO2009150475A1/en active Application Filing
- 2009-06-12 US US12/996,941 patent/US9690914B2/en active Active
- 2009-06-12 JP JP2011513058A patent/JP2011525650A/ja active Pending
-
2014
- 2014-10-06 JP JP2014205692A patent/JP5886926B2/ja active Active
-
2017
- 2017-05-31 US US15/610,092 patent/US10803151B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004006075A1 (ja) * | 2002-07-09 | 2004-01-15 | Fujitsu Limited | 開放型汎用耐攻撃cpu及びその応用システム |
Non-Patent Citations (3)
Title |
---|
JPN5011005190; GIFFIN J T ET.AL.: 'STRENGTHENING SOFTWARE SELF-CHECKSUMMING VIA SELF-MODIFYING CODE' COMPUTER SECURITY APPLICATIONS CONFERENCE , 20051205, P23-32, IEEE * |
JPN5011005194; GANG TAN ET.AL.: 'DELAYED AND CONTROLLED FAILURES IN TAMPER-RESISTANT SOFTWARE' INFORMATION HIDING; [LECTURE NOTES IN COMPUTER SCIENCE] V4437, 20060710, P216-231 * |
JPN5011005195; KANZAKI Y ET.AL.: 'EXPLOITING SELF-MODIFICATION MECHANISM FOR PROGRAM PROTECTION' PROCEEDINGS OF THE 27TH. ANNUAL INTERNATIONAL COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE V CONF.26, 20031103, P170-178, IEEE COMP. SOC. * |
Also Published As
Publication number | Publication date |
---|---|
US9690914B2 (en) | 2017-06-27 |
JP5886926B2 (ja) | 2016-03-16 |
GB2460766B (en) | 2010-12-15 |
JP2011525650A (ja) | 2011-09-22 |
US20170337358A1 (en) | 2017-11-23 |
GB0810695D0 (en) | 2008-07-16 |
GB0910159D0 (en) | 2009-07-29 |
US20110154503A1 (en) | 2011-06-23 |
GB2460766A (en) | 2009-12-16 |
WO2009150475A1 (en) | 2009-12-17 |
US10803151B2 (en) | 2020-10-13 |
EP2304638A1 (en) | 2011-04-06 |
EP2304638B1 (en) | 2018-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5886926B2 (ja) | コンピュータプログラムコードを保護する方法 | |
Kuznetzov et al. | Code-pointer integrity | |
Volckaert et al. | Cloning your gadgets: Complete ROP attack immunity with multi-variant execution | |
Zhang et al. | VTrust: Regaining Trust on Virtual Calls. | |
US7886148B2 (en) | Secure execution of a computer program | |
Suh et al. | Secure program execution via dynamic information flow tracking | |
Zhang et al. | VTint: Protecting Virtual Function Tables' Integrity. | |
Hu et al. | Automatic Generation of {Data-Oriented} Exploits | |
US7603704B2 (en) | Secure execution of a computer program using a code cache | |
Crandall et al. | Minos: Control data attack prevention orthogonal to memory model | |
Suh et al. | CSAIL | |
Younan et al. | Runtime countermeasures for code injection attacks against C and C++ programs | |
Li et al. | Fine-cfi: fine-grained control-flow integrity for operating system kernels | |
Dalton et al. | Real-World Buffer Overflow Protection for Userspace and Kernelspace. | |
Crandall et al. | Minos: Architectural support for protecting control data | |
Kong et al. | Improving software security via runtime instruction-level taint checking | |
Park et al. | NoJITsu: Locking Down JavaScript Engines. | |
Zhang et al. | Protecting cots binaries from disclosure-guided code reuse attacks | |
Canella et al. | SFIP: Coarse-Grained Syscall-Flow-Integrity Protection in Modern Systems | |
Pawlowski et al. | VPS: excavating high-level C++ constructs from low-level binaries to protect dynamic dispatching | |
Philippaerts et al. | CPM: Masking code pointers to prevent code injection attacks | |
Zhang et al. | Stateful forward-edge CFI enforcement with Intel MPX | |
Anderson et al. | Formalizing stack safety as a security property | |
González | Taxi: Defeating code reuse attacks with tagged memory | |
De Backer | Fuzzing intel sgx enclaves |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150908 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20151016 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160115 |
|
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: 20160201 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160212 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5886926 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
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 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
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 |