バッファオーバーフローとは
バッファオーバーフロー(Buffer Overflow)とは、プログラムが確保したメモリ領域(バッファ)を超えるデータを書き込むことで、隣接するメモリ領域を上書きし、プログラムの制御を奪ったり任意のコードを実行したりするソフトウェアの脆弱性です。
バッファオーバーフローの仕組み
C言語などでは配列の境界チェックが自動で行われないため、入力データが配列サイズを超えても書き込みを続けます。攻撃者は意図的に大量のデータを送り込み、リターンアドレス(関数が終了後に戻るアドレス)を悪意あるコードのアドレスに書き換えます。
スタックオーバーフローとヒープオーバーフロー
スタックオーバーフロー:スタック領域のバッファを溢れさせる古典的な手法。ヒープオーバーフロー:動的メモリ領域(ヒープ)を対象にした攻撃。
対策方法
①安全な言語(Python・Java・Rust等)の採用(自動境界チェック)、②入力値の長さ検証、③安全な文字列関数の使用(strcpyの代わりにstrncpy等)、④OSの保護機能(ASLR・DEP/NX・Stack Canary)の活用、⑤コンパイラの安全フラグの使用が対策です。