戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

情報処理安全確保支援士 2009年 春期 午後1 問03


アプリケーション開発時の脆弱性対策に関する次の記述を読んで、設問1,2に答えよ。

 C社は、一般消費者向けにファックスや電話による、生活用品の通信販売を行っている、従業員数50名の会社である。C社の企画開発課は申込方法の多様化を目的として、インターネットで申込みを受けるためのXシステム(図1)を開発してきた。Xシステムでは、Webアプリケーション(以下、Webアプリという)のログイン画面で、利用者IDとパスワードによって利用者認証を行う。C社の開発ポリシーには、サービス開始前に第三者によるセキュリティ検査を実施することが規定されている。そこで、企画開発課のF課長は、部下のG君に指示してWebアプリを対象とした疑似侵入テストと、データベース(以下、DBという)サーバを対象とした脆弱性診断を、セキュリティ専門会社のD社に依頼した。
情報処理安全確保支援士試験(平成21年度 春季 午後1 問03 図01) ↩設問2(1)
〔Webアプリのセキュリティに関する問題点〕  D社のH氏から疑似侵入テストと脆弱性診断の結果が報告された。次は、疑似侵入テストで見つかった脆弱性に関する会話の一部である。     H氏:まず、各ログインセッションを識別するセッション識別子は、ログイン日と会員番号を組み合わせた文字列として構成され、図2のようにcookieにセットされますね。このままでは、悪意をもつ者に他人のセッション識別子を推定され、①容易になりすましアクセスができてしまいます。影響と対策については報告書に記述しましたので参照してください。  G君:分かりました。セッション識別子の生成部分を修正します。
情報処理安全確保支援士試験(平成21年度 春季 午後1 問03 図02)
 H氏 :次は、クロスサイトスクリプティング(以下、XSSという)についてです。Webアプリでは、XSSの脆弱性が多数見つかりました。  G君 :XSS対策については、図3のプログラムのように、利用者からの入力データに<scriptや<iframeなどの文字列が含まれていた場合は、入力チェックで、処理を中止するようにしていました。  H氏 :入力チェックだけで完全なXSS対策を行うのは困難です。まずHTML出力の際に“<”、“>”、“"”、“'”、“&”をそれぞれ“&lt;”、“&gt;”、“&quot;”、“&#39;”、“&amp;”に置換することが基本です。その上で、プログラムがHTMLタグの②ある特定の属性に値を出力する場合は、個別の対処が必要です。  G君 :(報告書を見ながら)なるほど、そのように対応します。
 H氏 :次に、図3のプログラムはHTTPSでアクセスする画面を出力するものですが、その画面を御社で推奨されているブラウザで見たときに、③HTTPSでの正常なアクセスを意味する鍵マークが表示されなくなっています。  F課長 :これは注意が足りませんでした。ほかのプログラムも含めて確認し、修正します。   〔DBセキュリティに関する問題点〕  脆弱性診断によって、DBセキュリティに関する問題点も報告された。次は、その問題点に関する会話である。    H氏 :DBサーバには、利用者の個人情報が平文で格納される仕様になっています。万が一、不正アクセスによって個人情報が流出した場合に備えて、Webアプリで個人情報を暗号化して格納することをお勧めします。  G君 :実は、DBMS側で自動的に暗号化/復号する透過的データ暗号化機能(以下、透過的暗号化という)を利用する予定です。  H氏 :残念ながら④透過的暗号化の効果は限定的です。    H氏は透過的暗号化について説明した。    F課長:防止できる脅威を考えると、Webアプリによる暗号化を採用すべきだな。個人情報の登録と参照をしている箇所を洗い出して、実装してくれ。  G君 :承知しました。ざっと見積もって1週間以上は掛かると予想されます。  F課長:仕方ない。よろしく頼む。  H氏 :今後システム開発をするときにはもっと早い段階で暗号化について検討し、実装すべきですね。次に、Xシステムのログイン認証用のパスワード情報について確認します。DBに格納されているパスワード情報はハッシュ値のように見えますが、どのような方法で算出しているのですか。  G君 :パスワードをMD5関数の引数にして算出しています。  H氏 :パスワードだけからハッシュ値を算出すると、悪意ある第三者にハッシュ値が知られた場合、検索エンジンや専用ツールを使って、元の値であるパスワードを突き止められてしまう可能性があります。  F課長:パスワードを突き止められることで、Xシステムに不正ログインされる可能性があるのは理解できますが、ほかに何か問題があるのですか。  H氏 :利用者の多くは、ほかのサイトでも同じパスワードを使用しているようです。攻撃者は不正に入手した利用者ID、パスワードを使ってほかのサイトに不正ログインを試みるでしょう。したがって、万が一、情報流出した際には、御社に対する非難の声が大きくなりかねませんし、利用者にほかのサイトのパスワードを変更する負担を強いることにもなります。そういう最悪の事態にならないようにするためにも、⑤より工夫してパスワードのハッシュ値を算出した方がよいでしょう。  F課長:なるほど、当社だけの問題ではないのですね。ハッシュ値の算出方法を変更します。    その後、H氏から指摘された脆弱性に関する対策を完了し、C社は正式にサービスを開始した。

