「AP過去問 令和6年度秋期 午後 問1 情報セキュリティ」の版間の差分

提供:yonewiki
編集の要約なし
 
(同じ利用者による、間の12版が非表示)
4行目: 4行目:


== '''令和6年度秋期 午後 問1 情報セキュリティ(AIプロンプト向け)''' ==
== '''令和6年度秋期 午後 問1 情報セキュリティ(AIプロンプト向け)''' ==
各種AIに以下文章をペロッとはるだけで10秒くらいで答えてしまいます。瞬殺です。おじさんたちは30分くらい悩んで、この問題と向き合って、それでいて間違うこともあるというのに。さすがですね。AI。この問題は間違えないみたい。勉強になるからペロッてやってみてほしい。AIとしては、同じ質問するやつ、やけに多いなってなるのかな。
 
 
■Webサイトのセキュリティに関する次の記述を読んで、設問に答えて下さい。
 
 F社は、日用雑貨を製造・販売する中堅企業である。このたび、販路拡大を目的として自社製品を販売するWebサイト(以下、本システムという)を新規に開発した。本システムは、D社クラウドサービス上に構築しており、Webサーバとデータベース(以下、DBという)サーバから成り、D社クラウドサービスが提供するファイアウォール(以下、FWという)及びWebアプリケーションファイアウォール(以下、WAFという)を経由してインターネットからアクセスされる予定である。
 
 本システムの開発環境のネットワーク構成(抜粋)を図1に示す。なお、本システムはリリース前であり、F社の開発環境の特定のIPアドレスからだけアクセスできるようにFWで制限している。
 
図1 開発環境のネットワーク構成(抜粋)ここから
 
・F社開発環境PCがインターネットと接続
 
・インターネットはD社クラウドサービスと接続
 
・D社クラウドサービス内のインターネットの窓口にはFW
 
・D社クラウドサービス内のFWにはWAFが接続。WAFもD社クラウドサービス内
 
・D社クラウドサービス内のWAFは本システムが接続。本システムもD社クラウドサービス内
 
・本システム内窓口としてWebサーバがWAFと接続。
 
・本システム内のWebサーバはDBサーバと接続。DBサーバも本システム内
 
 
図1 開発環境のネットワーク構成(抜粋)ここまで
 
 
 
 本システムの主な仕様を次に示す。
 
・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。
 
・パスワードとして使用できる文字は、英数字に一部の記号を加えた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のパスワードのハッシュ値=5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8
 
会員番号21717202の性=T中
 
会員番号21717202の名=T郎
 
会員番号21717203のパスワードのハッシュ値=2597a7caf656e89e9ab35e12326d557ebfe9b7b5dcbe4c564e74070fa5cfcbe5
 
会員番号21717203の性=S藤
 
会員番号21717203の名=H子
 
会員番号30781985のパスワードのハッシュ値=5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8
 
会員番号30781985の性=S藤
 
会員番号30781985の名=J郎
 
会員番号36150833のパスワードのハッシュ値=ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270
 
会員番号36150833の性=S木
 
会員番号36150833の名=H子
 
会員番号45905900のパスワードのハッシュ値=ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270
 
会員番号45905900の性=Y田
 
会員番号45905900の名=J郎
 
会員番号45917046のパスワードのハッシュ値=d82494f05d6917ba02f7aaa29689ccb444bb73f20380876cb05d1f37537b7892
 
会員番号45917046の性=T中
 
会員番号45917046の名=T郎
 
表1はここまで
 
 
 稼働中のシステムのログインフォームに対してパスワードを総当たりで試行する [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] に入れる適切な数をXのy乗のような指数を用いた表記で答えよ。


 
 
16行目: 199行目:




 本システムの主な使用を次に示す。
[[ファイル:APPMQ1 Fig1.png|400px|thumb|none|図1 開発環境のネットワーク構成(抜粋)]]
 
 
 本システムの主な仕様を次に示す。


・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。
・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。
198行目: 384行目:
21 25
21 25


 というような回答が書けていれば正解になるでしょう。不可逆性というキーワードがなくても元のデータに復元することが困難であることを示していれば正解のような気もしますが、不可逆性というキーワードが必須基準ならダメかもしれません。自分ならなくても正解だと思います。
 というような回答が書けていれば正解になるでしょう。一方向性や不可逆性というキーワードがなくても元のデータに復元することが困難であることを示していれば正解のような気もしますが、一方向性や不可逆性というキーワードが必須基準ならダメかもしれません。自分ならなくても正解だと思います。




226行目: 412行目:




 という穴埋です。aはパスワード総当たり攻撃の別名を知っている必要がある問題でした。ブルートフォース攻撃です。覚えるしかないね。bはSQLインジェクションの対処方法の名前を知っている必要がある問題です。サニタイズですね。これも覚えるしかありません。したがって
 という穴埋です。aはパスワード総当たり攻撃の別名を知っている必要がある問題でした。ブルートフォース攻撃です。覚えるしかないね。bはSQLインジェクションの対処方法の名前を知っている必要がある問題です。サニタイズですね。これも覚えるしかありません。
 
 
 と思ったのですが、AIに聞いてみると設問3のbはカのプレースホルダで間違いないとの回答でした。プレースホルダとサニタイズの違いを理解していなかったな。
 
 
*サニタイズとプレースホルダの違い
:*サニタイズ
::サニタイズとは、入力値から危険な文字列を削除またはエスケープする方法です。SQLインジェクション対策としても有効な場合がありますが、あくまで文字列操作による安全性確保が中心です。そのため、DBMS(データベース管理システム)に直接依存せず、アプリケーションコード側で入力処理を行う場合に使われます。
 
 
:*プレースホルダ
::プレースホルダは、SQL文のテンプレートを事前に定義し、入力値を「専用の記号で置き換える」形でDBMSに安全に渡します。DBMSが入力値を適切に処理するため、SQLインジェクション攻撃を効果的に防ぎます。
 
 
したがって




233行目: 434行目:


<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; ">
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; ">
b:ウ サニタイズ</span>
b:カ プレースホルダ</span>




 となります。
 となります。


 午前の問題としても問われることのありそうなキーワードですので、勉強していれば、遭遇しやすいキーワードでもあるので回答できた人もいたのかなっていうレベルの問題です。知らないと無理なので難しい問題かもしれません。ここまで全部ムズイ。いいね。令和6年秋期。しびれるぜ。問題作成者スゲェいいとこついてくるな。やるな!
 午前の問題としても問われることのありそうなキーワードですので、勉強していれば、遭遇しやすいキーワードでもあるので回答できた人もいたのかなっていうレベルの問題です。知らないと無理なので難しい問題かもしれません。ここまで全部ムズイ。いいね。令和6年秋期。しびれるぜ。問題作成者スゲェいいとこついてくるな。やるな!
346行目: 546行目:




 とのことです。ですので、今回の設問の攻撃の防御は侵入を防ぐことに重きをおいた対策なので、SQLインジェクションのサニタイズやレインボーテーブル攻撃への対策のハッシュ値の改善も多重防御でいいように思います。なので、ここの管理人は他の資格試験教育企業たちが示す回答例に背いて
 とのことです。ですので、今回の設問の攻撃の防御は侵入を防ぐことに重きをおいた対策なので、SQLインジェクションのプレースホルダやレインボーテーブル攻撃への対策のハッシュ値の改善も多重防御でいいように思います。なので、ここの管理人は他の資格試験教育企業たちが示す回答例に背いて




