page0018
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* OSECPUはどのくらいセキュアか
-(by [[K]], 2013.03.12)
** 基本的な考え方
-OSECPUでは原則として以下の対策をしません。する必要がない...
--ASLR(アドレス空間配置のランダム化)
--DEP(データ実行防止)
-そんなわけでOSECPUにおいては、さまざまなモジュールやデー...
-そればかりか、アプリケーションが任意のデータを与えて、そ...
-つまり、もし「狙ったアドレスに分岐する方法」があれば、OS...
--それにもかかわらずASLRもDEPもしないと言っているのは、要...
-なお、OSECPUのバイトコードではないプログラムを実行する機...
--つまり各CPUのネイティブコードはOSECPU内では実行できませ...
** 分岐命令
-OSECPUの分岐命令では2つの形式があります。即値を指定する...
//--もしかしたら特定のラベル番号は翻訳単位の外を指すかも...
//--ということで、この形式を使っての攻撃はうまくいきませ...
//↑この機能はなくなったので混乱を防ぐためにコメントアウト...
-分岐先としてレジスタを指定する形式では、翻訳単位に対する...
--分岐先として指定できるのはポインタレジスタだけですが、...
---許されている操作:
---他のポインタレジスタの値をコピーする
---ラベル番号で示されるアドレスを格納する
---許されている範囲で加算したり減算したりする(プログラム...
---メモリから読み込む
---(つまり直接値を代入する手段はありません)
--この中で不正なポインタを作る方法として可能性がありそう...
---なお、ポインタレジスタは可動範囲のように多くの情報を含...
** メモリ上のポインタを保護するために
-OSECPUではメモリ上のデータを保護しています。ここを突破さ...
-まずメモリ上のデータには全て型情報が関連付けられており、...
-そしてポインタを生成するときは、この型情報と矛盾しないポ...
--これによりポインタ型のメモリが他の型のアクセスで上書き...
-すべてのポインタには可動範囲が設定されており、これにより...
--配列ではないオブジェクトに対しては、可動範囲0と設定され...
--配列内のオブジェクトであっても、その一箇所のみを可動範...
--可動域を狭める命令はアプリが自由に利用できます。アクセ...
-またOSECPUでは、ポインタレジスタが読み書きできるメモリは...
--ちなみに整数レジスタについては、そのbit数で表現可能な数...
** use-free-after脆弱性対策
-あるオブジェクトをfreeしたあと、適当なオブジェクトをnew...
// a = ポインタ型のメモリのポインタ;
// delete(a);
// b = new 整数型の配列で256bitくらいありそうなもの;
// b[..] = ..; をいくつか書いて望みの値を代入。
// Pxx = *a; /* ポインタレジスタに*aの値を取得!!(これ...
// PJMP(Pxx); /* さあ分岐だ! */
// ↑このコードは古いのでもっと現実の仕様に沿ったサンプル...
P01 = malloc(T_VPtr, 1);
free(P01);
P02 = malloc(T_UINT8, 32); // 合計256bitなので、P01の領...
R00 = ??; R01 = ??; PASMEM0(R00, T_UINT8, P02, R01); // ...
PJMP(P01); // さあ分岐だ!
-これが成立したらまずいです。ということでこれに対する対策...
-ポインタレジスタには可動域のほかに、「自分の指している先...
--このポインタは、「newされたときに作られる、オブジェクト...
--OSECPUではメモリアクセスに際して、ポインタレジスタ内に...
//--つまりPxx = *a;の部分がエラーになって止まるようになっ...
--つまりPJMP(P01);の部分がエラーになって止まるようになっ...
--型を確認するのではなくシグネチャ方式なので、仮に同じ型...
--死活確認構造体は、管理しているオブジェクトがfreeされれ...
** ちなみに・・・
-osecpu011aでは上記はほとんど未実装です・・・これからせっ...
** 関連リンク
-[[page0006]]
** こめんと欄
-このページにこめんと欄はありません。このページの内容にコ...
終了行:
* OSECPUはどのくらいセキュアか
-(by [[K]], 2013.03.12)
** 基本的な考え方
-OSECPUでは原則として以下の対策をしません。する必要がない...
--ASLR(アドレス空間配置のランダム化)
--DEP(データ実行防止)
-そんなわけでOSECPUにおいては、さまざまなモジュールやデー...
-そればかりか、アプリケーションが任意のデータを与えて、そ...
-つまり、もし「狙ったアドレスに分岐する方法」があれば、OS...
--それにもかかわらずASLRもDEPもしないと言っているのは、要...
-なお、OSECPUのバイトコードではないプログラムを実行する機...
--つまり各CPUのネイティブコードはOSECPU内では実行できませ...
** 分岐命令
-OSECPUの分岐命令では2つの形式があります。即値を指定する...
//--もしかしたら特定のラベル番号は翻訳単位の外を指すかも...
//--ということで、この形式を使っての攻撃はうまくいきませ...
//↑この機能はなくなったので混乱を防ぐためにコメントアウト...
-分岐先としてレジスタを指定する形式では、翻訳単位に対する...
--分岐先として指定できるのはポインタレジスタだけですが、...
---許されている操作:
---他のポインタレジスタの値をコピーする
---ラベル番号で示されるアドレスを格納する
---許されている範囲で加算したり減算したりする(プログラム...
---メモリから読み込む
---(つまり直接値を代入する手段はありません)
--この中で不正なポインタを作る方法として可能性がありそう...
---なお、ポインタレジスタは可動範囲のように多くの情報を含...
** メモリ上のポインタを保護するために
-OSECPUではメモリ上のデータを保護しています。ここを突破さ...
-まずメモリ上のデータには全て型情報が関連付けられており、...
-そしてポインタを生成するときは、この型情報と矛盾しないポ...
--これによりポインタ型のメモリが他の型のアクセスで上書き...
-すべてのポインタには可動範囲が設定されており、これにより...
--配列ではないオブジェクトに対しては、可動範囲0と設定され...
--配列内のオブジェクトであっても、その一箇所のみを可動範...
--可動域を狭める命令はアプリが自由に利用できます。アクセ...
-またOSECPUでは、ポインタレジスタが読み書きできるメモリは...
--ちなみに整数レジスタについては、そのbit数で表現可能な数...
** use-free-after脆弱性対策
-あるオブジェクトをfreeしたあと、適当なオブジェクトをnew...
// a = ポインタ型のメモリのポインタ;
// delete(a);
// b = new 整数型の配列で256bitくらいありそうなもの;
// b[..] = ..; をいくつか書いて望みの値を代入。
// Pxx = *a; /* ポインタレジスタに*aの値を取得!!(これ...
// PJMP(Pxx); /* さあ分岐だ! */
// ↑このコードは古いのでもっと現実の仕様に沿ったサンプル...
P01 = malloc(T_VPtr, 1);
free(P01);
P02 = malloc(T_UINT8, 32); // 合計256bitなので、P01の領...
R00 = ??; R01 = ??; PASMEM0(R00, T_UINT8, P02, R01); // ...
PJMP(P01); // さあ分岐だ!
-これが成立したらまずいです。ということでこれに対する対策...
-ポインタレジスタには可動域のほかに、「自分の指している先...
--このポインタは、「newされたときに作られる、オブジェクト...
--OSECPUではメモリアクセスに際して、ポインタレジスタ内に...
//--つまりPxx = *a;の部分がエラーになって止まるようになっ...
--つまりPJMP(P01);の部分がエラーになって止まるようになっ...
--型を確認するのではなくシグネチャ方式なので、仮に同じ型...
--死活確認構造体は、管理しているオブジェクトがfreeされれ...
** ちなみに・・・
-osecpu011aでは上記はほとんど未実装です・・・これからせっ...
** 関連リンク
-[[page0006]]
** こめんと欄
-このページにこめんと欄はありません。このページの内容にコ...
ページ名: