2016-10-24 5 views
-1

私はターミネーターカナリアという名前の安全なコーディング方法を示す文書を読んでいます。 ターミネータカナリアは、機能スタックフレームへのパディングを意味し、スタック上のリターンアドレスを悪意のあるもので上書きすることを防ぎます。 ターミネーターカナリアは、安全なバンドとして機能し、サイズを計算するのが難しく、攻撃者の返信先がどこであるかを知るのが難しいです。ドキュメントの後意味 "sthのエントロピーの源"。スタック上に

は、1真偽疑問は以下の通りであるテストでは、あります: 「ターミネータカナリアのためのエントロピー源を攻撃することができ、」 私の質問は: 私は何見当がつかない"sthのエントロピー源。"質問の手段。

+0

この文書の所在地は? –

+0

一部の非公開の文書。私は実際にイゴールの答えを読む前にそれを理解していませんでした。私はその質問を訂正しません。イゴールは十分に説明します。 – wason

答えて

2

カナリーは通常、スタック上の戻りアドレスの前に配置されたランダムな値です。リターンアドレスに到達し、リターンアドレスを上書きするバッファオーバーランも、カナリアを上書きします。コンパイラーは、関数から戻ってくる直前に、カナリアが修正されていないこと、元のランダム値がまだ入っていることを確認します。変更されている場合、チェックは通常、プロセスを終了します(改ざんされたリターンアドレスにジャンプし、攻撃者に制御を与えるのではなく)。

情報理論では、「エントロピー」はおおよそ「ランダム性」の別の用語です。エントロピーの源は基本的に乱数生成器です - この文脈では、カナリアを設定するために使用されます。攻撃者がそのジェネレータによって生成されたランダムな値を予測できる場合、そのバッファオーバランを調整してカナリーをそのまま維持し、安全性チェックをバイパスすることができます。