2013-11-28 17 views
11

使用する利点EncodePointer/DecodePointer Windows?EncodePointer/DecodePointerを使用する利点

say:
グローバルに利用可能なポインタをエンコードすることで、それらが悪用されるのを防ぐのに役立ちます。 EncodePointerは、外部エージェントによって予測できないように、ポインタ値を秘密で難読化します。使用される秘密は、EncodePointerはプロセスごとに異なります。

今質問です:攻撃者が自分のプログラムの外にいる場合、そのアドレススペースは私のアドレススペースとは異なるので、私のアプリのアドレスは使えません。 私のアドレス空間でコードを実行できるのであれば、DecodePointerを呼び出し、そのアドレスを使って符号化されたポインタを呼び出すことができます。

この機能の使用法はどのようになっていて、どのようにセキュリティが強化されていますか?

+0

攻撃者があなたのプログラムの外にいない場合はどうなりますか?同様に、歴史の中のあらゆる単一の攻撃者? –

+3

@KerrekSBもし私のプログラムにあれば!その後、私は関数ポインタ上で** DecodePointer **を呼び出すだけで、通常はそれを呼び出すことができます。どのようなキーや何かを使わずに関数を呼び出すだけで簡単にデコードしながら何かをエンコードする利点は何ですか?攻撃者は何を呼び出すことができないのですか?** DecodePointer **? –

答えて

10

EncodePointer()は、悪意のあるものから保護します。データ。悪質なコードが有害になる前に、まず実行を開始する必要があります。それを達成するための基本的な方法は、関数呼び出しの戻りアドレスを上書きするか、関数ポインタを上書きすることです。プログラム自体は、関数から戻るか、関数ポインタを介して呼び出すことによってコードを起動します。 EncodePointerは関数ポインタを保護します。攻撃者が書き込みデータをどのようにエンコードするかを推測する方法はありません。そのため、プログラムのDecodePointer()呼び出しの後もコードを指しています。

データがEncodePointerを呼び出すことができません。

1

権限が昇格された攻撃者は、プロセス内にスレッドを作成できます。カーネルコードは、プロセスの仮想アドレスの一部を別のユーザープロセスおよび/またはシステムプロセスにマップすることもできます。

EncodePointerを使用すると、攻撃者にとっては少し難しくなりますが、何も保証されません。

関連する問題