IT用語

クリックジャッキングとは?仕組みや被害例、対策を初心者向けにわかりやすく解説【図解付き】

クマノくらげ

はじめに

Webセキュリティについて学んでいると、クリックジャッキング(Clickjacking)という言葉を見かけることがあります。

しかし、

  • クリックしただけで、なぜ攻撃が成立するのか
  • フィッシングやCSRFとは何が違うのか
  • iframeは危険な機能なのか
  • 利用者とWebサイト運営者は、どのように対策すればよいのか

と疑問に思う方も多いのではないでしょうか。

クリックジャッキングとは、簡単に言うと、

「利用者に見えているボタンとは別の、透明または見えにくいボタンをクリックさせる攻撃」

です。

攻撃者は、正規のWebページをiframeなどで別のページに重ねて表示し、利用者が意図していない操作を実行させます。

例えば、利用者は「動画を再生する」ボタンを押したつもりでも、実際には背後にある「設定を変更する」「商品を購入する」といったボタンを押している可能性があります。

この記事では、クリックジャッキングの仕組み、被害例、CSRFやフィッシングとの違い、X-Frame-OptionsやCSPによる対策について、会話形式でわかりやすく解説します。

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

クリックジャッキングって、どんな攻撃なの?

利用者をだまして、本人が意図していないボタンやリンクをクリックさせる攻撃だよ。

偽物のボタンを押させるの?

偽物を押させるというより、見えているボタンの裏側に、本物のWebページのボタンを隠しておくイメージだね。

画面の裏に別のボタンがあるの?

そう。透明にした正規サイトの画面を、攻撃者の用意したページに重ねて表示するんだ。

透明な紙を重ねる例で考えてみよう

画面を重ねると言われても、少し想像しにくいな。

透明な紙で考えてみよう。

机の上に、次のような申込書が置かれているとしよう。

  • 商品を購入する
  • アカウントを削除する
  • 設定を変更する

その申込書の上に、透明な紙を重ねる。

透明な紙には、

「ここを押すとプレゼントがもらえます」

と書かれているよ。

利用者にはプレゼントのボタンだけが見えているんだね。

そう。でも、そのボタンの位置が、下にある「商品を購入する」ボタンと重なっていたらどうなる?

プレゼントを受け取るつもりで、商品を購入してしまう。

それがクリックジャッキングの基本的なイメージだよ。

クリックジャッキングの仕組み

クリックジャッキングは、一般的に次のような流れで行われるよ。

  1. 攻撃者が罠となるWebページを作る
  2. 正規のWebページをiframeなどで罠のページ内に読み込む
  3. 正規ページを透明、または見えにくい状態にする
  4. 正規ページの重要なボタンと、偽のボタンの位置を重ねる
  5. 利用者を罠のページへ誘導する
  6. 利用者が偽のボタンをクリックする
  7. 背後にある正規ページの操作が実行される

攻撃者が正規サイトへ不正ログインするわけではないの?

そこが重要なんだ。利用者がすでに正規サイトへログインしている状態を悪用することがある。

ログイン中の利用者自身に操作させるんだね。

そう。正規サイトから見ると、ログイン済みの利用者が自分でボタンを押したように見える場合があるんだ。

iframeとは?

さっきから出てくるiframeって何?

あるWebページの中に、別のWebページを表示するためのHTML要素だよ。

例えば、Webページ内に次のようなものを埋め込む場合に利用されるよ。

  • 動画
  • 地図
  • 広告
  • 決済画面
  • 外部のWebコンテンツ

それなら普通に使われている機能だよね。

その通り。iframe自体は悪いものではないよ。

正しい機能を攻撃者が悪用しているんだ。

そう。正規サイトを自分のページ内に表示し、透明化や位置調整によって利用者をだますんだよ。

クリックジャッキングで起こり得る被害

具体的には、どんな操作をさせられるの?

Webサービスの機能によって異なるけれど、例えば次のような被害が考えられるよ。

被害の例内容
設定変更公開範囲やプライバシー設定を変更される
不正購入本人の意図しない商品を購入させられる
送金・契約金銭に関係する操作を実行させられる
アカウント操作退会、削除、権限変更などを実行させられる
SNS操作フォロー、投稿、評価などを行わせる
アクセス許可カメラやマイクなどの利用許可を押させる
広告操作不正に広告をクリックさせる

ログインしているとなぜ危険なの?

正規サイトにログインしていると危険なの?

ログインしていること自体が危険というわけではないよ。ただし、クリックジャッキングではログイン状態が悪用されることがあるんだ。

