概要
ユーザーの入力領域に
攻撃者が悪意あるコードを含んだ大量のデータを送信してバッファを溢れさせる。
リターンアドレスが悪意のあるコードで上書きされ、処理されることにより
システムに異常動作を発生させる攻撃手法。
「バッファ」 ・・・プログラムが一時的にデータを保存するためのメモリ領域
「リターンアドレス」・・・関数処理後に実行するべきプログラムの位置情報
発生しうる脅威
プログラムの異常終了
意図しないシステム停止により多額の損害賠償や企業の信頼を大きく損なうことにもつながる。重要情報の漏洩やサイトの改ざん
遠隔操作が可能となる悪質なコードを送られ、管理者権限を奪われる。
攻撃の踏み台にされる
DDoS攻撃などに悪用される
原因
ミスによる不適切なメモリ管理
- 入力値の長さをチェックしてから使っていない
- 入力値のバリデーション不足
対策
根本的解決
1.直接メモリ操作ができない言語で記述する
PHP、Perl、Javaなど、メモリ管理を自動で行ってくれる言語を使う。
2.直接メモリ操作ができる言語で記述する部分を最小限にする
C、C++、アセンブラなどの言語のときは、その部分をできるだけ少なくして集中的にチェックをする。
3.脆弱性が修正されたバージョンを使用する
最新のバージョンのライブラリを使用する。
Laravelでの実装例
1.ほぼ発生しない
LaravelではPHPを使っており、メモリ管理を自動で行っている言語のため。
2.入力値のバリデーション
ユーザー入力には必ずバリデーションをかけておく。
$validated = $request->validate([ 'name' => 'required|string|max:255', ]);
☀︎255文字以下の文字列のみ通過できる。