Web セキュリティ

クリックジャッキング

約 3 分で読めます

クリックジャッキングとは

クリックジャッキング (Clickjacking) とは、透明または不可視の iframe を使って正規の Web ページをユーザーの画面上に重ね、ユーザーが意図しないクリック操作を誘導する攻撃手法です。UI Redressing (UI の偽装) とも呼ばれます。

攻撃者は罠となるページを作成し、その上に標的サイトを透明な iframe で重ねます。ユーザーには罠ページのボタンやリンクが見えていますが、実際にクリックしているのは透明な iframe 内の標的サイトの要素です。これにより、ユーザーが気づかないうちに「いいね」の押下、設定の変更、送金の承認などの操作が実行されます。

攻撃の仕組みと手口

クリックジャッキングは以下の手順で実行されます。

  1. 攻撃者が罠となる Web ページを作成する。魅力的なコンテンツ (動画再生ボタン、ゲーム、懸賞応募フォームなど) を配置する
  2. 標的サイトを iframe で読み込み、CSS で opacity: 0 (完全に透明) に設定する
  3. 透明な iframe を罠ページのクリック可能な要素の上に正確に重ねる
  4. ユーザーが罠ページのボタンをクリックすると、実際には透明な iframe 内の標的サイトのボタンがクリックされる

発展的な手口

  • ドラッグ & ドロップの悪用: ユーザーのドラッグ操作を利用して、透明な iframe 内のフォームにデータを入力させる
  • カーソルジャッキング: カーソルの表示位置を実際の位置からずらし、ユーザーが意図しない場所をクリックさせる
  • マルチステップ攻撃: 複数のクリックを誘導し、確認ダイアログの「OK」ボタンまでクリックさせる

XSSCSRF と組み合わされることで、より複雑な攻撃シナリオが構築される場合もあります。

防御策の実装

クリックジャッキングの防御は、自サイトが他サイトの iframe に埋め込まれることを防ぐことが核心です。

CSP frame-ancestors ディレクティブ

CSPframe-ancestors ディレクティブは、自サイトを iframe に埋め込める親ページのオリジンを制御します。最も推奨される対策です。

  • frame-ancestors 'none': どのサイトにも iframe での埋め込みを許可しない
  • frame-ancestors 'self': 同一オリジンからの埋め込みのみ許可する
  • frame-ancestors https://trusted.example.com: 特定のオリジンからの埋め込みのみ許可する

X-Frame-Options ヘッダー

CSP 以前から使われている対策で、現在も広くサポートされています。

  • X-Frame-Options: DENY: すべての iframe 埋め込みを拒否
  • X-Frame-Options: SAMEORIGIN: 同一オリジンからの埋め込みのみ許可

CSP frame-ancestorsX-Frame-Options の両方を設定することで、古いブラウザとの互換性を確保しつつ、最新の保護を適用できます。

JavaScript による防御 (フレームバスティング)

if (top !== self) { top.location = self.location; } のようなスクリプトで、iframe 内に読み込まれた場合にトップフレームに脱出する手法です。ただし、攻撃者が sandbox 属性で JavaScript の実行を制限できるため、HTTP ヘッダーによる対策の補助としてのみ使用すべきです。

実務での対策チェックリスト

クリックジャッキング対策を確実に実装するためのチェックリストです。

  • セキュリティヘッダーの設定確認: すべてのページのレスポンスに X-Frame-Options: DENY (または SAMEORIGIN) と CSP frame-ancestors が含まれていることを確認する
  • iframe の埋め込みが必要なページの特定: 決済フォームの埋め込みなど、正当な理由で iframe を許可する必要があるページは、許可するオリジンを厳密に制限する
  • 重要な操作の保護: パスワード変更、送金、アカウント削除などの重要な操作には、CSRF トークンに加えて再認証 (パスワードの再入力) を要求する
  • HSTS の併用: HTTPS を強制し、中間者攻撃によるセキュリティヘッダーの除去を防ぐ
  • 定期的なテスト: 自サイトが iframe に埋め込み可能かどうかを定期的にテストする。ブラウザの開発者ツールやセキュリティスキャナーで検証できる

クリックジャッキングは単独では大きな被害に見えないこともありますが、ソーシャルエンジニアリングと組み合わせることで、ユーザーに気づかれずに重要な操作を実行させる強力な攻撃手法です。HTTP ヘッダーの設定だけで防御できるため、対策コストに対する効果が非常に高いセキュリティ施策です。

よくある誤解

クリックジャッキングは古い攻撃手法で現在は脅威ではない
2008 年に初めて報告された手法だが、X-Frame-Options や CSP frame-ancestors を設定していないサイトは依然として多く、攻撃は現在も有効。SNS の「いいね」ボタンや OAuth の認可画面を標的にした攻撃が報告され続けている。
JavaScript のフレームバスティングだけで十分に防御できる
攻撃者は iframe の sandbox 属性で JavaScript の実行を制限したり、onbeforeunload イベントでフレーム脱出を妨害したりできる。HTTP ヘッダー (X-Frame-Options、CSP frame-ancestors) による防御が必須であり、JavaScript は補助的な対策にすぎない。

関連用語

関連記事