スポンサーリンク

問題の解答・解説ページ

このページは解説の閲覧モードです。
実力試しをしたい方は、下のボタンからクイズに挑戦してください!

この問題をクイズ形式で解く
問題 No.4114
Webアプリケーションの開発において、C言語を用いてユーザーからの入力を受け取るプログラムを実装している。このプログラムにおいて、入力データの長さを確認せずに配列の領域を超えるデータを書き込んでしまう脆弱性があり、これを利用して攻撃者がスタック上のリターンアドレスを書き換え、任意のコードを実行するセキュリティ上の脅威はどれか。

【正解の解説】

バッファオーバーフロー

これは、コップに決まった量の水しか入らないのに、勢いよく大量の水を注いだあふれ水が周囲の書類を濡らしてしまうような状態です。プログラムで用意されたメモリーの部屋(バッファ)に、入りきらないほどの巨大なデータを無理やり詰め込むと、隣の部屋にあるはずの重要な管理情報(リターンアドレス)まであふれ出して書き換えてしまい、攻撃者にシステムを乗っ取られてしまいます。

スポンサーリンク

【その他の選択肢の解説】

SQLインジェクション

入力値の長さをチェックせずにメモリをあふれさせる問題ではなく、データベースへの問い合わせ文の組み立て方に不備がある点が誤りです。ユーザーの入力をそのままSQLの一部として解釈させてしまうため、データベースの中身を不正に盗み見たり改ざんされたりする危険性があり、メモリ破壊を狙うバッファオーバーフローとは仕組みが全く異なります。

クロスサイトスクリプティング

メモリ上のバッファあふれを狙うのではなく、Webブラウザの表示機能を利用して悪意あるプログラムをユーザーに踏ませる点が誤りです。掲示板やSNSなどの入力欄にJavaScriptタグなどを書き込み、別のユーザーの画面で実行させることでクッキーを盗むなどの被害を引き起こしますが、C言語のメモリ管理に起因する今回の問題の脅威とは異なります。

ディレクトリトラバーサル

プログラムのメモリ領域を破壊して任意のコードを実行させる問題ではなく、サーバー内のファイルパス指定の不備を突く点が誤りです。「../」などの特殊な文字列を使って、本来見えてはいけない公開フォルダ外のシステムファイルや設定ファイルを覗き見る攻撃であり、メモリの領域超過を狙うバッファオーバーフローとは対象が異なります。