令和6年度 秋期 応用情報技術者試験 午後問題 問1 ペネトレーションテストとパスワード管理

テクノロジセキュリティ技術データベース

この問題は2024(R6)秋 応用情報技術者 午後に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

ECサイトへのペネトレーションテスト結果を素材に、パスワード保存の安全性を掘り下げる問題です。ハッシュ化・ソルト・ペッパーがそれぞれ何の攻撃を防ぐのかを区別できるかが得点の分かれ目になります。この記事では、会員テーブル漏えいから不正アクセスに至るシナリオを段階に分け、各設問がどの段階の理解を試しているかを整理しながら、模範解答と採点基準を読み解きます。

この記事で押さえる論点

  • ハッシュ化保存が漏えい時の被害を抑える仕組みを説明できる
  • ソルト・ペッパーとレインボーテーブル攻撃の関係を整理する
  • 情報セキュリティの3要素を事例の被害に対応付ける
  • 攻撃シナリオを読み、どの対策がどの段階を防ぐかを判断する

問題本文

Webサイトのセキュリティに関する次の記述を読んで、設問に答えよ。

F社は、日用雑貨を製造・販売する中堅企業である。このたび、販路拡大を目的として自社製品を販売するWebサイト(以下、本システムという)を新規に開発した。本システムは、D社クラウドサービス上に構築しており、Webサーバとデータベース(以下、DBという)サーバから成り、D社クラウドサービスが提供するファイアウォール(以下、FWという)及びWebアプリケーションファイアウォール(以下、WAFという)を経由してインターネットからアクセスされる予定である。
本システムの開発環境のネットワーク構成(抜粋)を図1に示す。なお、本システムはリリース前であり、F社開発環境の特定のIPアドレスからだけアクセスできるようにFWで制限している。

図1 本システムの開発環境のネットワーク構成(抜粋)
図の説明テキスト

F社開発環境とD社クラウドサービスがインターネットを介して接続されているネットワーク構成図。

  • F社開発環境内の「PC」は「インターネット」に接続されている。
  • 「インターネット」は、D社クラウドサービス内の「FW」に接続されている。
  • 「FW」は「WAF」に接続され、「WAF」は本システム内の「Webサーバ」に接続されている。
  • 本システム内の「Webサーバ」は「DBサーバ」に接続されている。

本システムの主な仕様を次に示す。

  • 会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。
  • パスワードとして使用できる文字は、英数字に一部の記号を加えた70種類である。
  • パスワードは、6字以上16字以下で設定する。
  • 会員テーブルは、会員番号、メールアドレス、パスワードのハッシュ値、姓、名、住所、電話番号の7フィールドで構成されている。パスワードのハッシュ値は、会員が設定したパスワードをハッシュ関数によってハッシュ化したものである。

F社情報セキュリティ部のG部長は、本システムのリリース前にペネトレーションテストを実施することを決定し、H主任をリーダーに任命した。H主任は、セキュリティベンダーであるU社に本システムのペネトレーションテストの実施を依頼した。

ペネトレーションテストは、U社内のPCからインターネット、FW及びWAFを経由して本システムにアクセスする経路で実施した。

ペネトレーションテスト期間中は、FW及びWAFに対して次の変更を行った。

  • FWに対する変更
    通信を許可するアクセス元IPアドレスとして、ペネトレーションテストに用いるU社のIPアドレスを追加する。
  • WAFに対する変更
    攻撃を検知した際には、通信の遮断は行わず、検知したことだけを記録する。

〔ペネトレーションテストの結果〕

ペネトレーションテストの結果、次の手順(以下、本シナリオという)で会員のパスワードが推測されて、不正にアクセスされてしまうことが確認された。

  1. SQLインジェクション攻撃によって会員テーブルのデータを取得する。このとき取得した会員テーブルのデータ(抜粋)を表1に示す。
  2. レインボーテーブル攻撃によって、手順1で取得した会員テーブル中のパスワードのハッシュ値から元のパスワードを推測する。
  3. 推測したパスワードを利用して、会員になりすまして本システムにログインする。
表1 取得した会員テーブルのデータ(抜粋)
図の説明テキスト
会員番号 パスワードのハッシュ値
21717202 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 T中 T郎
21717203 2597a7caf656e89e9ab35e12326d557ebfe9b7b5dcbe4c564e74070fa5cfcbe5 S藤 H子
30781985 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 S藤 J郎
36150833 ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270 S木 H子
45905900 ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270 Y田 J郎
45917046 d82494f05d6917ba02f7aaa29689ccb444bb73f20380876cb05d1f37537b7892 T中 T郎

稼働中のシステムのログインフォームに対してパスワードを総当たりで試行するa攻撃では、システム側で試行回数に制限を設けて対策することができるが、レインボーテーブル攻撃ではそれができない。

H主任は、本システムの修正方針を整理するために、SQLインジェクション攻撃及びレインボーテーブル攻撃への対策を検討することにした。なお、ペネトレーションテスト期間中にWAFでSQLインジェクション攻撃が検知できていたが、仮に対策の一つが破られても他の対策で攻撃を防ぐという考え方に基づき、攻撃への対策をWAFだけに頼らず本システム自体でも行うことにした。

〔SQLインジェクション攻撃への対策の検討〕

本システムのソースコードを調査したところ、一部の処理で外部からの入力値をそのままSQL文に埋め込んでいる箇所が存在していた。そこで、対策として、bを利用する方式を採用することにした。この方式では、外部からの入力値が埋め込まれる箇所を専用の記号に置き換えたSQL文の雛形をあらかじめ作成しておき、専用の記号で置き換えた箇所にDB管理システム側で外部からの入力値を割り当てる。

〔レインボーテーブル攻撃への対策の検討〕

本システムでは会員のパスワードをハッシュ化して保存しているが、パスワードそのものにハッシュ関数を1回適用しただけであったので、レインボーテーブル攻撃に対して脆弱であった。そこで、パスワードをハッシュ化する際に、次の三つの処理を組み合わせて実施することにした。

  1. ソルトを用いた処理
    • パスワードをハッシュ化する際に、ソルトを付加した上でハッシュ化する。
    • ソルトとして、会員ごとに異なるランダムな文字列を用意し、会員テーブルに格納する。
  2. ペッパーを用いた処理
    • パスワードをハッシュ化する際に、ペッパーを付加した上でハッシュ化する。
    • ペッパーとして、全ての会員に共通のランダムな文字列を用意し、Webサーバ内の外部からアクセスできない安全な領域に格納する。
  3. ストレッチング
    • ハッシュ関数を複数回適用する。

さらに、ハッシュ化処理の変更に加えて、会員が設定可能なパスワード長を10字以上64字以下に変更した。本システムにおいて、パスワード長が10字の場合、6字の場合と比べてパスワードとして使用可能な文字列のパターン数がc倍になるのでレインボーテーブル攻撃がより困難になる。

H主任は、これらの対策を取りまとめてG部長に報告し、承認された。

設問と解答・解説

設問1

本文中の下線①について、会員のパスワードをハッシュ関数でハッシュ化して保存することは、情報漏えいの脅威に対してメリットがある。それは、ハッシュ値にどのような特性があるからか。25字以内で答えよ。

模範解答

ハッシュ値からパスワードの割出しは難しい。

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: ハッシュ値から元のデータを割り出すことが困難であるという一方向性の特性を正しく理解し、記述している。
  • 1: パスワードがわからないことには触れているが、ハッシュ値の特性(割り出しの困難さ)についての説明が不十分である。
  • 0: ハッシュ値の特性について誤った理解を示している、または未解答。

論理性(構造)(1点)

  • 1: 情報漏えい時のメリットとして、パスワードが保護される論理構造が明確に示されている。
  • 0: メリットとしての論理構造が不明確、または破綻している。
  • 0: 未解答または無関連な記述。

解説

ハッシュ関数は、入力されたデータから固定長の短い文字列(ハッシュ値)を生成する関数です。主な特性として、一方向性(不可逆性)があり、ハッシュ値から元のデータを復元(割り出し)することが計算量的に非常に困難です。

本問では、パスワードをそのまま(平文で)保存するのではなく、ハッシュ化して保存するメリットが問われています。万が一データベースからハッシュ値が漏えいしても、攻撃者が元のパスワードを割り出すことが難しいため、不正アクセスやリスト型攻撃などの二次被害を防ぐ効果があります。

高得点のポイント

  • ハッシュ関数の不可逆性に着目していること。
  • ハッシュ値から元のパスワードを復元(割り出し)することが困難である旨を明記すること。

設問1は,正答率がやや高かった。ハッシュ値は改ざん検知などのパスワード管理以外の用途にも利用されており,それぞれの用途において必要となる特性を理解して使用してほしい。

設問2

本文中の下線②について、会員テーブルのデータが漏えいした場合、情報セキュリティの3要素のどれが直接的に侵害されたといえるか。漢字3字で答えよ。

模範解答

機密性

採点基準(配点 3点)

知識・理解度(内容)(3点)

  • 3: 「機密性」と正しく解答している。
  • 0: 情報セキュリティの3要素ではない用語、または完全性・可用性など誤った用語を記述している。
  • 0: 未解答。

解説

情報セキュリティの3要素とは、機密性 (Confidentiality)完全性 (Integrity)可用性 (Availability) のことです。

本問のように会員テーブルのデータが「漏えい」した場合、許可されていない者に対して情報が開示されてしまう状態となります。これは情報セキュリティの3要素のうち機密性が直接的に侵害された状態に該当します。

高得点のポイント

  • 情報セキュリティの3要素を正確に把握していること。
  • 漏えいが「機密性」の侵害に該当することを理解していること。

設問2は,正答率がやや高かったが,情報セキュリティの3要素ではない誤った解答が散見された。情報セキュリティの3要素は本分野における基礎的な用語であり,正確に理解してほしい。

設問3

本文中のabに入れる適切な字句を解答群の中から選び、記号で答えよ。

(1)

  1. エスケープ
  2. 許可リスト
  3. サニタイズ
  4. 中間者
  5. ブルートフォース
  6. プレースホルダ
  7. リプレイ

模範解答

選択肢オ: ブルートフォース

配点 2

解説

パスワードを解読するための手法の一つとして、考えられる全ての文字の組み合わせを順に試す攻撃をブルートフォース攻撃(総当たり攻撃)と呼びます。

各選択肢の解説

  • ア エスケープ: 特別な意味を持つ文字を無効化する処理のこと。主にインジェクション対策などで用いられます。
  • イ 許可リスト: アクセスや実行を許可する対象を列挙したリスト(ホワイトリスト)のこと。
  • ウ サニタイズ: 入力データから有害な文字やコードを無害化すること。
  • エ 中間者: 通信を行う二者の間に割り込んで、通信内容を盗聴したり改ざんしたりする攻撃(中間者攻撃)のこと。
  • オ ブルートフォース: 全ての組み合わせを試す総当たり攻撃のこと。正解です。
  • カ プレースホルダ: SQL文などを組み立てる際に、後から値を割り当てるための場所取りのこと。SQLインジェクション対策に有効です。
  • キ リプレイ: 過去の通信データを盗聴し、そのまま再送信することで正当なユーザーになりすます攻撃(リプレイ攻撃)のこと。

(2)

  1. エスケープ
  2. 許可リスト
  3. サニタイズ
  4. 中間者
  5. ブルートフォース
  6. プレースホルダ
  7. リプレイ

模範解答

選択肢カ: プレースホルダ

配点 2

解説

データベースを操作するSQL文に不正な文字列を注入して意図しない操作を行わせる「SQLインジェクション攻撃」への根本的な対策として、プレースホルダの利用が挙げられます。あらかじめSQL文の骨組みを作り、変動する値の部分をプレースホルダ(バインド変数)にしておくことで、入力値がSQL命令として解釈されるのを防ぎます。

各選択肢の解説

  • ア エスケープ: 特殊文字を無効化する処理ですが、SQLインジェクション対策としてはプレースホルダ(バインドメカニズム)の利用がより根本的かつ推奨される対策となります。
  • イ 許可リスト: アクセス制御などに用いられるリスト。
  • ウ サニタイズ: 無害化処理のことですが、文脈上データベースのクエリパラメータに対する対策としてはプレースホルダが適切です。
  • エ 中間者: 中間者攻撃のこと。通信経路上での脅威。
  • オ ブルートフォース: パスワードなどを総当たりで試す攻撃。
  • カ プレースホルダ: パラメータ化されたクエリに用いられる値の代入場所。正解です。
  • キ リプレイ: 盗聴したデータを再送信する攻撃。

設問4

本シナリオによって、表1に示す会員テーブルのデータが窃取され、会員番号“21717202”の会員のパスワードが推測され不正アクセスを受けたとすると、推測されたパスワードを利用して不正アクセスを受けるおそれが最も強い他の会員は誰か。該当する会員の会員番号を解答群の中から選び、記号で答えよ。

  1. 21717203
  2. 30781985
  3. 36150833
  4. 45905900
  5. 45917046

模範解答

選択肢イ: 30781985

配点 2

解説

パスワードを単にハッシュ化して保存している(ソルトなどを付加していない)場合、元のパスワードが同じであれば、生成されるハッシュ値も完全に一致します。

本問では、会員番号“21717202”のパスワードが推測されたとあります。この会員と「同じハッシュ値」を持っている他の会員は、推測されたパスワードと同じパスワードを設定している可能性が非常に高く、不正アクセスの被害を受けるおそれが最も強くなります。したがって、表中で会員番号“21717202”と同じハッシュ値を持つ会員番号を探すことが正解の根拠となります。

各選択肢の解説

  • ア 21717203: ハッシュ値が異なります。
  • イ 30781985: 会員番号“21717202”とハッシュ値が一致しているため、同じパスワードを使用していると考えられます。正解です。
  • ウ 36150833: ハッシュ値が異なります。
  • エ 45905900: ハッシュ値が異なります。
  • オ 45917046: ハッシュ値が異なります。

設問5

本文中の下線③の考え方を、漢字4字で答えよ。

模範解答

多層防御

採点基準(配点 2点)

知識・理解度(内容)(2点)

  • 2: 「多層防御」と正しく解答している。
  • 0: 「多層防御」以外の用語、または不適切な用語を記述している。
  • 0: 未解答。

解説

サイバー攻撃に対して、単一のセキュリティ対策に依存するのではなく、ネットワーク境界、サーバー、アプリケーション、データなどの各階層で複数のセキュリティ対策を組み合わせる考え方を多層防御 (Defense in Depth)と呼びます。

万が一、一つの防御壁が突破されたとしても、別の防御壁で脅威を検知・遮断することで、システム全体としての被害を防いだり最小限に抑えたりすることができます。

高得点のポイント

  • セキュリティにおける複数の対策を組み合わせる概念を正しく理解していること。
  • 「多層防御」という専門用語を正確に記述できること。

設問6

(1)

本文中の下線④について、ペッパーを付加してハッシュ化することで本シナリオにおいてレインボーテーブル攻撃が困難になる理由を、ソルトを用いた処理との違いに着目して35字以内で答えよ。

模範解答

会員テーブルの窃取だけではペッパーを得ることができないから

採点基準(配点 3点)

知識・理解度(内容)(2点)

  • 2: 会員テーブルにはペッパーが保存されていない(窃取されない)ため、ハッシュ値の計算に必要な情報が不足するという点を正しく理解し記述している。
  • 1: ペッパーの秘匿性には触れているが、会員テーブルの窃取との関連についての説明が不十分である。
  • 0: ソルトとペッパーの違いを誤解している、または未解答。

論理性(構造)(1点)

  • 1: 「〜だから(困難になる)」という理由を説明する論理構造が成立している。
  • 0: 文脈が破綻している、またはレインボーテーブル攻撃が困難になる理由に結びついていない。
  • 0: 未解答。

解説

パスワードをハッシュ化する際、あらかじめ用意したランダムな文字列(ソルト)を付加することでレインボーテーブル攻撃(事前に計算されたハッシュ値のリストを用いた攻撃)を困難にすることができます。しかし、ソルトは通常、パスワードと同じデータベース(会員テーブル)に保存されるため、データベース全体が漏えいした場合は攻撃者にソルトも知られてしまいます。

一方、ペッパーはパスワードとは別の場所(アプリケーションのソースコード内や別のサーバーなど)に保存される秘密の文字列です。そのため、会員テーブルが窃取されただけではペッパーの値を知ることができず、攻撃者はレインボーテーブルを構築して攻撃することが極めて困難になります。

高得点のポイント

  • 会員テーブルが窃取されてもペッパーの値は漏えいしないという前提に触れていること。
  • ソルトが同テーブルに保存されることとの対比として、「ペッパーが得られない」論理を明確に記述していること。

(2)

本文中のcに入れる適切な数を、x^yのような指数を用いた表記で答えよ。

模範解答

70^4

採点基準(配点 3点)

知識・理解度(内容)(3点)

  • 3: 組み合わせ数の計算式として「70^4」を正しく導出できている。
  • 0: 計算式または値が誤っている。
  • 0: 未解答。

解説

総当たり攻撃などで試行しなければならないパスワードの組み合わせ数は、「使用できる文字の種類数」を底とし、「文字列の長さ(文字数)」を指数とした計算式で求められます。

使用できる文字の種類が 70 種類であり、ペッパーの長さ(文字数)が 4 文字である場合、考えられる全ての組み合わせは 70^4 となります。

高得点のポイント

  • 組み合わせの数の計算方法(文字の種類数 ^ 文字数)を正確に理解していること。
  • 指定された形式(x^yのような指数を用いた表記)に従って正しく解答していること。