Web Security

Clickjacking

クリックジャッキング

Category: Web Security / Updated: 2026-05-26

📖

Overview

クリックジャッキング(Clickjacking)とは、Webページ上に透明なiframeを重ね合わせることで、ユーザーが意図しない操作を実行させるクライアントサイドの攻撃手法です。「UI Redressing(UIの偽装)」とも呼ばれ、ユーザーの目に見えるコンテンツと実際にクリックされる要素を分離することで、ユーザーを欺きます。

攻撃者は正規のWebサイトを透明なiframeとして読み込み、その上に魅力的なコンテンツ(ボタンやリンク)を配置します。ユーザーが見えているボタンをクリックすると、実際には透明なiframe内のボタン(例:「いいね」ボタン、設定変更ボタン、送金ボタンなど)がクリックされます。

クリックジャッキングはユーザーが正規サイトにログイン済みであることを悪用するため、セッションの認証状態を利用した攻撃と言えます。CSRF(クロスサイトリクエストフォージェリ)と類似していますが、ユーザー自身のクリック操作を利用する点が異なります。

🔬

Details

攻撃の仕組み(iframe overlaying)

クリックジャッキングの基本的な仕組みは以下の通りです。攻撃者は悪意あるWebページを作成し、ターゲットとなる正規サイトをiframeとして埋め込みます。このiframeにCSSでopacity: 0(完全に透明)を設定し、ユーザーの目に見えないようにします。透明なiframeの下に、ユーザーがクリックしたくなるようなボタンやリンクを配置します。

ユーザーが誘導用のボタンをクリックすると、実際にはその上に重ねられた透明なiframe内の要素がクリックされ、正規サイト上で意図しない操作が実行されます。ブラウザはユーザーの正当なクリック操作として処理するため、Cookieや認証トークンが自動的に送信されます。

クリックジャッキングの種類

  • Likejacking:SNSの「いいね」ボタンを透明に重ね、ユーザーに意図せず「いいね」を押させる攻撃。Facebookで大規模に発生し問題化した
  • Cursorjacking:カーソルの表示位置を実際の位置からずらすことで、ユーザーが意図した場所とは異なる場所をクリックさせる手法
  • Filejacking:ファイル選択ダイアログを透明に重ねて表示し、ユーザーにローカルファイルを意図せずアップロードさせる攻撃
  • Cookiejacking:ドラッグ&ドロップ操作を悪用し、ブラウザのCookie情報を攻撃者に送信させる手法

防御策:X-Frame-Options

X-Frame-OptionsはHTTPレスポンスヘッダーで、ブラウザに対してページのiframe埋め込みを制御する指示を与えます。以下の3つの値を設定できます。

  • DENY:すべてのiframe埋め込みを拒否する。最も安全な設定
  • SAMEORIGIN:同一オリジンからのiframe埋め込みのみ許可する
  • ALLOW-FROM uri:指定したURIからの埋め込みのみ許可する(現在は非推奨)

防御策:CSP frame-ancestors

Content-Security-Policy(CSP)のframe-ancestorsディレクティブは、X-Frame-Optionsの後継となるより柔軟な防御手段です。複数のオリジンを指定でき、ワイルドカードも使用可能です。frame-ancestors 'none'はX-Frame-Optionsの「DENY」に相当し、frame-ancestors 'self'は「SAMEORIGIN」に相当します。

CSP frame-ancestorsとX-Frame-Optionsの両方が設定されている場合、CSPが優先されます。ただし、古いブラウザとの互換性を考慮し、両方のヘッダーを設定することが推奨されます。

ダブルクリック攻撃

近年発見されたダブルクリックジャッキングは、従来の単一クリック型の攻撃を発展させたものです。最初のクリックで攻撃者のページの要素を操作させ、2回目のクリックのタイミングでページ構造を瞬時に切り替え、透明なiframe内の重要なボタン(権限承認など)をクリックさせます。ダブルクリック操作の自然な流れを利用するため、ユーザーが攻撃に気づきにくい特徴があります。

