AP過去問 令和6年度秋期 午後 問1 情報セキュリティ
AP 過去問題 午後に戻る。
AP過去問_令和6年度秋期_午後_問2_経営戦略の同じ回の次の問題へ移動。
令和6年度秋期 午後 問1 情報セキュリティ(AIプロンプト向け)
■
令和6年度秋期 午後 問1 情報セキュリティ(問題原文)
■Webサイトのセキュリティに関する次の記述を読んで、設問に答えよ。
F社は、日用雑貨を製造・販売する中堅企業である。このたび、販路拡大を目的として自社製品を販売するWebサイト(以下、本システムという)を新規に開発した。本システムは、D社クラウドサービス上に構築しており、Webサーバとデータベース(以下、DBという)サーバから成り、D社クラウドサービスが提供するファイアウォール(以下、FWという)及びWebアプリケーションファイアウォール(以下、WAFという)を経由してインターネットからアクセスされる予定である。
本システムの開発環境のネットワーク構成(抜粋)を図1に示す。なお、本システムはリリース前であり、F社の開発環境の特定のIPアドレスからだけアクセスできるようにFWで制限している。
本システムの主な使用を次に示す。
・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。
・パスワードとして使用できる文字は、英数字に一部の記号を加えた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.推測したパスワードを利用して、会員になりすまして本システムにログインする。
会員番号 | パスワードのハッシュ値 | 性 | 名 |
21717202 | 5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8 | T中 | T郎 |
21717203 | 2597a7caf656e89e9ab35e12326d557ebfe9b7b5dcbe4c564e74070fa5cfcbe5 | S藤 | H子 |
30781985 | 5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8 | 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字以内で答えよ。
設問2 本文中の下線②について、会員テーブルのデータが漏えいした場合、情報セキュリティの3要素のどれが直接的に侵害されたといえるか。漢字3字で答えよ。
設問3 本文中のa 、b に入れる適切な字句を回答群の中から選び、記号で答えよ。
- 回答群
- ア エスケープ
- イ 許可リスト
- ウ サニタイズ
- エ 中間者
- オ ブルートフォース
- カ プレースホルダ
- キ リプレイ
設問4 本シナリオによって、表1に示す会員テーブルのデータが窃取され、会員番号"21717202"の会員のパスワードが推測され不正アクセスを受けたとすると、推測されたパスワードを利用して不正アクセスを受けるおそれが最も強い他の会員は誰か。該当する会員の会員番号を回答群の中から選び、記号で答えよ。
- 回答群
- ア 21717203
- イ 30781985
- ウ 36150833
- エ 45905900
- オ 45917046
設問5 本文中の下線③の考え方を、漢字4字で答えよ。
設問6 [レインボーテーブル攻撃への対策の検討]について答えよ。
(1)
本文中の下線④について、ペッパーを付加してハッシュ化することで本シナリオにおいてレインボーテーブル攻撃が困難になる理由を、ソルトを用いた処理との違いに着目して35字以内で答えよ。
(2)
本文中の c に入れる適切な数をXyのような指数を用いた表記で答えよ。
回答・解説
設問1
文字数制限ありの記述問題ですね。25文字というやや長めの回答です。
ハッシュ値の特性を理解していないと答えられない設問でした。ハッシュ値が何かを割ったあまりのかたまり程度にしか理解していない場合には適切な用語が使えないので不完全な回答になりやすいかもしれません。ハッシュ値は割ったあまりのカタマリであることに違いはないのですが、それを元に戻すというのが困難である特性があるかを知っているかを確かめていることになります。こういうのを不可逆性と言っていますので、この専門用語が出てくれば、より求められている答えに近づけると思われます。したがって回答は
1 5 10 11 20
ハッシュ値から元の値 の復元が困難な不可逆
性をもつ
21 25
というような回答が書けていれば正解になるでしょう。不可逆性というキーワードがなくても元のデータに復元することが困難であることを示していれば正解のような気もしますが、不可逆性というキーワードが必須基準ならダメかもしれません。自分ならなくても正解だと思います。
設問2
情報セキュリティの3要素を知っているかどうかで、答えれるかどうかに大きく関わってきますが、パスワードが漏れるのがどういう性分と言えるのかを考えることができれば答えにたどり着けるかもしれません。3要素は
- 機密性(Confidenciality)
- 完全性(Integrity)
- 可用性(Availability)
です。機密性は機密情報が洩れないようになっているか。完全性はシステムの要件を満たしているか。可用性はいつでも使える状態を維持できるか。です。答えとしては
機密性
となります。キーワードを知っているかで、決まるのでやや難易度はあると思いますが、情報セキュリティの基本の3要素だということですので、知らない人は勉強不足だという判断になるのかもしれません。ちなみに管理人は知りませんでしたが、機密性っぽいなってことでこれは答えれました。なので0知識からでもいける可能性のある問題でもあります。なんとか性っていうキーワードが好きだよな。情報処理試験キーワードっぽい。でも、よくある情報処理試験のテキストでさえセキュリティの3要素とか書いてなかったから答えれない人も多かったかもしれない。総じていうと設問1も設問2もムズイ。いやな予感のしてくる午後の序盤ですね。
設問3
パスワードを総当たりで試行する a 攻撃と一部の処理で外部からの入力値をそのままSQL文に埋め込んでいる箇所が存在していた。そこで、対策として、b を利用する方式を採用することにした。
という穴埋です。aはパスワード総当たり攻撃の別名を知っている必要がある問題でした。ブルートフォース攻撃です。覚えるしかないね。bはSQLインジェクションの対処方法の名前を知っている必要がある問題です。サニタイズですね。これも覚えるしかありません。したがって
a:オ ブルートフォース
b:ウ サニタイズ
となります。
午前の問題としても問われることのありそうなキーワードですので、勉強していれば、遭遇しやすいキーワードでもあるので回答できた人もいたのかなっていうレベルの問題です。知らないと無理なので難しい問題かもしれません。ここまで全部ムズイ。いいね。令和6年秋期。しびれるぜ。問題作成者スゲェいいとこついてくるな。やるな!
設問4
これはラッキー問題に近いと思います。パスワードのハッシュがパスワードそのものだと思えれば、簡単な問題でした。ハッシュって何?っていう全くの情報処理音痴なら答えられなかったかもしれません。厳しいことを言うようですが、解けない人はもっと頑張りが必要でしょう。まぁ難しい問題は答えられない管理人も結局は初心者と同じレベルってことですよ。一緒にまだまだ勉強していきましょう。なので、21717202の人とパスワードが同じ人がすぐにやられるということです。表から30781985の人が全く同じパスワードを使っているので、ハッシュ値も同じになっています。いくら不可逆性があるとはいえ、まったく同じパスワードのハッシュは同じなので、不可逆でも、あーおんなじ奴めーっけとやられてしまいます。したがって答えは
イ 30781985
ですね。簡単な部類の問題でした。
数値のハッシュの計算はあまりであることはテキストにも載っていますが、文字列のハッシュとはどのような計算なのでしょうか?ここで確認しておきましょう。
例えば、文字列 "password" をSHA-256でハッシュすると、次のような値が得られます。
Pythonでの計算例
import hashlib
# 入力
password = "password"
# ハッシュ計算
hash_object = hashlib.sha256(password.encode())
hash_hex = hash_object.hexdigest()
print(f"ハッシュ値: {hash_hex}")
出力
ハッシュ値: 5e884898da28047151d0e56f8dc6292773603d0d6aabbddc2fbcd80c4b11aef3
となります。
ものすごく長い値がが返ってきます。
SHA-256は手順で言うと、小難しいですが、
- 入力データの分割
- 入力データ(例えば、パスワード)を 512ビット(64バイト)ごとのブロックに分割。
- パディング(補填)を行い、入力全体の長さが512ビットの倍数になるようにする。
- 初期ハッシュ値(定数)の保持
- SHA-256には、固定の初期値(64ビット×8個)が定義されています。この初期値は、アルゴリズム内でハッシュ値を計算する基礎として使用されます。
- H0 = [6a09e667, bb67ae85, 3c6ef372, a54ff53a, 510e527f, 9b05688c, 1f83d9ab, 5be0cd19]
- メッセージスケジュールの作成
- 各512ビットブロックを使って64個の「ワード」(32ビット値)を作成。
- 最初の16ワードはブロック内のデータ。
- 残りの48ワードは、次の式で計算します(ビット操作を含む)
- Wt=σ1(Wt−2)+Wt−7+σ0(Wt−15)+Wt−16
- ここで、σ0とσ1 はビットのシフトや回転を含む関数。
- 圧縮関数
- 各ブロックごとに64回の圧縮ステップを実行します。以下の操作が行われます
- 各ラウンドで、メッセージワード(Wt)と定数(Kt)を使ってハッシュ値を更新。
- 64個の定数Ktは、特定の数学的関数(立方根など)から事前計算されたもの。
- 例: 各ステップの更新
- T1 = h + Σ_1(e) + Ch(e, f, g) + K_t + W_t
- T2 = Σ_0(a) + Maj(a, b, c)
- h = g
- g = f
- f = e
- e = d + T1
- d = c
- c = b
- b = a
- a = T1 + T2
- Σ0 、Σ1 :ビットのシフトや回転。
- Ch(x,y,z):条件付き選択関数。
- Maj(x,y,z):多数決関数。
- 最終ハッシュ値の計算
- 最後のブロックまで処理した後、すべてのハッシュ値を結合して結果を得ます。これが、固定長の256ビット(64文字の16進数)ハッシュ値です。
AP過去問_令和6年度秋期_午後_問2_経営戦略の同じ回の次の問題へ移動。
AP 過去問題 午後に戻る。