バッファオーバフロー攻撃
コンピュータを使った悪いことだよ
意図的にバッファをあふれさせるよ
異常終了させたり、変なプログラムを実行させたりするよ
簡単に書くよ
バッファオーバフロー攻撃(読:バッファオーバフローコウゲキ 英:buffer overflow attack)とは
メモリ上に確保されている領域よりも大きなデータを突っ込んで誤作動を起こさせてやるぜ!な攻撃のこと
です。
詳しく書くよ
※個人的には「バッファオーバーフロー攻撃」(「オーバ」ではなく「オーバー」)という言い方の方が馴染みがありますが、某・資格試験の過去問だと「バッファオーバーフロー」ではなく「バッファオーバフロー」のような形で出てくるのですね。そのため、用語検索で引っかかるようにするために取り上げておきます。
順番に見ていきましょう。
まずは予備知識として「バッファオーバフロー」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
バッファオーバフローは「確保していた領域よりもたくさん入れちゃって、入りきらなかった状態」です。
もっと端的に言えば、あふれちゃったわけですね。
「データを溜めておく場所(バッファ)があふれた(オーバフローした)」状態です。
プログラミングでは変数を扱います。
変数は「データを入れておく箱」です。
中にデータ(値)を入れます。
この変数ですが、実際にはメモリ上に場所を確保します。
メモリの上に「ここからここまで、この変数が使うから」と値を入れておくための領域を確保するのです。
よく分からない方は花見の場所取りをイメージしてください。
場所を取るために下に敷いたブルーシートが変数です。
その上に座る上司や先輩、花見の参加者が値です。
花見の参加者が多くなると、ブルーシートに座りきれません。
ブルーシートの外にはみ出してしまうでしょう。
そうすると、隣で花見をしている人たちの迷惑になってしまうかもしれませんね。
コンピュータの世界も同じです。
例えば、3文字まで入る変数をメモリ上に確保したとしましょう。
そこに4文字以上入れると、入りきらない分があふれてしまいます。
もし隣の領域を他の変数が使っていたら、どうでしょう?
他の変数の値を書き換えてしまいますね。
これは本来想定していない事態です。
困ったことになる可能性が高いでしょう。
このような
元々確保していた領域よりも大きい値を入れて、あふれちゃった状態
がバッファオーバフローです。
ここまでの説明で、バッファオーバフローについては、なんとなく分かったでしょうか。
以上を踏まえて
意図的にバッファオーバフローを発生させることでプログラムに誤作動を起こさせようとする悪いこと
が「バッファオーバフロー攻撃」です。
誤作動の内容は、いろいろです。
一番イメージしやすいのは、プログラムの異常終了でしょう。
バッファオーバフローが起きるのは、プログラムにとっては想定外のできごとです。
その想定外のできごとを意図的に発生させることで、プログラムを力尽きさせます。
実際には、プログラムが力尽きる程度で済めば御の字です。
条件が合えば、悪いプログラムを実行させたりもできます。
おっかないですね。
バッファオーバフロー攻撃に対する対処は単純です。
それは
バッファオーバフローさせない
です。
「何を当たり前のことを?」と思うかもしれませんね。
確かに当たり前のことです。
ただし、その当たり前のことを当たり前にできていれば、バッファオーバフロー攻撃は成立しません。
そもそもの話として、バッファオーバフローが発生するのはプログラムがおかしい(バグがある)からです。
プログラムは本来、バッファオーバフローが発生してはいけません。
バッファオーバフローが発生しないように作ってあるべきです。
バッファオーバフロー攻撃はプログラムの おかしいところを利用した攻撃です。
おかしいところがないプログラム相手には使えません。
だから、バッファオーバフローが発生しないようにしておくのが大事なのです。
作る立場の人は、ガッツリとテストして、バッファオーバフロー攻撃なんぞ喰らわない強いプログラムを作ってあげてください。
一言でまとめるよ
まぁ「バッファオーバフロー攻撃」って単語が出てきたら「確保している領域よりも大きなデータを入れて誤作動させてやるぜ!攻撃なんだな~」と お考えください。
おまけ
■訳してみるよ
「buffer(バッファ)」の意味は「緩衝器」とか「緩衝物」とか「緩衝装置」とか「緩衝材」とかです。
「overflow(オーバフロー)」の意味は「あふれる」とか「氾濫する」とかです。
「攻撃」は日本語ですね。
何となく くっつけると
緩衝物からあふれさせる攻撃
となります。
■検索してみる?