353行目: 553行目:




 が正解としておきたいですね。ちなみに自分は多重防衛と書いたので専門用語から外れていますので、まぁダメでしょうね。5chで同じ回答をしたという書き込みを発見したので、自分だけじゃないんだ。と勇気づけられました。多層防御と正解を公表しているところの解説を聞いてみたいものですね。解説本がでるの楽しみになる揉め問題だと思いました。
 が正解としておきたいですね。ちなみに自分は多重防衛と書いたので専門用語から外れていますので、まぁダメでしょうね。5chで同じ回答をしたという書き込みを発見したので、自分だけじゃないんだ。と勇気づけられました。多層防御と正解を公表しているところの解説を聞いてみたいものですね。解説本がでるのが楽しみになる揉め問題だと思いました。
 
 
 
 あーでも、AIも多層防御だっていってますね。ハッシュ値を見られるという侵入されてからの対策がペッパーソルトの対策であり、SQLインジェクションという侵入をしてから、対策をするのが、プレースホルダということらしい。なるほど。無駄な抵抗でした。そして、異なる対策をするという点においても多層となるそうです。同じ種類の対策を重ねるのが多重防御だそうです。情報セキュリティ用語の専門用語なので多層防衛と似たような熟語を使うことも適切ではないそうです。専門用語なんですね。覚えるしかないっす。





2024年11月18日 (月) 04:04時点における最新版

AP 過去問題 午後に戻る。

AP過去問_令和6年度秋期_午後_問2_経営戦略の同じ回の次の問題へ移動。

令和6年度秋期 午後 問1 情報セキュリティ(AIプロンプト向け)

各種AIに以下文章をペロッとはるだけで10秒くらいで答えてしまいます。瞬殺です。おじさんたちは30分くらい悩んで、この問題と向き合って、それでいて間違うこともあるというのに。さすがですね。AI。この問題は間違えないみたい。勉強になるからペロッてやってみてほしい。AIとしては、同じ質問するやつ、やけに多いなってなるのかな。


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

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

 本システムの開発環境のネットワーク構成(抜粋)を図1に示す。なお、本システムはリリース前であり、F社の開発環境の特定のIPアドレスからだけアクセスできるようにFWで制限している。

図1 開発環境のネットワーク構成(抜粋)ここから

・F社開発環境PCがインターネットと接続

・インターネットはD社クラウドサービスと接続

・D社クラウドサービス内のインターネットの窓口にはFW

・D社クラウドサービス内のFWにはWAFが接続。WAFもD社クラウドサービス内

・D社クラウドサービス内のWAFは本システムが接続。本システムもD社クラウドサービス内

・本システム内窓口としてWebサーバがWAFと接続。

・本システム内のWebサーバはDBサーバと接続。DBサーバも本システム内


図1 開発環境のネットワーク構成(抜粋)ここまで


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

・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。

・パスワードとして使用できる文字は、英数字に一部の記号を加えた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のパスワードのハッシュ値=5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8

会員番号21717202の性=T中

会員番号21717202の名=T郎

会員番号21717203のパスワードのハッシュ値=2597a7caf656e89e9ab35e12326d557ebfe9b7b5dcbe4c564e74070fa5cfcbe5

会員番号21717203の性=S藤

会員番号21717203の名=H子

会員番号30781985のパスワードのハッシュ値=5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8

会員番号30781985の性=S藤

会員番号30781985の名=J郎

会員番号36150833のパスワードのハッシュ値=ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270

会員番号36150833の性=S木

会員番号36150833の名=H子

会員番号45905900のパスワードのハッシュ値=ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270

会員番号45905900の性=Y田

会員番号45905900の名=J郎

会員番号45917046のパスワードのハッシュ値=d82494f05d6917ba02f7aaa29689ccb444bb73f20380876cb05d1f37537b7892

会員番号45917046の性=T中

会員番号45917046の名=T郎

表1はここまで


 稼働中のシステムのログインフォームに対してパスワードを総当たりで試行する [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] に入れる適切な数をXのy乗のような指数を用いた表記で答えよ。

 

令和6年度秋期 午後 問1 情報セキュリティ(問題原文)

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

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

 本システムの開発環境のネットワーク構成(抜粋)を図1に示す。なお、本システムはリリース前であり、F社の開発環境の特定のIPアドレスからだけアクセスできるようにFWで制限している。


図1 開発環境のネットワーク構成(抜粋)


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

・会員登録時に自動で発行される会員番号と会員が設定したパスワードをログインフォームに入力してログインする。商品の購入はログイン後に行う。

・パスワードとして使用できる文字は、英数字に一部の記号を加えた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 5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8 T中 T郎
21717203 2597a7caf656e89e9ab35e12326d557ebfe9b7b5dcbe4c564e74070fa5cfcbe5 S藤 H子
30781985 5e884898da28047151d0e56f8dc6292773603d06aabbdd62a11ef721d1542d8 S藤 J郎
36150833 ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270 S木 H子
45905900 ac9689e2272427085e35b9d3e3e8bed88cb3434828b43b86fc0596cad4c6e270 Y田 J郎
45917046 d82494f05d6917ba02f7aaa29689ccb444bb73f20380876cb05d1f37537b7892 T中 T郎


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

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


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

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


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

1.ソルトを用いた処理

 ・パスワードをハッシュ化する際に、ソルトを付加した上でハッシュ化する。

 ・ソルトとして、会員ごとに異なるランダムな文字列を用意し、会員テーブルに格納する。

2.④ペッパーを用いた処理

 ・パスワードをハッシュ化する際に、ペッパーを付加した上でハッシュ化する。

 ・ペッパーとして、全ての会員に共通のランダムな文字列を用意し、Webサーバ内の外部からアクセスできない安全な領域に格納する。

3.ストレッチング

 ・ハッシュ関数を複数回適用する。


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

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


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


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


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

回答群
ア エスケープ
イ 許可リスト
ウ サニタイズ
エ 中間者
オ ブルートフォース
カ プレースホルダ
キ リプレイ


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

回答群
ア 21717203
イ 30781985
ウ 36150833
エ 45905900
オ 45917046


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


設問6 [レインボーテーブル攻撃への対策の検討]について答えよ。

(1)

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


(2)

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


 

回答・解説

設問1

 文字数制限ありの記述問題ですね。25文字というやや長めの回答です。

 ハッシュ値の特性を理解していないと答えられない設問でした。ハッシュ値が何かを割ったあまりのかたまり程度にしか理解していない場合には適切な用語が使えないので不完全な回答になりやすいかもしれません。ハッシュ値は割ったあまりのカタマリであることに違いはないのですが、それを元に戻すというのが困難である特性があるかを知っているかを確かめていることになります。こういうのを不可逆性と言っていますので、この専門用語が出てくれば、より求められている答えに近づけると思われます。したがって回答は


1   5   10 11      20

ハッシュ値から元の値 の復元が困難な不可逆

性をもつ 

21 25

 というような回答が書けていれば正解になるでしょう。一方向性や不可逆性というキーワードがなくても元のデータに復元することが困難であることを示していれば正解のような気もしますが、一方向性や不可逆性というキーワードが必須基準ならダメかもしれません。自分ならなくても正解だと思います。


設問2

 情報セキュリティの3要素を知っているかどうかで、答えれるかどうかに大きく関わってきますが、パスワードが漏れるのがどういう性分と言えるのかを考えることができれば答えにたどり着けるかもしれません。3要素は


  • 機密性(Confidenciality)
  • 完全性(Integrity)
  • 可用性(Availability)


 です。機密性は機密情報が洩れないようになっているか。完全性はシステムの要件を満たしているか。可用性はいつでも使える状態を維持できるか。です。答えとしては


機密性


 となります。キーワードを知っているかで、決まるのでやや難易度はあると思いますが、情報セキュリティの基本の3要素だということですので、知らない人は勉強不足だという判断になるのかもしれません。ちなみに管理人は知りませんでしたが、機密性っぽいなってことでこれは答えれました。なので0知識からでもいける可能性のある問題でもあります。なんとか性っていうキーワードが好きだよな。情報処理試験キーワードっぽい。でも、よくある情報処理試験のテキストでさえセキュリティの3要素とか書いてなかったから答えれない人も多かったかもしれない。総じていうと設問1も設問2もムズイ。いやな予感のしてくる午後の序盤ですね。


