午前I問題
クリックジャッキング攻撃の手口に関する記述として、最も適切なものはどれか。
ア)攻撃者が用意した罠サイトに、標的サイトの正規ページを透明化したiframeで重ね、利用者が罠サイト上のボタンをクリックしたつもりで、実際には透明化された標的サイトの操作(例:SNSのフォローボタン、送金ボタン)をクリックさせる。
イ)攻撃者がDNSサーバのキャッシュを汚染し、利用者を偽のIPアドレスへ誘導する。
ウ)攻撃者がSQL文の構文を操作し、データベースから機密情報を窃取する。
エ)攻撃者が公開鍵基盤の認証局を偽装し、不正な証明書を発行する。
午前I の解答・解説を見る
正解: ア)
解説:
- ア)正解。クリックジャッキング(Clickjacking/UI Redressing)は、透明化または偽装した
iframeを用いて標的サイトの操作画面を罠サイトの上に重ね、利用者に意図しない操作(クリック)をさせる攻撃である。利用者は罠サイトの見た目上のボタンをクリックしているつもりでも、実際には裏に隠れた標的サイトの重要な操作ボタンを押してしまう。 - イ)不正解。これはDNSキャッシュポイズニングの説明であり、クリックジャッキングとは異なる攻撃手法である。
- ウ)不正解。これはSQLインジェクションの説明である。
- エ)不正解。これは認証局の侵害・不正証明書発行に関する攻撃であり、クリックジャッキングとは無関係である。
午前II問題
クリックジャッキング対策としてContent-Security-Policyヘッダに frame-ancestors 'self' を設定する効果に関する記述のうち、最も適切なものはどれか。
ア)自サイトのページが、自サイト以外のオリジンのiframe内に埋め込まれることをブラウザが拒否するようになり、他サイトからのフレーム埋め込みによるクリックジャッキングを防止できる。
イ)自サイトが外部サイトのコンテンツをiframeで埋め込むことを禁止する設定であり、クリックジャッキング対策としては効果がない。
ウ)X-Frame-Optionsヘッダと同時に設定すると設定が競合してブラウザがエラーを返すため、いずれか一方のみを設定しなければならない。
エ)frame-ancestorsはレガシーブラウザを含むすべてのブラウザでX-Frame-Optionsより優先して解釈されるため、X-Frame-Optionsは完全に不要になった。
午前II の解答・解説を見る
正解: ア)
解説:
- ア)正解。CSPの
frame-ancestorsディレクティブは「自分自身(=自サイトが提供するページ)を誰がiframe等でフレーム化できるか」を制御する。'self'を指定すると、自サイト以外のオリジンからのフレーム埋め込みをブラウザが拒否するため、クリックジャッキングで悪用される透明iframeの重ね合わせを防止できる。 - イ)不正解。
frame-ancestorsは「自サイトが誰に埋め込まれるか」を制御するものであり、「自サイトが外部を埋め込むか」の制御ではない。説明が逆になっている。 - ウ)不正解。
X-Frame-OptionsとContent-Security-Policy: frame-ancestorsは併用可能であり、エラーにはならない。むしろレガシーブラウザ対応のため両方を設定することが推奨される(frame-ancestors未対応の古いブラウザではX-Frame-Optionsがフォールバックとして機能する)。 - エ)不正解。
frame-ancestorsを解釈しない古いブラウザも存在するため、後方互換性の観点からX-Frame-Optionsを完全に廃止することは推奨されない。両方を設定するのが実務上のベストプラクティスである。
午後問題
H社が運営する会員制ポイントサービスサイトにおいて、次の2件のセキュリティインシデントが立て続けに発生した。
インシデント①:クリックジャッキングによるポイント交換被害
会員が閲覧した外部サイト(懸賞キャンペーンを装った罠サイト)上で「応募する」ボタンをクリックしたところ、実際にはH社サイトの「ポイントを他アカウントへ譲渡する」ボタンが透明化されて重ねられており、意図せずポイントが第三者アカウントへ譲渡されてしまった。H社サイトのレスポンスヘッダを調査したところ、X-Frame-OptionsおよびContent-Security-Policyヘッダのいずれも設定されていなかった。
インシデント②:オープンリダイレクトを悪用したフィッシング被害
会員に対し、H社を装ったフィッシングメールが送信された。メール内のリンクは次のような形式であった。
https://h-sha.example.com/redirect?url=https://h-sha-login.example.net/login
h-sha.example.comはH社の正規ドメインであり、リンク先URLの冒頭が正規ドメインであるため、多くの会員がリンクを信用してクリックし、urlパラメータに指定された偽ログインページへ転送された結果、ID・パスワードを詐取された。調査の結果、/redirectエンドポイントはurlパラメータに指定された任意のURLへリダイレクトする実装になっており、遷移先ドメインの検証が行われていなかった。
設問1
インシデント①について、H社サイトが実施すべきHTTPレスポンスヘッダの設定を、ヘッダ名・具体的な設定値とともに答えよ(2つのヘッダのうち少なくとも1つを具体的に)。また、この対策がなぜクリックジャッキングを防止できるのかを40字以内で述べよ。
設問1の解答・解説を見る
正解例:
- 設定:
Content-Security-Policy: frame-ancestors 'self'(またはX-Frame-Options: DENYもしくはSAMEORIGIN) - 防止できる理由:自サイト以外のオリジンによる
iframe埋め込みをブラウザが拒否するようになるため。(39字)
解説: クリックジャッキングは、標的サイトのページが第三者の罠サイト上でiframeとして読み込み可能であることを前提とする攻撃である。X-Frame-Options: DENY(一切のフレーム化を禁止)またはSAMEORIGIN(同一オリジンのみ許可)、あるいはCSPのframe-ancestors 'self'を設定することで、ブラウザが罠サイトからのフレーム読み込み自体を拒否し、透明iframeを重ねる攻撃の前提条件を無効化できる。
解説・採点基準(計15点):
| 採点項目 | キーワード | 配点 |
|---|---|---|
| ヘッダ名の正確な指摘 | X-Frame-OptionsまたはContent-Security-Policyのいずれか | 5点 |
| 設定値の正確な指摘 | DENY/SAMEORIGINまたはframe-ancestors 'self'等の具体値 | 5点 |
| 防止理由 | 「自サイト以外からのフレーム埋め込みを拒否する」旨 | 5点 |
ヘッダ名のみで具体的な設定値が誤っている、または欠落している場合は設定値欄を0〜2点とする。
設問2
インシデント②について、/redirectエンドポイントに実装すべき対策を2つ挙げ、それぞれの効果を述べよ。また、このような攻撃がフィッシングにおいて悪用される理由を30字以内で述べよ。
設問2の解答・解説を見る
正解例(対策は下記から2つ):
-
リダイレクト先URLのホワイトリスト検証
urlパラメータの値を自社が管理する許可済みドメイン・パスのリストと照合し、一致しない場合はリダイレクトを拒否する。任意の外部ドメインへの転送自体を排除できる。 -
外部遷移時の確認画面の挟み込み ホワイトリスト外への遷移が必要な場合でも、直接リダイレクトせず「外部サイトへ移動します」という確認画面を経由させ、遷移先URLを明示してユーザに気づく機会を与える。
-
相対パスまたは内部IDによるリダイレクト先指定への変更
urlパラメータに任意の絶対URLを直接渡す設計をやめ、事前定義した遷移先を示す識別子(例:redirect?id=1)をパラメータとして受け取り、サーバ側でマッピングされた固定の遷移先URLへリダイレクトする。
悪用される理由の正解例: 正規ドメインへのリンクに見えるため利用者が信用してクリックしてしまうため。(30字)
解説: オープンリダイレクトは、正規ドメインのURLでありながら、パラメータで指定した任意の外部URLへ転送できてしまう脆弱性である。単体では情報漏洩に直結しないため軽視されがちだが、フィッシング攻撃において「正規ドメインを含むリンクなので安全に見える」という利用者の心理的信頼を悪用する踏み台として極めて有効に機能する。またメールフィルタやセキュリティ製品のドメイン評価をすり抜ける目的にも使われる。対策の根本はリダイレクト先を自社の管理下にある値に限定する設計(ホワイトリストまたは固定マッピング)である。
解説・採点基準(計15点):
| 採点項目 | キーワード | 配点 |
|---|---|---|
| 対策1の妥当性・効果 | ホワイトリスト検証、または内部ID化など「遷移先を限定する」趣旨 | 5点 |
| 対策2の妥当性・効果 | 確認画面の挟み込み、または対策1と異なる有効な手法 | 4点 |
| 悪用理由 | 「正規ドメインに見えるため信用される」旨 | 6点 |
対策が「入力値の文字種チェック」など遷移先ドメインの制御に踏み込んでいない場合は、その対策欄を1〜2点とする。
重要キーワード
| 用語 | 説明 |
|---|---|
| クリックジャッキング | 透明化・偽装したiframeで標的サイトの操作画面を罠サイトに重ね、利用者に意図しない操作をさせる攻撃 |
| X-Frame-Options | ページがiframe等でフレーム化されることを制御するHTTPレスポンスヘッダ。DENY・SAMEORIGIN等を指定する |
| CSP frame-ancestors | Content-Security-Policyのディレクティブの一つ。自ページを埋め込めるオリジンを制御し、クリックジャッキングを防止する |
| オープンリダイレクト | パラメータで指定した任意の外部URLへ転送してしまう実装不備。正規ドメインを悪用したフィッシングの踏み台となる |
| UI Redressing | クリックジャッキングを含む、UI(画面表示)を偽装して利用者を誤操作させる攻撃全般の総称 |
| ホワイトリスト検証 | 許可する値の範囲をあらかじめ定義し、それ以外を拒否する検証方式。リダイレクト先の制限にも応用される |
まとめ
- 午前I視点: クリックジャッキングは透明
iframeを用いたUI偽装攻撃であり、DNSキャッシュポイズニングやSQLインジェクションなど他の攻撃手法と混同しないよう攻撃の仕組みを正確に押さえる。 - 午前II視点:
X-Frame-OptionsとCSP frame-ancestorsは併用が推奨されるという関係性、およびframe-ancestorsが「自サイトを誰が埋め込めるか」を制御するものである点を正確に理解する。 - 午後視点: クリックジャッキング対策はヘッダ設定による防御、オープンリダイレクト対策は遷移先の限定(ホワイトリスト・内部ID化)が核心。オープンリダイレクトが単体では軽視されがちだがフィッシングの信頼性向上に悪用される点まで説明できるようにする。