JP4754635B2 - 制御フロー保護機構 - Google Patents
制御フロー保護機構 Download PDFInfo
- Publication number
- JP4754635B2 JP4754635B2 JP2008535832A JP2008535832A JP4754635B2 JP 4754635 B2 JP4754635 B2 JP 4754635B2 JP 2008535832 A JP2008535832 A JP 2008535832A JP 2008535832 A JP2008535832 A JP 2008535832A JP 4754635 B2 JP4754635 B2 JP 4754635B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- area
- execution
- program
- region
- 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
Links
- 230000007246 mechanism Effects 0.000 title description 2
- 238000000034 method Methods 0.000 claims description 108
- 238000012360 testing method Methods 0.000 claims description 49
- 238000007689 inspection Methods 0.000 claims description 32
- 230000008569 process Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 claims description 5
- 230000002085 persistent effect Effects 0.000 claims description 3
- 230000000717 retained effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 85
- 238000006243 chemical reaction Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000001514 detection method Methods 0.000 description 6
- 230000009466 transformation Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000007257 malfunction Effects 0.000 description 3
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- JJWKPURADFRFRB-UHFFFAOYSA-N carbonyl sulfide Chemical compound O=C=S JJWKPURADFRFRB-UHFFFAOYSA-N 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
- 230000002040 relaxant effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007704 transition Effects 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/1407—Checkpointing the instruction stream
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Description
本発明は、演算装置のための制御フロー保護機構に関する。
CPUベースのデバイスは、記憶されたプログラムおよび記憶されたデータを用いて、その入力において動作し、出力を生成する。プログラムは、個別の命令から構成されている。これら個別の命令は、プログラマーが設計したプログラムロジックによって決定される順序で、CPUによって実行される。CPUは、フェッチまたは実行される次の命令が記憶されているアドレスを示す、プログラムカウンタ(PC)の概念を有している。プログラムカウンタは、ハードウェアレジスタと同一であると見なされる場合があるが、他の態様も存在する。命令が実行されると、プログラムカウンタは、次の命令を示すようにCPUによって更新される。次の命令は、通常、(単純な命令または「非分岐」命令の場合は、)記憶されている前の命令の真上のメモリ領域に位置しており、あるいは、「分岐」ジャンプまたはコール型の命令の場合は専ら、別の場所に位置している。このモデルでは、割り込みは無視される。
本発明の第1の形態によると、複数の領域を通る実行パスに従ってデバイス上において実行されるプログラムを、予期しないメモリ領域へプログラム実行をジャンプさせるデバイス不具合および電圧スパイクなどの物理的妨害によって生じる実行フローエラーから、少なくともある程度は保護する方法であって、ランダムにアクセス可能なメモリ領域に第1の検査値を提供する工程と、少なくとも1つの領域において少なくとも一回は、上記第1の検査値が当該領域に対する予想値を有しているか否かを判別する工程と、第1の領域から、上記のような判別が成される第2の領域へと実行が通過するときに、上記第1の検査値を、上記第2の領域において予想される値を有するように更新する工程と、上記のような判別が否定的であった場合にエラー処理手順を行う工程とを含んでいる、方法が提供される。
例として、添付図面を参照されたい。添付図面は、以下の通りである。
本発明の一実施形態は、上述した従来の方法を考慮に入れながら、プログラムカウンタがプログラマーの予期せぬルートでコード内の特定のポイントに達した場合、CPUがこれを検出して保護処置(例えば、デバイスの終了または他のタイプのエラー処理ルーチンの実行)を講じることができるようにするための補助をする、ソフトウェアフロー制御検査を提案する。
本発明の第1の実施形態について、図1を参照しながら説明する。図1は、保護される関数fを呼び出す、保護される関数mを示している。
{wisb += s[F] - s[c];
X = F(Y);
_assert(wisb == e[F]);
wisb += s[c] - e[F];}
あらゆる“return X;"ステートメント(Xは任意の戻り値)もまた、“{TERM[c]; return X;}”によって置換される。これは、B[c]が意図的に早く終了した場合を対処する。別の方法としては、“return”ステートメントを用いずにB[c]を書き換えるという方法もあるが、これはより複雑である。
main(pin、amount){
if(pin != test)return;
print(docredit(x));
}
int docredit(int x){
balance = balance + x;
return balance;
}
となる。
int y;
if(pin != test)return;
y = docredit(x);
print(y);
}
int docredit(int x){
balance = balance + x;
return balance;
}
次に、残りの変換が適用される。説明する目的のために、プリプロセッサ定数は、sMAINを読み出してs[main]を実施し、eMAINを読み出してe[main]を実施する等として定義される。なお、使用時には、代わりに乱数を補間することも可能であるが、これはリーダにとっては従うのがより困難である。
// constants for each function
// name(randomly generated)
#define sMAIN 56769
#define eMAIN 15637
#define sDOCREDIT 9493
#define eDOCREDIT 41322
int wisb = sMAIN;
main(pin、amount){
int y;
_assert(wisb==sMAIN); // INIT[MAIN]
if(pin != test)
{wisb += eMAIN - sMAIN; return;} // handling
// return
// handling function call:
{wisb += sDOCREDIT - sMAIN;
y = docredit(amount);
_assert(wisb == eDOCREDIT);
wisb += sMAIN - eDOCREDIT;}
_assert(wisb==sMAIN); // added check
print(y);
wisb += eMAIN - sMAIN; // TERM[MAIN]
}
docredit(int amount){
_assert(wisb==sDOCREDIT]); // INIT[DOCREDIT]
balance = balance + amount;
{wisb += eDOCREDIT - sDOCREDIT; return;}
// no TERM required(return is always used)
}
多くのコンパイラは、実行をより効率的にするために、定数式(「定数畳み込み」)を単純化する点について留意されたい。例えば、“wisb += eMAIN - sMAIN;”を“wisb += -41132;”に低減することができる。これによってセキュリティに影響が及ぼされることはない。
次に、本発明の第2の実施形態について、図2を参照しながら説明する。
{int p = path; path += R;
wisb += s[F] - s[c];
Y = F(X);
_assert(wisb == e[F]);
wisb += s[c] - e[F];
_assert(path - p == R);
path -= R;}
なお、全ての関数コールに対して上記方法を用いる必要はないことに留意されたい。変更される必要がある関数は、(例えば多重コール側関数を呼び出すため)「危険がある」と考えられるもののみである。他の関数は、第1の実施形態による上記方法を用いることができる(あるいは、完全に保護されていない状態としておくことができる)。
本発明の第3の実施形態について説明する。
「コードセグメント」Sは、以下のいずれかである。
A
(保護されない)関数の代入あるいはコールなどのアトミックステートメント、あるいは空のステートメント(“{}”で示される)。
F
アトミックステートメントのようなステートメント。しかし、保護される関数のコールは厳密に1つであり、また関数名はFUNC(F)という標記を用いて検索される。例えば、FUNC(“a = 3 + f(x*g(y))”)は、“f”(fは保護され、gは保護されないものと仮定する)と等しい。
D: S
一部のローカル変数Dが宣言されるセグメントS。範囲はS。
S1; S2
順次実行される2つのセグメント、S1とS2との複合。最初に実行されるのはS1。
while(E)S1
式Eが真である場合にセグメントS1が置換されるループ構造。Eは、保護される関数のコールを含んでいてはならない。
if E S1 S2
Eを評価し、Eが真である場合にS1を行い、Eが偽である場合にS2を行う条件付き構造。Eは、保護される関数のコールを含んでいてはならない。
return E
現在の関数から出てコール側に戻る、戻りステートメント。戻り値Eは任意。Eは、保護される関数のコールを含んでいてはならない。
a<<A>>b = #a; A; T(a,b);
a<<F>>b = #a; T(a,s[FUNC(F)]); F; T(e[FUNC(F)]、b)
a<<D: S>>b = D: {#a; a<<S2>>b}
a<<S1;S2>>b = #a; a<<S1>>c; c<<S2>>b
一部の新しい無作為な値cに対して、
a<<while(E)S>>b = #a; while(E){T(a,c); c<<S>>a}; T(a,b)
一部の新しい一対の無作為な値c、dに対して、
a<<if(E)S1 S2>>b
= #a; if(E){T(a,c); c<<S1>>b} {T(a,d); d<<S2>>b}
a<<return E>>b = T(a、e[f]); return E
ここでfは、囲んでいる関数である。
B(f、S)を定義する、すなわち関数fの本体Sの変換は、
一部の新しい一対の無作為な値s[f]、e[f]に対して、
B(f,S)= s[f]<<S>>e[f]
となる。
main(){
x = 1;
y = 2;
return;
}
これは、まず以下の様に変換される。
const A=84756387、B=48976230; // random constants
const sMain=45732576、eMain=2098573;
main(){
_assert(wisb == sMain); //optional
x = 1;
_assert(wisb == sMain); //optional
wisb += A - sMain;
_assert(wisb == A); //optional
y = 2;
_assert(wisb == A); //optional
wisb += B - A;
_assert(wisb == B); //optional
wisb += eMain - B;
_assert(wisb == eMain); //optional
return;
_assert(wisb == B); // optional:
// note: cannot reach here
}
一部の任意の_assertsが削除されると、以下のようになる。
const A=84756387, B=48976230; // random constants
const sMain=45732576, eMain=2098573;
main(){
_assert(wisb == sMain); //optional
x = 1;
wisb += A - sMain;
_assert(wisb == A); //optional
y = 2;
wisb += B - A;
wisb += eMain - B;
_assert(wisb == eMain); //optional
return;
}
wisbインクリメントを組み合わせることによって、以下の様になる。
const A=84756387; // random constants
const sMain=45732576、eMain=2098573;
main(){
_assert(wisb == sMain); //optional
x = 1;
wisb += A - sMain;
_assert(wisb == A); //optional
y = 2;
wisb += eMain - A;
_assert(wisb == eMain); //optional
return;
}
Aがs[main]と同じになるように選択されている場合は、以下の様になる。
const sMain=45732576、eMain=2098573;
main(){
_assert(wisb == sMain); //optional
x = 1;
y = 2;
wisb += eMain - sMain;
_assert(wisb == eMain); //optional
return;
}
定数sMainおよびeMainは、メモリ内に記憶されて実行中に読み出されるのではなく、コンパイラによってコード内に構築されることが好ましい。
本発明の第4の実施形態では、多重コール側関数が故障によって不正確なコール側に戻らないように保護が行われる。第3の実施形態では、関数fの各コール側は、wisbが戻り時にe[f]に設定されて、wisb自体がこの種のエラーを検出できないようになることを期待している。
a<<F>>b =
#a;
declare p:
{
p = path; path+=R;
T(a,s[FUNC(F)]); F; T(e[FUNC(F)]、b);
_assert(path - p == R); path-=R;
}
ここでpは、Fでは用いられていない新しい変数名である。
a<<F>>b =
#a;
{
path+=R;
T(a,s[FUNC(F)]); F; T(e[FUNC(F)]、b);
path-=R;
}
〔第5の実施形態〕
あるいは、関数本体において保護される全ての関数コールは、1つのローカル変数pを共有することができる。これを、本発明の第5の実施形態として考えることができる。
a<<F>>b =
#a; path+=R;
T(a,s[FUNC(F)]); F; T(e[FUNC(F)]、b);
_assert(path - p == R); path-=R;
関数本体変換Bもまた、以下の様に変更される。
B(f、S)= declare p: {p=path; s[f]<<S>>e[f]}
ここでpは、Sにおいて表されない新しい変数名である。
MAINが保護される関数ではない場合であっても、本発明の一実施形態を用いることができる。この制限を緩和することによって、保護されない関数uが、保護される関数pを呼び出すことも可能となる。これを、本発明の第6の実施形態として考えることができる。
{tmp = wisb:
wisb = s[p];
x = p();
#(e[p]);
wisb = tmp;}
保護される関数が、(他のコールを介して直接的または間接的に)uを呼び出すことができない場合、wisbの古い値を記憶する必要はなく、あるいはこれを、pをコールた後にリストアする必要はない。
図3は、本発明の一実施形態を用いたスキームの一形態の様々な段階を示すブロック図である。第1の段階S1では、上述のセキュリティ変換手順を用いて、保護されないソースコード2が保護されるソースコード4に変換される。第2の段階S2では、保護される当該ソースコードがコンパイルされて、標的デバイス6内にロードされる。第3の段階S3では、コンパイルされた保護される上記コードが、標的デバイス6において実行される。第3の段階S3中において、一時的エラーまたはグリッチ攻撃が生じる。これは、上述のコンパイルされた保護されるコードに含まれている工程によって検出される。この結果、ハードウェアがリセットされるか、あるいはその他のエラー処理ルーチンS4が行われる。図4は、本発明の一実施形態に従って保護されるプログラムを実行するようにプログラムされたデバイス10のブロック図を示している。デバイス10は、記憶部12、中央演算処理装置(CPU)14、プログラムカウンタ(PC)16、入力/出力装置18、および電源装置20を備えている。図4は、このようなデバイスにおける様々な種類の攻撃ポイントの例を示している。
上記は、機能しているデータ型の値AおよびBのためのものである。これは、通常は整数の部分集合であるが、必ずしもそうでなくてもよい。このような更新は、まず中間値“B - A”を演算して、その中間値に基づいて検査値wisbを調整するか、あるいは、wisbを“+B”および“-A”とは別々に調整するかのいずれかによって行うことができる。後者の場合、まず“+B”の調整を先に行うことが好ましい。なぜなら、“-A”の調整を先に行うことによって、通常は、これら調整の対の間にwisbが一定値(ゼロ)を帯びるからである。これはつまり、このような調整の対の一方の間から、このような調整の対の他方の間への予期せぬジャンプは検出されない可能性があることを意味している。また、負の値の加算は、正の値の減算と同じであるため、加算演算と減算とは本質的に等化であることに留意されたい。
A -(B $ A)== B
(“+”を“-”によって置換し、“-”を“$”によって置換し、B $ A == A - B(オペランドの順序をスワップ)と定義する)
となる。
あるいは、
A ^(B ^ A)== B
(“+”と“-”との両方を“^”によって置換(排他的論理和))
となる。
・コンパクト:RAM要件が非常に小さい。これは、一実施形態では、ネスト化された各関数コールに対して例えばスタックの1ワード(one word of stack)を用いる代わりに、符号化を行うために1つの変数が用いられるためである。
・簡素:変換が簡素であるため、マクロあるいはその他の自動ツールによって支援可能であり、あるいは完全自動化することができる。
・利便性:上記方法は、何らの構造的変化を加えることなく既存のコードに加えることができる。当該スキームはまた、グローバルプログラムフロー状態機械を演算することなく、コードの小部分に適用可能である。
・柔軟性:カバレージ(coverage)の質は、リソースの許す範囲で低くすることができ、あるいは高くすることができる。
・効率性:挿入される行が短く、実行が早い。
・有効性: スキップされた区域を検出する。制御フローに対する全体的変化を検出する。一旦エラーがセットされると、後のあらゆる時点において検出可能である(複合故障によって1つ以上の検査ステートメントがスキップされた場合であっても)。(例えば、US5,274,817はエラー伝搬特性を有していない。)
本発明の一実施形態を適用できる例としては、パスポートのチップ、スマートカードデバイス、他のハードウェアセキュリティデバイス、および一般的にあらゆるセーフティクリティカルおよびミッションクリティカルなセキュリティデバイスが含まれる。
Claims (39)
- 複数の領域を介して進む実行パスに従ってデバイス上において実行されるプログラムを、予期しないメモリ領域へプログラム実行をジャンプさせるデバイス不具合および電圧スパイクのような物理的妨害によって生じる実行フローエラーから、少なくともある程度は保護する方法であって、
ランダムにアクセス可能なメモリ領域に第1の検査値を設ける工程と、
少なくとも1つの領域において少なくとも一回は、上記第1の検査値が当該領域に対する予想値を有しているか否かを判別する工程と、
第1の領域から、上記のような判別が成される第2の領域へと実行が進むときに、上記第1の検査値を、上記第2の領域において予想される値を有するように更新する工程と、
上記のような判別が否定的であった場合にエラー処理手順を行う工程とを含んでいる方法。 - 上記の判別工程を、クリティカルな性質(critical nature)を有する上記プログラムの少なくとも一部の演算の前に行う工程を含んでいる請求項1に記載の方法。
- 上記の判別工程を、上記検査値更新工程の少なくとも一部の前に行う工程を含んでいる請求項1に記載の方法。
- 上記の判別工程を、上記デバイスの持続ストレージを更新する上記プログラムの少なくとも一部の演算の前に行う工程を含んでいる請求項1、2または請求項3に記載の方法。
- 上記の判別工程を、上記デバイスの外部または上記デバイスの保護領域の外部にデータを送信させる少なくとも一部の演算の前に行う工程を含んでいる請求項1、2または請求項3に記載の方法。
- ランダムにアクセス可能なメモリ領域に第2の検査値を設ける工程と、
領域が、コール領域からコールされるコードの機能ユニットを有している場合は、リターン領域に実行を戻す工程と、
実行が上記機能ユニット外に進む前に、上記機能ユニットに対して予想される最終値を有するように、第2の検査値を更新する工程と、
実行が上記機能ユニット外に進んだ後および実行が上記リターン領域に戻る前に、上記第2の検査値が上記予想される最終値を有しているか否かを判別する工程とを含んでいる請求項1、2または3に記載の方法。 - 上記リターン領域は上記コール領域と同一である請求項6に記載の方法。
- 上記第2の検査値は、同一のランダムにアクセス可能なメモリ領域を用いて、上記第1の検査値と同一であり、
上記第2の領域において予想される上記値を有するように上記第1の検査値が更新される前に、上記第2の検査値が、上記予想される最終値を有しているか否かを判別する工程を含んでいる請求項6に記載の方法。 - 上記第2の領域に実行が進む前に上記更新工程が行われる上記第1の領域に実行が進むときに、上記第1の領域において予想される値を有するように上記第1の検査値を更新する工程を含んでいる請求項1、2または3に記載の方法。
- 上記検査値が予想外の値を一旦推定すると、後の上記更新においても予想外の値を保持する可能性を有するように、上記検査値を更新する工程を含んでいる請求項1、2または3に記載の方法。
- 上記更新された検査値が上記更新前に上記第1の領域に対する上記予想値を有している場合に限り、上記更新された検査値が上記第2の領域に対する上記予想値を有するように、上記検査値を、上記第2の領域に対するその予想値および上記第1の領域に対するその予想値に基づいて更新する工程を含んでいる請求項1、2または3に記載の方法。
- 上記第1の領域に対する上記予想値から導き出される第1の調整、および上記第2の領域に対する上記予想値から導き出される第2の調整を効果的に適用することによって上記検査値を更新する工程を含んでおり、
上記第1の調整は、上記第2の調整に対して用いられる演算子に対して反比例関係(inverse relationship)にある演算子を用いる請求項11に記載の方法。 - 上記第1の領域に対する上記予想値および上記第2の領域に対する上記予想値から導き出される中間値を演算することによって、上記第1の調整および第2の調整を共に適用する工程と、
演算された上記中間値から導き出される上記検査値に対して、単一の調整を適用する工程とを含んでいる請求項12に記載の方法。 - 上記中間値は事前に演算される請求項13に記載の方法。
- 上記第1の調整および第2の調整を上記検査値に別々に適用する工程を含んでいる請求項12に記載の方法。
- 上記第2の調整は上記第1の調整の前に適用される請求項15に記載の方法。
- 上記第1の調整のための上記演算子は減算演算であり、上記第2の調整のための上記演算子は加算演算である請求項12に記載の方法。
- 上記第1の調整のための上記演算子は排他的論理和演算であり、上記第2の調整のための上記演算子は排他的論理和演算である請求項12に記載の方法。
- 少なくとも一部の領域あるいは機能ユニットに対する上記各予想値は、プログラムコードから直接取り出される請求項1、2または3に記載の方法。
- 少なくとも一部の領域あるいは機能ユニットに対する上記各予想値を、異なるメモリ領域に記憶する工程と、
領域あるいは機能ユニットに対する上記予想値を、適切な上記メモリ領域から必要時に取り出す工程とを含んでいる請求項1、2または3に記載の方法。 - 少なくとも一部の予想値は乱数または擬似乱数である請求項1、2または3に記載の方法。
- 少なくとも一部の予想値は、各領域または機能ユニットのそれぞれに対応する上記メモリ領域の入力点から導き出される請求項1、2または3に記載の方法。
- 上記少なくとも一部の予想値をハッシュ技術を用いて導き出す工程を含んでいる請求項22に記載の方法。
- ランダムにアクセス可能なメモリ領域に第3の検査値を設ける工程と、
領域が、コール領域からコールされるコードの機能ユニットを有している場合は、上記コール領域に実行を戻す工程と、
実行が上記機能ユニットに進む前に、上記第3の検査値を、上記コールに関連する値を有するように更新する工程と、
少なくとも1つの上記機能ユニットから実行が戻った後に、上記第3の検査値が上記コールに関連する上記値を有しているか否かを判別する工程とを含んでいる請求項1、2または3に記載の方法。 - 上記第3の検査値判別工程を、実行が上記コール領域に戻る前に行う工程を含んでいる請求項24に記載の方法。
- 上記コールに関連する量の調整を与えることによって、上記第3の検査値を更新する工程と、
上記調整を上記と同量だけ逆にすることによって上記第3の検査値が上記コール前調整が行われる前の値に戻るか否かを判別することによって、上記第3の検査値が上記コールに関連する上記値を保持しているか否かを、実行が戻った後に判別する工程とを含んでいる請求項24に記載の方法。 - 上記第3の検査値を、上記コール前調整が行われる前の値に戻すために更新する工程を含んでいる請求項24に記載の方法。
- 上記工程は、実行前に上記プログラム内に含まれていた命令によって行われる請求項1、2または3に記載の方法。
- プログラム実行はプログラムカウンタによって制御される請求項1、2または3に記載の方法。
- 上記デバイスはセキュリティデバイスを含んでいる請求項1、2または3に記載の方法。
- 上記デバイスはスマートカードを含んでいる請求項1、2または3に記載の方法。
- 複数の領域を介して進む実行パスに従ってデバイス上において実行されるプログラムを、予期しないメモリ領域へプログラム実行をジャンプさせるデバイス不具合および電圧スパイクのような物理的妨害によって生じる実行フローエラーから、少なくともある程度は保護するために、
ランダムにアクセス可能なメモリ領域に第1の検査値を提供する工程と、
少なくとも1つの領域において少なくとも一回は、上記第1の検査値が当該領域に対する予想値を有しているか否かを判別する工程と、
第1の領域から、上記の判別が成される第2の領域へと実行が進むときに、上記第1の検査値を、上記第2の領域において予想される値を有するように更新する工程と、
上記の判別が否定的であった場合にエラー処理手順を行う工程とを含むように、入力されたプログラムをコンピュータが変換する方法であって、
プログラムカウンタが上記第1の領域内のコードを示すときは常に上記第1の検査値が上記予想値を有することを意図して第1の検査値を定義するステートメントを上記第1の領域より前に挿入する工程と、
上記第1の検査値が上記予想値を有しているか否か確認するために上記第1の領域内のコードを変換する工程と、
上記第1の検査値が上記予想値を有しているとき、上記第1の検査値が有する上記予想値を上記第2の領域において予想される値に変換するためのステートメントを挿入する工程と、
上記第1の検査値が上記予想値を有していないときに起動する上記エラー処理手順を定義するステートメントを挿入する工程とを含んでいることを特徴とする方法。 - 上記プログラムは、Cプログラミング言語のような高級プログラミング言語において特定される請求項32に記載の方法。
- 上記プログラムをコンパイルして、実行のための機械コードを上記デバイスによって直接生成する工程を含んでいる請求項32または33に記載の方法。
- 予期しないメモリ領域へプログラム実行をジャンプさせるデバイス不具合および電圧スパイクのような物理的妨害によって生じる実行フローエラーから少なくともある程度は保護されるプログラムであって、複数の領域を介して進む実行パスに従って実行されるプログラムがロードされたデバイスであって、
ランダムにアクセス可能なメモリ領域に第1の検査値を提供する手段と、
少なくとも1つの領域において少なくとも一回は、上記第1の検査値が当該領域に対する予想値を有しているか否かを判別する手段と、
第1の領域から、上記のような判別が成される第2の領域へと実行が通過するときに、上記第1の検査値を、上記第2の領域において予想される値を有するように更新する手段と、
上記のような判別が否定的であった場合にエラー処理手順を行う手段とを含んでいるデバイス。 - 請求項1に記載の方法を上記デバイスに実施させるために、上記デバイス上において実行されるプログラム。
- 請求項32に記載の方法を上記コンピュータに実施させるために、上記コンピュータ上において実行されるプログラム。
- 請求項35に記載の上記デバイスにおいて構成されるコンピュータを、上記デバイスにおける各手段として機能させるためのプログラム。
- 請求項36、37または38に記載の上記プログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0603861A GB2435531A (en) | 2006-02-27 | 2006-02-27 | Control Flow Protection Mechanism |
GB0603861.6 | 2006-02-27 | ||
PCT/JP2007/054115 WO2007100116A1 (en) | 2006-02-27 | 2007-02-26 | Control flow protection mechanism |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009525509A JP2009525509A (ja) | 2009-07-09 |
JP4754635B2 true JP4754635B2 (ja) | 2011-08-24 |
Family
ID=36178816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008535832A Expired - Fee Related JP4754635B2 (ja) | 2006-02-27 | 2007-02-26 | 制御フロー保護機構 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20090077415A1 (ja) |
JP (1) | JP4754635B2 (ja) |
GB (1) | GB2435531A (ja) |
WO (1) | WO2007100116A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2457062A (en) * | 2008-02-01 | 2009-08-05 | Iti Scotland Ltd | Tag reader / writer process partitioned for execution between secure and non-secure processing environments |
JP4701260B2 (ja) * | 2008-03-31 | 2011-06-15 | 株式会社エヌ・ティ・ティ・データ | 情報処理装置、情報処理方法、および、情報処理プログラム |
US8302210B2 (en) | 2009-08-24 | 2012-10-30 | Apple Inc. | System and method for call path enforcement |
JP5470305B2 (ja) * | 2011-03-04 | 2014-04-16 | 株式会社エヌ・ティ・ティ・データ | セキュリティ試験支援装置、セキュリティ試験支援方法およびセキュリティ試験支援プログラム |
EP2831797B1 (en) * | 2012-03-30 | 2018-05-02 | Irdeto B.V. | Securing accessible systems using dynamic data mangling |
US9721120B2 (en) | 2013-05-14 | 2017-08-01 | Apple Inc. | Preventing unauthorized calls to a protected function |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04259036A (ja) * | 1991-02-13 | 1992-09-14 | Nec Corp | プログラム変換方式及びプログラム不正動作検出機構 |
JP2002334317A (ja) * | 2001-05-09 | 2002-11-22 | Hitachi Ltd | 情報処理装置 |
JP2005509936A (ja) * | 2001-11-16 | 2005-04-14 | ギーゼッケ ウント デフリエント ゲーエムベーハー | 携帯型データ記憶媒体により制御されるプログラム実行 |
WO2005073859A2 (fr) * | 2003-12-31 | 2005-08-11 | Trusted Logic | Procede de controle d'integrite d'execution de programmes par verification d'empreintes de traces d'execution |
JP2006053787A (ja) * | 2004-08-12 | 2006-02-23 | Ntt Docomo Inc | プログラム実行装置及びプログラム実行方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5274817A (en) * | 1991-12-23 | 1993-12-28 | Caterpillar Inc. | Method for executing subroutine calls |
JP2846837B2 (ja) * | 1994-05-11 | 1999-01-13 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 障害を早期検出するためのソフトウェア制御方式のデータ処理方法 |
US5758060A (en) * | 1996-03-05 | 1998-05-26 | Dallas Semiconductor Corp | Hardware for verifying that software has not skipped a predetermined amount of code |
US6044458A (en) * | 1997-12-12 | 2000-03-28 | Motorola, Inc. | System for monitoring program flow utilizing fixwords stored sequentially to opcodes |
JP4573189B2 (ja) * | 1998-10-10 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムコード変換方法 |
JP2001066989A (ja) * | 1999-08-31 | 2001-03-16 | Fuji Xerox Co Ltd | 一方向性関数生成方法,一方向性関数値生成装置,証明装置,認証方法および認証装置 |
US7188258B1 (en) * | 1999-09-17 | 2007-03-06 | International Business Machines Corporation | Method and apparatus for producing duplication- and imitation-resistant identifying marks on objects, and duplication- and duplication- and imitation-resistant objects |
US6751698B1 (en) * | 1999-09-29 | 2004-06-15 | Silicon Graphics, Inc. | Multiprocessor node controller circuit and method |
CA2305078A1 (en) * | 2000-04-12 | 2001-10-12 | Cloakware Corporation | Tamper resistant software - mass data encoding |
FR2819672B1 (fr) * | 2001-01-18 | 2003-04-04 | Canon Kk | Procede et dispositif d'emission et de reception d'images numeriques utilisant un marqueur d'image pour le decodage |
US7594111B2 (en) * | 2002-12-19 | 2009-09-22 | Massachusetts Institute Of Technology | Secure execution of a computer program |
US7536682B2 (en) * | 2003-04-22 | 2009-05-19 | International Business Machines Corporation | Method and apparatus for performing interpreter optimizations during program code conversion |
US7200841B2 (en) * | 2003-04-22 | 2007-04-03 | Transitive Limited | Method and apparatus for performing lazy byteswapping optimizations during program code conversion |
US7644287B2 (en) * | 2004-07-29 | 2010-01-05 | Microsoft Corporation | Portion-level in-memory module authentication |
US20080201689A1 (en) * | 2005-06-30 | 2008-08-21 | Freescale Semiconductor, Inc. | Vector Crc Computatuion on Dsp |
JP2008293076A (ja) * | 2007-05-22 | 2008-12-04 | Seiko Epson Corp | エラー判定プログラム、エラー判定方法、及び、電子機器 |
-
2006
- 2006-02-27 GB GB0603861A patent/GB2435531A/en not_active Withdrawn
-
2007
- 2007-02-26 US US12/280,672 patent/US20090077415A1/en not_active Abandoned
- 2007-02-26 JP JP2008535832A patent/JP4754635B2/ja not_active Expired - Fee Related
- 2007-02-26 WO PCT/JP2007/054115 patent/WO2007100116A1/en active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04259036A (ja) * | 1991-02-13 | 1992-09-14 | Nec Corp | プログラム変換方式及びプログラム不正動作検出機構 |
JP2002334317A (ja) * | 2001-05-09 | 2002-11-22 | Hitachi Ltd | 情報処理装置 |
JP2005509936A (ja) * | 2001-11-16 | 2005-04-14 | ギーゼッケ ウント デフリエント ゲーエムベーハー | 携帯型データ記憶媒体により制御されるプログラム実行 |
WO2005073859A2 (fr) * | 2003-12-31 | 2005-08-11 | Trusted Logic | Procede de controle d'integrite d'execution de programmes par verification d'empreintes de traces d'execution |
JP2007517299A (ja) * | 2003-12-31 | 2007-06-28 | トラステッド ロジック ソシエテ アノニム | 実行トレースプリントを検証することによるプログラム実行整合性の制御方法 |
JP2006053787A (ja) * | 2004-08-12 | 2006-02-23 | Ntt Docomo Inc | プログラム実行装置及びプログラム実行方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2007100116A1 (en) | 2007-09-07 |
JP2009525509A (ja) | 2009-07-09 |
GB0603861D0 (en) | 2006-04-05 |
US20090077415A1 (en) | 2009-03-19 |
GB2435531A (en) | 2007-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
D'Silva et al. | The correctness-security gap in compiler optimization | |
Alkhalifa et al. | Design and evaluation of system-level checks for on-line control flow error detection | |
Moss et al. | Compiler assisted masking | |
Cadar et al. | Data randomization | |
JP4777903B2 (ja) | 実行トレースプリントを検証することによるプログラム実行整合性の制御方法 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
US20080271001A1 (en) | Method of generating program, information processing device and microcomputer | |
Proy et al. | Compiler-assisted loop hardening against fault attacks | |
JP5467271B2 (ja) | 情報処理装置及びプログラム、情報処理方法、記録媒体 | |
JP4754635B2 (ja) | 制御フロー保護機構 | |
De Keulenaer et al. | Link-time smart card code hardening | |
Goubet et al. | Efficient design and evaluation of countermeasures against fault attacks using formal verification | |
CN101366035A (zh) | 保护便携装置中的中间语言软件代码执行的安全的方法 | |
US11704128B2 (en) | Method for executing a machine code formed from blocks having instructions to be protected, each instruction associated with a construction instruction to modify a signature of the block | |
Geier et al. | Compasec: a compiler-assisted security countermeasure to address instruction skip fault attacks on risc-v | |
Vankeirsbilck et al. | Automatic implementation of control flow error detection techniques | |
Vu et al. | Reconciling optimization with secure compilation | |
US8423974B2 (en) | System and method for call replacement | |
Péneau et al. | NOP-Oriented Programming: Should we Care? | |
US8458790B2 (en) | Defending smart cards against attacks by redundant processing | |
Pescosta et al. | Bounded model checking of speculative non-interference | |
JP2009009537A (ja) | プログラム作成方法及び情報処理装置ならびにマイコン | |
Verbeek et al. | Highly Automated Formal Proofs over Memory Usage of Assembly Code | |
US20010044931A1 (en) | Compile method suitable for speculation mechanism | |
Moss et al. | Automatic insertion of dpa countermeasures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110222 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110422 |
|
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: 20110524 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110525 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140603 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |