科目B対策へ戻る

Webサイトの診断:XSS・CSRF・認可制御の不備とクラウドのIMDS(SSRF)

IPA過去問令和6年度 春期 午後 問3ECサイトとクラウド上の商品企画サイトのWebアプリ診断結果から、攻撃の手順と対策(SameSite、認可チェック、IMDS方式2、SSRF対策)を問う目安 25分

出典:令和6年度 春期 情報処理安全確保支援士試験 午後 問3(独立行政法人情報処理推進機構)

改変: 図1(ネットワーク構成図)は接続関係の一覧に書き換えた。図2は枠内の文章としてそのまま転記した

解答例は IPA が公表したものです。自分の解答を書いてから見ましょう。

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

D社は,従業員1,000名の小売業である。自社のホームページやECサイトなどのWebサイトについては,Webアプリケーションプログラム(以下,Webアプリという)に対する診断(以下,Webアプリ診断という)を専門会社のZ社に委託して実施している。Webアプリ診断は,Webサイトのリリース前だけではなく,リリース後も定期的に実施している。Z社のWebアプリ診断は,脆弱性診断ツールによるスキャンだけではなく,手動による高度な分析も行う。

〔新たなWebサイトの構築〕

D社では,新たにECサイトX(以下,サイトXという)と商品企画サイトY(以下,サイトYという)をW社が提供するクラウドサービス(以下,クラウドWという)上に構築することになった。

サイトXでは,D社が取り扱う商品をインターネットを介して会員に販売する予定である。取引は毎月10,000件ほどを見込んでいる。サイトYでは,サイトXで販売する新商品の企画・開発を顧客参加型で行う。サイトXとサイトYは,いずれもWebサーバとデータベースサーバ(以下,DBサーバという)で構成する。WebサーバについてはクラウドWの仮想Webサーバサービスを利用し,DBサーバについてはクラウドWのリレーショナルデータベースサービスを利用する。サイトXとサイトYはいずれも,コンテンツマネジメントシステム(以下,CMSという)を使って構築される。サイトXとサイトYにはいずれも,Webアプリ,HTMLによる静的コンテンツ,DBサーバに格納したデータを使った動的コンテンツなどを用意する。

D社は,V大学と新商品開発の共同研究を行っている。新商品開発の共同研究では,V大学が運用する情報交換サイト(以下,サイトPという)を利用している。サイトYは,サイトPで取り扱っている情報などを表示する。

D社は,Webサイト構築に関連するデータやドキュメントの保存場所として,クラウドWのストレージサービス(以下,ストレージWという)を利用する。

D社は,サイトX及びサイトYの設計書を作成した。設計書のうち,サイトX,サイトY及びサイトPのネットワーク構成を図1に,サーバやサービスの説明を図2に示す。

図1 サイトX,サイトY及びサイトPのネットワーク構成

図1の接続関係(枠・線を一覧に直したもの)

  • クラウドW(枠)
    • ストレージW:インターネットと接続
    • VPC(破線の枠)の内側(IGとVGは破線の境界上):
      • サイトX:Webサーバ X - DBサーバ X(相互に接続)
      • サイトY:Webサーバ Y - DBサーバ Y(相互に接続)
      • IG¹⁾(VPCの破線の境界上に描かれている):Webサーバ X,Webサーバ Y と接続,インターネットと接続
      • VG²⁾(VPCの破線の境界上に描かれている):インターネットと接続(図では線がインターネットに向かって描かれている)
    • IMDS:VPCの外側(クラウドWの枠内)に置かれ,Webサーバ X,DBサーバ X,Webサーバ Y,DBサーバ Y のそれぞれと接続
  • D社(枠):内部ネットワーク(破線の枠)の中にD社管理者PC。D社管理者PCはインターネットと接続
  • V大学(枠):FW が インターネットと接続。FW は サイトP(Webサーバ P - DBサーバ P)と接続。FW は 学内ネットワーク(破線の枠)とも接続

FW:ファイアウォール IG:インターネットゲートウェイ IMDS:インスタンスメタデータサービス VG:VPNゲートウェイ VPC:仮想プライベートクラウド

注¹⁾ VPCとインターネットとの間の通信を可能にする。 注²⁾ VPCとD社の内部ネットワークとの間のVPN通信を可能にする。

図2 サーバやサービスの説明

[クラウドWにあるサーバ及びストレージWについて] クラウドW上のサービスの管理のためのアクセスの際は,クラウドW用の利用者ID,アクセスキーなどのクレデンシャル情報をリクエストに含める必要がある。D社が利用するクラウドW上のサービスには,D社用に発行されたクレデンシャル情報でアクセスでき,全ての操作ができる。

