概要

バッファオーバーフロー(BOF:Buffer Overflow)とは、プログラムがデータを一時的に格納するために確保した領域(バッファ)に対して、その容量を超える大きさのデータを送り込み、領域を溢れさせて隣接するメモリを破壊・上書きする攻撃です。「バッファが溢れる(overflow)」ことからこう呼ばれます。

溢れさせたデータでプログラムの制御情報を書き換えることで、攻撃者が用意した不正なコードを実行させたり、システムを異常終了(クラッシュ)させたりできます。入力データの長さをチェックしていないプログラムの脆弱性が原因です。

詳細(仕組み)

  1. プログラムが「○バイト分」と決めてバッファを確保する。
  2. 攻撃者がそれを超える長さのデータを入力する。
  3. あふれたデータが隣のメモリ領域(戻り先アドレス等)を上書きする。
  4. 実行の流れを乗っ取られ、攻撃者の不正コードが動く/異常終了する。

C/C++など、メモリ管理をプログラマが行う言語で起こりやすい古典的かつ重大な脆弱性です。

バッファオーバーフローのキーワードは「確保領域を超えるデータで溢れさせ、不正コードを実行」。対策の基本は入力データの長さチェックソフトの最新化(パッチ)です。

対策

利用者側ではパッチ適用が現実的な対策、開発側では入力長チェック(セキュアコーディング)が根本対策です。OSのDEP/ASLRも被害軽減に寄与します。

インシデント事例

サーバソフトの脆弱性悪用

広く使われるサーバソフトのバッファオーバーフロー脆弱性が悪用され、ワームの自己増殖や不正侵入に利用された事例が古くから多数あります。パッチ未適用が被害拡大の原因でした。

ネットワーク機器・IoTでのBOF

ルータやIoT機器のファームウェアにバッファオーバーフローの脆弱性が見つかり、遠隔から乗っ取られる事例も報告されています。ファームウェアの更新が重要です。

試験での問われ方