メインコンテンツへスキップ

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

この記事は約 2 分で読めます

クリックジャッキングとは、透明または不可視の iframe を正規のページに重ね合わせ、 ユーザーが意図しない操作 (ボタンのクリック、フォームの送信など) を実行させる 攻撃手法です。ユーザーの目には正規のページしか見えていないため、自分が 別のサイトの操作を行っていることに気づきません。 2008 年にセキュリティ研究者の Jeremiah Grossman と Robert Hansen が命名し、ソーシャルエンジニアリングと 技術的攻撃を組み合わせた巧妙な手法として広く知られるようになりました。

攻撃の仕組み

攻撃者のページ (ユーザーに見える)
「無料プレゼントを受け取る」ボタン
↑ 透明な iframe (opacity: 0) が上に重なっている
標的サイトの「アカウント削除」ボタン

ユーザーは「プレゼント」をクリックしたつもりが、実際には「アカウント削除」を実行している

攻撃者は標的サイトを iframe で読み込み、 CSS の opacity: 0 で 完全に透明にします。その下に魅力的なコンテンツ (懸賞、動画再生ボタンなど) を 配置し、ユーザーのクリックを誘導します。クリックは透明な iframe を貫通して 標的サイトに到達するため、ユーザーが標的サイトにログイン済みであれば、 その権限で操作が実行されます。CSRF と似ていますが、 CSRF がリクエストを偽造するのに対し、クリックジャッキングはユーザー自身の クリック操作を乗っ取る点が異なります。

亜種と発展形

Likejacking

Facebook の「いいね」ボタンを透明な iframe で重ね、ユーザーに無意識に 「いいね」を押させる。 2010 年前後に大流行し、 Facebook が対策を強化する きっかけとなった。

Cursorjacking

カーソルの表示位置を実際のポインタ位置からずらし、ユーザーが意図しない 場所をクリックさせる。 CSS の cursor プロパティを悪用する。

Filejacking

ドラッグ & ドロップ操作を乗っ取り、ユーザーのローカルファイルを攻撃者の サーバーにアップロードさせる。 HTML5 の Drag and Drop API を悪用する。

防御策

クリックジャッキングの防御は、自サイトが他サイトの iframe に埋め込まれることを 防ぐことが基本です。

X-Frame-Options ヘッダー
CSP frame-ancestors
iframe 埋め込みをブロック
クリックジャッキング防止

X-Frame-Options ヘッダーは DENY (すべての iframe 埋め込みを拒否) または SAMEORIGIN (同一オリジンのみ許可) を 指定します。より柔軟な制御が必要な場合は、CSPframe-ancestors ディレクティブを使用します。frame-ancestors 'self' は SAMEORIGIN と同等で、 特定のドメインを許可リストに追加することも可能です。現在は CSP frame-ancestors が推奨されており、 X-Frame-Options はレガシーブラウザ向けの フォールバックとして併用するのが一般的です。

よくある誤解

「JavaScript でフレーム破壊コード (frame busting) を書けば防げる」という 誤解がありますが、攻撃者は sandbox 属性付きの iframe で JavaScript の実行を無効化できるため、 JS ベースの対策だけでは不十分です。 必ず HTTP ヘッダーレベルでの防御を実装してください。また、XSS 脆弱性が 存在すると、攻撃者がヘッダーを回避して iframe を注入できる可能性があるため、セキュアコーディングによる XSS 対策も併せて実施する必要があります。

現場での使用例

「セキュリティ監査で、管理画面に X-Frame-Options ヘッダーが設定されていない ことが判明しました。攻撃者が管理画面を iframe に埋め込み、管理者に 権限変更ボタンをクリックさせるシナリオが成立する状態でした。 CSP frame-ancestors を追加し、全ページで iframe 埋め込みを制限して対処しました。」

ブラウザ拡張機能のセキュリティはブラウザ拡張機能セキュリティの記事で、 ブラウザのパスワード管理はブラウザパスワード安全性の記事で、 フィッシング対策はフィッシング対策の記事で 詳しく解説しています。Web セキュリティの関連書籍 (Amazon)も防御策の理解に役立ちます。

関連用語

この記事は役に立ちましたか?

Xはてブ