設問1:〔Webアプリのセキュリティに関する問題点〕について、(1)〜(3)に答えよ。

問題文を見る
(1)本文中の下線①について、悪意をもつ者が、どのようにして他人になりすますことができるのか。その方法を50字以内で具体的に述べよ。

模範解答

cookieにセットされたセッション識別子のうち、会員番号部分を他人のものに変える。

解説

解答の論理構成

  1. 脆弱性の特定
    • H氏はセッション識別子が「ログイン日と会員番号」を組合せた文字列であると指摘し、これでは「①容易になりすましアクセスができてしまいます」と述べています。
  2. 具体例の確認
    • 図2の例としてsession_id = 20081223309804が提示されており、説明文には「会員番号309804の利用者が2008年12月23日にログインしたときのcookieの値」とあります。
  3. 推測可能性の評価
    • ログイン日はカレンダーの日付、会員番号は連番や顧客情報から類推できるため、攻撃者は他人の「会員番号」を試行しやすい構造です。
  4. なりすまし方法の導出
    • よって攻撃者は自分のブラウザのcookieに保存されたsession_idのうち「会員番号」部分だけを目当ての利用者番号に書換え、当該利用者のセッションとしてアクセスできます。

誤りやすいポイント

  • 「ログイン日」を変える必要があると誤解しやすい
    → 日付は当日の値でよいか、単純に推測できるので主攻撃点は「会員番号」。
  • 既存cookieを削除してから攻撃すると思い込む
    → 既存値を編集するだけで済む。
  • セッション固定攻撃と混同する
    → 本設問は識別子を“推測・改変”して奪うケース。固定攻撃とは別。

FAQ

Q: 連番でない会員番号なら安全ですか?
A: 完全に無作為でも表示画面やメール等で番号が漏れる可能性があり、推測困難とは言えません。乱数や長いハッシュなど不可逆なトークンを使用すべきです。
Q: HTTPSを使っていればセッション識別子改竄は防げますか?
A: HTTPSは通信経路の盗聴・改竄を防ぐだけで、攻撃者が自端末のcookieを改変する行為は防御できません。
Q: ログイン失敗回数を制限すれば十分ですか?
A: 今回は「当てずっぽうでログイン」ではなく「識別子直接改竄」なので、失敗回数制限は効果がありません。

関連キーワード: セッション管理、cookie, なりすまし、推測困難性、脆弱性

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔Webアプリのセキュリティに関する問題点〕について、(1)〜(3)に答えよ。

問題文を見る
(2)本文中の下線③の原因となっている図3のプログラムの部分を、その行番号で答えよ。また、どのように修正すればよいかを25字以内で述べよ。ここで、a0.png〜a9.pngの画像ファイルは同じフォルダに配置されているものとする。

模範解答

行番号:24 修正方法:・画像ファイルを相対パス名で指定する。      ・httpの部分をhttpsにする。

解説

解答の論理構成

  1. 先に問題文で示された状況
    • 「図3のプログラムはHTTPSでアクセスする画面を出力するもの」
    • 「③HTTPSでの正常なアクセスを意味する鍵マークが表示されなくなっています」
      これは“混在コンテンツ(mixed content)”が原因で発生する典型的な症状です。
  2. 混在コンテンツが疑われる理由
    • 安全に表示されるには、HTML内で参照するすべてのリソース(画像・CSS・JSなど)が同じくHTTPSで取得される必要があります。
    • HTTPのリソースを1つでも含むと、ブラウザは“完全に保護されていない”と判断し、鍵マークを外します。
  3. プログラム行の調査
    • 【図3】から画像を読み込む箇所は24, 29, 50行です。
      24 print "<img src="http://www.c-sha-a.com/img/a0.png" ...>"; 29 print "<img src="../img/a1.png" ...>"; 50 print "<img src="https://www.c-sha-a.com/img/a9.png" ...>";
    • 29行は相対パス、50行はHTTPS。唯一24行だけが「http://」で絶対指定されています。
  4. 原因の特定
    • 「http://www.c-sha-a.com/img/a0.png」が混在コンテンツの発生源。
    • よって“行番号:24”。
  5. 修正方針
    • 相対パス「../img/a0.png」にする
      もしくは
    • 先頭を「https://」に変更
      どちらもブラウザへの要求がHTTPSで統一され、鍵マークが回復します。

