クリックジャッキングとは?
クリックジャッキングとはWebページを利用した攻撃の一種で、Webページの特定の要素を偽装したり隠すことで、ユーザーに意図しない操作を行わせる攻撃の一種です。
言葉の意味の通り「クリック」を「ジャック(乗っ取る)」といった攻撃ですね。
例えば下記のような画面を想像してみてください。
色々見ているうちにこのようなページに遭遇してしまったら、何の気なしに戻るボタンを押してしまいそうになりませんか?
攻撃者はこの戻るボタンに対して様々な仕掛けを施してきます。
例えば
- 戻るボタンを押すと悪意のあるページが開く
- 戻るボタンを押すとウイルスの入ったファイルをダウンロードする
- 戻るボタンの正面に透明なFacebookのフォローボタンが設定されており、戻るボタンを押したつもりが知らないFacebookアカウントをフォローしてしまう
などです。
特に3つ目のものが悪質で、iframeを使ってただのリンクではなくフォローやカートに追加などの意味を持ったリクエストを誤って送信してしまうこともあります。
クリックジャッキングを仕込んだWebサイトの例
①間違ってボタンをクリックしそうな偽のページを用意する
②iframeでECサイトの特定の商品ページを表示
③iframe部分を完全に透明にする
→iframeの場合認証情報を受け継ぐので、たまたま同じECサイトにログインしていた場合、自分のアカウントで購入処理が行われる
※分かりやすいようにiframe部分を半透明にしていますが、完全に透明になっている想定です。
近年だとさすがに購入までいくと各ECサイト対応するでしょうし、確認画面などを挟むことも多いと思うので攻撃者の思い通りとはいかない気がします。
ただフォローやいいね・投稿するボタンなどは、攻撃を受けた人の影響も少ないですが、現在でも比較的成功が現実的なクリックジャッキングの例になるかなと思います。
クリックジャッキングの対策
クリックジャッキングの対策としては、X-Frame-Optionsを適切に設定することがあげられます。
X-Frame-Optionsとはウェブサーバーの設定の一つで、ウェブサイトがiframeで呼び出せる範囲を設定できるものです。
Web開発者は開発したウェブサイトについて、下記のように設定することでクリックジャッキングの被害の対策を行うことができます。
DENY
X-Frame-Options: DENY
この設定を行うことで他のサイトからiframeで呼び出すことができなくなります。
最も厳格な設定で、特に他サイトからiframeで呼び出されることを想定していない場合、この設定にするのが望ましいです。
SAMEORIGIN
X-Frame-Options: SAMEORIGIN
この設定を行うと同じオリジンのみiframeの使用を許可する設定です。
X-Frame-Optionsの設定方法
X-Frame-Optionsは使用しているウェブサーバー・フレームワークによって変わります。
Apacheの場合
.htaccessか設定ファイルに下記を記載することで設定が可能です。
<IfModule mod_headers.c>
Header always append X-Frame-Options DENY
</IfModule>
NginXの場合
サーバーの設定ファイルに下記を追加することで設定できます。
add_header X-Frame-Options "DENY" always;
Express(Node.js)
Expressを使ったアプリの場合helmetミドルウェアを使用することで簡単に設定できます。
const helmet = require('helmet');
const app = express();
app.use(helmet.frameguard({ action: 'deny' }));
Django(Python)
Djangoの場合はsettings.pyに下記を記載することで設定が可能です。
X_FRAME_OPTIONS = 'DENY'
上記以外のフレームワークの場合でも多くの場合はX-Frame-Optionsの設定をサポートしていることがほとんどだと思うので、一度調べてみてください。
ユーザー側が注意を払うことも必要
とはいえ上記はiframeの呼び出しについて制御するだけで、根本的なクリックジャッキングの対策になっているわけではありません。
Web開発者が自由にWebサイトを構築できる以上、完全にこの世からクリックジャッキングの被害をなくすことはほぼ不可能に近いです。
またこの問題はクリックジャッキングに限らず、多くの攻撃手法にも言えることです。
そのためWeb開発者に頼るのではなく、Webサイトを閲覧する人たちも
- ドメインなどを見て危険なサイトを見破ることができるようになる
- 不要なボタンを押さない
- そもそも怪しいURLは開かない
などいわゆるITリテラシーというものを高めていくことが重要なのかなと思います。
コメント