[IMDSについて] IMDSは,VPCの各サーバから特定のURLにアクセスされると特定の情報を返す。例えば,https://〇〇〇.〇〇〇.〇〇〇.〇〇〇/meta-data/credential にGETメソッドでアクセスされると,クラウドW上のサービスのクレデンシャル情報を返す。IMDSには,インターネットから直接アクセスできないプライベートIPアドレス(〇〇〇.〇〇〇.〇〇〇.〇〇〇)が設定されている。 IMDSにアクセスする方式は,次のいずれかを採用する必要がある。D社では,方式1を採用する。 方式1:特定のURLにアクセスするだけで情報を取得できる。 方式2:トークンを発行するURLにPUTメソッドでアクセスし,レスポンスボディに含まれるトークンを入手してから,そのトークンをリクエストヘッダに含めて特定のURLにアクセスすると情報を取得できる。

[CMSについて] Webサーバ X の https://□□□.jp/admin 又はWebサーバ Y の https://■■■.jp/admin にアクセスすると,それぞれのサーバのCMSの管理ログイン画面にアクセスできる。ログインは,POSTメソッドでは許可されるが,GETメソッドでは許可されない。各CMSの管理ログイン画面へのアクセスは,VPN接続されたD社管理者PC,又はVPC内からのアクセスだけに制限される。D社では,各CMSの管理者アカウントは初期パスワードのまま運用する。

〔サイトX〕

サイトXには,会員用の利用者アカウントとD社管理者用の利用者アカウントがある。サイトXのログインセッション管理は,cookieパラメータのSESSIONIDで行う。SESSIONIDには,値とSecure属性だけがセットされる。なお,サーバ側のセッションの有効期間は24時間である。設計書のうち,サイトXの機能一覧を表1に示す。

表1 サイトXの機能一覧(抜粋)

項番機能詳細機能機能概要
1ログイン機能ログイン機能利用者IDとパスワードを入力し,ログインに成功すると利用できる機能が表示されるページに遷移する。
2利用者機能(ログイン前)会員機能(登録)登録画面では最初にメールアドレスを入力する。そのメールアドレス宛てに送られた電子メールに記載されたURLにアクセスして利用者情報を入力し,登録する。
3利用者機能(ログイン後)注文機能(商品検索,注文,注文履歴閲覧)商品には商品コードが付与されており,商品検索画面で検索できる。注文履歴は,注文年月である数字6桁とランダムな英大文字6桁の値をハイフンでつないだ注文管理番号で管理される。注文履歴を閲覧する際は,注文管理番号を基に検索する。
4利用者機能(ログイン後)会員機能(編集)登録した利用者情報を編集できる。
5利用者機能(ログイン後)問合せ機能問合せ情報を入力できる。入力した問合せ情報は,数字10桁の管理番号が発番され,管理される。
6サイト管理機能(ログイン後)商品管理機能(登録,編集,削除)商品情報を登録,編集,削除できる。商品情報が登録されると,数字10桁の商品コードが割り当てられ,その商品を会員が注文できるようになる。
7サイト管理機能(ログイン後)売上管理機能(売上情報閲覧,検索)商品の売上情報を閲覧できる。また,条件を指定して検索することができる。
8サイト管理機能(ログイン後)会員管理機能(閲覧,変更,削除)登録された会員の利用者情報を閲覧,変更,削除できる。
9サイト管理機能(ログイン後)問合せ管理機能問合せ機能で入力された問合せ情報が閲覧できる。

(表1の項番3〜5は「利用者機能(ログイン後)」,項番6〜9は「サイト管理機能(ログイン後)」にまたがるセルで,項番3〜5・6〜9 の機能欄はそれぞれ結合されている。)

サイト管理機能は,D社の内部ネットワーク以外からも利用する可能性があり,サイトXでは,接続元の制限は行わない。

サイトXとサイトYの構築は順調に進み,D社はリリース前のWebアプリ診断をZ社に委託した。Z社は,サイトXとサイトYそれぞれに対してWebアプリ診断を実施した。

〔サイトXに対するWebアプリ診断〕

サイトXに対するWebアプリ診断では,次の三つの脆弱性が検出された。

  • クロスサイトスクリプティング(以下,XSSという)
  • クロスサイトリクエストフォージェリ(以下,CSRFという)
  • 認可制御の不備

〔XSSについて〕

Z社がXSSを検出した経緯は,次のとおりであった。

