1

バッファオーバーフローに関する次の論文を読んでいました: http ://www1.telhai.ac.il/sources/private/academic/cs/557/2659/Materials/Smashing.pdf

論文の例によると、攻撃者はオーバーフローしたコードをバッファに挿入し、バッファのアドレスを指すようにリターンアドレスを変更します。挿入されたコードとローカル変数は両方ともスタック上にあるため、攻撃者は、バッファーをコードでオーバーフローさせる前に、ローカル変数用に十分なスペースを残していることを確認する必要がありますか?広い意味で、コードとローカル変数の両方がスタックにある場合にスタックがどのように維持されるか混乱しています....ローカル変数が挿入されたコードを上書きする可能性はありますか?

4

1 に答える 1

0

1 つの解決策は、ローカル変数を使用しないことです。これは、小さくなり、とにかく何か他のものを呼び出すことによってその作業を行うコードにとって、必ずしも大きな制約ではありません。(大きな制約ではないという点では非常に相対的ですが、私にはわかりませんが、これは書くのが最も簡単なコードではないため、そのコンテキストでは大きな制約ではありません)。

それも必要ありません。スタックは次のようになります。

Function A Arg 2
Function A Arg 1
Function A Arg 0
Return Address into caller
Function A Local 1
Function A Local 0
Function B Arg 1
Function B Arg 0
Return Address into place in Function A's executable code.
Function B Local 2
Function B Local 1
Function B Local 0
Function C Arg 0
Return Address into place in Function B's executable code.
Function C Local 3
Function C Local 2
Function C Local 1
Function C Local 0
...

バッファ オーバーフローにより、次のようにだまされます。

Function A Arg 2
Function A Arg 1
Function A Arg 0
Return Address into caller
Function A Local 1
NastyCode bytes 0-3
NastyCode bytes 4-7
NastyCode bytes 8-B
NastyCode bytes C-E
NastyCode bytes F-10
NastyCode bytes 10-13
NastyCode bytes 14-17
NastyCode bytes 18-1B
NastyCode bytes 1F-20
...
NastyCode arg 0 (etc.)
Return Address (of NastyCode [may not even be valid, may return to original caller, or may jump into something it'll set up]).
NastyCode Local 2
NastyCode Local 1
NastyCode Local 0
Return Address (should be of Function F, into a point in Function E but it's changed to point to byte 0 of NastyCode)
Function F Local 2
Function F Local 1
Function F Local 0

そのため、スタックに書き込まれた実行可能コードは、そのコードのローカル変数から離れている可能性があります。

于 2012-08-07T16:38:01.987 に答える