誤りやすいポイント

  • 「29行も相対パスだから危険では?」と勘違いする。相対パスは現在のスキーム(HTTPS)を自動で継承するので問題はありません。
  • 「24行を削除すればよい」と安易に判断して画像欠落を招く。リソースの取得方法だけを直すのが基本です。
  • “httpとhttpsの違いは速度だけ”と誤認し、警告表示の重要性を軽視する。鍵マークは利用者への重要な安心材料です。

FAQ

Q: 混在コンテンツは画像だけでなくCSSやJSでも発生しますか?
A: はい。スタイルシートやスクリプトもHTTPで取得すると同じく警告対象になります。すべてHTTPSに統一することが必要です。
Q: 相対パスとルート相対パス(/img/~)はどちらが望ましいですか?
A: どちらでもHTTPSは維持されますが、メンテナンス性やCDN利用方針など環境に合わせて選択すると良いでしょう。
Q: 画像をCDNから配信する場合はどう対策すれば良いですか?
A: CDN側にHTTPS証明書を用意し、URLを「https://cdn.example.com/…」と指定します。HTTPのみのCDNは選択しないでください。

関連キーワード: セッション管理、混在コンテンツ、XSS対策、ハッシュ化、HTTPS

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔Webアプリのセキュリティに関する問題点〕について、(1)〜(3)に答えよ。

問題文を見る
(3)本文中の下線②の属性に該当するものを二つ挙げ、それぞれ15字以内で答えよ。

模範解答

①:タグのhref属性 ②:タグのイベントハンドラ属性

解説

解答の論理構成

  • 【問題文】ではH氏がXSS対策について「プログラムがHTMLタグの②ある特定の属性に値を出力する場合は、個別の対処が必要」と助言しています。
  • ここで “個別の対処” が必要となるのは、ブラウザがその属性値をJavaScriptと解釈しやすい部分です。
  • 代表例の一つはリンク先を指定するhref属性です。<a href="javascript:..."> の形式でスクリプトを直接実行できるため、一般的な「 < や > の置換」だけでは防げません。
  • もう一つは各種イベントを扱う「イベントハンドラ属性」です。onclick、onmouseoverなどon* で始まる属性は、値に書かれたスクリプトをそのまま実行します。
  • したがって「②ある特定の属性」に該当する二つは
    ・「タグのhref属性」
    ・「タグのイベントハンドラ属性」
    となります。

誤りやすいポイント

  • srcやactionも危険だと考え、回答数を超えて列挙してしまう。
  • 「イベントハンドラ」を単に「onclick」と書いてしまい、属性の総称でないため減点される。
  • hrefのみを挙げて二つ目を失念する。

FAQ

Q: src属性を含めてはいけませんか?
A: 危険度は高いですが、【設問】は二つを求めており、模範解答は「タグのhref属性」「タグのイベントハンドラ属性」です。
Q: 文字実体参照だけでXSSは防げますか?
A: 属性値内部ではURLスキームやイベントハンドラとして解釈されるため、追加の検査やサニタイズが不可欠です。
Q: イベントハンドラ属性とは具体的に何を指しますか?
A: onclick、onload、onmouseoverなどonで始まるHTML属性の総称です。

関連キーワード: XSS, href属性、イベントハンドラ、サニタイズ、セキュリティ対策

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:〔DBセキュリティに関する問題点〕について、(1)、(2)に答えよ。

問題文を見る
(1)本文中の下線④について、DBに格納されている情報に対する不正閲覧のうち、透過的暗号化によって防止できるものを解答群の中から一つ選び、記号で答えよ。 解答群  ア:SQLインジェクションによる不正閲覧  イ:サーバ管理者によるSQL文を利用した不正閲覧  ウ:図1中の内部セグメントにおける通信傍受による不正閲覧  エ:バックアップ媒体を入手した第三者による不正閲覧

模範解答

エ

解説

解答の論理構成

  1. 問題文では、透過的データ暗号化(TDE)について
    「“④透過的暗号化の効果は限定的です”」と記載されています。
    ここでいう限定的とは、“DBファイルやバックアップ媒体が社外に持ち出された場合”のような、データベースの外側で発生する脅威に対して有効である一方、SQLを経由した正規アクセス時には自動復号されてしまう、という意味です。
  2. 解答群を個別に検討します。
    • ア「SQLインジェクションによる不正閲覧」
    ─ 攻撃者はアプリケーション経由でSQLを実行します。TDEはSQL実行時に自動復号するため防げません。
    • イ「サーバ管理者によるSQL文を利用した不正閲覧」
    ─ 管理者もSQLを使うため同様に自動復号され、防げません。
    • ウ「図1中の内部セグメントにおける通信傍受による不正閲覧」
    ─ TDEはストレージ暗号化であり、ネットワーク経路は暗号化しません。
    • エ「バックアップ媒体を入手した第三者による不正閲覧」
    ─ バックアップファイルは暗号化されたまま保存されるため、TDEが最も効果を発揮するケースです。
  3. 以上より、防止できるのはエのみです。

