web-dev-qa-db-ja.com

スタックカナリアは、マップされていないページでどのように埋め込まれますか?

私はこの主題について wikipediaの記事 を読んでいて、プログラムが起動すると、カナリアがランダムに計算され、ローカル変数に格納されている(これはコンパイラーによって導入されたと想定しています)とマップされていないページでパディングされていますが、それが実際に何を意味するのか理解できません。このグローバル変数はプログラムのページとは別のページにマップされているため、アクセスフラグが異なりますか?そうでない場合、なぜ攻撃者はこの値をのぞくことができないのですか?

4
Trey

カナリア値の参照コピーは、マッピングされていないページでは囲まれているであると言うのは明らかです。つまり、カナリア値を含むページには、その直前に少なくとも1つのマップされていないページと直後に1つのマップされていないページがあります。目標は、攻撃者がこの値を読み取ったり変更したりできないようにすることです。この値に到達するには、攻撃者は任意のアドレスで読み取りまたは書き込みを許可する脆弱性を見つける必要があります。バッファオーバーフローまたはアンダーフローは、最初にこれらのマップされていないページの1つにアクセスしてプログラムをクラッシュさせるため、カナリア値に到達できません。