6

典型的なスタック ベースのバッファ オーバーフロー攻撃のペイロードが次のようなものであることを理解しています。

(リターンアドレス) (リターンアドレス) ... (リターンアドレス) (リターンアドレス) (リターンアドレス) (リターンアドレス) (NOP) (NOP) (NOP) (NOP) ... (NOP) (NOP) (NOP) ) (NOP) (シェルコード)

また、シェルコードの実行が成功するかどうかは、次のいくつかの要因に依存することも理解しています。

  1. ペイロードの繰り返しリターン アドレス部分は、そのスタック フレームのリターン ポインターを上書きする必要があります。
  2. そのリターン アドレスは、NOP スライドの一部 (またはシェルコードの先頭) のアドレスでなければなりません。

私が理解していないのは、この手法を使用するマルウェアが常にこれら 2 つのことを正しく行う方法です。有効なペイロードを作成するために、攻撃者はターゲット バッファのおおよそのアドレスと、リターン アドレスからのおおよその距離を知る必要があるように思えます。

これら2つは通常かなり決定論的ですか?たとえば、攻撃者が自分のマシンで動作するまで試行錯誤を繰り返した場合、その同じペイロードが、まったく同じバイナリを使用する他のすべてのマシンで動作するでしょうか?

4

3 に答える 3

6

メモリのレイアウトを決定する精度は、破損している関数のスタックフレームに完全に依存します。オフセットが非常に正確で、nopスレッドでさえ必要ない場合もありますが、とにかくオフセットを設定することをお勧めします。デバッガーで問題を数回トリガーすると、スタックがどれほど混沌としているのかがわかります。他の要因がオフセットのサイズに非常に影響を与える可能性があります。たとえば、Windows2000およびWindowsXP用に作成されたエクスプロイトなど、プログラムのバージョンごとにオフセットが変更される可能性がある場合です。アプリケーションの言語分布が異なると、オフセットのサイズにも影響を与える可能性があります。

ただし、ASLRは、この悪用方法に深刻な問題を引き起こします。 ヒープスプレーは、ブラウザベースのエクスプロイトでASLRをバイパスするために一般的に使用されます。

于 2011-04-03T22:03:20.410 に答える
6

有効なペイロードを作成するために、攻撃者はターゲット バッファのおおよそのアドレスと、リターン アドレスからのおおよその距離を知る必要があります。

あなたが正しいです。実際、正しいエクスプロイトを作成するには、デバッガーを少し操作する必要があります。作成してテストした後、異なるマシンでバイナリが同じであれば、エクスプロイトは正常に機能するはずです。

(正常に動作するかどうかは少し楽観的です。シェルコードを起動する必要があるとしましょう。攻撃の有効性は、他の要因に依存する可能性があります..)

于 2011-04-03T15:05:58.213 に答える
0

システムとバイナリによってはアドレスが常に同じになるとは限りませんが、マルウェアがチャンスを増やすために使用するハックの1つは、異なる差出人アドレス(10個のNOPSがある場合は+10増分など)を使用して複数のペイロードを生成し、それらをすべて試すことです。機能した。

于 2011-04-03T15:26:36.663 に答える