(1) 問合せ機能で,脆弱性診断ツールによるリクエストとレスポンスを確認した。このときのリクエストとレスポンスは,図3のとおりであった。

図3 問合せ機能のリクエストとレスポンス

[リクエスト]
POST /shop/contact HTTP/1.1
Host: (省略)
(省略)
Content-Type: application/x-www-form-urlencoded
Content-Length: (省略)
Cookie: SESSIONID=nt1t3dmxmlmwuicyiz3h4nq1

subject_id=004&name=%22%3e%3cscript%3ealert%281%29%3c%2fscript%3e%3c%22&tel=(省略)&
mail=(省略)&mail2=(省略)&comment=(省略)

[レスポンス]
(省略)

<h1>問合せを受け付けました。</h1>
(省略)

注記 パラメータnameの値は”><script>alert(1)</script><” をURLエンコードした値である。

(2) 図3中のレスポンスボディには,問合せ機能で入力した値は出力されていない。しかし,Z社は,①設計書を調査した上で手動による分析を行い,図3中のリクエスト内のスクリプトが別の機能の画面に出力されることを確認した。

Z社は,②攻撃者がこのXSSを悪用してサイトX内の全会員の利用者情報を取得する可能性があると説明した。

〔CSRFについて〕

Z社がCSRFを検出した経緯は,次のとおりであった。

(1) 会員機能(編集)において,図4に示すリクエストを送ってその応答を確認した。リクエストは正常に処理された。

図4 会員機能(編集)のリクエスト

POST /shop/editmember HTTP/1.1
Host: (省略)
(省略)
Content-Type: application/x-www-form-urlencoded
Content-Length: (省略)
Cookie: SESSIONID=b9y33f89umt6uua1pe4j4jn7

sei=sato&mei=taro&mail=aaa%40example.jp&csrf_token=KCRQ88ERH2G8MGT319E5OSMOAJFDIVEM

(2) リクエスト内のメッセージボディの一部を変更して送り,その応答を確認した。リクエスト内のメッセージボディと応答は表2のとおりであった。

表2 リクエスト内のメッセージボディと応答

手順リクエスト内のメッセージボディ応答
1sei=sato&mei=taro&mail=aaa%40example.jp&csrf_token=エラー
2sei=sato&mei=taro&mail=aaa%40example.jpエラー
3sei=sato&mei=taro&mail=aaa%40example.jp&csrf_token=(異なる利用者アカウントで取得したcsrf_tokenの値)正常に処理

(3) Z社は,手順1,2の応答が“エラー”であることから一定のCSRF対策ができているが,手順3の応答が“正常に処理”であることから③利用者に被害を与える可能性があると判断した。

Z社は,対策には二つの方法があることを説明した。

  • csrf_tokenの処理の修正
  • cookieへのSameSite属性の追加

サイトXの構成次第では,SameSite属性をcookieに付与することも有効な対策となり得る。SameSite属性は,Strict,Lax,Noneの三つの値のうちいずれかを取る。サイトXにログインした利用者のWebブラウザにおいて,サイトX内で遷移する場合と外部WebサイトからサイトXに遷移する場合では,SameSite属性の値によってサイトXのcookie送信の有無が表3のように異なる。

表3 SameSite属性の値の違いによるcookie送信の有無

SameSite属性の値サイトX内で遷移 GETサイトX内で遷移 POST外部WebサイトからサイトXに遷移 GET外部WebサイトからサイトXに遷移 POST
Strict○○【 a 】【 b 】
Lax○○【 c 】【 d 】
None○○(省略)(省略)

注記 “○”はcookieが送られることを示す。“×”はcookieが送られないことを示す。

(表3の見出しは2段:上段が「サイトX内で遷移」「外部WebサイトからサイトXに遷移」,下段が各々「GET」「POST」。)

〔認可制御の不備について〕

Z社が認可制御の不備を検出した経緯は,次のとおりであった。

(1) Z社は,利用者α,利用者βという二つの利用者アカウントを用いて,注文履歴を閲覧した際のリクエストを確認した。注文履歴を閲覧した際のリクエストを図5及び図6に示す。

図5 利用者αで注文履歴を閲覧した際のリクエスト

POST /shop/order-history HTTP/1.1
Host: (省略)
(省略)
Content-Type: application/x-www-form-urlencoded
Content-Length: (省略)
Cookie: SESSIONID=ac9t66bxlxmwuiiki53h4nq3

order-code=202404-AHUJKI ¹⁾

注¹⁾ 表1の注文管理番号のことである。値から利用者を特定することができる。

