情報処理安全確保支援士試験 2025年 春期 午後 問3

スマートフォン用アプリケーションプログラムの開発に関する次の記述を読んで、設問に答えよ。

A社は、撮影機器の販売や写真のプリントサービスを全国に200店舗で展開する従業員2,000名の企業である。実店舗の運営に加え、インターネットを介して撮影機器の販売を行うECサイト事業を有している。このたび、会員がスマートフォン(以下、スマホという)用アプリケーションプログラム(以下、スマホ用アプリケーションプログラムをスマホアプリという)を通して、写真入りのカレンダーなどのグッズ(以下、フォトグッズという)を注文できるサービス(以下、Eサービスという)を新規に開始することになった。Eサービス用スマホアプリ(以下、Fアプリという)は国内で流通する主要なスマホOSであるOS-αとOS-βの過去5年以内に正式リリースされたバージョンをサポートする。

[Eサービスの説明]

EサービスはFアプリとサーバサイドのシステム群で構成される。Fアプリは、インターネットを介してEサービス用Webサーバ(以下、A社Webサーバとい、FODNはwww.a-sha.co.jpとする)及び大手クラウドサービスプロバイダC社のクラウドストレージサービス(以下、Cサービスという)との間でHTTPSを使用して通信する。フォトグッズの作成に使う写真は、FアプリからCサービスにアップロードする。

Eサービスのネットワーク構成を図1に、機能概要を図2に、Fアプリの画面構成を図3に、フォトグッズの注文処理の流れを図4に、Cサービスの仕様を図5に示す。

図1 Eサービスのネットワーク構成(概要)
  1. 新規会員登録機能
    Eサービスを利用するための新規会員登録を行う。
  2. ログイン機能
    会員IDとパスワードでログインする。ログインした会員には、認証トークン1)が払い出され、ログアウトするまでの間、Fアプリに保存される。認証トークンは、A社Webサーバ上で会員のセッションを識別するために使用する推測困難な値である。
  3. フォトグッズ注文機能
    Fアプリ上でフォトグッズを注文する。ログイン済み会員だけが利用できる。
    なお、フォトグッズは、指定したA社の実店舗で受け取ることができる。
  4. キャンペーン案内機能
    キャンペーンのWebページ(以下、キャンペーンページという)を表示する。ログイン済み会員だけが利用できる。
    なお、キャンペーンに応募することによって、フォトグッズの割引などに利用可能なクーポンを入手できる。会員には、電子メール(以下、メールという)などを通して、期間限定のキャンペーンを案内する。キャンペーンの内容は、2週間ごとに更新される。
