インターネットは信頼の上に成り立っています。ウェブユーザーはサイトにアクセスした際に、クリックしたボタンがラベルに表示されているアクションを実行すると想定します。しかし、サイバー犯罪者はこの信頼を悪用する手法を常に開発しています。そのような欺瞞的な手法の一つが クリックジャッキング攻撃。
クリックジャッキングは、攻撃者がユーザーを騙して、ユーザーがクリックしようとしていたものとは異なるものをクリックさせた場合に発生します。.
正規のページの上に透明なレイヤーや目に見えないiframeを重ねることで、ハッカーはダミーボタンや無害なリンクへのクリックを乗っ取ることができます。これは、 マルウェアの、資金の送金、ソーシャルメディアページへの無意識の「いいね!」など、深刻な結果につながる可能性があります。
ウェブサイトの所有者にとって、この脅威を理解することは非常に重要です。このガイドでは、このUI再調整手法の仕組み、 脆弱性の検出、そしてX-Frame-Optionsヘッダーとコンテンツセキュリティポリシー(CSP)を用いてWordPressサイトを保護するための具体的な手順について説明します。
クリックジャッキング攻撃を理解する:UI再調整のリスク
「クリックジャッキング」という用語は、「クリック」と「ハイジャック」を組み合わせた造語です。セキュリティ業界では、正式にはUI再ドレスアップ攻撃と呼ばれています。.
この名前はメカニズムを完璧に表しています。攻撃者は ユーザー インターフェイス (UI) を 、実際のターゲット Web サイトを隠します。

標準的なクリックジャッキング攻撃では、攻撃者は悪意のあるページを作成します。このページは、標的のページ(通常は銀行のログインや設定パネルなどの機密性の高いページ)をiframe内に読み込みます。.
攻撃者はiframeを完全に透明に設定し、動画プレーヤーや無料賞品の応募券など、独自の表示コンテンツを非表示フレームの直下または上に配置します。.
ユーザーは「プレイ」ボタンや「賞品を受け取る」リンクだと思ってクリックしますが、実際には別のオリジンから読み込まれた目に見えないページをクリックしているのです。.
ユーザーのコンピューターとブラウザには、対象サイトのセッション クッキーが 、操作は即座に認証され処理されます。ユーザーは、自分が高リスクな操作を行ったことに全く気づきません。
この攻撃は、ウェブのコンテンツをフレーム化する機能を悪用します。フレーミングは地図や動画を埋め込む場合には適していますが、ウェブページでフレーミングできるユーザーを明示的に制限していない場合は危険です。.
適切な制御がなければ、どの Web サイトも UI の変更の被害者になる可能性があります。.
続きを読む: WordPressのセキュリティミスがもたらす本当のコスト
攻撃者が攻撃する前にWordPressサイトを保護する
Seahawk の専門的な Web サイト ケア サービスを利用して、クリックジャッキングやその他の脅威から Web サイトを保護します。.
目に見えない iframe とオーバーレイを使用してクリックジャッキング攻撃がどのように機能するか?
危険性を完全に理解するには、技術的な実行方法に注目する必要があります。クリックジャッキング攻撃の核心は、CSSの不透明度プロパティに依存しています。.
攻撃者は囮サイトを構築します。このサイトは餌として機能します。このページでは、攻撃者はHTMLを使用して、iframe内に被害者のWebページを読み込みます。.
コードは一見無害に見えますが、 CSSを 見ると事情が異なります。攻撃者はiframeの不透明度を0.0に設定し、非表示のiframeを作成しています。
フレームコンテンツは技術的には存在しますが、ユーザーには見えません。攻撃者は、この目に見えないレイヤーを、偽サイト上の表示されているボタンの真上に配置します。.
例えば、攻撃者があなたのブログを強制的に削除させようとしているとします。攻撃者はあなたのブログの「アカウント削除」ページを目に見えないiframeで読み込みます。そして、目に見えない「削除」ボタンを、悪意のあるサイト上の目に見える「ギフトを獲得」ボタンの真上に配置します。.
ユーザーが「ギフトをゲット」ボタンをクリックすると、クリックイベントは表示要素を通過し、非表示フレームの最上部のウィンドウに到達します。ブラウザはこれを「削除」ボタンの正当なクリックと解釈します。ユーザーは同じブラウザにログインしている可能性が高いため、コマンドはユーザーが気付かないうちに即座に実行されます。.
この方法では、ユーザーが正当なページでボタンを物理的にクリックしたかのようにブラウザがリクエストを送信するため、攻撃者は場合によっては CSRF (クロスサイト リクエスト フォージェリ) トークンを回避できます。.
さらに詳しく知りたい方は、 マルウェア対策ソフトを使ってウェブサイトを効果的に保護する方法を
クリックジャッキング攻撃の主な種類と一般的なバリエーション
基本的なオーバーレイが最も一般的な方法ですが、特定の動作やブラウザの脆弱性を悪用するように設計されたクリックジャッキングにはいくつかのバリエーションがあります。.

