Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 1095

スタックカナリア

スタックカナリア とは何ですか?

スタックカナリアスタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。


スタックカナリアは 1998 年に Crispin Cowan らが StackGuard で提案した防御技術で、関数のスタックフレームにおいてローカル変数と保存された戻りアドレスの間に配置される乱数値です。コンパイラは関数入口でカナリアを設定し、出口で検証するコードを挿入します。改ざんが検出されると、破壊された戻りアドレスを使う前にプログラムを中断します。現代のツールチェーンでは -fstack-protector や /GS として提供され、プロセスごとの乱数値と終端バイト(通常 0x00)によって、カナリアを含む溢れペイロードにも耐性を持たせます。カナリアは ASLR、DEP、CFI、メモリ安全言語を補完するもので、代替にはなりません。

  1. 01

    GCC の -fstack-protector-strong が配列を含む関数にカナリアを挿入する。

  2. 02

    MSVC の /GS オプションが strcpy ベースのオーバーフローを検出する。

よくある質問

スタックカナリア とは何ですか?

スタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。

スタックカナリア とはどういう意味ですか?

スタックカナリアは、関数のローカルバッファと保存された戻りアドレスの間に置かれた秘密値で、制御フローを奪取される前にスタックオーバーフローを検出します。

スタックカナリア はどのように機能しますか?

スタックカナリアは 1998 年に Crispin Cowan らが StackGuard で提案した防御技術で、関数のスタックフレームにおいてローカル変数と保存された戻りアドレスの間に配置される乱数値です。コンパイラは関数入口でカナリアを設定し、出口で検証するコードを挿入します。改ざんが検出されると、破壊された戻りアドレスを使う前にプログラムを中断します。現代のツールチェーンでは -fstack-protector や /GS として提供され、プロセスごとの乱数値と終端バイト(通常 0x00)によって、カナリアを含む溢れペイロードにも耐性を持たせます。カナリアは ASLR、DEP、CFI、メモリ安全言語を補完するもので、代替にはなりません。

スタックカナリア からどのように防御しますか?

スタックカナリア に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。

スタックカナリア の別名は何ですか?

一般的な別名: StackGuard, スタッククッキー, GS クッキー。

関連用語

関連項目