情報セキュリティマネジメント試験 科目A キーワード集 > バッファオーバーフロー
概要
バッファオーバーフロー(BOF:Buffer Overflow)とは、プログラムがデータを一時的に格納するために確保した領域(バッファ)に対して、その容量を超える大きさのデータを送り込み、領域を溢れさせて隣接するメモリを破壊・上書きする攻撃です。「バッファが溢れる(overflow)」ことからこう呼ばれます。
溢れさせたデータでプログラムの制御情報を書き換えることで、攻撃者が用意した不正なコードを実行させたり、システムを異常終了(クラッシュ)させたりできます。入力データの長さをチェックしていないプログラムの脆弱性が原因です。
詳細(仕組み)
- プログラムが「○バイト分」と決めてバッファを確保する。
- 攻撃者がそれを超える長さのデータを入力する。
- あふれたデータが隣のメモリ領域(戻り先アドレス等)を上書きする。
- 実行の流れを乗っ取られ、攻撃者の不正コードが動く/異常終了する。
C/C++など、メモリ管理をプログラマが行う言語で起こりやすい古典的かつ重大な脆弱性です。
バッファオーバーフローのキーワードは「確保領域を超えるデータで溢れさせ、不正コードを実行」。対策の基本は入力データの長さチェックとソフトの最新化(パッチ)です。
対策
- 入力データの長さ(境界)をチェックし、バッファを超える書き込みを防ぐ(セキュアコーディング)。
- 安全な関数・ライブラリを使い、メモリ安全な言語の採用も検討する。
- OS・ソフトの脆弱性パッチを速やかに適用する。
- OSの保護機能(DEP:データ実行防止、ASLR:アドレス空間配置のランダム化)を有効にする。
- プログラムの実行権限を最小限にし、被害を抑える。
インシデント事例
サーバソフトの脆弱性悪用
広く使われるサーバソフトのバッファオーバーフロー脆弱性が悪用され、ワームの自己増殖や不正侵入に利用された事例が古くから多数あります。パッチ未適用が被害拡大の原因でした。
ネットワーク機器・IoTでのBOF
ルータやIoT機器のファームウェアにバッファオーバーフローの脆弱性が見つかり、遠隔から乗っ取られる事例も報告されています。ファームウェアの更新が重要です。
試験での問われ方
- 「確保した領域を超えるデータを送り込み、不正コードを実行させる攻撃はどれか」→ バッファオーバーフロー。
- 「バッファオーバーフローの対策として有効なものはどれか」→ 入力長チェック・パッチ適用。