図2 Eサービスの機能概要(抜粋)
1) 認証トークンは、ログイン後にFアプリがA社WebサーバにHTTPリクエストを送信する際、Authorizationヘッダーに指定される。
図3 Fアプリの画面構成(抜粋)
図4 フォトグッズの注文処理の流れ
  1. サービスの概要
    1. (1) Cサービスはマルチテナントのストレージサービスである。テナントの管理権限をもつ利用者(以下、管理者という)が作成したストレージに対し、テナントの作成したシステム(以下、利用システムという)からファイルのアップロードやダウンロード(以下、アップロード、ダウンロードを併せてファイル操作という)を行う。
    2. (2) 管理者は、ストレージの作成時に任意のストレージ名を設定する。ストレージを作成すると、利用システムからアクセスキーが発行される。アクセスキーはストレージごとに異なる40字の英数字である。
    3. (3) 利用システムは、ストレージ上のファイルをURLのパスで指定する。例えば、ストレージ"●●●"上のファイル"▲▲▲"をファイル操作する際は、"/●●●/▲▲▲"を指定する。ファイルのアップロードにはHTTPのPUTメソッドを、ファイルのダウンロードにはGETメソッドを用いる。
    4. (4) 利用システムは、次の方式aまたは方式bでファイル操作を行う。
  2. 方式a
    1. (1) 説明
      アクセスキーをHTTPリクエストのAuthorizationヘッダーに指定する方式である。利用システムは、Cサービスから発行されたアクセスキーを用いることによって、アクセスキーに対応するストレージに格納された全てのファイルに対するファイル操作が可能となる。Authorizationヘッダーに正しいアクセスキーが指定されていない場合、ファイル操作は拒否される。
    2. (2) 使用例
      アクセスキー "○○○"を指定して、ストレージ"abc"上のファイル"xyz"をダウンロードする際に送信するHTTPリクエストの例を次に示す。
      リクエストライン:GET /abc/xyz HTTP/1.1
      ヘッダーフィールド:Host: storage.c-sha.jp
                Authorization: Bearer ○○○
  3. 方式b
    1. (1) 説明
      有効期限(Expires)と署名値(Signature)をクエリパラメータとして付加したURL(以下、署名付きURLという)を用いて、特定のファイルに対するファイル操作を一時的に可能とする方式である。ここで、Expiresパラメータに指定する有効期限はUNIXタイムスタンプ形式である。署名値の生成は次のように行う。
      (i) GETまたはPUTから始まり、パス中の"/●●●/▲▲▲?Expires={有効期限}"で終わる文字列を署名対象文字列とする。
      (ii) アクセスキーを秘密鍵とする。
      (iii) 署名対象文字列と秘密鍵からHMAC-SHA256値を求める。
      (iv) (iii)で求めた値をbase64urlエンコードする。
      利用システムは、署名付きURLを生成し、ファイル操作を許可する利用者に伝える。伝えられた利用者は、署名付きURLを指定してHTTPリクエストを送ることによって、ファイル操作ができる。有効期限が切れた場合やサーバ側で署名値の検証が失敗した場合は、ファイル操作が拒否される。
    2. (2) 使用例
      ストレージ"abc"上のファイル"xyz"をダウンロードする場合で、かつ、署名値が"△△△"の場合のHTTPリクエストの例を次に示す。xyzは、日本時間の2025年5月30日0時0分0秒、つまりUNIXタイムスタンプで1748530800までの間、ダウンロードが許可されている。
      リクエストライン:GET /abc/xyz?Expires=1748530800&Signature=△△△ HTTP/1.1
      ヘッダーフィールド:Host: storage.c-sha.jp
図5 Cサービスの仕様(抜粋)

Eサービスで使うCサービスのストレージ名は、e-serviceである。Fアプリでは、方式aを利用する。アクセスキーは、鍵長256ビットの共通鍵とAES-CBCアルゴリズムで暗号化し、Fアプリ内にリソースとして保存する。Cサービスのストレージ名並びにAES-CBCの共通鍵及び初期ベクトルは、Fアプリのコード中に定数として定義する。

[キャンペーン案内機能の実装方法]

Fアプリでのキャンペーンページの表示には、WebViewという仕組みを用いる。WebViewは、スマホOSの提供する仕組みであり、スマホアプリの画面の一部にWebページを表示させることができる。キャンペーンページのHTMLは、WebViewを用いて、Fアプリの画面上に表示させる。

会員に送るキャンペーン案内のメール本文中には、Fアプリでキャンペーンページを表示するためのURL(以下、F-URLという)を含める。会員がメールアプリからF-URLを開くと、Fアプリが起動し、WebView上にキャンペーンページが表示される。

キャンペーンページからキャンペーンに応募する際の会員のセッションの識別には、Fアプリに保存されている認証トークンを用いる。OS-αでは、キャンペーンページが表示された後に、WebViewの機能によってキャンペーンページ上のECMAScriptコードがFアプリのgetToken関数を呼び出す。これによって、認証トークンがFアプリからキャンペーンページに引き渡される。OS-βでは別の方式で同様の機能を実現する。キャンペーンページ上のECMAScriptコードを図6に示す。

const token = f_app.getToken();
図6 キャンペーンページ上のECMAScriptコード

