web-dev-qa-db-ja.com

SEHベースのエクスプロイトはどのようにDEPとASLRをバイパスしますか?

構造化例外処理ベースのエクスプロイトは初めてです。

シェルコードにジャンプするために、戻りアドレスを直接SEハンドラーに配置しないのはなぜですか? (安全なSEHなし)

Pop pop retを使用する理由を誰かが説明できますか?

SEHがASLRとDEPをバイパスすると言ったものを読みましたが、どうですか?

私たちのシェルコードはスタックに配置され、スタックはまだ実行不可能であるため、DEPはどのようにバイパスされますか?

4
Sani

http://www.exploit-db.com/wp-content/themes/exploit/docs/17505.pdf

SEHを使用して悪用を達成しても、DEPもASLRも無効になりません。

特に、DEPは、スタックメモリページからのシェルコードの実行を緩和します。これは、最終的に、SEHベースのエクスプロイトが達成しようとしていることでした。

プロセス間隔に非ASLRモジュールがあり、SEHエクスプロイトキーPOP POP RETを特定するために使用されていない場合、ASLRは引き続きエクスプロイトを妨げます。

Van Joneがコメントで示唆したように、DEPとASLRの敗北には、ROP(およびモジュールベースアドレス検出の情報リーク)が必要です。

2
antik
  1. シェルコードがスタックにあると仮定すると、Windowsには例外がアドレスにジャンプしないようにする基本的な防御メカニズムがあるため、シェルコードのアドレスを例外ハンドラーのアドレス(「リターンアドレス」と呼ばれるもの)に配置しません。スタック上。 SEHは一般的かつ繰り返し悪用されたため、作成されました。今日、SafeSEHは例外をジャンプできる正確なアドレスを定義しているため、SafeSEHでは攻撃は機能しません。

  2. を使用しております pop, pop, retこれは、テキストセグメントでこのコードを簡単に見つけることができるためです。上記で説明したように、スタック上のアドレスにジャンプすることはできませんが、テキストセグメントにジャンプすることはできます。 pop, pop, ret次のSEHレコードのアドレスにジャンプします。例外ハンドラが実行を開始した時点で、ESPは8バイトです。この値を制御していることに注意してください。

WinDBGの場合:

0:000> !exchain
*0012ffb0*: seh_overflow!ILT+85(__except_handler4)+0 (0041105a)
0012ffe0: kernel32!ValidateLocale+2b0 (7c839ac0)
Invalid exception stack at ffffffff
0:000> g
(614.f68): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
:
0:000> dd esp L4
0012f6f8  7c9032a8 0012f7e0 *0012ffb0* 0012f7fc
  1. DEPをバイパスできない場合があります。しかし、脆弱なDLLがあることがわかった場合は、VirtualProtectを呼び出してスタックのメモリ保護を変更し、実行可能ビットを含めてシェルコードにジャンプすることで悪用できます。

私はまた、件名について 質問 を尋ねました、あなたはそれを見てみたいかもしれません

1
alond22