設問3

パスワードを総当たりで試行する 攻撃と一部の処理で外部からの入力値をそのままSQL文に埋め込んでいる箇所が存在していた。そこで、対策として、 を利用する方式を採用することにした。


 という穴埋です。aはパスワード総当たり攻撃の別名を知っている必要がある問題でした。ブルートフォース攻撃です。覚えるしかないね。bはSQLインジェクションの対処方法の名前を知っている必要がある問題です。サニタイズですね。これも覚えるしかありません。


 と思ったのですが、AIに聞いてみると設問3のbはカのプレースホルダで間違いないとの回答でした。プレースホルダとサニタイズの違いを理解していなかったな。


  • サニタイズとプレースホルダの違い
  • サニタイズ
サニタイズとは、入力値から危険な文字列を削除またはエスケープする方法です。SQLインジェクション対策としても有効な場合がありますが、あくまで文字列操作による安全性確保が中心です。そのため、DBMS(データベース管理システム)に直接依存せず、アプリケーションコード側で入力処理を行う場合に使われます。


  • プレースホルダ
プレースホルダは、SQL文のテンプレートを事前に定義し、入力値を「専用の記号で置き換える」形でDBMSに安全に渡します。DBMSが入力値を適切に処理するため、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ワードは、次の式で計算します(ビット操作を含む)
Wt1(Wt−2)+Wt−70(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進数)ハッシュ値です。


 という感じの事をやっているそうです。なんか難しいことですが、だいたいの演算の雰囲気だけでも知って文字列をハッシュ演算する手段の一つの知識として知っておくといいと思います。だいぶ省略したので、文字列のハッシュ値イメージだけつかめる流れにしかなっていません。くわしくハッシュ計算について学びたい人はSHA-256の計算手順の解説をAIに求めるといいんじゃないかなと思います。たぶん試験問題の長ったらしいハッシュ値はSHA-256を使って計算させた答えの16進数文字列をペロッとはったんじゃないかなと思います。元の値はわかりませんが、解き明かせる人もいるかもしれません。


設問5

 この問題は、またいやらしいところを設問してくる問題ですね。こんな用語知っている人も少なさそうな。問題作りの重複をさければいいだけなのに別の方向に触手を伸ばしてスキマ的な用語でこんなのあったわ。よしよし的に問題にしたような印象があります。2重の対策をなんというみたいなね。多重防御とか多重防衛とか多重対策とかが素人の思いつく答えの限界のような気がします。しかし、これぞ専門用語というものがありまして、多層防御というのが正解なのかなとされていました。多重と多層の違いも、しっかりと定義されている分野の用語らしいです。今回で行くと多重でも正解なんちゃうという解説をみつけました。


  • 多重は脅威の侵入を防ぐことに重きをおいた対策
  • 多層は侵入後の脅威への対処を前提とした対策


 とのことです。ですので、今回の設問の攻撃の防御は侵入を防ぐことに重きをおいた対策なので、SQLインジェクションのプレースホルダやレインボーテーブル攻撃への対策のハッシュ値の改善も多重防御でいいように思います。なので、ここの管理人は他の資格試験教育企業たちが示す回答例に背いて


多重防御(正当可能性:9割)、多層防御(正当可能性:1割)


 が正解としておきたいですね。ちなみに自分は多重防衛と書いたので専門用語から外れていますので、まぁダメでしょうね。5chで同じ回答をしたという書き込みを発見したので、自分だけじゃないんだ。と勇気づけられました。多層防御と正解を公表しているところの解説を聞いてみたいものですね。解説本がでるのが楽しみになる揉め問題だと思いました。


 あーでも、AIも多層防御だっていってますね。ハッシュ値を見られるという侵入されてからの対策がペッパーソルトの対策であり、SQLインジェクションという侵入をしてから、対策をするのが、プレースホルダということらしい。なるほど。無駄な抵抗でした。そして、異なる対策をするという点においても多層となるそうです。同じ種類の対策を重ねるのが多重防御だそうです。情報セキュリティ用語の専門用語なので多層防衛と似たような熟語を使うことも適切ではないそうです。専門用語なんですね。覚えるしかないっす。