図6 利用者βで注文履歴を閲覧した際のリクエスト

POST /shop/order-history HTTP/1.1
Host: (省略)
(省略)
Content-Type: application/x-www-form-urlencoded
Content-Length: (省略)
Cookie: SESSIONID=k1ctghbxbx5wuj3ki33hlnq5

order-code=202404-BAKCXW

(2) 図5のリクエストのパラメータorder-codeの値を図6中の値に改変してリクエストを送った。

(3) 利用者αが,本来は閲覧できないはずの利用者βの注文履歴を閲覧できるという攻撃が成功することを確認した。

(4) さらに,ある利用者がほかの利用者が注文した際のorder-codeを知らなくても,④ある攻撃手法を用いれば攻撃が成功することを確認した。

Z社は,⑤サイトXのWebアプリに追加すべき処理を説明した。

〔サイトYに対するWebアプリ診断〕

サイトYに対するWebアプリ診断では,次の脆弱性が検出された。

  • サーバサイドリクエストフォージェリ(以下,SSRFという)

〔SSRFについて〕

Z社がSSRFを検出した経緯は,次のとおりであった。

(1) サイトPの新着情報を取得する際に,利用者のWebブラウザがWebサーバYに送るリクエストを確認したところ,図7のとおりであった。

図7 利用者のWebブラウザがWebサーバYに送るリクエスト

GET /top?page=https://△△△.jp/topic/202404.html HTTP/1.1
Host: (省略)
(省略)
Cookie: SESSIONID=pq4ikd31op215jebter41sae

注記 △△△.jpはサイトPのFQDNである。

(2) ⑥図7のリクエストのパラメータの値をWebサーバYのCMSの管理ログイン画面のURLに変更することで,その画面にアクセスできるが,ログインはできないことを確認した。

(3) ⑦*図7のリクエストのパラメータの値を別のURLに変更するという方法(以下,方法Fという)でSSRFを悪用して,*クレデンシャル情報を取得し,ストレージWから情報を盗み出すことができることを確認した。

(4) IMDSにアクセスする方式を方式1から方式2に変更すると,方法Fではクレデンシャル情報を取得できないので,ストレージWから情報を盗み出すことができない。しかし,図7のリクエストのパラメータの値を変更することで,WebサーバYから送られるリクエストに任意のメソッドの指定及び任意のヘッダの追加ができる方法(以下,方法Gという)がある。方法Gを用いれば,方式2に変更しても,⑧*クレデンシャル情報を取得し,*ストレージWから情報を盗み出すことができることを確認した。

Z社は,クラウドW上のネットワークでのアクセス制御の設定,及び⑨サイトYのWebアプリに追加すべき処理を提案した。

リリース前の脆弱性診断で検出された脆弱性の対策が全て完了し,サイトXとサイトYは稼働を開始した。

設問1(1)

〔XSSについて〕について答えよ。 本文中の下線①について,図3中のリクエスト内のスクリプトが出力されるのはどの機能か。表1の詳細機能に対する項番を選び答えよ。

設問1(2)

本文中の下線②について,攻撃者はどのような手順で利用者情報を取得するか。具体的に答えよ。

設問2(1)

〔CSRFについて〕について答えよ。 本文中の下線③について,被害を与える攻撃の手順を,具体的に答えよ。

設問2(2)

表3中の【 a 】〜【 d 】に入れる適切な内容を,“○”又は“×”から選び答えよ。

設問3(1)

〔認可制御の不備について〕について答えよ。 本文中の下線④について,どのような攻撃手法を用いれば攻撃が成功するか。30字以内で答えよ。

0 / 30字

設問3(2)

本文中の下線⑤について,サイトXのWebアプリに追加すべき処理を,60字以内で具体的に答えよ。

0 / 60字

設問4(1)

〔SSRFについて〕について答えよ。 本文中の下線⑥について,ログインができないのはなぜか。SSRF攻撃の特徴を基に,35字以内で答えよ。

0 / 35字

設問4(2)

本文中の下線⑦について,クレデンシャル情報を取得する方法を,具体的に答えよ。

設問4(3)

本文中の下線⑧について,方法Gを用いてクレデンシャル情報を取得する方法を,具体的に答えよ。

設問4(4)

本文中の下線⑨について,サイトYのWebアプリに追加すべき処理を,35字以内で具体的に答えよ。

0 / 35字

自己採点: ◯ 0 / △ 0 / ✕ 0(全10設問)

書いた解答は、この端末のブラウザにだけ保存されます(同期されません)。