Buffer overflow protection とは

バッファオーバーフロー保護は、スタック割り当て変数のバッファオーバーフローを検出し、プログラムの誤動作や重大なセキュリティ上の脆弱性を引き起こさないようにすることにより、実行可能プログラムのセキュリティを強化するために、ソフトウェア開発中に使用されるさまざまな手法のいずれかです。スタックバッファのオーバーフローは、プログラムが意図したデータ構造(通常は固定長バッファ)以外のプログラムの呼び出しスタック上のメモリアドレスに書き込むときに発生します。スタックバッファオーバーフローのバグは、プログラムがスタックに配置されたバッファに実際に割り当てられているバッファよりも多くのデータを書き込むときに発生します。これにより、スタック上の隣接するデータが破損し、プログラムがクラッシュしたり、不正な操作が行われたり、セキュリティの問題が発生する可能性があります。
通常、バッファオーバーフロー保護は、スタック割り当てデータの編成を変更するため、スタックバッファオーバーフローによって破壊された場合、メモリ上のバッファがオーバーフローしたことを示すカナリア値を含みます。カナリアの価値を検証することにより、影響を受けるプログラムの実行を終了させ、不正行為や攻撃者による制御を阻止することができます。他のバッファオーバーフロー保護技術には、割り当てられた各ブロックへのアクセスが実際に割り当てられた領域を超えないようにチェックする境界チェックと、データを格納するために割り当てられたメモリに実行可能コードが含まれないことを保証するタグ付けが含まれます。
スタックに割り当てられたバッファのオーバーフィルは、スタックにすべてのアクティブな関数呼び出しの戻りアドレスが含まれているため、ヒープ上のバッファのオーバーフィルよりもプログラムの実行に影響を与えます。ただし、ヒープベースのオーバーフローに対しても同様の実装固有の保護が存在します。
GNU Compiler Collection、LLVM、Microsoft Visual Studio、およびその他のコンパイラ用のものを含む、バッファオーバーフロー保護の実装がいくつかあります。