本文へ移動

基本情報技術者試験

ばっふぁおーばーふろーこうげき

バッファオーバーフロー攻撃

Buffer Overflow

決められた入れ物の大きさを超えるデータを送り込み、隣の領域を壊して乗っ取る攻撃です。

詳しい説明

1. 定義

バッファオーバーフロー攻撃とは、プログラムが用意した入れ物(バッファ)の大きさを超えるデータを送り込み、隣り合ったメモリの領域を書き換えることで、プログラムを意図しない動きにさせる攻撃のことです。

2. 仕組みと内訳

プログラムは、受け取ったデータを置くために一定の大きさの領域を用意します。受け取る側が大きさを確かめないと、はみ出した分がその先の領域に書き込まれます。

はみ出した先には、次に実行する場所を覚えている情報などが置かれていることがあります。攻撃する側は、そこを自分が送り込んだ命令の場所に書き換えます。結果として、そのプログラムの権限で任意の命令を実行させられます。

対策は3つの層で考えます。

  • 作るときの対策: 受け取るデータの長さを必ず確かめる。長さを確かめる関数を使う
  • 動かす環境の対策: データを置く領域では命令を実行させない設定にする。領域の配置を毎回変えて狙いを付けにくくする
  • 運用の対策: 修正プログラムを適用し、既に知られた欠陥を残さない

試験で問われること

基本情報技術者試験

  • 入れ物の大きさを超えた分が隣の領域を壊す、という仕組みを説明できる
  • 作るとき・動かす環境・運用の3つの層の対策を挙げられる
  • 他の攻撃手法との違い(何の確かめ漏れを突くか)を区別する
  • 攻撃手法を扱う設問で、SQL インジェクションやディレクトリトラバーサルと並べて出ます。入力の長さを確かめないことが原因だと説明できるかが要点です。

最終更新日: 2026/09/23