Stack buffer overflow とは

ソフトウェアでは、スタックバッファオーバーフローまたはスタックバッファオーバーランが発生します。これは、プログラムが意図したデータ構造(通常は固定長バッファ)以外のプログラムの呼び出しスタック上のメモリアドレスに書き込むときに発生します。スタックバッファオーバーフローのバグは、プログラムがスタックに配置されたバッファに実際に割り当てられているバッファよりも多くのデータを書き込むときに発生します。これにより、スタック上の隣接するデータが破損する可能性がほとんどあります。誤ってオーバーフローが発生した場合は、プログラムがクラッシュしたり誤動作したりすることがよくあります。スタックバッファオーバーフローは、バッファオーバーフロー(またはバッファオーバーラン)として知られる、より一般的なプログラミング誤動作の一種です。スタックにバッファをオーバーフィルすると、スタックにはすべてのアクティブな関数呼び出しの戻りアドレスが含まれているため、ヒープ上のバッファをオーバーフィルするよりも、プログラムの実行を損なう可能性が高くなります。
スタック・バッファ・オーバーフローは、スタック・スマッシングと呼ばれる攻撃の一部として意図的に引き起こされる可能性があります。影響を受けるプログラムが特別な特権で実行されている場合、または信頼されていないネットワークホスト(Webサーバーなど)からのデータを受け入れる場合、このバグは潜在的なセキュリティ上の脆弱性です。スタック・バッファが信頼できないユーザーから供給されたデータで満たされている場合、そのユーザーは実行中のプログラムに実行可能コードを注入し、そのプロセスを制御するような方法でスタックを破壊する可能性があります。これは、攻撃者がコンピュータに無許可でアクセスするための、最も古くて信頼性の高い方法の1つです。