誤りやすいポイント

  • 「暗号化している=SQLインジェクション対策にもなる」と短絡的に考えてしまう。TDEはストレージ暗号化でありアプリ経由の読み取りは平文になります。
  • 「内部セグメントの通信傍受」も守れると誤解する。TDEは転送経路ではなく“保存データ”の暗号化機能です。
  • “サーバ管理者”というキーワードに惑わされる。管理者がDBへSQLを投げれば自動復号されるため閲覧可能です。

FAQ

Q: 透過的暗号化とアプリケーション側暗号化の一番大きな違いは何ですか?
A: 透過的暗号化はDBMSがデータファイルを自動で暗号化/復号し、アプリケーションの修正が不要な点が利点ですが、SQLを通じた読み取り時に平文になります。アプリ側暗号化は保存時点で暗号化し、復号キーをアプリ側で管理するため、SQLで直接のぞいても平文が得られません。
Q: なぜSQLインジェクションでは透過的暗号化が役立たないのですか?
A: SQLインジェクションは“アプリケーションが意図しないSQLを実行させる攻撃”です。DBMSから見れば正規のSQLなので、自動的に復号して結果を返してしまい、暗号化の効果がありません。
Q: バックアップ媒体を盗まれた場合、追加でどんな対策が必要ですか?
A: 媒体自体を物理的に保護することに加え、暗号鍵をサーバ内で安全に管理し、鍵が一緒に流出しないようにすることが重要です。

関連キーワード: 透過的データ暗号化、SQLインジェクション、バックアップ暗号化、データベース暗号化、ストレージ保護

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:〔DBセキュリティに関する問題点〕について、(1)、(2)に答えよ。

問題文を見る
(2)本文中の下線⑤について、よく使われる文字列をパスワードにしていた場合でも、ハッシュ値から元のパスワードを突き止められないようにするためのハッシュ値の算出方法を、50字以内で述べよ。

模範解答

・鍵付きハッシュ関数でパスワードからハッシュ値を算出して格納する。 ・パスワードとランダムな文字列を連結した文字列からハッシュ値を算出して格納する。

解説

解答の論理構成

  1. 本文では、G君が「パスワードをMD5関数の引数にして算出しています」と述べています。これはハッシュ化自体は行っているものの、入力が“パスワードだけ”なので辞書攻撃やレインボーテーブル攻撃に弱い状態です。
  2. その結果としてH氏は「ハッシュ値が知られた場合、検索エンジンや専用ツールを使って、元の値であるパスワードを突き止められてしまう可能性があります」と指摘し、さらに「⑤より工夫してパスワードのハッシュ値を算出した方がよい」と助言しています。
  3. “より工夫”とは、攻撃者が用意している既成のハッシュ一覧に一致しないようにすることです。代表的な対策は
    ・パスワードにランダムな文字列(ソルト)を連結し、その結果をハッシュ化する
    ・もしくは鍵付きハッシュ関数(HMACなど)を用いてハッシュ値を計算する
     という2案に集約できます。どちらも“パスワードだけ”を入力としないことで、既存テーブルを無効化し、ハッシュ値から元のパスワードを容易に逆算できないようにします。

誤りやすいポイント

  • 「MD5は一方向関数だから安全」と思い込み、ソルトの必要性を見落とす。
  • 「暗号化」と「ハッシュ化」を混同し、鍵を保存した“暗号”方式を答えてしまう。
  • ソルトを固定値にしてしまい、ユーザ間で同じパスワードが同じハッシュになる失敗。

FAQ

Q: ソルトを連結した後にどのハッシュ関数を使えば良いですか?
A: 現行ではSHA-256など衝突耐性の高い関数が推奨されます。MD5は避けるのが無難です。
Q: 鍵付きハッシュ関数とソルト方式のどちらを選ぶべきでしょうか。
A: 運用で秘密鍵を安全に保管できるなら鍵付きハッシュ(HMAC)が強力です。鍵管理が難しい場合は、ユーザ毎にランダム生成するソルト方式が実装しやすいです。
Q: “ストレッチング”は今回の解答に含める必要がありますか?
A: 問題は“ハッシュ値から元を突き止められないようにする”点に焦点を当てているので、まずソルトや鍵付きハッシュが必須です。ストレッチングは追加強化策として理解しておくと良いでしょう。

関連キーワード: ソルト、レインボーテーブル、HMAC, ハッシュ関数、辞書攻撃

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

情報処理安全確保支援士を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について