こんにちは。宮垣です。
昨今、セキュリティ問題のニュースが世間を賑わすことが多くなってきていますが、
今回は、クリックジャッキング対策について書きたいと思います。
最近では、セキュリティチェックベンダーのチェック項目にも、よく含まれています。
クリックジャッキングとは
「悪意のあるサイト上の特定箇所をクリックさせ、別サイトの設定情報を変更させる」
攻撃手法の事です。
攻撃者は、悪意のあるサイトにiframeで別サイトを埋め込み、
それを視覚的に見えないよう工夫することで、ユーザーが気づかないうちに、
別サイトの設定情報を変更することを期待しています。
仮に、その別サイトが個人情報の公開・非公開を設定できるものであった場合、
悪意のあるサイトで公開状態にさせられ、攻撃者にその個人情報が取得されてしまいます。
図1:ユーザーが攻撃を受けるまで遷移図
--------------------------------------------------------------------------------------------------
※前提:サイトAには、クリックのみで設定情報を変更できる項目がある
- ユーザーAが、サイトAにログインする。
- ユーザーAが、悪意を持つユーザーが準備したサイトBを閲覧する
(※そのサイトBでは、特定箇所のクリックを促す表記がしている) - ユーザーAが、サイトBの特定箇所のクリックする。
- 3の操作により、意図せずサイトAの設定情報を変更してしまう。
--------------------------------------------------------------------------------------------------
クリックジャッキング対策
対策方法として、Web サイトから返されるHTTP レスポンスヘッダに、
「X-Frame-Options」 ヘッダを含めておくことで、ブラウザがこの値を解釈し、
クリックジャッキングを防止する(iframe内の表示を制御)手法があります。
ヘッダの値としては、
- DENY:フレーム内のページ表示を全ドメインで禁止
- SAMEORIGIN:フレーム内のページ表示を同一ドメイン内のみ許可
- ALLOW-FROM uri:フレーム内のページ表示を指定されたドメインに限り許可
があり、用途に応じて設定が可能です。
サーバー側(Apache)で対応する場合
httpd.confに以下の内容を記載する。
1 2 |
##フレーム内のページ表示を全ドメインで禁止したい場合 Header always append X-Frame-Options DENY |
1 2 |
##フレーム内のページ表示を同一ドメイン内のみ許可したい場合 Header always append X-Frame-Options SAMEORIGIN |
1 2 |
##フレーム内のページ表示を指定されたドメインに限り許可したい場合 Header always append X-Frame-Options ALLOW-FROM http://example.jp |
※ mod_headersモジュールが有効になっていること。
※ virtualhost単位でも設定が可能。
プログラム側で対応する場合
・PHPの場合
header()でレスポンスヘッダに出力できます。
1 2 |
/* フレーム内のページ表示を全ドメインで禁止したい場合 */ header('X-Frame-Options: DENY'); |
1 2 |
/* フレーム内のページ表示を同一ドメイン内のみ許可したい場合 */ header('X-Frame-Options: SAMEORIGIN'); |
1 2 |
/* フレーム内のページ表示を指定されたドメインに限り許可したい場合 */ header('X-Frame-Options: ALLOW-FROM http://example.jp'); |
・Javaの場合
1 2 |
/* フレーム内のページ表示を全ドメインで禁止したい場合 */ response.addHeader("X-Frame-Options", "DENY" ); |
1 2 |
/* フレーム内のページ表示を同一ドメイン内のみ許可したい場合 */ response.addHeader("X-Frame-Options", "SAMEORIGIN" ); |
1 2 |
/* フレーム内のページ表示を指定されたドメインに限り許可したい場合 */ response.addHeader("X-Frame-Options", "ALLOW-FROM http://example.jp" ); |
javaのfilter処理での対応も可能でowaspにfilterのサンプルも公開されています。
対策後のブラウザの挙動
図2:ブラウザ側でのエラー画面
※DENY設定のページをiframeで読み込んだ場合
まとめ
それほど多くはないと思いますが、iframeで呼び出されることを前提としたサイトであった場合、
この設定を行うと、呼び出し先から参照できなくなりますので、設定前には十分な現状把握が重要です。
2年前のIPAのレポートによると、この対策が実施されているサイトは、
全体の約5%程度しかない状況であったため、この記事が、対策検討の機会につながればと思います。
また、IPAのサイトにもクリックジャッキングの詳細や対策が紹介されていますので、詳細を知りたい方はこちらをご覧ください。
IPAテクニカルウォッチ 知らぬ間にプライバシー情報の非公開設定を公開設定に変更されてしまうなどの『クリックジャッキング』に関するレポート