web-dev-qa-db-ja.com

この場合、スタックバッファオーバーフローも発生する可能性がありますか?

文字列argv[1]を取得し、sprintfを使用して有限のバッファにコピーするCプログラムがあるとします。従来のスタックバッファオーバーフロー。プログラムがもっと複​​雑で、ROPのようなテクニックが可能だとさえ言ってみましょう。

ただし、スタックカナリア/セキュリティCookieを使用してコンパイルされ、ASLRとDEPを使用してOS上で実行されます。

その後、任意のシェルコードを実行する機会は0に近づきませんか?

2
Jonny

場合によります。

DEPは、espにジャンプしてそこでコードを実行することをブロックします。 ASLRは、ここでバイパスする重要な重要事項です。

これを行うことができるかもしれないいくつかの方法があります:

  • ASLRが有効になっていないプロセスにロードされたモジュール。これが発生する可能性のある方法はたくさんあります:
    • ASLRフラグなしでコンパイルされたアプリケーションの一部であるDLL。
    • AppInitDLLの一部として挿入されます。
    • サードパーティのアプリケーションによって注入されます。アンチウイルスまたはxfire/Frapsのようなもの。
    • 標準のファイルダイアログを使用する場合、shdoclc.dllと一緒にロードされるシェルハンドラー。
  • 固定アドレスの割り当て(例:VirtualAllocパラメータが設定されたlpAddress
  • メモリの開示またはポインタの開示を可能にする二次的な脆弱性は、物事がメモリのどこにあるかについての考えを構築するのに役立つ可能性があります。
  • 二次的な問題を引き起こす何らかの方法でスタックを破損します。ヒープの破損。これにより、ヒープスプレー、ヒープ風水、JITスプレーなどのトリックを使用して、他の搾取手段を開くことができます。
1
Polynomial