クリックジャッキングとは、正規のWebサイトの上に見えないボタンやリンクを重ね、利用者を視覚的に欺いて、意図しないクリック操作をさせるサイバー攻撃です。
利用者は普通のボタンを押したつもりでも、その裏に仕込まれた別の操作が実行されてしまいます。狙われるのは、送金や設定変更のようにマウス操作だけで完了する処理です。この記事では、クリックジャッキングの仕組みと想定される被害、混同されやすい攻撃との違い、2024年12月に公表された進化版の手口、そしてサイト運営者と利用者の双方が取れる対策までを解説します。
クリックジャッキングとは、利用者の「クリック」を「ジャック(乗っ取る)」する攻撃です。名前はこの2語を組み合わせたもので、画面表示(UI)を偽装して操作を誘導することから、UIリドレッシング(UI Redressing)とも呼ばれます。
攻撃が成立する理由は、Webページの上に別のページを透明な状態で重ねられるためです。利用者の目には安全そうなボタンが見えていても、実際にクリックされるのは背後に隠された正規サイトのボタンです。見た目と実際の操作対象がずれることで、利用者は自分の意思とは違う処理を実行させられます。
たとえば、あるサイトで「動画を再生する」ボタンを押したつもりが、背後に重ねられた「送金する」ボタンが押されていた、という状況が起こり得ます。利用者は最後まで異変に気づきません。この攻撃には、攻撃者、操作させられる利用者、そして悪用される正規サイトの運営者という三者が関わります。運営者が攻撃に加担しているわけではありませんが、外部サイトのフレーム内に読み込まれることを制限していない状態は、サイト側の脆弱性として扱われます。
IPA(独立行政法人情報処理推進機構)は、ログイン後の利用者だけが使える機能がマウス操作のみで実行できる場合に、この問題が発生し得ると説明しています。こうした欠陥を「クリックジャッキングの脆弱性」、それを突く攻撃を「クリックジャッキング攻撃」と呼びます(※1)。
クリックジャッキングは、Webページに別のページを埋め込む正規の機能を悪用して成り立ちます。ここでは、その中心となる技術と攻撃の流れ、代表的な2つのパターンを説明します。
iframe(インラインフレーム)とは、あるWebページの中に別のWebページを枠として埋め込むHTMLの機能です。本来は、外部の地図やSNSの投稿、動画などをページ内に表示するために使われます。
問題は、このiframeにCSSで透過度や表示位置を指定できる点にあります。透過度を0にすれば、埋め込んだページを完全に見えない状態にできます。攻撃者はこの性質を利用し、利用者に見せたい罠のボタンの真上、あるいは真下に、透明にした正規サイトのボタンを正確に重ね合わせます。
攻撃は、おおむね次の順序で進みます。まず攻撃者が、利用者の興味を引くような罠のWebページを用意します。「続きはこちら」「無料でプレゼントを受け取る」といった、思わず押したくなるボタンを置くのが典型です。
次に、攻撃者はメールやSNSのリンクを使って、利用者をこの罠ページへ誘導します。利用者が正規サイトにログインした状態のまま罠ページを開くと、罠のボタンの位置に、透明化した正規サイトの機能が重なって表示されます。
そして利用者が罠のボタンをクリックすると、実際には背後の正規サイトのボタンが押されます。設定変更や退会処理など、利用者が意図しない処理がこのとき実行されます。
クリックジャッキングの重ね方には、大きく2つのパターンがあります。1つは、利用者に見せる罠のページの上に、透明化した正規サイトを重ねる方法です。
もう1つは、正規サイトを不透明のまま前面に置き、その上から画像などで大部分を覆い隠して、押させたいボタンの部分だけを見えるようにする方法です。
どちらも狙いは同じで、利用者が見ているものと、実際にクリックされるものを食い違わせる点にあります。表示の重なりによって操作対象がすり替わるという構造は、両者に共通します。
クリックジャッキングの被害は、マウス操作だけで実行できる処理に限られます。裏を返せば、重要な操作がクリックだけで完了するサイトほど、被害が大きくなります。IPAは、発生し得る脅威はマウス操作のみで実行可能な処理に限られる点を除けば、CSRF攻撃による脅威と同様だと説明しています(※1)。
具体的には、次のような被害が想定されます。
| 被害の種類 | 内容 |
|---|---|
| 金銭的被害 | 意図しない商品の購入、有料サービスの申し込み |
| アカウントの悪用 | SNSでの意図しないフォローや投稿、退会処理の実行 |
| 設定の変更 | 個人情報の公開範囲の変更、アカウント設定の改ざん |
| マルウェア感染 | 偽装されたダウンロードボタンによる不正プログラムの取得 |
| 端末の乗っ取り | Webカメラやマイクの不正な起動による盗聴や盗撮 |
こうした被害が起こりやすいのは、ログイン機能を持つサイトです。SNS、通販サイト、インターネットバンキング、Webサイトの管理画面などが該当します。ログイン後の利用者だけが使える機能を、クリックだけで実行できる場合は特に注意が必要です。
なお、クリックジャッキングはパソコンだけの問題ではありません。スマートフォンやタブレットのブラウザも同じHTMLの仕組みで動くため、同様の攻撃が成立します。
クリックジャッキングは、名前や被害が似た他の攻撃としばしば混同されます。CSRF、XSS、フィッシングとの違いを理解すると、それぞれの対策の考え方も見えてきます。
CSRFとは、ログイン中の利用者のブラウザから、利用者が意図しない不正なリクエストをWebサイトへ送信させる攻撃です。サイト側は正規の利用者からの要求だと誤認して処理を実行してしまいます。
クリックジャッキングとCSRFは、どちらも利用者に気づかれず不正な操作を成立させる点が共通します。違いは、だます対象です。クリックジャッキングは利用者の視覚をだまして本来のサイト機能を実行させます。一方CSRFは、利用者のブラウザにサイトへの偽のリクエストを送らせます。また、CSRFが罠ページを開いた時点で成立し得るのに対し、クリックジャッキングは利用者自身のクリックが必要という違いもあります。
この違いは対策にも表れます。CSRF対策として広く使われるトークンの検証は、クリックジャッキングには効きません。攻撃者はiframeに正規サイトのページをそのまま読み込ませており、リクエストには正しいトークンが含まれた状態で送信されるためです。
XSSとは、Webサイトの脆弱性を突いて不正なスクリプト(プログラム)を埋め込み、利用者のブラウザ上で実行させる攻撃です。クリックジャッキングが正規の機能をそのまま利用するのに対し、XSSは攻撃者が用意した不正なコードを動かす点が異なります。
フィッシングとは、本物そっくりの偽サイトに利用者を誘導し、IDやパスワードなどを入力させて盗む攻撃です。視覚的にだます点はクリックジャッキングと共通しますが、フィッシングが偽サイトへの入力を狙うのに対し、クリックジャッキングは正規サイトの機能を利用者自身に実行させる点で目的と仕組みが違います。
3つの攻撃との違いを、次の表にまとめます。
| 攻撃手法 | だます対象 | 実行されるもの |
|---|---|---|
| クリックジャッキング | 利用者の視覚 | 正規サイトの本来の機能 |
| CSRF | Webサイト側の判定 | ブラウザから送られる偽のリクエスト |
| XSS | 利用者のブラウザ | 攻撃者が埋め込んだ不正なスクリプト |
| フィッシング | 利用者の判断 | 偽サイトへの情報入力 |
ここまで説明した従来型のクリックジャッキングは、実は成立しにくくなってきています。現代のブラウザはCookieを既定でSameSite: Laxに設定するため、攻撃者が正規サイトをフレームで囲めたとしても、クロスサイトのCookieが送信されず、囲まれた側は未認証の状態になるためです。重要な機能の多くはログインを前提とするため、これが攻撃の成功率を大きく下げてきました(※2)。
だからこそ、攻撃側は別の道を探します。2024年12月、従来の対策を回避し得る新しい手口が公表されました。セキュリティ研究者のPaulos Yibelo氏が「DoubleClickjacking(ダブルクリックジャッキング)」と名づけた攻撃です(※2)。
この手口は、ダブルクリックの2回のクリックの間に生じるわずかな時間差を突きます。攻撃の流れは次のとおりです。利用者が罠サイトのボタンを押すと、CAPTCHA認証(人間かどうかを確かめる認証)を装った新しいウィンドウが開き、ダブルクリックを促します。その裏側で、元のページはOAuth認証などの重要な操作画面へ密かに切り替わります。利用者が1回目のクリックで認証画面を閉じ、2回目のクリックが、背後で切り替わっていた正規サイトの許可ボタンに着地する仕組みです(※2、※3)。
従来のクリックジャッキングと大きく異なるのは、iframeを使わない点です。Yibelo氏によると、この手口はX-Frame-Options、CSPのframe-ancestors、SameSite Cookieといった、これまで有効とされてきた対策では防げないとされています。攻撃はWebサイトだけでなく、ブラウザ拡張機能やスマートフォンのダブルタップにも応用できると指摘されています(※2)。
Yibelo氏は、Shopify、Slack、Salesforceのアカウント乗っ取りに成功する実証動画を公開しています(※2)。現時点で大規模な被害が多く報告されているわけではありませんが、既存の主要な防御策を回避し得る特性を持つため、備えを早めに検討する意味は大きいといえます。緩和策としては、重要なボタンをマウスの動きやキー入力を検知するまで無効にしておく、クライアント側の対応が挙げられています。クラウドストレージのDropboxは、すでにこの種の予防策を導入していることが確認されています(※3)。
クリックジャッキングは、外部サイトから自社ページをフレーム内に読み込めることが根本の原因です。したがって対策の中心は、この読み込みを制限することにあります。IPAが示す根本的解決策と保険的対策を軸に説明します。
新しく対策を設定する場合に、まず選びたいのがCSPのframe-ancestorsです。CSP(Content Security Policy)とは、Webページの読み込みや実行を細かく制御するためのセキュリティ機能を指します。このなかのframe-ancestorsという指定を使うと、自社ページをどのサイトからフレーム内に読み込ませるかを制御できます。
MDN Web Docsは、後述するX-Frame-Optionsよりも包括的な設定として、このframe-ancestorsの利用を案内しています(※4)。指定できる値には、すべての埋め込みを禁止する'none'、同一オリジン(同じサイト)のみ許可する'self'、特定のオリジンだけを許可する形式があります。複数の許可元をきめ細かく指定できる点が、次に説明するX-Frame-Optionsにない利点です(※4)。
なお、frame-ancestorsはHTTPレスポンスヘッダーでしか機能せず、HTMLのmeta要素に書いても効きません。CSPの他の指定と同じ感覚でmetaタグに記述すると、対策したつもりで無効になるため注意が必要です。
X-Frame-Optionsとは、自社のWebページが外部サイトのframeやiframeの中に読み込まれることを制限する、HTTPレスポンスヘッダーの設定です。HTTPレスポンスヘッダーとは、Webサーバーがブラウザへ応答を返す際に付ける制御情報を指します。CSPに対応していない古いブラウザへの備えとして、frame-ancestorsと併用する位置づけになります(※4)。
指定できる値は次の3種類です。
| 設定値 | 制限の範囲 |
|---|---|
| DENY | すべてのページでフレーム内の表示を禁止する |
| SAMEORIGIN | 同一オリジン(同じサイト)のページのみフレーム内表示を許可する |
| ALLOW-FROM | 古い設定値で、現行のブラウザでは無視される |
このうちALLOW-FROMは、現行のブラウザではヘッダーごと無視されるため、使用しません。特定のオリジンだけを許可したい場合は、前述のframe-ancestorsで指定します(※4)。
IPAは根本的解決の一つとして、処理を実行する直前のページで再度パスワードの入力を求め、正しい場合のみ処理を実行する方法を挙げています。あわせて保険的対策として、重要な処理を一連のマウス操作だけで実行できないようにする方法も示しています。
クリックジャッキングは利用者を視覚的にだます手口のため、複雑な操作を求めると成功率が下がります。処理の直前にキーボードでのパスワード再入力を挟むといった方法が有効です(※1)。
ただし、この対策は画面設計の変更を伴うため、実装の変更だけで済ませたい場合は、前述のframe-ancestorsなどヘッダーの設定から検討する順序が現実的です(※1)。前述のダブルクリックジャッキングのように、ヘッダーの設定だけでは防ぎきれない手口も登場しているため、ボタンの操作に一手間を加える設計上の工夫は、今後いっそう重要になります。
ここまでの対策が正しく機能しているかは、設定した本人には見落としが生じやすい部分です。X-Frame-OptionsやCSPが全ページで漏れなく設定されているか、他に見過ごされた弱点がないかを外部の視点で確かめる手段が、脆弱性診断です。脆弱性診断とは、Webサイトやアプリケーションに潜むセキュリティ上の欠陥を洗い出す検査を指します。
診断を受ければ、クリックジャッキングだけでなく、CSRFやXSSなど他の脆弱性も横断的に確認できます。設定の抜け漏れは、開発者ツールでヘッダーを確認する簡易的な自己点検である程度は把握できますが、サイト全体を網羅的に評価するには専門的な検査が必要です。
なお、脆弱性の検出をツールによる自動診断だけに頼る方法には限界があります。クリックジャッキングのように、画面の見え方や操作の流れが被害の成否を左右する脆弱性は、機械的なスキャンだけでは実際の悪用可能性まで判断しづらいためです。攻撃者の視点で手を動かして検証する、専門家による手動の診断やペネトレーションテスト(侵入を試みる検査)を組み合わせることで、こうした見極めの難しい弱点まで踏み込んで評価できます。
クリックジャッキングへの対策は、本来はサイト運営者側が主体となって講じるものです。それでも、利用者側の心がけで被害に遭うリスクをある程度は下げられます。
まず、ブラウザは常に最新のバージョンに保つことが基本です。ブラウザには、既知の攻撃手法を防ぐための修正が随時反映されるためです。次に、メールやSNSで届いた心当たりのないリンクを、不用意にクリックしないことが挙げられます。クリックジャッキングの多くは、罠ページへ誘導するリンクから始まるためです。
加えて、ブラウザの設定でサードパーティCookie(別のサイトが発行するCookie)をブロックする方法もあります。ただしこれが効くのは、正規サイトをフレーム内に読み込む従来型の手口に限られます。前述のダブルクリックジャッキングはフレームを使わないため、この設定では防げません。新しいウィンドウが開いてダブルクリックを求められた場合は、その操作が本当に必要かをいったん確認することが有効です。
ただし、これらの利用者側の対策だけで完全に防げるわけではありません。信頼できないサイトでは、むやみにクリックしないことが最も確実な自己防衛になります。
クリックジャッキングは、透明なレイヤーを重ねて利用者を視覚的に欺き、意図しない操作を実行させる攻撃です。狙われるのはマウス操作だけで完結する重要な処理であり、ログイン機能を持つサイトが特に危険にさらされます。2024年末には、従来の対策を回避し得るダブルクリックジャッキングも公表され、手口は年々巧妙になっています。
サイト運営者がまず確認したいのは、次の3点です。重要な処理がマウス操作だけで完結していないか、X-Frame-OptionsやCSPが全ページで設定されているか、そして設定の抜け漏れや他の弱点を客観的に検証できているか、です。開発者ツールでのヘッダー確認は自己点検の第一歩になりますが、サイト全体を評価するには専門的な検査が欠かせません。
ユービーセキュアは、Webアプリケーションの脆弱性診断とセキュリティコンサルティングを提供しています。クリックジャッキングのように見極めの難しい脆弱性は、経験を積んだ技術者が攻撃者の視点で検証する手動診断が有効です。自社サイトの対策状況に不安がある場合は、専門家による診断を検討してください。
参考
※1 IPA|安全なウェブサイトの作り方 - 1.9 クリックジャッキング
※2 Paulos Yibelo|DoubleClickjacking: A New Era of UI Redressing
※3 The Hacker News|New "DoubleClickjacking" Exploit Bypasses Clickjacking Protections on Major Websites
※4 MDN Web Docs|X-Frame-Options ヘッダー