どうして?

ブラウザが正規サイトのCookieなどを使って、ログイン済みの状態でページを表示する場合があるからだよ。

例えば、利用者がSNSへログインしたまま罠のページを開いたとする。

罠のページ内に正規SNSの設定画面が読み込まれ、ボタンが透明な状態で重ねられていると、利用者のクリックによって設定変更が実行される可能性があるよ。

攻撃者がパスワードを盗まなくても、利用者自身に操作させられるんだね。

そう。それがクリックジャッキングの厄介なところだよ。

UIリドレッシングとは?

UIリドレッシング(UI Redressing)って聞いたんだけど。これは関係ある?

クリックジャッキングは、UIリドレッシングの代表的な手法として扱われるよ。

UIとは、利用者が操作する画面やボタンなどを意味し、

リドレッシングには、「着せ替える」「外見を変える」といった意味がある。

つまりUIリドレッシングは、

本来の操作画面を別の見た目で覆い、利用者に誤った操作をさせる手法

ということだね。

用語意味
クリックジャッキングクリック対象を偽装して意図しない操作をさせる攻撃
UIリドレッシング画面の見た目を偽装して操作を誘導する手法
iframeWebページの中に別のページを表示するHTML要素

クリックジャッキングとフィッシングの違い

利用者をだますなら、フィッシングと同じじゃないの?

どちらも利用者をだます攻撃だけど、目的や仕組みが違うよ。

項目クリックジャッキングフィッシング
主な目的意図しない操作を実行させるIDやパスワードなどを入力させる
主な手法画面やボタンを重ねる偽サイトや偽メールを使う
利用者の操作本物のボタンを知らずに押す偽物の入力画面へ情報を入力する
正規サイトiframeなどで利用されることがある見た目をまねた偽サイトが使われることが多い
代表的な被害設定変更、購入、許可操作認証情報や個人情報の窃取

フィッシングは情報を入力させて盗む。クリックジャッキングは操作そのものを実行させるんだね。

基本的にはその整理でいいよ。

クリックジャッキングとCSRFの違い

CSRFとも似ている気がする。

どちらも、ログイン中の利用者に意図しない処理を実行させる可能性がある点は似ているね。

違いはどこ?

クリックジャッキングは、利用者のクリックを利用する。CSRFは、攻撃者が用意したリクエストを正規サイトへ送信させる攻撃だよ。

項目クリックジャッキングCSRF
正式名称ClickjackingCross-Site Request Forgery
日本語クリック乗っ取り攻撃クロスサイト・リクエスト・フォージェリ
主な手法画面を重ねてクリックを誘導する不正なリクエストを送信させる
利用者の操作クリックが必要になることが多いページ閲覧だけで成立する場合もある
主な対策frame-ancestorsX-Frame-OptionsCSRFトークン、SameSite Cookie、再認証
共通点ログイン状態が悪用される可能性があるログイン状態が悪用される可能性がある

クリックジャッキングは画面の問題で、CSRFはリクエストの問題なんだね。

クリックジャッキングとXSSの違い

XSSとはどう違うの?

XSSは、脆弱なWebページへ不正なスクリプトを埋め込み、利用者のブラウザ上で実行させる攻撃だよ。

項目クリックジャッキングXSS
主な対象画面とクリック操作Webページ内で実行されるスクリプト
主な手法透明な画面を重ねる不正なJavaScriptなどを埋め込む
主な被害意図しない操作Cookie窃取、画面改ざん、不正処理
主な対策フレーム表示の制限出力時のエスケープ、入力検証、CSP

クリックジャッキングでは、必ずしも正規サイトへ不正なコードを埋め込む必要はないんだね。

攻撃者側のページで正規サイトを重ねて表示することで成立する場合があるよ。

似た攻撃との比較

攻撃だます対象主な手口覚え方
クリックジャッキングクリック操作透明な画面を重ねる押した場所を乗っ取る
フィッシング利用者の判断偽サイトへ誘導する偽物に入力させる
CSRFWebリクエスト不正な要求を送信させる本人として処理させる
XSSブラウザ上の処理不正なスクリプトを実行するページ内でコードを動かす
セッションハイジャックセッション情報Cookieなどを盗むログイン状態を乗っ取る

クリックジャッキングへの対策

クリックジャッキング対策は、主にWebサイト運営者・開発者側で行います。

代表的な対策には、次のものがあります。

  • CSPのframe-ancestorsを設定する
  • X-Frame-Optionsを設定する
  • 重要操作の前に再認証を求める
  • 確認画面を設ける
  • CookieのSameSite属性を適切に設定する
  • 重要な操作を一度のクリックだけで完了させない

