catch-img

悪意あるサイトにこっそり誘導 クリックジャッキング

クリックジャッキング(クリックジャック攻撃)とは、被害者にクリックさせたいURLやサービスの機能を、他のサイトの表示で覆い隠すことにより、視覚的に騙してクリックを行わせる攻撃手法です。

この攻撃により、悪意のあるサイトを訪問したユーザーがページ上をクリックしてしまうと、他のサイト上にある個人情報の流出や、データの破壊などの不利益を被ってしまう恐れがあります。

この脆弱性が2002年に報告されて以来、TwitterやFacebookなどのSNSを含むさまざまなサービスでクリックジャッキングの悪用が報告されています。
また、パソコンだけではなく、スマートフォンを使っていてもクリックジャッキングに出くわす可能性はあります。

このような被害者のアクションをトリガーとして攻撃が実施される脆弱性は、受動的攻撃と呼ばれています。

本記事ではクリックジャッキングの概要から、攻撃の仕組み、対策方法について解説していきます。


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

クリックジャッキングは、Webサイト上に隠蔽・偽装したリンクやボタンを設置し、サイト訪問者を視覚的に騙してクリックさせ、悪意のあるサイトへ誘導させる攻撃手法です。

文章にすると、難しく思われるかもしれませんが、原理は非常に簡単です。

クリックジャッキングは、ユーザーの環境へ実際に表示させるWebページと、その上にかぶせる形で配置される透明なWebページのふたつの要素で構成されています。
このふたつのページを重ねることでクリックジャッキングの攻撃環境は作られます。


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


具体的には、iframe(インラインフレーム)という、指定したURLをフレームの内側に表示させることのできるHTMLタグなどを利用して、透明なページを通常のウェブページの上にかぶせます。

あとは、ユーザーが興味を持つような要素を用意することで、リンクをクリックさせるという仕組みです。

透明なページには、悪意のあるサイトへのリンクが付いているため、ユーザーは知らず知らずのうちに意図しないアクセスをしてしまいます。
この意図しないアクセスとは「退会ボタンのクリック」であったり、「購入ボタンのクリック」などが該当します。

また、通常のWebページのほうを透明化し、悪意のあるWebページの方を実際に表示させているというパターンもあります。

このように、クリックジャッキングの細工が施されているWebページではユーザーに見えている表示内容とサイト本来の表示内容が異なっています。
そのため、危険に気がつくことが難しく、さまざまな種類の被害に遭ってしまう危険性があります。


クリックジャッキングによる被害

クリックジャッキングによる被害は、主に「ログインしなければ利用できないサービスを意図せずに操作してしまう」という形で引き起こされます。

なぜなら、「退会」「購入」「フォロー」などの重要な動作は、ログインを行なっていないと利用できないケースしかないためです。

訪問者の被害事例としては以下のようなものがあります。

  • (被害者となるサイトの)退会ボタンをクリックしてしまう
  • Webサイト上ののコンテンツを自分が望んでいないのに共有してしまう
  • SNSで特定のアカウントのフォローや投稿をしてしまう
  • インターネットバンキング上などで不正に送金をさせられる
  • アカウントや端末を乗っ取られる
  • マルウェアをダウンロードさせられる

クリックジャッキングによる被害のバリエーションは非常に幅広く、さまざまな被害事例が報告されているのが特徴です。
発生頻度はそれほど多くないものの、個人情報の取得に関わる攻撃もあるため危険な攻撃と言えるでしょう。


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

クリックジャッキングの具体的な対策は、利用者の立場によって変わってきます。
ここでは、「ブラウザで閲覧するユーザー側の対策」と「Webサイト管理者側の対策」に分けてそれぞれ解説していきます。


ブラウザで閲覧するユーザー側の対策

クリックジャッキングの対策は基本的にサイトの管理者側に求められることがほとんどですが、サイトの閲覧をするユーザー側でできる緩和策もあります。

古いブラウザでは「Webサイト管理者側の対策」で実施された対策が機能しない場合があるため、ブラウザを常にアップデートすることもユーザー側で対策できることのひとつと言えます。

また、過去に特定のブラウザにおいて、クリックジャッキングを悪用する事で、さらなる攻撃が行えた例がありました。

そのため、ブラウザを最新にアップデートすることは、クリックジャッキングやその他の問題に対する有効な手段にもなります。


Webサイト管理者側の対策

Webサイトを運営する管理者ができる対策はいくつか存在します。
そもそもクリックジャッキングの対策は、ユーザーよりも管理者側でできる対策の方が多いため、管理者は責任を持ってサイトの運営を行う意識が必要となります。

特に、会員登録制のサイトやログイン機能のあるサイトの場合は個人情報を保有しているため注意が必要です。
加えて、Webブラウザ上でユーザーが投稿、編集が行える機能がある場合も気をつけましょう。

管理者は、クリックジャッキングの対象とされやすい部分を把握した上で、サイトの運用をしていく必要があります。

ここでは管理者ができる具体的な対策方法を3つご紹介します。

X-Frame-Optionsを導入する

管理者ができる対策のひとつ目は、X-Frame-Optionsを導入することです。
この方法は簡単かつ、クリックジャッキングに対して最も効果を発揮します。

X-Frame-Optionsとは、運営するWebページ内に外部から埋め込まれた他のWebページを表示させるか否かを指定できるパラメータのことで、X-Frame-Optionsを導入すると、外部からのiframe, embebなどのページ呼び出しがブラウザでブロックできます。