設問6

(1)

 文字数制限ありの記述問題ですね。35文字という長めの回答です。

 初めて聞くペッパーとソルトという考え方という人にはピンときにくい問題だったと思います。難しい設問ですね。ですが、ソルトとペッパーの位置づけが問題文で説明されているので役割を予想できれば答えることは可能な問題でもあるのかなという印象です。

1   5   10 11      20

ペッパーは安全な領域 に格納されているので

ソルトより漏えいリス クが低い 

21 25   30    35

 というような回答が書けていれば正解になるでしょう。ソルトはハッシュ関数の中で使われる元のデータ÷ソルト値=商あまりハッシュ値という位置づけにおいて、データベースの各レコード毎にソルト値を格納しておくというものです。SQLインジェクションのような手法でデータベース情報が漏えいするとソルト値を閲覧することができてしまいやすいです。それに対して、データベース外で、Webアクセス領域外にある固定の値として保管するペッパーは元のデータ÷ペッパー値=商あまりハッシュ値と同じ役割をするにしても、Webアクセスだけではとっぱできない参照方法をしているので、より盗み取るのは難しいとされています。ただしたった一つの値なので、とっぱできたら、たった一つの決まった値で解読される可能性があるので、やはり万能ではないですね。でも突破されることが難しいということにはしておきましょうということになっています。ですから、上記のような回答が正解になると思います。管理人に言わせればどんぐりの背比べ程度の違いしかないような気がしていますが、そういう邪(よこしま)な考え方をしていると情報処理技術者試験の意味がなくなるので、違いがあるのだと認識するのが良いと思います。現に試験問題に出されたハッシュ値でさえ、管理人のようなヘボ技術者では、元の値は予想できませんし、ハッシュも役に立つし、ソルトも役に立つし、ペッパーは役に立つうえ、安全な領域に格納されていて、漏えいリスクが低いってことです。漏洩の洩の字を漢字で書けると一文字稼げるので覚えておいた方がいいですね。試験では漏えいと問題文にはひらがなで書かれることが多いです。自分の知識で一文字稼げる。大事!漏洩はセキュリティ分野ではよく出てくる熟語だしね。覚えようぜ!


設問6

(2)

 パスワードが6文字から10文字になって、何通りのパスワードが増えるかってことです。問題文には以下のような記述部がありましたね。パスワードとして使用できる文字は、英数字に一部の記号を加えた70種類である。ということで文字の種類は70で4文字増えると何通りだ?っていう問題です。


 2種類の文字で3文字増えたらで考えると、000、001、010、011、100、101、110、111の8とおり増えます。これは2×2×2で23に相当します。組み合わせは選べる文字の種類を何回使うかで


  • 選べる種類1個目×選べる種類2個目×…×選べる種類n個目という計算で求まります。


 確率の勉強の序章で出てくる組み合わせの求め方の計算です。したがって答えは


704


 となります。確率の序章の組み合わせの求め方を知っていれば答えられる易しい問題ですが、算数に疎いと答えられない問題で難しい問題ではあります。


 そんなわけで全6問で8回答。内、簡単なのは設問4だけだったのかなと思います。1/8ではどうにもなりませんね。ダメだった人は勉強しつづけるしかない!セキュリティの分野の知識を網羅しないと駄目ですね。セキュリティは必須だし。できた人は、頑張った人と言えると思います。素晴らしい。合格にふさわしいよ。このまま他の問題もうまく行けるといいね。ダメだった人達、これからの人たち、こういう難しいのが来ても答えられるように力をつけよう!

 

AP過去問_令和6年度秋期_午後_問2_経営戦略の同じ回の次の問題へ移動。

AP 過去問題 午後に戻る。