CSPのframe-ancestorsによる対策

CSPって何?

Content Security Policyの略で、Webページで許可するコンテンツや動作を制限する仕組みだよ。

CSPのframe-ancestorsディレクティブを使うと、そのWebページをどのサイトのフレーム内に表示してよいかを指定できる。

例えば、どのサイトからもフレーム内に表示させたくない場合は、次のように設定する。

Content-Security-Policy: frame-ancestors 'none';

同じオリジンのページからだけ表示を許可する場合は、次のように設定する。

Content-Security-Policy: frame-ancestors 'self';

特定のサイトだけに埋め込みを許可することもできるよ。

攻撃者のページに正規サイトを読み込ませないようにするんだね。

そう。クリックジャッキングは対象ページをフレーム内に表示することへ依存するため、埋め込みを制限することが有効なんだ。

X-Frame-Optionsによる対策

X-Frame-Optionsは、Webページをフレーム内に表示できるかどうかを指定するHTTPレスポンスヘッダーです。

代表的な設定値には、次のものがあります。

設定値内容
DENY同一サイトを含め、すべてのフレーム表示を禁止する
SAMEORIGIN同一オリジンのページからの表示だけを許可する

すべてのフレーム表示を禁止する例は、次のとおりです。

X-Frame-Options: DENY

同一オリジンだけを許可する例は、次のとおりです。

X-Frame-Options: SAMEORIGIN

かつてはALLOW-FROMという値もありましたが、現在のブラウザでは十分に対応されておらず、CSPのframe-ancestorsを利用する方法が適切です。

frame-ancestorsとX-Frame-Optionsの違い

両方ともフレーム表示を制限するなら、何が違うの?

frame-ancestorsの方が新しく、柔軟に許可先を設定できるよ。

項目CSP frame-ancestorsX-Frame-Options
役割フレーム内への埋め込み元を制限するフレーム内への表示を制限する
設定の柔軟性複数の許可元を指定しやすい主に全面禁止か同一オリジン
代表的な値'none''self'、許可するURLDENYSAMEORIGIN
位置付け現在の主要な対策古いブラウザへの補助として使われることがある

現代のWebアプリケーションでは、CSPのframe-ancestorsが主要な対策として利用されます。

互換性を考慮して、X-Frame-Optionsも併せて設定する場合があります。両方が指定されている場合、frame-ancestorsに対応したブラウザは、通常そちらを優先します。

再認証や確認画面も有効

フレーム表示を禁止すれば、それだけで十分?

重要な操作では、複数の対策を組み合わせた方がいいよ。

例えば、次の操作を行う前にパスワードを再入力させるんだ。

  • アカウント削除
  • 送金
  • パスワード変更
  • メールアドレス変更
  • 権限変更

透明なボタンを一度押させるだけでは、処理を完了できなくするんだね。

そう。IPAも、重要な処理の直前に再度パスワード認証を行う方法を対策の一つとして示しているよ。

確認画面を設ける場合も、単純に同じ位置の「はい」ボタンを追加するだけではなく、操作内容を利用者が確認できる設計が重要なんだ。

SameSite Cookieとの関係

Cookieの設定でも対策できるの?

補助的な対策として、CookieのSameSite属性が役立つ場合があるよ。

設定値概要
Strict原則として別サイト経由ではCookieを送らない
Lax一部の通常遷移では送るが、クロスサイト送信を制限する
NoneクロスサイトでもCookieを送る。Secureが必要

SameSite=StrictまたはLaxを適切に設定すると、攻撃者のサイト内に正規ページを表示した場合でも、認証Cookieが送信されにくくなることがあります。

ただし、Webサービスの仕様によって必要な設定が異なるため、SameSiteだけに頼るのではなく、frame-ancestorsなどと組み合わせることが大切です。

利用者側でできる対策

利用者側では、何をすればいいの?

クリックジャッキングは、利用者だけで完全に防ぐのが難しい攻撃だよ。基本的にはWebサイト側の対策が重要なんだ。

それでも、利用者側では次の点を意識できるよ。

  • 不審なWebサイトを開かない
  • 不自然にクリックを求めるページを警戒する
  • ブラウザを最新の状態にする
  • 利用後は重要なWebサービスからログアウトする
  • 重要な操作後は履歴や設定を確認する
  • 不審な広告やゲーム画面をむやみに連打しない

怪しいサイトで「ここを連打してください」と言われたら注意した方がいいんだね。