🛡️

Security Measures

  • 01
    X-Frame-OptionsヘッダーとCSP frame-ancestorsの設定:全ページのHTTPレスポンスにX-Frame-Options: DENYまたはSAMEORIGINを設定してください。同時にCSPのframe-ancestorsディレクティブも設定し、二重の防御を行いましょう。
  • 02
    JavaScriptによるフレームバスティング:フォールバック対策として、JavaScriptでページがiframe内に表示されていないことを確認するコードを実装してください。ただし、sandbox属性付きiframeではJavaScriptが無効化される場合があるため、HTTPヘッダーによる防御を主とすべきです。
  • 03
    重要操作における確認ステップの追加:送金、設定変更、権限付与などの重要な操作には、追加の確認ダイアログやCAPTCHAを実装してください。単一クリックで重要な操作が完了しないようにすることが防御の基本です。
  • 04
    SameSite Cookie属性の設定:認証CookieにSameSite=Strict(またはLax)を設定し、クロスサイトのiframeリクエストにCookieが送信されないようにしてください。これによりクリックジャッキングによる認証済み操作の悪用を防止できます。
  • 05
    CSRFトークンとの併用:クリックジャッキング対策をCSRF対策と組み合わせて実装してください。CSRFトークンによるリクエスト検証は、クリックジャッキングによる不正な状態変更操作に対する追加の防御層となります。
  • 06
    定期的なセキュリティヘッダーの監査:全ページ・全エンドポイントに対してセキュリティヘッダーが正しく設定されていることを定期的に確認してください。新規ページの追加時にヘッダー設定が漏れるケースが多いため、自動テストに組み込むことを推奨します。
⚠️

Incidents

📋 Facebook Likejacking 大規模攻撃(2010年)

2010年、Facebookの「いいね」ボタンを悪用したクリックジャッキング攻撃(Likejacking)が大規模に発生しました。攻撃者は衝撃的な動画や画像を装ったWebページを作成し、その上にFacebookの「いいね」ボタンを透明なiframeとして重ねました。

ユーザーが動画の「再生」ボタンと思ってクリックすると、実際にはFacebookの「いいね」が押され、そのページがユーザーのFacebookフィードに投稿されました。これがさらに拡散し、数百万人のユーザーが影響を受けました。Facebookはこの攻撃を受けてX-Frame-Optionsの導入や確認ダイアログの追加など、クリックジャッキング対策を大幅に強化しました。

📋 Adobe Flash設定変更攻撃

Adobe Flashのセキュリティ設定パネルを標的としたクリックジャッキング攻撃が発見されました。攻撃者は透明なiframeでAdobe Flash Playerの設定マネージャーページを読み込み、ユーザーにゲームのボタンをクリックさせることで、実際にはFlashのカメラやマイクへのアクセス許可を変更させました。

この攻撃により、ユーザーが気づかないうちにWebカメラやマイクが有効化され、プライバシーが侵害される危険がありました。Adobe社はこの脆弱性に対処するため設定パネルのフレーム埋め込みを禁止する修正を行いました。この事件はクリックジャッキングがプライバシー侵害に直結する実例として注目されました。

📋 Twitter ワーム攻撃(2009年)

2009年、Twitterでクリックジャッキングを利用したワームが拡散しました。攻撃者はTwitterの投稿ボタンを透明なiframeで覆い隠し、ユーザーが別のコンテンツをクリックすると、特定のメッセージが自動的にツイートされる仕組みを構築しました。

感染したツイートには攻撃者のページへのリンクが含まれており、そのリンクをクリックした別のユーザーも同様に感染ツイートを投稿するという連鎖的な拡散が発生しました。短時間で数千のアカウントが影響を受け、Twitter社はX-Frame-Optionsヘッダーの導入やツイート時の確認プロセスを追加するなどの対策を実施しました。

🔗

Related Terms