クリックジャッキングとは
この記事は約 2 分で読めます
クリックジャッキングとは、透明または不可視の iframe を正規のページに重ね合わせ、ユーザーが意図しない操作 (ボタンのクリック、フォームの送信など) を実行させる攻撃手法です。ユーザーの目には正規のページしか見えていないため、自分が別のサイトの操作を行っていることに気づきません。 2008 年にセキュリティ研究者の Jeremiah Grossman と Robert Hansen が命名し、ソーシャルエンジニアリングと技術的攻撃を組み合わせた巧妙な手法として広く知られるようになりました。
攻撃の仕組み
ユーザーは「プレゼント」をクリックしたつもりが、実際には「アカウント削除」を実行している
攻撃者は標的サイトを iframe で読み込み、 CSS の opacity: 0 で完全に透明にします。その下に魅力的なコンテンツ (懸賞、動画再生ボタンなど) を配置し、ユーザーのクリックを誘導します。クリックは透明な iframe を貫通して標的サイトに到達するため、ユーザーが標的サイトにログイン済みであれば、その権限で操作が実行されます。CSRF と似ていますが、 CSRF がリクエストを偽造するのに対し、クリックジャッキングはユーザー自身のクリック操作を乗っ取る点が異なります。
亜種と発展形
Facebook の「いいね」ボタンを透明な iframe で重ね、ユーザーに無意識に「いいね」を押させる。 2010 年前後に大流行し、 Facebook が対策を強化するきっかけとなった。
カーソルの表示位置を実際のポインタ位置からずらし、ユーザーが意図しない場所をクリックさせる。 CSS の cursor プロパティを悪用する。
ドラッグ & ドロップ操作を乗っ取り、ユーザーのローカルファイルを攻撃者のサーバーにアップロードさせる。 HTML5 の Drag and Drop API を悪用する。
防御策
クリックジャッキングの防御は、自サイトが他サイトの iframe に埋め込まれることを防ぐことが基本です。
X-Frame-Options ヘッダーは DENY (すべての iframe 埋め込みを拒否) または SAMEORIGIN (同一オリジンのみ許可) を指定します。より柔軟な制御が必要な場合は、CSP の frame-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)も防御策の理解に役立ちます。
この記事は役に立ちましたか?