攻撃者は意図的にバッファオーバーフローを起こすによりプログラムをクラッシュさせたり、処理を書き換えて無限ループに追い込むことでプログラムをフリーズさせてたりする事でプログラムの可用性を侵害できる。
関数ポインタの書き換え.
技術的対策.
コンパイラやライブラリによる対策.
カナリア.
安全なライブラリへの置き換え.
実行環境での対策.
また、プロプライエタリなアドオンとしては以下のものがある。
ASLR.
開発時の対策.
プログラミング言語・プログラミング環境の選択.
Javaプラットフォームや.NET Frameworkでは全ての配列に対して境界チェックが必須とされる。ほぼすべてのインタプリタ言語ではバッファオーバーフローへの対策が行われており、エラー発生時にはその状態が明確に伝えられる。境界チェックを行うのに十分な型情報を保持しているようなプログラミング言語では、境界チェックの有効・無効を切り替えるためのオプションが提供されていることもある。
ソースコード記述時の対策.
人手による対策.
バッファオーバーフロー攻撃を防ぐには、領域長とデータ長を意識したプログラミングを行う事が重要である：
安全なライブラリの使用.
静的コード解析時における対策.
人手による静的コード解析.
自動化された静的コード解析.
発展的な攻撃.
実行環境がASLRを実装していれば、libc等のライブラリの仮想アドレスはランダムに変わるので、攻撃者がジャンプ先をライブラリに落ちるようリターンアドレスを書き換えるのは困難になる。
歴史.
、 で以下のように説明されている。
この処理を実行するコードは読み込み元と書き込み先のアドレスに対するチェックを適切に行なっておらず、モニターの一部に対しユーザによる上書きを許すことになっている。これはモニターにコードを挿入するのに利用される可能性があり、結果としてユーザがマシンの制御を掌握する可能性がある。
これはスタックベースのバッファオーバーフローを使用したエクスプロイトを手順を追って説明していく内容である。
フェルミ面