バッファオーバーフロー攻撃とは[情報処理安全確保支援士講座]
今回は情報処理安全確保支援士試験で問われる、バッファオーバーフロー攻撃について解説します。
バッファオーバーフロー攻撃
バッファオーバーフロー攻撃は、アプリケーションプログラムの入力データ処理に関するバグを突いて、コンピュータのメモリに不正なデータを書き込み、システム侵入や管理者権限の剥奪を試みる攻撃手法です。
バッファオーバーフロー攻撃の仕組み
バッファオーバーフロー攻撃は、メモリのスタック領域で行われるもの、ヒープ領域で行われるもの、静的メモリ領域で行われるものがあります。
なかでも、特にスタックを対象とした攻撃が多く、試験でもよく問われます。
スタック領域とは、サブルーチンの呼び出しによって自動的に確保され、プログラムが一時的に使用するために用いられる領域です。
スタックについて
バッファオーバーフロー攻撃を理解するために、まずはスタックの概要を押さえておきましょう。スタックとは、データを記憶する構造の一種で、最後に書き込んだデータを最初に読みだす後入れ先出し(LIFO)形式です。
このようなデータ構造をスタック領域と呼びます。また、スタックにデータを格納することをPUSH、取り出すことをPOPと呼びます。
正常なプログラムの実行パターン
まずは、正常なプログラムが実装されるパターンの様子を確認しておきましょう。
- STEP1メインルーチンのプログラムが実行
- STEP2サブルーチンが実行され、戻り先がスタックに格納
- STEP3サブルーチンの中で使用する変数(a,buf)の格納領域がスタックに確保
- STEP4変数(buf)に入力データ(data)が格納される
- STEP5メインルーチンに処理が戻り、スタック内のデータは削除される
バッファオーバーフローの実行パターン
次に、バッファオーバーフローが実行される流れを見てみましょう。
- STEP1メインルーチンからサブルーチンが呼び出され、使用する変数の格納領域がスタックに確保される
※ここまでは正常なプログラムのSTEP1~3と同じです。 - STEP2bufの入力データを大きくし、制限なしに入力データをメモリの変数領域にコピーする
※結果として、確保されていたbufの領域を超えてスタック内の他の領域まで上書きしてしまいます。 - STEP3サブルーチン処理が終わっても、スタックに格納されていた戻り値が上書きされ戻れなくなる
- STEP4入力データ(data)に不正な機械語のコードと偽りの戻り値が書かれていて不正なプログラムを実行する
バッファオーバーフロー攻撃を防止するためにも、近年はWindowsOSに指定されたメモリ領域でのコード実行を禁止する機能が実施されています。
しかし、DEPを回避する手法としてreturn-to-libcと呼ばれるバッファオーバーフロー攻撃も存在します。
return-to-libcはメモリ上にロードされたlibc共有ライブラリ内の特定の関数を呼び出すようになっており、データ実行防止機能によっても防げません。
バッファオーバーフロー攻撃による影響
バッファオーバーフロー攻撃によって不正なプログラムが実行された場合、そのプログラムは攻撃の対象と同じ権限で実行されます。
したがって、管理者権限で実行されているサービスに対してバッファオーバーフロー攻撃が行われると、シェルの置き換えにより管理者権限でホストの操作も可能となります。
結果として、機密情報のコピー・不正プログラムの埋め込み・設定変更・ログの消去なども実行できてしまいます。
バッファオーバーフロー攻撃の対策
バッファオーバーフローの対策方法についても確認しておきましょう。
予防・防止策
検知・追跡策
- ネットワーク監視型IDS、ホスト監視型IDS・IPSを用いて検知する
- ホストのログを確認する
回復方法
- サーバログ・IDSログから原因を調べ、ベンダが後悔する対策手順に従って復旧する
- 不正アクセスを受けたホストを対象に、データの改ざん・不正プログラムの埋め込み・設定変更などの有無を検証し、修復する
- 脆弱性検査を実施し、問題があれば対処する
バッファオーバーフロー攻撃・例題
実際に例題を解いて問題に慣れていきましょう。
問題
ア スタックに最後に入った要素を示す添字の変数
イ スタックに最初に入った要素と最後に入った要素を示す添字の変数
ウ スタックに一つ前に入った要素を示す添字の変数を格納する配列
エ スタックの途中に入っている要素を示す添字の変数
(ログイン後回答すると、ここに前回の正誤情報が表示されます)
バッファオーバーフロー攻撃・まとめ
バッファオーバーフロー攻撃は、C言語やC++言語のデータ構造を悪用した攻撃方法です。
午後試験で問われるケースもあるので、具体的な対策方法を含めて押さえておきましょう。
次回はパスワードクラックについて学習します。
福井県産。北海道に行ったり新潟に行ったりと、雪国を旅してます。
経理4年/インフラエンジニア7年(内4年は兼務)/ライター5年(副業)
簿記2級/FP2級/応用情報技術者/情報処理安全確保支援士/中小企業診断修得者 など
ディスカッション
コメント一覧
まだ、コメントがありません