いいねジャッキング:ソーシャルメディアのインタラクションを悪用する
を標的としたクリックジャッキングの一種です ソーシャルメディア 。攻撃者は、ユーザーの同意なしにページを「いいね!」したり「共有」したりするように仕向けることを目的としています。
このシナリオでは、目に見えないiframeの中に Facebookの 「いいね!」ボタンまたは Twitterの 「フォロー」ボタンが含まれています。攻撃者は、この透明なレイヤーを悪意のあるページの動画や画像の上に配置します。
ユーザーが動画の再生ボタンをクリックしようとした際に、意図せず攻撃者のページに「いいね!」してしまうことがあります。これにより、悪意のあるサイトの社会的信用が高まり、ユーザーの友人へのスパムや詐欺の拡散が促進されます。.
ネストされたクリックジャッキングとX-Frame-Optionsの脆弱性
ネストされたクリックジャッキングは、フレームバスティングスクリプトの使用を試みるが、正しく実装されていないウェブページを標的とします。一部のレガシーブラウザや特定の設定では、攻撃者がこれらのスクリプトを阻止できる可能性があります。.
このバリエーションでは、攻撃者は標的のiframeを2つの異なるフレーム内にネストします。ブラウザがウィンドウの位置とナビゲーションを処理する方法を操作すると、攻撃者は正規のサイトがフレームから「抜け出す」のを阻止します。.
これは、クライアント側のスクリプトのみに依存することがベスト プラクティスではない理由を強調しています。堅牢なサーバー側ヘッダーが必要です。.
さらに読む: WordPressウェブサイトに対するブルートフォース攻撃の防止
カーソルジャッキング、マウスジャック、その他の欺瞞的な手法
カーソルジャッキングは、非常に巧妙な亜種です。攻撃者は、実際のマウスカーソルを偽のカスタムカーソルに置き換えます。CSSとJavaScriptを用いて、本物のカーソルと偽のカーソルの位置をずらします。.
ユーザーはマウスカーソルが安全なリンク上にあると認識しています。しかし、実際のカーソル(非表示またはオフセットされている可能性があります)は悪意のある要素上にあります。ユーザーがクリックすると、表示されている偽のカーソルではなく、実際のカーソルの位置でアクションが実行されます。.
同様に、他の手法では、目に見えないフレームを高速に動かしてマウスを追跡し(MouseJack)、ユーザーがマウスをどこに移動しても、悪意のあるボタンが常にカーソルの下にあるようにします。.
もっと詳しく: WordPressの仮想パッチ:仕組みと重要性
Web ページ上のクリックジャッキング脆弱性を検出するにはどうすればよいでしょうか?
クリックジャッキングを防ぐには、まずウェブサイトに脆弱性がないか確認する必要があります。幸いなことに、この脆弱性の確認は簡単です。.
主なチェックは、異なるオリジンのiframe内でウェブページが読み込めるかどうかを確認することです。これは、ローカルマシンに簡単なHTMLファイルを作成することで実行できます。
<html> <body> <iframe src="https://yourwebsite.com" width="500" height="500"></iframe> </body> </html>
ChromeやFirefoxなどの最新のブラウザでこのファイルを開いてください。ボックス内でウェブサイトが正常に読み込まれる場合、クリックジャッキングの脆弱性が存在します。.
安全なサイトでは、接続を拒否するか、ブラウザがフレーム コンテンツをブロックしたことを示す空白スペースが表示されます。.
侵入テスト用に設計されたオンラインセキュリティスキャナーやブラウザアドオンを使用することもできます。これらのツールは、サイトのHTTPレスポンスヘッダーを分析します。.
特に、X-Frame-OptionsヘッダーまたはContent Security Policyヘッダーの欠如を検出します。これらのヘッダーが欠落している場合、ツールはサイトを高リスクとしてフラグ付けします。.
サーバー側の防止: X-Frame-Options を使用してフレーミングを制限する
クリックジャッキングに対する最も伝統的かつ広く支持されている防御策は、X-Frame-Options(XFO)ヘッダーです。これはウェブサーバーから送信されるレスポンスヘッダーで、ブラウザにページをフレーム内でレンダリングしてもよいかどうかを通知します。<frame> 、<iframe> 、<embed> 、 または<object>。.