そうだね。ただし、見た目だけで見抜けないこともあるから、サイト運営者側で根本的な対策を行う必要があるよ。

クリックジャッキング対策のメリット・注意点

対策メリット注意点
CSP frame-ancestors許可する埋め込み元を柔軟に指定できる正規の埋め込み用途を確認する必要がある
X-Frame-Options設定が比較的簡単許可先の細かな指定には向かない
再認証重要操作の不正実行を防ぎやすい利用者の操作負担が増える
確認画面誤操作に気づきやすくなる画面設計が不十分だと回避される可能性がある
SameSite Cookieクロスサイトでの認証状態悪用を抑えられるサービスのログイン連携などへ影響する場合がある
操作ログ・通知不審な変更を早期発見しやすい攻撃そのものを直接防ぐ対策ではない

対策によるデメリットはある?

フレーム表示を全部禁止すればいいんじゃない?

そのサイトが本当にフレーム表示を必要としないなら、それでもいいよ。

ただし、Webページを別のサービスへ正式に埋め込む必要がある場合、全面的に禁止すると正常な機能まで利用できなくなるよ。

全面禁止にするとダメな場合があるんだ。

例えば、次のようなケースだよ。

  • 社内ポータルへの埋め込み
  • 決済サービスとの連携
  • パートナー企業のページへの表示
  • Webシステム内での画面統合

試験対策としてのポイント

クリックジャッキングは、情報セキュリティやWebアプリケーションの脆弱性に関する問題で出題される可能性があります。

ITパスポートでは攻撃の概要、基本情報技術者試験や応用情報技術者試験では、攻撃手法と対策の組合せを問われる可能性があります。

用語試験対策ポイント
クリックジャッキング見えている画面とは異なる対象をクリックさせる攻撃
iframeWebページ内に別のWebページを表示する要素
UIリドレッシング本来の画面を別の見た目で覆う手法
X-Frame-Optionsフレーム内への表示を制限するHTTPヘッダー
DENYすべてのフレーム表示を禁止する
SAMEORIGIN同一オリジンからのフレーム表示だけを許可する
CSP frame-ancestorsページを埋め込めるサイトを指定する
CSRF利用者の権限で不正なリクエストを実行させる攻撃
SameSite CookieクロスサイトでのCookie送信を制御する

「透明なフレームを重ね、利用者に意図しないクリックをさせる」という仕組みだと覚えよう。

対策は、CSPのframe-ancestorsと、X-Frame-Optionsだね。

まとめ

クリックジャッキングとは、正規のWebページを透明または見えにくい状態で別のページに重ね、利用者に意図していないボタンやリンクをクリックさせる攻撃です。

利用者は動画の再生やプレゼント応募のボタンを押したつもりでも、実際には背後にある設定変更、購入、送金、退会などのボタンを押している可能性があります。

主な対策は、CSPのframe-ancestorsX-Frame-Optionsを設定し、攻撃者のWebページから正規サイトをフレーム内に読み込ませないことです。

重要な処理では、再認証や確認画面、SameSite Cookieなどを組み合わせる多層的な対策も大切です。

最後にポイントを整理します。

項目内容
用語クリックジャッキング
英語Clickjacking
一言でいうと見えないボタンをクリックさせる攻撃
主な手法正規ページを透明なiframeなどで重ねる
悪用されるもの利用者のクリックとログイン状態
主な被害設定変更、購入、送金、削除、許可操作
主な対策CSP frame-ancestorsX-Frame-Options
補助的な対策再認証、確認画面、SameSite Cookie
CSRFとの違い画面とクリックを悪用する点
フィッシングとの違い情報入力ではなく操作を実行させる点
覚え方「見えるボタンと、実際に押すボタンが違う」

クリックジャッキングは、普通のボタンを押したように見せて、裏側にある別のボタンを押させる攻撃なんだね。

その理解でバッチリ。利用者の目に見える画面と、実際のクリック対象をずらすのが特徴だよ。

フィッシングは偽サイトへ情報を入力させて、CSRFは不正なリクエストを送らせる。クリックジャッキングは、クリックそのものを利用するんだね。

そう。試験では、その違いを整理したうえで、CSPのframe-ancestorsX-Frame-Optionsが対策になることを覚えておこう。

ABOUT ME
クマノくらげ
クマノくらげ
難しいIT用語やビジネス用語を、できるだけ身近な例えで解説するブログです。 「専門用語を見ると眠くなる人」でも読めるように、画像や会話形式を多めにしています。 AWS12冠達成済み。
記事URLをコピーしました