そのため、クリックジャッキングを仕掛けようとしているサイトからの不正なiframe呼び出しを防ぐことが可能となります。

ヘッダの値としては、以下の2つの設定値があります。

  • DENY:フレーム内のページ表示を全ドメインで禁止
  • SAMEORIGIN:フレーム内のページ表示を同一ドメイン内のみ許可

DENYは、iframeなどで埋め込まれたWebページの表示をすべて拒否するように設定できます。自社のウェブサイトでiframeを利用していないという場合はDENYの設定値を利用するのがよいでしょう。

SAMEORIGINは、アドレスバーに表示されているドメインと同じドメインを持ったWebページのみの表示を許可するという設定値です。
DENYよりは柔軟性が高いといえますが、許可されるのは同一ドメインのみであるという点にご注意ください。

X-Frame-Optionsを利用する際は、いくつか注意点があります。

まず、複数のドメインを使い分けているWebページの場合は設定が複雑になるという点があげられます。
特にドメインについてiframeなどを使っている場合はX-Frame-Optionsが設定できないので、他の対策を考えましょう。

また、HTMLファイルにmeta要素でX-Frame-Optionsを設定しても有効にはならないという点にも注意が必要です。

以下は、HTTP Response Headerに、X-Frame-Optionsを設定する例になります。

サーバ側(Apache)で対応する場合
# httpd.confに以下の内容を記載する。

# フレーム内のページ表示を全ドメインで禁止したい場合
Header always append X-Frame-Options DENY

# フレーム内のページ表示を同一ドメイン内のみ許可したい場合
Header always append X-Frame-Options SAMEORIGIN

# ※ mod_headersモジュールが有効になっている必要があります。
# ※ virtualhost単位でも設定が可能です。
プログラム側で対応する場合

PHPの場合:header()でレスポンスヘッダに出力できます。

// フレーム内のページ表示を全ドメインで禁止したい場合
header('X-Frame-Options: DENY');

// フレーム内のページ表示を同一ドメイン内のみ許可したい場合
header('X-Frame-Options: SAMEORIGIN');

Javaの場合

// フレーム内のページ表示を全ドメインで禁止したい場合
response.addHeader("X-Frame-Options", "DENY" );

// フレーム内のページ表示を同一ドメイン内のみ許可したい場合
response.addHeader("X-Frame-Options", "SAMEORIGIN" );

X-Frame-Optionsが有効に働いているかの確認は非常に簡単です。

確認を行う際は、X-Frame-Optionsを有効にしたサイトに対し、別のドメインから<iframe src=”対象ドメイン”>という呼び出しが可能かをチェックします。

X-Frame-OptionsがSAMEORIGINの場合は、合わせて、対策を有効にしたドメインから自身を参照する形でiframeの呼び出しができるかを確認すると良いでしょう。

対策ができている場合は、iframeの呼び出しがブロックされ何も表示されません。対策ができていない場合は、iframeでの呼び出しが成功します。

Content Security Policyを導入する

2つ目の対策は、Content Security Policyのframe-ancestorsを導入する方法です。

Content Security Policyのframe-ancestorsを利用することでX-FRAME-OPTIONSとほぼ同じような対策を行うことができます。

Content Security Policyはクリックジャッキング以外にも、クロスサイトスクリプティングやインジェクション攻撃による情報漏えい対策にも有効とされています。

また、複数のドメインの表示を許可するように指定できるなど、X-FRAME-OPTIONS よりも細かな設定が行えるという特徴があります。

Content Security Policyを利用する際の注意点として、古いブラウザでは一部サポートされていないことがあげられます。

またContent Security Policyの設定を誤ると、これまでと同様のページ表示にならないことや、JavaScriptがブロックされたりなど、正しい対策・動作にならないこともあるため注意して導入する必要があります。


進化するクリックジャッキングと対策への意識

ここまで読まれた方の中には、クリックさせたい要素(退会ボタンなど)が小さい場合、実際に被害者にクリックを行わせるのは難しいのではないか?と思われた方もいるかもしれません。

しかし、カーソルジャッキングと呼ばれるような、クリックさせたい要素自体をマウスに追従させる形で表示する方式など、攻撃の成功率を高める手法が年々開発・発表されています。

そのため「〜だから安全だろう」という安易な考え方を取らず、危険に対しての対策を実施した上で開発を行うことが重要となります。

また、日々進化するサイバー攻撃に対して常にアンテナを張り、最新の情報をキャッチできるよう意識することも大切です。


さいごに

今回はクリックジャッキングの攻撃手法から対策方法について解説しました。

クリックジャッキングは、どのユーザー、どのサイト管理者であっても被害に遭う可能性を秘めている攻撃であるということをご理解いただけたかと思います。

クリックジャッキングは、管理者側での対応により防げるケースも多く存在します。
サイトを運営する際は、日頃から高いセキュリティ意識を持ち、ユーザーを事故に巻き込まないように務めることも大切なことでしょう。

また、Webサイトに限らず、システム開発、アプリケーション開発などの場合でも、高い安全意識を持って運用をしていく必要があります。

yamoryはオープンソースソフトウェアの脆弱性と、その脆弱性に関連する攻撃情報のモニタリングをすることができる脆弱性管理ツールです。
お使いのWebアプリケーションで危険となりうる脆弱性を自動的に検出できるため、よりセキュアなシステム構築の助けになるかと思います。

無料でトライアルもできますので、ぜひ一度お試しください。


人気の記事

募集中のセミナー

ページトップへ戻る