ブラウザはページを読み込む際にこのヘッダーをチェックします。ポリシーに違反している場合、ブラウザはコンテンツをレンダリングしないことでユーザーの安全を確保します。.
X-Frame-Options ヘッダーで通常使用される値は 3 つあります。
- 拒否: 最も厳しい設定です。リクエストされたページをいかなるドメインからもフレーム化できません。ページがフレーム化を試みても失敗します。埋め込みが不要な機密性の高いページに最適です。
- SAMEORIGIN: これにより、ページは同一のオリジン(ドメイン、プロトコル、ポートが同じ)のページのみでフレーム化されます。これはWordPressサイトを保護するための最も一般的な方法で、 外部からの攻撃をブロックしながら独自のコンテンツを埋め込むことができます。
- ALLOW-FROM uri: このディレクティブは廃止されており、特定のURIからのフレーミングを許可することを目的としていました。しかし、多くの最新ブラウザではサポートされていないため、通常は新しい標準規格を優先して使用を避けるべきです。
X-Frame-Options を SAMEORIGIN に設定するだけで、ほとんどのクリックジャッキング攻撃を阻止できます。これにより、攻撃者が囮サイトでログインページを読み込むことができなくなります。.
しかし、XFOには制限があります。実質的には、1つのドメイン(同一ドメイン)のみ、もしくは全くドメインを利用できない状態です。複数の特定のパートナーにコンテンツのフレーム化を許可する必要がある場合、きめ細かな対応ができません。そのため、より現代的なソリューションが必要です。.
さらに詳しく: WordPressでパスワード保護されたページを作成する方法
高度な保護: コンテンツ セキュリティ ポリシー (CSP) とフレーム祖先
X-Frame-Options は効果的ですが、クリックジャッキング防御の未来はコンテンツセキュリティポリシー(CSP)にあります。CSP は、 クロスサイトスクリプティング(XSS) やデータインジェクションなど、さまざまな種類の攻撃を検出し、軽減するセキュリティレイヤーです。
クリックジャッキングを防ぐために、frame-ancestors ディレクティブを使用します。このディレクティブは、ページを埋め込むことができる親を指定します。.
きめ細かな制御のためのFrame-Ancestorsディレクティブの実装
frame-ancestors ディレクティブは、X-Frame-Options よりもはるかに柔軟性が高く、コンテンツのフレーム化を許可するドメインのリストを定義できます。.
たとえば、コンテンツ セキュリティ ポリシー CSP ヘッダーは次のようになります。
Content-Security-Policy: frame-ancestors 'self' https://trusted-partner.com;
この例では、
- 「self」は SAMEORIGIN XFO ディレクティブのように動作し、同じドメインでコンテンツをフレーム化できるようにします。.
- https://trusted-partner.com では 、特定の外部サイトがコンテンツをフレーム化することを許可しています。
を許可したりすることもできます HTTPS が、厳密なリストの方が安全です。このようなきめ細かな制御は、クロスサイト連携に依存するエンタープライズウェブサイトにとって不可欠です。
CSP フレーム祖先がフレームバスティング スクリプトより優れている理由は何ですか?
かつて開発者は JavaScriptの フレームバスティングコードを使用していました。これらのスクリプトはクライアント側で実行され、最上位のウィンドウ位置が現在のウィンドウ位置と一致しているかどうかを確認します。一致しない場合は、フレームからの脱出を試みます。
攻撃者はすぐにこれらのスクリプトを無効にする方法を見つけました。Internet Explorer(旧バージョン)などのブラウザや、iframeのHTML5サンドボックス属性などの機能は、フレームバスティングスクリプトの実行をブロックし、防御を無力化する可能性があります。.
フレームの祖先とX-Frame-Optionsはサーバー側の制御です。ブラウザはコンテンツをレンダリングする前にルールを適用するため、攻撃者はこれらを無効にすることはできません。ブラウザはレスポンスヘッダーを読み取り、悪意のあるページ要素の表示を拒否します。.
CSPのframe-ancestorsの使用は、最新のブラウザで標準化されているため、現在のベストプラクティスです。X-Frame-Optionsはレガシーブラウザでも依然として役立ちますが、両方をサポートするブラウザではframe-ancestorsが優先されます。.
ステップバイステップ:クリックジャッキングからWordPressサイトを保護する
WordPressサイトをセキュリティ保護するに は、適切なヘッダーを追加する必要があります。これらの変更を実装するために開発者である必要はありませんが、サーバーファイルを編集する前に必ずサイトをバックアップすることをお勧めします。

ステップ1: .htaccessまたはfunctions.phpでヘッダーを構成する
WordPress サイトが Apache Web サーバー上で実行されている場合は、ルート ディレクトリにある .htaccess ファイルを編集できます。.
X-Frame-Options ヘッダーを実装するには、次の行を追加します。
<IfModule mod_headers.c>ヘッダーには常にX-Frame-Options SAMEORIGINを追加します</IfModule>
frame-ancestors を使用してコンテンツ セキュリティ ポリシーを実装するには:
<IfModule mod_headers.c>ヘッダーには常に Content-Security-Policy "frame-ancestors 'self';" が追加されます。</IfModule>
この設定により、ご自身のサイトのみがページをフレーム化できるようになります。パートナーを許可するには、「self」の後にパートナーのURLを追加するだけです。.
あるいは、WordPressのfunctions.phpファイルを使って、アクティブなテーマにヘッダーを追加することもできます。この方法は、ApacheまたはNginxPHPがヘッダーを処理する限り、
関数 add_security_headers() { ヘッダー('X-Frame-Options: SAMEORIGIN'); ヘッダー("Content-Security-Policy: frame-ancestors 'self';"); } add_action('send_headers', 'add_security_headers');
このコードは WordPress のヘッダー生成 プロセスにフックし、提供されるすべての Web ページに保護ディレクティブを挿入します。
ステップ2:クライアント側の防御にWordPressセキュリティプラグインを活用する
コードの編集がリスクが高すぎる場合は、WordPressのセキュリティプラグインを使用できます。多くの 包括的なセキュリティスイートは、 これらのヘッダーを自動的に追加します。
- オールインワンセキュリティ(AIOS): このプラグインには、iframe保護のための専用設定があります。「不正なクエリを拒否」を有効にしたり、フレームオプション管理を含む特定のファイアウォールルールを設定したりできます。
- Headers Security Advanced & HSTS WP: この専用プラグインを使用すると、コードを変更することなく特定のHTTPヘッダーを設定できます。ドロップダウンメニューからX-Frame-Optionsを選択し、SAMEORIGINに設定してください。
プラグインは便利ですが、レスポンス ヘッダーが正しく構成されていることを確認してください。.
を追加する場合があり メタタグのみ、これはフレームの祖先にはあまり効果がありません(メタタグ経由のCSPはフレームの祖先をサポートしていません)。必ずオンラインヘッダーチェッカーを使用して結果を確認してください。
結論
クリックジャッキングの脅威は、ソフトウェアのバグではなくユーザーの視覚認識を悪用するため、根強く残っています。ブラウザがiframeをサポートしている限り、攻撃者はUIの改変を試み続けるでしょう。.
ウェブサイトの所有者にとって、この脆弱性を無視することは、ユーザーの安全とサイトの評判を危険にさらすことを意味します。サイト上のボタンのせいでマルウェアをダウンロードしたり、金銭を失ってしまったりするユーザーは、ブランドへの信頼を失うことになります。.
解決策は階層化された防御です。.
- 監査: Web ページを定期的にスキャンして、フレーム化できるかどうかを確認します。
- XFO を実装する: SAMEORIGIN に設定された X-Frame-Options ヘッダーを使用して、従来のブラウザや CSP を完全にサポートしていない可能性のあるその他のブラウザ上のユーザーを保護します。
- CSP を実装する: 最新のブラウザで堅牢かつきめ細かな制御を行うために、コンテンツ セキュリティ ポリシーの frame-ancestors ディレクティブを採用します。
- 監視: セキュリティ プラグインを使用して、テーマまたはサーバーの更新後もヘッダーがアクティブなままであることを確認します。
コンテンツのフレーム構造をコントロールすることで、ハッカーが利用する目に見えないレイヤーを効果的に解体できます。ユーザーがクリックした際に意図したアクションが実行されることを保証し、Web上で最も巧妙な攻撃の一つである「欺瞞」の被害からユーザーを守ります。.
クリックジャッキング攻撃に関するよくある質問
クリックジャッキング攻撃で最もよく使われる手法は何ですか?
最も一般的な手法は、正規のウェブページ上に隠しレイヤーを配置することです。攻撃者は目に見えないiframeを作成し、ユーザーが見えない要素をクリックするように仕向けます。これらの隠しレイヤーにより、攻撃者はユーザーに気づかれることなくアクションをトリガーし、機密機能へのアクセスを容易にする可能性があります。.
同一オリジンの X フレーム オプションはクリックジャッキングの防止にどのように役立ちますか?
同一オリジンのX-Frame-Optionsは、ページを同一のオリジンからのみフレーム化することを許可するレスポンスヘッダーです。これにより、外部ドメインが悪意のあるフレーム内にサイトを埋め込むことを防ぎ、不正なインタラクションをブロックできます。.
コンテンツ セキュリティ ポリシーの frame-ancestors ポリシーとは何ですか?
フレームの祖先ポリシーは、どのドメインがウェブページの埋め込みを許可するかを定義します。これはコンテンツセキュリティポリシーの一部であり、従来のヘッダーよりも詳細な制御が可能です。このポリシーは、クリックジャッキング攻撃の防止に非常に効果的です。.
クリックジャッキング攻撃により、攻撃者はユーザー アカウントにアクセスできるようになりますか?
はい、クリックジャッキングは攻撃者が間接的にアカウントにアクセスするのを手助けします。ボタンやアクションを偽装することで、攻撃者はユーザーを騙して設定の変更、権限の承認、フォームの送信などをさせ、ユーザーに気づかれずに操作をさせてしまう可能性があります。.
WordPress ウェブサイトでクリックジャッキングを防ぐ最善の方法は何ですか?
クリックジャッキングを回避する最も効果的な方法は、複数の防御策を講じることです。X-Frame-Optionsレスポンスヘッダーを設定し、frame-ancestorsポリシーを適用し、WordPressセキュリティプラグインを常に有効にしておきましょう。これらの対策を組み合わせることで、攻撃をソースレベルでブロックできます。.