JP2011170847A - ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置 - Google Patents

ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置 Download PDF

Info

Publication number
JP2011170847A
JP2011170847A JP2011020280A JP2011020280A JP2011170847A JP 2011170847 A JP2011170847 A JP 2011170847A JP 2011020280 A JP2011020280 A JP 2011020280A JP 2011020280 A JP2011020280 A JP 2011020280A JP 2011170847 A JP2011170847 A JP 2011170847A
Authority
JP
Japan
Prior art keywords
checksum
state
integrity
binary
software code
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
JP2011020280A
Other languages
English (en)
Other versions
JP5734685B2 (ja
JP2011170847A5 (ja
Inventor
Charles Salmon-Legagneur
サルモン−ルガニュール シャルル
Antoine Monsifrot
モンシフロ アントワーヌ
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.)
Thomson Licensing SAS
Original Assignee
Thomson Licensing SAS
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 Thomson Licensing SAS filed Critical Thomson Licensing SAS
Publication of JP2011170847A publication Critical patent/JP2011170847A/ja
Publication of JP2011170847A5 publication Critical patent/JP2011170847A5/ja
Application granted granted Critical
Publication of JP5734685B2 publication Critical patent/JP5734685B2/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

【課題】自己書換型であるソフトウェアコードのインテグリティを保証する。
【解決手段】ソフトウェアコードのインテグリティを確かめるために、コードの様々な状態について、チェックサム(例えば、ハッシュ値)がコードの少なくとも一部について生成される。実行中に、コードの状態は変化し(320)、モジュールは変更され(330)、そのコードの状態に係るチェックサムを用いてインテグリティ・チェックが行われる(340)。チェックサムはルックアップテーブルに記憶されても、あるいは、インテグリティ照合関数に埋め込まれてもよい。モジュールの状態を示す状態変数は、テーブルに含まれるチェックサムを参照するために使用されてよい。モジュールのとり得る状態は暗号化された状態及び暗号化されていない状態である。
【選択図】図3

Description

本発明は、概して、ソフトウェア、特に、ソフトウェアのインテグリティを確保すること、に関する。
本項目は、以下で記載及び/又は請求される本発明の様々な態様に関連する技術の様々な側面を読む者に紹介することを目的とする。この議論は、本発明の様々な態様のより良い理解を助けるよう読む者に背景情報を提供するのに役立つと信じられている。従って、当然、これらの記述は、先行技術の容認としてではなく、この観点から読まれるべきである。
プログラムが意図されたように実行されることを確かにすることを目的にコンピュータプログラムのインテグリティを保護することは、ソフトウェアのプロバイダにとって、比較的一般的である。しかし、通常、ハッカーは、様々な方法で、実行すべきプログラムに不正侵入しようとする。一例として、ハッカーは、ときどき、必要なアクセス権原を有さずにプログラムを使用することができるように、プログラムのアクセス制御機能を回避すべくコードを書き換えることを望む。
プログラムのインテグリティを保証する先行技術に係る方法は、コードの少なくとも幾つかの部分に対してシグニチャ(「チェックサム」ともいう。)を計算することである。例えば、シグニチャは、コードの部分に対して計算されて、秘密キーにより署名されたハッシュ値であってよい。当業者には当然のことながら、多くの他の可能性が存在する。プログラム実行中に、コードのシグニチャは少なくとも一度計算される。セキュリティ・レベルを高めるために、シグニチャを計算する関数が入れ子にされ、それにより、各関数のインテグリティは少なくとも1つの他の関数によって確かめられる。このようにして、ただ1つの関数が損なわれないままである場合、それは、少なくとも1つの他の関数を改ざんすることを検出する。更なる詳細及び説明は、例えば、米国特許出願公報第2003/188231号明細書(特許文献1)及び欧州特許第1942431号明細書(特許文献2)で見つけられ、また、米国特許出願公開第2002/138748号明細書(特許文献3)は、どのように再配置可能コードについてインテグリティを決定すべきかを教示している。同様の解決法は、D.Aucsmith、Tamper Resistant Software:An Implementation Proceedings of the International Workshop on Information Hiding(非特許文献1)で見つけられる。この文献において、暗号化されたインテグリティ関数は復号化されて、特別の暗号化されていないモジュールのインテグリティを確かめるために使用される。
予想通りに、このような保護に対処する方法は、ハッカーではなく学究的な興味よって見出されてきた(例えば、Glen Wurster等、“A Generic Attack on Checksumming Based on Software Tamper Resistance”、SP’05:Proceeding of the 2005 IEEE Symposium on Security and Privace、127〜138頁、米国ワシントンDC、2005年、IEEE Computer Society(非特許文献2))。かかる方法はコードの2つのコピーを用いる。1つのコピーは変更されておらず、もうひとつのコピーは変更されている。変更されているコードのコピーは実行され、チェックサムが必要とされるときには、これは変更されていないコードのコピーを用いて計算される。このようにして、当該方法は、コードの変更を可能にし、同時に、正しいチェックサム、すなわち、変更されていないコードに対応するチェックサム、を提供することが可能である。なお、攻撃はあらゆる種類のプロセッサにおいて行われ得ないことが認知されるべきである。
非特許文献2で提案されている対策は、コードを含むページについてアクセス権原を変更することである。コードを読み出す権利がそのコード自体についても解除される場合、これは、変更されていないコードを提供するよう接続される割り込みを(コードが自身を読み出そうとする場合に)引き起こす。
他の問題は、先行技術に係るチェックサムは自己書換コード(self-modifying code)に適合しないことである。これは、特定のチェックサムが、コードの1バージョンについてのみ、すなわち、変更の前又は後にのみ、有効であるためである。
米国特許出願公報第2003/188231号明細書 欧州特許第1942431号明細書 米国特許出願公開第2002/138748号明細書
D.Aucsmith、Tamper Resistant Software:An Implementation Proceedings of the International Workshop on Information Hiding Glen Wurster等、"A Generic Attack on Checksumming Based on Software Tamper Resistance"、SP’05:Proceeding of the 2005 IEEE Symposium on Security and Privace、127〜138頁、米国ワシントンDC、2005年、IEEE Computer Society
従って、ソフトウェア、特に、自己書換型であるコード、のインテグリティを保証するための改善された解決法が必要である。本発明は、かかる解決法を提供する。
第1の態様で、本発明は、自己書換ソフトウェアコードのインテグリティをその実行中に確かめる方法を対象とする。ソフトウェアコードは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。ソフトウェアコードを実行するプロセッサは、複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによってソフトウェアコードを変更し、その変更されたソフトウェアコードについてチェックサムと変更されたソフトウェアコードを比較することによってソフトウェアコードのインテグリティ確かめる。
第1の望ましい実施形態で、チェックサムはハッシュ値である。
第2の望ましい実施形態で、チェックサムは、モジュールのインテグリティを確かめる関数に埋め込まれている。
第3の望ましい実施形態で、チェックサムはルックアップテーブルに含まれる。有利に、変更されたソフトウェアコードのインテグリティを確かめる関数は、ルックアップテーブルに含まれるチェックサムにアクセスするために、複数のモジュールの夫々の状態を示す状態変数を使用する。
第2の態様で、本発明は、自己書換ソフトウェアコードのインテグリティをその実行中に確かめる装置を対象とする。ソフトウェアコードは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。当該装置は、ソフトウェアコードを実行し、それによって、複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによってソフトウェアコードを変更し、その変更されたソフトウェアコードについてチェックサムと変更されたソフトウェアコードを比較することによってソフトウェアコードのインテグリティ確かめるよう構成されたプロセッサを有する。
第1の望ましい実施形態で、チェックサムはハッシュ値である。
第2の望ましい実施形態で、チェックサムは、モジュールのインテグリティを確かめる関数に埋め込まれている。
第3の望ましい実施形態で、チェックサムはルックアップテーブルに含まれる。有利に、変更されたソフトウェアコードのインテグリティを確かめる関数は、ルックアップテーブルに含まれるチェックサムにアクセスするために、複数のモジュールの夫々の状態を示す状態変数を使用する。
第3の態様で、本発明は、インテグリティが保護された自己書換バイナリを生成する装置を対象とする。バイナリは複数のモジュールを有し、各モジュールは、ソフトウェアコードの実行中に、少なくとも2つのとり得る状態、すなわち、暗号化された状態及び暗号化されていない状態、にあることができる。当該装置はプロセッサを有し、プロセッサは、バイナリを受け取り、バイナリのチェックサムを、そのとり得る状態の夫々において生成し、少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムをバイナリに挿入することによって、インテグリティが保護されたバイナリを生成するよう構成される。各チェックサム関数は、バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される。
第1の望ましい実施形態で、プロセッサは、更に、入れ子式に複数のチェックサム照合関数を挿入し、それにより、実行中に、各チェックサム照合関数のインテグリティが少なくとも1つの他のチェックサム照合関数によって確かめられるようにする、よう構成される。
第4の態様で、本発明は、自己書換型のインテグリティが保護されたバイナリを記憶しており、プロセッサによって実行される場合に、本発明の第1の態様に係る方法のステップを実行するコンピュータプログラムを対象とする。
第5の態様で、本発明は、プロセッサによって実行される場合に、複数のモジュールを有するバイナリの各状態についてチェックサムを生成し、各モジュールは前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、インテグリティが保護されたバイナリを生成し、各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される、命令を記憶しているコンピュータプログラムを対象とする。
本発明の実施形態によれば、ソフトウェア、特に、自己書換型であるコード、のインテグリティを保証するための改善された解決法が提供される。
本発明が実施されるコンピュータデバイスの例を表す。 本発明の望ましい実施形態を表す状態図である。 本発明の望ましい実施形態に従うインテグリティ照合のための方法を表す。 バイナリの保護を表す。 例となる状態遷移図を表す。
本発明の望ましい特徴について、添付の図面を参照して、限定されない例を用いて記載する。
図1は、本発明が実施されるコンピュータデバイス(コンピュータ)100の例を表す。コンピュータ100は、例えば、標準のパーソナルコンピュータ(PC)といった、計算を実行することができる如何なる種類のコンピュータ又はデバイスであってもよい。コンピュータ100は、少なくとも1つのプロセッサ110と、RAMメモリ120と、ユーザと対話するためのユーザインターフェース(UI)130と、デジタルデータ担体150からソフトウェアプログラムを読み出すための第2のインターフェース(I/O)140とを有する。当業者には明らかなように、図示されているコンピュータは、明りょうさのために簡単化されており、実際のコンピュータは、更に、ネットワーク接続や持続記憶デバイス等の機能を有する。
本発明の主たる発明概念は、各状態が保護されているプログラムコードの状態に対応するところの、プログラムの実行中の有限状態機械(finite state machine)の使用である。1つの状態から他の状態に移るとき、コードの少なくとも1つのモジュールは動的に変更される。有限状態機械はそれ自体当該技術でよく知られているので、それについて詳細には記載しない。モジュールの限定されない例は、コードのサブセクション、コードのチャンク(chunks)、及び関数である。改ざんから保護するために、各状態についてチェックサムを計算することが可能であり、これにより、コードを改ざんすることを防ぐことができる。
図2は、本発明の望ましい実施形態を表す状態図である。説明の明りょうさのために、例となる状態図は3つの状態(S1、S2及びS3)しか含まず、各状態はチェックサムに関連付けられており、コードは3つのモジュール(M1、M2及びM3)しか有さない。当業者には明らかなように、本発明は、より多くの(又はより少ない)状態及びモジュールにも等しく適用され、それに対応する異なった状態遷移が可能である。
例において、初期状態はS1である。この状態において、コードの全てのモジュールは、それらの初期状態にあり、状態は第1チェックサム、すなわち、チェックサムV1、に関連付けられている。この第1チェックサムにより、少なくとも1つのモジュールのインテグリティ照合が可能となる。
実行により状態S1から状態S2へのシフトが起こる場合、第1のモジュールM1は変更され、変更されたモジュールM’1が生成される。望ましくは、この時点で(チェックサムV2を用いて)チェックサムが確認されるが、その確認は、夫々の状態遷移に適用することができる、後の段階で行われてもよい。
同様に、実行により状態S2から状態S3へのシフトが起こる場合、第2のモジュールM2が変更され、変更されたモジュールM’2が生成される。変更されたモジュールM’1は、その変更されていない形態M1に戻り、それにより、コードは3つのモジュールM1、M’2及びM3を有する。前に説明されたように、望ましくは、この時点で(チェックサムV3を用いて)チェックサムが確認される。
状態S3から状態S2へ、更に状態S2から状態S1へ移ると、変更は逆方向に行われる。例えば、状態S2から状態S1に進む場合、変更されたモジュールM’1は、その変更されていない形態M1に戻る。また、かかる場合に、望ましくは、遷移後に(関連するチェックサムを用いて)チェックサムが確認される。
図3は、本発明の望ましい実施形態に従うインテグリティ照合のための方法を表す。方法は、通常のプログラム実行から始まることができる(ステップ310)。或る時点で、状態を変化させることが決定される(ステップ320)。少なくとも1つのモジュールが変更され(ステップ330)、インテグリティがチェックされる(ステップ340)。この後、通常のプログラム実行がステップ310で戻る。
モジュールは、例えば、モジュールの解読によって(その場合には、復号化キーが必要である。)、又はモジュールの一部のバイトを変更することによって(例えば、置換によって)、変更されてよい。前者の場合、コードは、その最初の状態に戻るよう暗号化される(対称的な暗号アルゴリズムでは、復号化キーと同じ暗号キーを必要とする。)。後者の場合、バイトは、例えば、バックワード置換(backwards permutation)によって、最初の構成に戻される。
図4は、バイナリ410の保護を表す。保護エンジン420は、とり得る状態及びそれらの夫々のチェックサム値を列挙するよう機能する。これらのチェックサム値は、識別を可能にする何らかのリファレンスとともに、保護されたバイナリ430に挿入される。保護エンジン420は、例えばパーソナルPC等の如何なる種類の適切なコンピュータデバイスであってもよい。それは、望ましくは、プロセッサ及びメモリ等(図示せず。)を有する。コンピュータプログラムプロダクト415は、例えばCD−ROM又はUSBメモリ等であって、プロセッサによって実行される場合に本願で記載されるようにバイナリを保護する命令を記憶する。
バイナリ410を保護するために、保護エンジン420は、バイナリ410を解析して、とり得る状態を計算する。この目的のために、有利に、保護エンジン420は、コールグラフ解析及び状態解析を使用する。状態が生成されると、保護エンジン420は、その状態に係るチェックサムを計算する。
次いで、保護エンジン420は、少なくとも1つのチェックサム呼び出し(invocation)ポイント432と、チェックサムが確認される各状態ごとに1つである、チェックサムの(単一値を有することができる)テーブル434とを有する保護されたバイナリ430を生成する。望ましくは、チェックサムは、容易なアクセスを可能にするある種の識別子(例えば、状態1、状態2・・・といった表示、又は“暗号化されたモジュール1、復号化されたモジュール2、暗号化されたモジュール3”のラインに沿った表示)と関連付けられる。望ましくは、チェックサムテーブル434は、保護されたバイナリの少なくとも一部についてハッシュ値の形をとるが、他のチェックサムも想定されてよい(例えば、バイナリの一定範囲における特定の文字の数)。チェックサムは、例えば暗号化によって、保護されるが、先に記載されたように、チェックサム照合関数を入れ子にすることが好ましく、それにより、各関数のインテグリティは少なくとも1つの他の関数によって確認される。
状態のチェックサムが決定論的に前の状態のチェックサムから決定される場合に、チェックサムテーブル434を用いずに行うことも可能である点に留意すべきである。チェックサムは、また、保護されたバイナリにおいて難読化され、又は別なファイルに記憶されてもよい。
次いで、以下の限定されない例を考える。記載及びその理解を容易にするよう、例は、単一コード領域(「チェックサム範囲」と呼ばれる。)が、望ましくはプログラム実行中に複数の照合ポイントで起こるチェックサム照合によって保護される場合に限定される。当業者には明らかなように、本発明は、複数のチェックサム範囲の場合に容易に拡張可能である。例は、更に、モジュールが、2つの異なった状態、すなわち、暗号化された状態及び復号化された状態、にあることができる関数に対応する特定の場合に限定される。
このようにして、コードには特有の状態遷移が存在し、各状態は、望ましくは、保護されたバイナリにおける少なくとも1つの照合ポイントで確認される。
例において、各関数が2つのとり得る状態(暗号化された状態及び復号化された状態)のうちの1つにある場合、状態変数S(望ましくは、ビットストリーム)において状態ビットSiとして状態を表すことが可能である。状態変数Sは、アプリケーションの関数コールグラフに依存して、とり得ない値を表すことができる。そのようなものとして、状態変数Sのとり得る値のサブセットのみがアプリケーションについて有効であってよい。状態変数Sの各値は、保護エンジンによって計算されるチェックサム値に対応し、これらのチェックサム値は、保護されたバイナリに(有利にハッシュ値として)埋め込まれる。次いで、ハッシュ・チェックサムは、識別子として状態変数Sを用いて調べられてよい。
関数が暗号化又は復号化されるときはいつでも、すなわち、状態が変化する場合には、状態変数Sは、適切な状態ビットSiを反転(flip)させることによって、更新される。
図5は、状態ビットS1、S2に夫々関連付けられた2つの関数F1、F2を伴う、例となる状態遷移図を表す。各関数は、暗号化され(S1、S2によって表され)且つ復号化されてよく、4つの異なる状態を生ずる。

・S0:F1及びF2は暗号化−(S1S2)
・S1:F1は暗号化、F2は復号化−(S1S2
・S2:F1は復号化、F2は暗号化−(S1S2)
・S3:F1及びF2は復号化−(S1S2

最初に、プログラムは、メイン関数510を実行する。このとき、状態SはS0=S1S2である。メイン関数は関数F1及びF2を呼び出すことができる。関数F1が呼び出される場合、暗号化されているF1は復号化される(520)。その後に、F1の実行530が始まる。このとき、状態SはS2=S1S2である。同様に、関数F2が呼び出される場合、暗号化されているF2は復号化され(550)、S2は反転する。その後に、F2の実行(560)が始まる。このとき、状態SはS1=S1S2である。
関数F1(530)には2つの可能性が存在する。F1の実行が終わり、F1はF2を呼び出す。最初の場合では、F1は暗号化され(540)、S1は反転され、実行はメイン関数510に戻る。そして、状態はS0=S1S2に戻る。
第2の場合では、F2は復号化され(550)、状態ビットS2は反転され、F2の実行560が始まる。しかし、メイン関数510が直接F2を呼び出す場合と対照的に、F1も復号化されている。このことは、状態がS3=S1S2であることを意味する。従って、F2の実行中、状態はS1又はS3のいずれかである。
このようにして、F2の実行が終わると、F2は暗号化され(570)、状態ビットS2は反転され、実行は関数の呼び出しに戻る。呼び出す関数がメイン関数である場合、メイン関数510は実行を引き継ぐ。このとき、状態はS0=S1S2である。他方で、呼び出す関数がF1であった場合、F1の実行530が再開する。このとき、状態はS2=S1S2である。
図5で、チェックサム呼び出しポイントは、理解を簡単にするために、省略されているが、当然、夫々の関数(メイン関数、F1、F2)は、望ましくは、状態に関連付けられたチェックサムを確認する(場合により、暗号化/復号化関数の部分としての)少なくとも1つのチェックサム呼び出しポイントを有する。
チェックサム呼び出しポイントの最も簡単な実施は、プログラムが現在の状態Sを読み出し、対応するチェックサム値をチェックサムテーブルにおいて見つけ出し、記憶されているチェックサム値に対して照合されるべきチェックサムを生成することである。照合が失敗である場合、望ましくは、実行は中止される。
当業者に明らかなように、攻撃者はチェックサム値を改ざんしようと試みる。このような理由で、他のチェックサムを含む呼び出し関数と同様にチェックサムテーブルを保護することが好ましく、これにより、これらは照合される。
可能であればいつでも、呼び出しポイントコードにおいてチェックサム値をインラインにすることによって、セキュリティのレベルを高めることが可能である。この場合、保護エンジンは、有利に、下記の3つの場合の間を区別するようコールグラフを解析する。

1.保護される関数が入力される場合、状態は一意である。すなわち、単一の実行経路が関数に通ずる。この場合、チェックサム値は一意であり、呼び出しポイントコードは、(望ましくは、難読な方法で)チェックサム値を埋め込むコードを有してよい。例えば、
if(checksum_value equals checksum_ref) then (do_something)

2.保護される関数が入力される場合、少数(5未満)のとり得る状態が存在する。この場合も、呼び出しポイントコードにチェックサム値を埋め込むことが可能である。例えば、
if(S equals S1 and checksum_value equals checksum_S1) or
if(S equals S2 and checksum_value equals checksum_S2)
then (do_something)

3.とり得る状態が多数存在する場合には、チェックサムテーブルが望ましい解決法である。例えば、
if(checksum_value equals LookupInChecksumTable(S)) then (do_something)

明細書において、モジュールは、2つのとり得る状態(例えば、暗号化及び復号化)を有するとして記載されてきた。当業者に明らかなように、モジュールは複数の(特に、2よりも多い)状態を有することが可能である。
本発明は、上記の攻撃に打ち勝つことができるマルチステート・ソフトウェアコードのインテグリティを確かめる方法を提供することができると認められる。
明細書並びに(必要に応じて)特許請求の範囲及び図面で開示されている夫々の特徴は、独立して、又は何らかの適切な組合せにおいて、提供されてよい。ハードウェアで実施されると記載される特徴は、ソフトウェアでも実施されてよく、また、その逆も同様である。特許請求の範囲に現れる参照符号は、単なる例示として用いられ、特許請求の範囲の適用範囲を限定するものではない。
100 コンピュータ
110 プロセッサ
120 RAMメモリ
130 ユーザインターフェース(UI)
140 第2のインターフェース(I/O)
150 デジタルデータ担体150
410 バイナリ
415 コンピュータプログラムプロダクト
420 保護エンジン420
430 保護されたバイナリ430
432 チェックサム呼び出しポイント
434 チェックサムテーブル
F1、F2 関数
M1〜M3,M’1〜M’3 モジュール
S0〜S3 状態
V1〜V3 チェックサム

Claims (14)

  1. 自己書換ソフトウェアコードのインテグリティをその実行中に確かめる方法であって、
    前記ソフトウェアコードは複数のモジュールを有し、各モジュールは、前記ソフトウェアコードの実行中に少なくとも2つのとり得る状態にあることが可能であり、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
    当該方法は、前記ソフトウェアコードを実行するプロセッサによって実行され、前記プロセッサに、
    前記複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによって前記ソフトウェアコードを変更するステップと、
    前記変更されたソフトウェアコードについてチェックサムと前記変更されたソフトウェアコードを比較することによって前記ソフトウェアコードのインテグリティを確かめるステップと
    を実行させる方法。
  2. 前記チェックサムはハッシュ値である、請求項1に記載の方法。
  3. 前記チェックサムは、前記モジュールのインテグリティを確かめる関数に埋め込まれている、請求項1に記載の方法。
  4. 前記チェックサムは、ルックアップテーブルに含まれる、請求項1に記載の方法。
  5. 前記変更されたソフトウェアコードのインテグリティを確かめる関数は、前記ルックアップテーブルに含まれる前記チェックサムにアクセスするために、前記複数のモジュールの夫々の状態を示す状態変数を用いる、請求項4に記載の方法。
  6. 自己書換ソフトウェアコードのインテグリティをその実行中に確かめる装置であって、
    前記ソフトウェアコードは複数のモジュールを有し、各モジュールは、前記ソフトウェアコードの実行中に少なくとも2つのとり得る状態にあることが可能であり、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
    前記ソフトウェアコードを実行し、それによって、
    前記複数のモジュールのうちの1つを第1の状態から第2の状態に変えることによって前記ソフトウェアコードを変更し、
    前記変更されたソフトウェアコードについてチェックサムと前記変更されたソフトウェアコードを比較することによって前記ソフトウェアコードのインテグリティを確かめる
    よう構成されるプロセッサを有する、装置。
  7. 前記チェックサムはハッシュ値である、請求項6に記載の装置。
  8. 前記チェックサムは、前記モジュールのインテグリティを確かめる関数に埋め込まれている、請求項6に記載の装置。
  9. 前記チェックサムは、ルックアップテーブルに含まれる、請求項6に記載の装置
  10. 前記変更されたソフトウェアコードのインテグリティを確かめる関数は、前記ルックアップテーブルに含まれる前記チェックサムにアクセスするために、前記複数のモジュールの夫々の状態を示す状態変数を用いる、請求項9に記載の装置。
  11. インテグリティが保護された自己書換バイナリを生成する装置であって、
    前記バイナリは複数のモジュールを有し、各モジュールは、前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
    プロセッサを有し、該プロセッサは、
    バイナリを受け取り、
    前記バイナリのチェックサムを、そのとり得る状態の夫々において生成し、
    少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、前記インテグリティが保護されたバイナリを生成する
    よう構成され、
    各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される、装置。
  12. 前記プロセッサは、更に、入れ子式に複数のチェックサム照合関数を挿入し、それにより、実行中に、各チェックサム照合関数のインテグリティが少なくとも1つの他のチェックサム照合関数によって確かめられるようにする、よう構成される、請求項11に記載の装置。
  13. 自己書換型のインテグリティが保護されたバイナリを記憶しており、プロセッサによって実行される場合に、請求項1乃至5のうちのいずれか一項に記載の方法のステップを実行するコンピュータプログラム。
  14. プロセッサによって実行される場合に、
    複数のモジュールを有するバイナリの各状態についてチェックサムを生成し、各モジュールは前記バイナリの実行中に少なくとも2つのとり得る状態にあることができ、該とり得る状態は暗号化された状態及び暗号化されていない状態であり、
    少なくとも1つのチェックサム照合関数及び前記生成されたチェックサムを前記バイナリに挿入することによって、インテグリティが保護されたバイナリを生成し、各チェックサム関数は、前記バイナリの状態を該バイナリの状態についてのチェックサムと比較することによって、前記インテグリティが保護されたバイナリの各状態のインテグリティを確かめるよう構成される
    命令を記憶しているコンピュータプログラム。
JP2011020280A 2010-02-18 2011-02-02 インテグリティを実行中に確かめるソフトウェアを生成するプログラム、方法及び記憶媒体 Expired - Fee Related JP5734685B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP10305164.5 2010-02-18
EP10305164A EP2362314A1 (en) 2010-02-18 2010-02-18 Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code

Publications (3)

Publication Number Publication Date
JP2011170847A true JP2011170847A (ja) 2011-09-01
JP2011170847A5 JP2011170847A5 (ja) 2014-03-06
JP5734685B2 JP5734685B2 (ja) 2015-06-17

Family

ID=42320561

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011020280A Expired - Fee Related JP5734685B2 (ja) 2010-02-18 2011-02-02 インテグリティを実行中に確かめるソフトウェアを生成するプログラム、方法及び記憶媒体

Country Status (4)

Country Link
US (1) US20110202996A1 (ja)
EP (1) EP2362314A1 (ja)
JP (1) JP5734685B2 (ja)
CN (1) CN102163268B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2378452B1 (en) 2010-04-16 2012-12-19 Thomson Licensing Method, device and computer program support for verification of checksums for self-modified computer code
US9141800B2 (en) * 2011-12-20 2015-09-22 Advanced Micro Devices, Inc. Method and apparatus for detecting intrusions in a computer system
US20150294114A1 (en) * 2012-09-28 2015-10-15 Hewlett-Packard Development Company, L.P. Application randomization
US20150278010A1 (en) * 2012-11-23 2015-10-01 Freescale Semiconductor, Inc. Digital device
KR101482700B1 (ko) * 2013-09-27 2015-01-14 (주)잉카엔트웍스 해시를 이용한 프로그램의 무결성 검증 방법
EP3026557A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
EP3026560A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
EP3026558A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
ES2746127T3 (es) * 2016-09-30 2020-03-04 Nagravision Sa Integridad de descifrado de código bajo demanda
US11281769B2 (en) * 2016-12-15 2022-03-22 Irdeto B.V. Software integrity verification
FR3083343B1 (fr) * 2018-06-29 2023-05-26 Ingenico Group Procede de determination d'une validite d'un code applicatif, dispositif et produit programme d'ordinateur correspondants.
US11288360B2 (en) * 2020-03-04 2022-03-29 Kyndryl, Inc. Preventing untrusted script execution
WO2023028734A1 (en) * 2021-08-30 2023-03-09 Qualcomm Incorporated Functional safety software image integrity verifier
CN116415281B (zh) * 2023-04-18 2023-10-20 青海省第三地质勘查院 基于改进末位校验和双重散列函数的权限控制方法及系统

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001175466A (ja) * 1999-12-21 2001-06-29 Fuji Xerox Co Ltd 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体
JP2002507307A (ja) * 1998-04-27 2002-03-05 モトローラ・インコーポレイテッド プログラムをプロセッサに読み込むための装置および方法
JP2002297542A (ja) * 2001-04-02 2002-10-11 Nippon Telegr & Teleph Corp <Ntt> コンテンツ時限開示方法、システム、セキュリティデバイス
US20050210287A1 (en) * 2004-03-19 2005-09-22 Nokia Corporation Secure mode controlled memory
KR100772881B1 (ko) * 2006-05-25 2007-11-05 삼성전자주식회사 자기 수정 코드의 무결성 검증 장치 및 방법
JP2008532113A (ja) * 2005-02-11 2008-08-14 シンプレックス メジャー センドリアン ベルハッド ソフトウェア保護方法
WO2009125220A1 (en) * 2008-04-07 2009-10-15 Metaforic Limited An anti-tamper system employing automated analysis
WO2009150475A1 (en) * 2008-06-12 2009-12-17 Metaforic Limited A method of protecting computer program code
JP2012526310A (ja) * 2009-05-06 2012-10-25 イルデト カナダ コーポレーション ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US6789199B1 (en) * 2000-02-08 2004-09-07 International Business Machines Corporation Tamper resistance with pseudo-random binary sequence program interlocks
US7269744B1 (en) * 2000-09-29 2007-09-11 Intel Corporation System and method for safeguarding data between a device driver and a device
US20020138748A1 (en) 2001-03-21 2002-09-26 Hung Andy C. Code checksums for relocatable code
US6880149B2 (en) 2002-04-01 2005-04-12 Pace Anti-Piracy Method for runtime code integrity validation using code block checksums
US7424706B2 (en) * 2003-07-16 2008-09-09 Microsoft Corporation Automatic detection and patching of vulnerable files
US7841010B2 (en) 2007-01-08 2010-11-23 Apple Inc. Software or other information integrity verification using variable block length and selection

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002507307A (ja) * 1998-04-27 2002-03-05 モトローラ・インコーポレイテッド プログラムをプロセッサに読み込むための装置および方法
JP2001175466A (ja) * 1999-12-21 2001-06-29 Fuji Xerox Co Ltd 実行プログラムの生成方法及び実行プログラム生成装置、実行プログラムの実行方法、並びに、コンピュータ可読プログラム記憶媒体
JP2002297542A (ja) * 2001-04-02 2002-10-11 Nippon Telegr & Teleph Corp <Ntt> コンテンツ時限開示方法、システム、セキュリティデバイス
US20050210287A1 (en) * 2004-03-19 2005-09-22 Nokia Corporation Secure mode controlled memory
JP2008532113A (ja) * 2005-02-11 2008-08-14 シンプレックス メジャー センドリアン ベルハッド ソフトウェア保護方法
KR100772881B1 (ko) * 2006-05-25 2007-11-05 삼성전자주식회사 자기 수정 코드의 무결성 검증 장치 및 방법
WO2009125220A1 (en) * 2008-04-07 2009-10-15 Metaforic Limited An anti-tamper system employing automated analysis
JP2011516953A (ja) * 2008-04-07 2011-05-26 メタフォリック リミテッド 自動解析を採用する改竄防止システム
WO2009150475A1 (en) * 2008-06-12 2009-12-17 Metaforic Limited A method of protecting computer program code
JP2011525650A (ja) * 2008-06-12 2011-09-22 メタフォリック リミテッド コンピュータプログラムコードを保護する方法
JP2012526310A (ja) * 2009-05-06 2012-10-25 イルデト カナダ コーポレーション ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス

Also Published As

Publication number Publication date
CN102163268B (zh) 2016-03-16
CN102163268A (zh) 2011-08-24
EP2362314A1 (en) 2011-08-31
JP5734685B2 (ja) 2015-06-17
US20110202996A1 (en) 2011-08-18

Similar Documents

Publication Publication Date Title
JP5734685B2 (ja) インテグリティを実行中に確かめるソフトウェアを生成するプログラム、方法及び記憶媒体
US7546587B2 (en) Run-time call stack verification
EP2634960B1 (en) Method and apparatus for incremental code signing
KR101798672B1 (ko) 코드 불변식을 이용한 스테가노그래픽 메시징 시스템
CN109313677B (zh) 用于动态可执行验证的方法和装置
US20170116410A1 (en) Software protection
JP5785762B2 (ja) 自己修正計算機コードのチェックサム検証のための方法、装置およびコンピュータ・プログラム担体
TWI567580B (zh) 用於防止惡意軟體執行的方法與系統
US20110208975A1 (en) Electronic device and method of software or firmware updating of an electronic device
US20140337639A1 (en) Steganographic embedding of executable code
JP2009543244A (ja) 暗号関数を難読化する方法およびシステム
US20050198507A1 (en) Import address table verification
US20160055331A1 (en) Detecting exploits against software applications
KR101968382B1 (ko) Tpm 기반의 사용자 장치 및 이를 이용한 부팅 방법
Kim et al. Anti-reversible dynamic tamper detection scheme using distributed image steganography for IoT applications
CN114139117A (zh) 应用程序加固方法、装置、电子设备及存储介质
TWI682296B (zh) 映像檔打包方法及映像檔打包系統
US11977760B1 (en) Secure data and instruction loading
CN112685697B (zh) 一种防止安卓应用被破解篡改的方法及终端
CN112131612A (zh) 一种cf卡数据防篡改方法、装置、设备及介质
CN111338664A (zh) 映像文件打包方法及映像文件打包系统

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140116

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140116

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141028

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150126

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150227

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150415

R150 Certificate of patent or registration of utility model

Ref document number: 5734685

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees