web-dev-qa-db-ja.com

スタックカナリア保護とROP

私が知る限り、スタックカナリアはスタックに書き込まれた値であり、バッファオーバーフローによって上書きされた場合、アプリケーションを強制的に終了します。

私の質問は、何かをROPしたいためにEIPとスタックの両方を上書きした場合...そして決して戻らない場合です。スタックカナリアも問題を引き起こしますか?

6
John Smith

スタックアドレスが上書きされない限り、スタックベースのバッファオーバーフローではEIPを制御できないため、スタックカナリアは依然として問題です。さらに、スタックベースのバッファオーバーフローを含む関数は、破損した戻りアドレスが新しいEIPになる前に戻る必要があります。

これは、ダングリングポインターの問題ではありません。

デバッガにもっと時間をかける必要があります!これには言い訳はありません。あなたが搾取プロセスを踏んでいたなら、あなたはこれを知っているでしょう!

2
rook

一部のオーバーフローの場合、EIPを上書きできますが、カナリア値には影響しません。ここで、エンリコ・ペルラの著書「カーネル開発ガイド:コアへの攻撃」からの引用:

スタックカナリアは優れた保護スキームですが、いくつかの問題があります。特に制御されたオーバーフロー(たとえば、スタックに保存された配列のインデックスベースのオーバーフロー)は、カナリアを通過せずに通過できます。

2
Yury Kochubeev