キャンペーンページ以外からgetToken関数が悪用されないように、getToken関数の内部では、図7のように呼出し元のWebページのURLを確認する。

図7 getToken関数の処理の流れ

F-URLの例を図8に示す。

f-app://campaign?url=https://www.a-sha.co.jp/campaign/□□□
図8 F-URLの例
注記1 "f-app"はカスタムURLスキームである。
注記2 "□□□"はキャンペーンページのURLのパスである。

[Fアプリの脆弱性診断結果]

A社は、セキュリティ専門会社のD社に依頼してFアプリの脆弱性診断を実施した。その結果、表1に示す脆弱性が検出された。

表1 脆弱性診断結果(抜粋)
脆弱性脆弱性の概要解説
1サーバ証明書の検証エラーがある。Fアプリは、HTTPSでサーバと接続する際、サーバ証明書の検証エラーがあっても無視し、通信を続行する。そのため、HTTPS通信の内容が盗聴されたり、改ざんされたりするおそれがある。盗聴されると、①盗聴した内容からアクセスキーとストレージ名を攻撃者が取得するおそれがある。
(省略)
2Cサービスのアクセスキーの保護に不備がある。②攻撃者がFアプリから平文のアクセスキーとストレージ名を取得できる。そのアクセスキーを用いて、③攻撃者がEサービスの全利用者の写真を不正にダウンロードするおそれがある。
(省略)
3F-URLの処理にアクセス制御の不備がある。F-URLのurlクエリパラメータに、④細工したURLが指定されることによって、攻撃者のWebサイトにアクセスしてしまうおそれがある。また、攻撃者が会員の認証トークンを取得するおそれがある。
(省略)

[脆弱性1]

Fアプリの開発チームに所属するUさんは、D社のSさんが開催する診断結果報告会に参加した。

Uさんは、脆弱性1が作り込まれた経緯を説明した。UさんによるとFアプリとA社Webサーバとの間の通信内容に異常がないかどうかを調査するために、開発用PCで通信解析ツールを利用した。この通信解析ツールはプロキシサーバとして動作する。このツールを利用すると、Fアプリでは、サーバ証明書の検証エラーが発生し、FアプリとA社Webサーバとの間の通信が中断されてしまった。そこで、インターネット上のある記事でエラーが発生しても通信を続行する方法が紹介されていたのを参考にして、Fアプリのコードを変更したということであった。

この通信解析ツールを利用し、"https://www.a-sha.co.jp/campaign/□□□" にアクセスした際のレイヤ4~7の通信フローの例を図9に示す。

図9 通信解析ツールを利用した際の通信フローの例(抜粋)

Uさんは、通信解析ツールを利用してテストを行う際も通信を正常に続行させる方法をチーム内で話し合った。その結果、今後、開発用のスマホに⑥必要な設定を行うことにした。加えて、OS-αではテストを行う際だけその設定を有効化するように、Fアプリの中にも設定を追加した。

[脆弱性2]

脆弱性2への対応について、SさんからはFアプリが利用し、その際に署名付きURLの生成を図4中のiの時点で行ってはどうかとの提案があった。Uさんは、Sさんの提案を了承した。

[脆弱性3]

次は、脆弱性3についてのUさんとSさんの会話である。

Uさん:対策として、図7の処理を修正します。 Sさん:図7の処理を修正すれば、認証トークンを盗まれるリスクは回避できます。しかし、Webブラウザと比べると、⑦フィッシングサイトにアクセスしてしまっても気付くことができないというFアプリの仕様上の問題点が残ります。フィッシングサイトに気付くことができるようにするための機能か、そもそもフィッシングサイトにアクセスできないようにする機能が必要です。

Uさん:はい。図7の処理の修正に加えて、⑧フィッシングサイトにアクセスできないようにする機能を実装します。

A社は、検出された脆弱性を修正し、Eサービスの提供を開始した。

出典:令和7年度 春期 情報処理安全確保支援士試験 午後 問3