脆弱性
スタックオーバーフロー脆弱性
別称: スタックバッファオーバーフロー, スタック破壊
定義
プログラムのスタック上で発生するバッファオーバーフロー。多くの場合、保存された戻りアドレスや関数ポインタを上書きして実行を奪う。
スタックオーバーフローはメモリ破壊系エクスプロイトの歴史的な原型です。境界チェックなしにスタック上のバッファへ書き込みが行われると、隣接するフレームポインタや保存された戻りアドレスを上書きし、攻撃者は制御フローを攻撃者制御のバイト列(shellcode や ROP ガジェット)へ誘導できます。防御策にはスタックカナリア(StackGuard、/GS)、実行不可スタック(DEP/NX)、ASLR、シャドースタック、Intel CET、コンパイラレベルの FORTIFY_SOURCE、安全な文字列関数の利用などがあります。緩和策が数十年蓄積されても、ファームウェア・IoT・レガシーソフトでは古典的なスタックオーバーフローが依然頻発し、CVE や CTF で繰り返し取り上げられます。
例
- CVE-2003-0352(DCOM RPC):Blaster ワームがスタックオーバーフローを悪用。
- CVE-2019-0708(BlueKeep):リモートデスクトップサービスのスタックオーバーフロー。
関連用語
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
ヒープオーバーフロー
動的に確保したメモリ上で発生するバッファオーバーフロー。アロケータのメタデータ、関数ポインタ、オブジェクトの vtable などが破壊されることが多い。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
エクスプロイト
脆弱性を悪用して、コード実行・権限昇格・情報漏えいなど意図しない動作を引き起こすコード、データ、または手法。
Secure Coding
Secure Coding — definition coming soon.
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。