スタックカナリア
スタックカナリア とは何ですか?
スタックカナリアスタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。
スタックカナリアは 1998 年に Crispin Cowan らが StackGuard で提案した防御技術で、関数のスタックフレームにおいてローカル変数と保存された戻りアドレスの間に配置される乱数値です。コンパイラは関数入口でカナリアを設定し、出口で検証するコードを挿入します。改ざんが検出されると、破壊された戻りアドレスを使う前にプログラムを中断します。現代のツールチェーンでは -fstack-protector や /GS として提供され、プロセスごとの乱数値と終端バイト(通常 0x00)によって、カナリアを含む溢れペイロードにも耐性を持たせます。カナリアは ASLR、DEP、CFI、メモリ安全言語を補完するもので、代替にはなりません。
● 例
- 01
GCC の -fstack-protector-strong が配列を含む関数にカナリアを挿入する。
- 02
MSVC の /GS オプションが strcpy ベースのオーバーフローを検出する。
● よくある質問
スタックカナリア とは何ですか?
スタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
スタックカナリア とはどういう意味ですか?
スタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。
スタックカナリア からどのように防御しますか?
スタックカナリア に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
スタックカナリア の別名は何ですか?
一般的な別名: StackGuard, スタッククッキー, GS クッキー。