基本情報技術者 2018年 秋期 午後 問01
情報セキュリティ事故と対策に関する次の記述を読んで、設問1〜3に答えよ。
自動車の販売代理店であるA社は、Webサイトで自動車のカタログ請求を受け付けている。Webサイトは、Webアプリケーションソフト(以下、Webアプリという)が稼働するWebサーバと、データベースが稼働するデータベースサーバ(以下、DBサーバという)で構成されている。WebサーバはA社のDMZに設置され、DBサーバはA社の社内LANに接続されている。Webサイトの管理はB氏が、A社の社内LANに接続されている保守用PCからアクセスして行っている。カタログ請求者は、Webブラウザからインターネット経由でHTTP over TLSによってWebサイトにアクセスする。
〔カタログ請求者の情報の登録〕
A社では、次の目的で、カタログ請求者の情報を保持し、利用することの同意を、カタログ請求者から得ている。
・情報提供や購入支援を行う。
・カタログ請求者が別のカタログを請求したいときなどに、登録した電子メールアドレスとパスワードを使用してログインできるようにする。
同意が得られたときは、氏名、住所、電話番号、電子メールアドレス、パスワード、購入予定時期、購入予算、希望車種などの情報を、Webアプリに入力してもらい、データベースに登録している。パスワードはハッシュ化して、それ以外の情報は平文で、データベースに格納している。A社では、カタログ請求者から要求があったときにだけ、データベースからそのカタログ請求者の情報を消去する運用としている。
〔カタログ請求者への対応〕
A社では、カタログ請求者へのカタログ送付後の購入支援を、データベースに登録されている情報を基に、電子メールと電話で行っている。
〔情報セキュリティ事故の発生〕
ある日、A社の社員から、“A社のカタログ請求者一覧と称する情報が、インターネットの掲示板に公開されている”とB氏に連絡があった。公開されている情報をB氏が確認したところ、データベースに登録されている情報の一部であったので、自社のデータベースから情報が流出したと判断して上司に報告した。B氏は上司からの指示を受けて、Webサイトのサービスを停止し、情報が流出した原因と流出した情報の範囲を特定することにした。
〔情報セキュリティ事故の原因と流出した情報の範囲〕
B氏の調査の結果、WebアプリにSQLインジェクションの脆弱性があることが分かった。そのことからB氏は、攻撃者が①インターネット経由でSQLインジェクション攻撃を行い、データベースに登録されているカタログ請求者の情報を不正に取得したと推測した。Webサーバとデータベースではアクセスログを取得しない設定にしていたこともあり、流出した情報の範囲は特定できなかった。そこで、データベースに登録されている全ての情報が流出したことを前提に、A社では、データベースに登録されている全てのカタログ請求者に情報の流出について連絡するとともに、対策を講じることにした。
〔情報セキュリティ事故を踏まえたシステム面での対策〕
B氏は、今回の情報セキュリティ事故を踏まえたシステム面での対策案を、表1のようにまとめた。
設問1:
問題文を見る 本文中の下線①について、この攻撃の説明として適切な答えを、解答群の中から選べ。
解答群
ア:攻撃者が、DNSに登録されているドメインの情報をインターネット経由で外部から改ざんすることによって、カタログ請求者を攻撃者のWebサイトに誘導し、カタログ請求者のWebブラウザで不正スクリプトを実行させる。
イ:攻撃者が、インターネット経由でDBサーバに不正ログインする。
ウ:攻撃者が、インターネット経由でWebアプリに、データベース操作の命令文を入力することによって、データベースを不正に操作する。
エ:攻撃者が、インターネット経由で送信されている情報を盗聴する。
模範解答
ウ
解説
解答の導き方
この設問は、下線①にある攻撃がどのようなものかを選ぶ問題です。ポイントは、攻撃者がどこに何を送り、何を不正に操作したのかです。
本文には「WebアプリにSQLインジェクションの脆弱性がある」とあります。Webアプリは、利用者からの入力を受け取り、データベースとのやり取りを行うプログラムです。SQL(Structured Query Language:データベースを操作するための言語)は、データベースへの検索や登録などを指示するために使われます。
SQLインジェクションとは、Webアプリへの入力にSQLの命令を混ぜて送り、Webアプリがそれをデータベースへの指示として実行してしまう攻撃です。つまり、攻撃者がデータベースサーバに直接ログインするのではなく、Webアプリを通じてデータベースを不正に操作します。
今回の本文では、攻撃者が「インターネット経由でSQLインジェクション攻撃を行い」、データベースに登録された情報を取得したと推測しています。この流れに当てはまるのは、Webアプリにデータベース操作の命令文を入力し、データベースを不正に操作するという選択肢ウです。
ほかの選択肢は、攻撃の対象や方法が異なります。
- アは、DNS(Domain Name System:ドメイン名とIPアドレスを対応付ける仕組み)の情報を改ざんし、利用者を攻撃者のWebサイトへ誘導する攻撃です。Webアプリへの入力を使ってデータベースを操作する攻撃ではありません。
- イは、DBサーバに直接不正ログインする攻撃です。SQLインジェクションのように、Webアプリを通じてデータベースを操作する方法とは異なります。
- エは、通信中の情報を盗み見る攻撃です。データベース操作の命令をWebアプリに入力して、不正な操作をさせるものではありません。
誤りやすいポイント
- 「インターネット経由で情報を盗んだ」という点だけで、通信の盗聴であるエを選ばないようにします。SQLインジェクションは、情報を盗み見るのではなく、Webアプリを通じてデータベースを不正に操作する攻撃です。
- DBサーバに不正ログインする攻撃と、Webアプリに入力してデータベースを操作させる攻撃を混同しないようにします。両者は、攻撃者が利用する経路が異なります。
- 選択肢アのようなWebサイトへの誘導と、SQLインジェクションを混同しないようにします。SQLインジェクションでは、攻撃者がWebアプリに送る入力が重要です。
FAQ
Q: SQLインジェクションは、どうしてWebアプリへの入力で起きるのですか?
A: Webアプリが利用者の入力をSQLの命令文にそのまま組み込むと、入力が単なるデータではなく命令として扱われることがあります。プレースホルダを使うと、命令文と入力値を分けて扱えるため、この問題を防ぎやすくなります。
A: Webアプリが利用者の入力をSQLの命令文にそのまま組み込むと、入力が単なるデータではなく命令として扱われることがあります。プレースホルダを使うと、命令文と入力値を分けて扱えるため、この問題を防ぎやすくなります。
Q: 通信を暗号化していれば、SQLインジェクションも防げますか?
A: 防げません。TLS(Transport Layer Security:通信を暗号化する仕組み)は、通信中の情報を盗み見られにくくするものです。一方、SQLインジェクションは、Webアプリが受け取った入力を不適切に処理することで起きます。通信の暗号化だけでは防げません。
A: 防げません。TLS(Transport Layer Security:通信を暗号化する仕組み)は、通信中の情報を盗み見られにくくするものです。一方、SQLインジェクションは、Webアプリが受け取った入力を不適切に処理することで起きます。通信の暗号化だけでは防げません。
関連キーワード: SQLインジェクション、プレースホルダ、データベース、DNS
設問2:
問題文を見る 表1中のに入れる対策として最も適切な答えを、解答群の中から選べ。
aに関する解答群
ア:Webアプリへの入力パラメタには、Webサーバ内のファイル名を直接指定できないようにする。
イ:Webサーバのメモリを直接操作するような命令を記述できないプログラム言語を用いて、Webアプリを作り直す。
ウ:Webページに出力する要素に対して、エスケープ処理を施す。
エ:データベース操作の命令文の組立てを文字列連結によって行う場合は、連結する文字列にエスケープ処理を施す。
bに関する解答群
ア:カタログ請求者の情報の適切な保管期間を定め、カタログ請求者の同意を得た上で、保管期間を過ぎた時点でデータベースから消去する。
イ:カタログ請求者の情報を、カタログ送付後に直ちに、データベースから消去する。
ウ:カタログ請求者へ送付する電子メールにディジタル署名を付ける。
エ:データベースに登録されている情報を定期的にバックアップする。
cに関する解答群
ア:Webサイトの管理に使用する保守用PCは、必要なときだけ起動する。
イ:WebサーバとDBサーバにインストールするミドルウェアは、必要最低限にする。
ウ:WebサーバとDBサーバのハードディスクのデフラグメンテーションを、定期的に行う。
エ:データベースへのアクセスログを取得する。
模範解答
a:エ、b:ア、c:エ
解説
解答の導き方
この問題では、表1の各目的に合う対策を選びます。対策を選ぶときは、「何を防ぐのか」「どの情報を減らすのか」「何を調べられるようにするのか」を分けて考えます。
a:SQLインジェクション攻撃からの防御
SQL(Structured Query Language:データベースを操作するための言語)を使って、データベースへの検索や登録を行います。SQLインジェクションとは、入力欄に不正な文字列を入れ、意図しないSQLを実行させる攻撃です。
表1には、すでに「SQL文の組立てはプレースホルダで実装する」とあります。プレースホルダは、SQLの命令と入力された値を分けて扱う方法です。利用者の入力をSQLの命令として誤って解釈させにくくできます。
選択肢のエは、SQLを文字列連結で組み立てる場合に、連結する文字列へエスケープ処理を施す対策です。エスケープ処理とは、特別な意味をもつ記号を、命令として扱われない形に変えることです。文字列連結を使う場合の対策として、SQLインジェクションの防止に関係します。
一方、アはファイル名の指定、イはプログラム言語の性質、ウはWebページへの出力に関する対策です。ウは、Webページに不正なスクリプトを埋め込む攻撃への対策として使われますが、SQLインジェクションへの対策ではありません。したがって、aにはエが入ります。
b:情報流出リスクの低減
本文には、A社が「カタログ請求者から要求があったときにだけ」情報を消去するとあります。つまり、要求がなければ情報が長期間データベースに残り続ける可能性があります。
選択肢のアは、必要な保管期間を決め、その期間を過ぎたら情報を消去する対策です。保管する期間を必要以上に長くしなければ、万一情報が流出しても、流出の対象となる情報を減らせます。これが情報流出リスクの低減につながります。
イのようにカタログ送付後すぐに消去すると、本文にある購入支援や、後日別のカタログを請求するときのログインに必要な情報まで使えなくなるおそれがあります。ウのディジタル署名は、メールの送信者や内容を確認するためのもので、データベースに保管する情報の流出を減らす対策ではありません。エのバックアップは、データを失ったときに復元するための対策であり、情報流出を減らすものではありません。したがって、bにはアが入ります。
c:情報流出の原因と流出した情報の範囲の特定
本文には、Webサーバとデータベースで「アクセスログを取得しない設定」にしていたため、流出した情報の範囲を特定できなかったとあります。アクセスログは、いつ、どのようなアクセスや操作があったかを記録したものです。
データベースへのアクセスログを取得すれば、不審なアクセスや検索の記録を調べられます。攻撃の原因や、どの情報が取得された可能性があるかを確認する手掛かりになります。そのため、cにはエが入ります。
アの保守用PCを必要なときだけ起動することや、イのミドルウェアを必要最低限にすることは、管理上のリスクを減らす対策です。しかし、発生した事故の原因や流出範囲を調べるための記録を残す対策ではありません。ウのデフラグメンテーションは、ハードディスク上のデータ配置を整理するもので、アクセスの記録にはなりません。
誤りやすいポイント
- SQLインジェクションと、Webページに不正なスクリプトを表示させる攻撃を混同しやすいです。Webページへの出力を安全にするエスケープ処理は、主に後者への対策です。
- プレースホルダと、文字列連結時のエスケープ処理は、どちらもSQLインジェクション対策に関係します。この設問では、プレースホルダを使う対策がすでに表にあり、選択肢から追加する対策として、文字列連結時のエスケープ処理を選びます。
- 情報を消せばよいと考えて、カタログ送付直後の消去を選ばないようにします。本文では、送付後も購入支援を行い、登録情報を次のカタログ請求などに利用します。必要な利用を妨げず、保管し続ける期間を適切に決めることが大切です。
- バックアップは、データの消失に備えるものです。情報流出の予防や、流出範囲の特定とは目的が異なります。
- ログの取得は、攻撃を直接防ぐ対策ではありません。事故後に原因や影響を調査するための記録を残す対策です。
FAQ
Q: プレースホルダがあれば、エスケープ処理は不要ですか?
A: プレースホルダを適切に使えば、入力値がSQLの命令として扱われる危険を抑えられます。この設問では、プレースホルダに加えて、文字列連結を使う場合のエスケープ処理も対策として挙げています。
A: プレースホルダを適切に使えば、入力値がSQLの命令として扱われる危険を抑えられます。この設問では、プレースホルダに加えて、文字列連結を使う場合のエスケープ処理も対策として挙げています。
Q: 保管期間を過ぎた情報を消すと、購入支援に支障が出ませんか?
A: 必要な業務に使う期間を考えて保管期間を定めます。必要な期間が過ぎた情報を消すことで、使わない情報を長期間残すリスクを抑えられます。
A: 必要な業務に使う期間を考えて保管期間を定めます。必要な期間が過ぎた情報を消すことで、使わない情報を長期間残すリスクを抑えられます。
Q: アクセスログを取れば、流出した情報を必ず特定できますか?
A: 必ず特定できるとは限りません。ただし、いつどのようなアクセスがあったかを調べる記録が残るため、原因や影響範囲の特定に役立ちます。
A: 必ず特定できるとは限りません。ただし、いつどのようなアクセスがあったかを調べる記録が残るため、原因や影響範囲の特定に役立ちます。
関連キーワード: SQLインジェクション、プレースホルダ、エスケープ処理、情報の保管期間、アクセスログ
設問3:
問題文を見る B氏は上司から、表1にまとめた対策案だけで十分なのか検討せよとの指示を受けた。そこで、社外のセキュリティコンサルタント会社に相談したところ、“Webアプリに脆弱性がないか調査をした方がよい”と助言され、Webアプリの一部について脆弱性の調査を依頼した。その結果、クロスサイトスクリプティングの脆弱性が存在することが判明した。また、“Webアプリの他の部分にも脆弱性があることが疑われるので、Webアプリ全体の調査を行うとともに、新たな対策を講じた方がよい”と助言された。新たな対策として適切な答えを、解答群の中から選べ。
解答群
ア:DBサーバを、Webサーバと同じく、DMZに設置する。
イ:不正な通信を遮断するために、WAF(Web Application Firewall)を導入する。
ウ:Webサーバを増設して冗長化した構成にする。
エ:保守用PCのログインパスワードには英数字及び記号を使用し、推測が難しい複雑なものを設定する。
模範解答
イ
解説
解答の導き方
-
今回の追加対策は、Webアプリに見つかった脆弱性を悪用される危険を下げるものです。もともと、WebアプリにはSQLインジェクションの脆弱性がありました。SQL(Structured Query Language:データベースのデータを検索・登録するための言語)を使った命令が、入力内容によって不正に組み替えられると、攻撃者にデータベースを操作されるおそれがあります。さらに、調査したWebアプリの一部から「クロスサイトスクリプティングの脆弱性が存在する」ことも分かりました。クロスサイトスクリプティング(Cross-Site Scripting:Webページに悪意のあるスクリプトを埋め込み、利用者のブラウザで実行させる攻撃)は、SQLインジェクションとは別の攻撃です。Webアプリの一部だけを調べて別の脆弱性が見つかったため、ほかの部分にも脆弱性がある可能性を考える必要があります。
-
このように、特定の脆弱性だけでなく、Webアプリを狙う不正な通信への備えを追加する対策が適切です。WAF(Web Application Firewall:Webアプリへの通信を検査し、不正な攻撃を遮断する仕組み)は、Webアプリに届く通信の内容を調べ、攻撃と判断した通信を遮断します。そのため、SQLインジェクションやクロスサイトスクリプティングなど、Webアプリの脆弱性を悪用する攻撃への防御を強化できます。
-
選択肢を確認すると、アはDBサーバをDMZ(Demilitarized Zone:インターネットに公開するサーバを置く、社内LANとの間の領域)に移す案です。DBサーバを外部に近い領域に置くことになり、Webアプリの脆弱性への対策にもなりません。ウのWebサーバの増設は、故障などに備えてサービスを続けやすくするための対策です。脆弱性を悪用する攻撃を防ぐ対策ではありません。エの保守用PCのパスワードを複雑にすることは、そのPCへの不正ログインを防ぐのに役立ちます。しかし、今回問題になっているのは、インターネットからWebアプリの脆弱性を狙う攻撃です。対策の対象が異なります。
以上から、Webアプリへの攻撃を遮断する対策として適切なのは、WAFを導入するイです。
誤りやすいポイント
- Webサーバを増設することは、サービスを止まりにくくする対策です。Webアプリの脆弱性を直したり、攻撃を遮断したりする対策とは異なります。
- パスワードを複雑にする対策は、保守用PCへのログインを守るものです。インターネットからWebアプリに送られる攻撃への対策とは分けて考えます。
- WAFを導入しても、Webアプリ自体の脆弱性がなくなるわけではありません。脆弱性の調査や修正も必要です。
FAQ
Q: WAFを入れれば、Webアプリの脆弱性を調べなくてもよいですか?
A: いいえ。WAFは攻撃通信を遮断するための追加対策です。脆弱性そのものを見つけて修正する調査や作業の代わりにはなりません。
A: いいえ。WAFは攻撃通信を遮断するための追加対策です。脆弱性そのものを見つけて修正する調査や作業の代わりにはなりません。
Q: WAFと一般的なファイアウォールは何が違いますか?
A: 一般的なファイアウォールは、通信の接続先や通過の可否を制御します。WAFは、Webアプリに届く通信の内容を調べ、Webアプリを狙う攻撃を遮断する役割を持ちます。
A: 一般的なファイアウォールは、通信の接続先や通過の可否を制御します。WAFは、Webアプリに届く通信の内容を調べ、Webアプリを狙う攻撃を遮断する役割を持ちます。
Q: WAFはSQLインジェクションだけを防ぐものですか?
A: いいえ。SQLインジェクションだけでなく、クロスサイトスクリプティングなど、Webアプリを狙うさまざまな攻撃への対策に使われます。ただし、設定や攻撃の内容によっては防げない場合もあります。
A: いいえ。SQLインジェクションだけでなく、クロスサイトスクリプティングなど、Webアプリを狙うさまざまな攻撃への対策に使われます。ただし、設定や攻撃の内容によっては防げない場合もあります。
関連キーワード: WAF、SQLインジェクション、クロスサイトスクリプティング、Webアプリケーション脆弱性、ファイアウォール




