
中山テック 代表の中山です。
さて最近ではクリックジャッキングの対策について調べる機会がございました。
これは「ボタンの上に透明化された隠しボタンがあることで意図しない行動を取ってしまう」という攻撃になります。
どのような仕組みで、サーバ側はどのような仕組みを取ればいいのか説明したいと思います。
Contents
仕組み
流れとしては
①利用者は会員制ホームページにログイン
②攻撃者が悪意あるページに誘導
③利用者は悪意あるページにアクセス、罠ボタンをクリック
④会員制ホームページに悪意あるアクションが飛ぶ
と、悪意のあるページから悪意あるアクションが飛ばすのがクリックジャッキング。
しかし、悪意ってなんだろ代表は良く思ってました。
具体例
何のための攻撃かは置いといて、ネットショップを例にすると
①利用者がネットショップへログイン(セッションが確立される)
②とある商品の評判が書いてあるサイトを閲覧(実は罠サイト)
③悪意あるサイトは特定のネットショップとのセッションが確立されているか確認する
④罠サイトに「ギフト券無料プレゼント」といった画面を表示
※画面の上には透明化されたネットショップの画面が配置
⑤利用者はボタンをクリック
⑥透明化されたネットショップのボタンを押下、不要な商品100個購入の流れであった
「ネットショップへのセッションが確立されている」ことが条件です。
確率されているため、隠したネットショップのページは利用者がログインした状態で表示となります。
海外の事例
Facebookのいいねボタンを隠した事例があります。
これもiframeでいいねボタンを透明化し、表面上は通常のボタンを押下させるページとなっています。
クリックすると特定のアカウントの投稿のいいね数が爆上がりするというものです。
paypal
悪意あるページでお金の送付先を攻撃者に出来てしまう脆弱性がありました。
この脆弱性を発見した人に報奨金が支払われたそうです。
対策
HTTPサーバ側で「X-FRAME-OPTIONS」の定義を追加することで防げる可能性が高まります。
これは「iframe」の表示を制御する命令文です。
Apacheを例に取るとhttpd.confに下記の定義を追加します。
Header always set X-Frame-Options "オプション"
オプションについては
◆DENY・・・全面禁止(自サイトの埋め込みも不可)
◆SAMEORIGIN・・・同じホストであれば埋め込み可
※httpsやポート違い、wwwが付いていても違うオリジンとみなされる模様
◆ARROW-FROM {URI}・・・URIで指定したホストなら埋め込み可
対策後は透明にした埋め込みサイト(ifame)が表示されないため、悪意あるアクションは飛ばないでしょう。
また、「Content-Security-Policy」で設定してもiframeの差し込みを防げます。
Header always set Content-Security-Policy "default-src 'self'"
iframe差し込みを防ぐにはX-FRAME-OPTIONとContent-Security-Policyどっちも設定しなければならない?との問いもありますが、ぶっちゃけ
どちらかを設定すればOK
です。どっちも似たような対応方法になるんで。
まとめ
常に外部からの脅威に晒されているインターネット。
お金が絡んだり、被害者の名誉が傷つけられる可能性があるので対策は知っておいた方が良いでしょう。
※ちなみに怪しいボタンをクリックしないのが一番の対策です!
私も開発の際、セキュリティ対策をしなければならないので自戒の念を込めて執筆しました。
最後までご覧頂き、ありがとうございました。
ホームページ制作系
ご料金はサービス内容・料金を参照ください。
■ホームページ制作
※ロゴ、バナーは外注となります
■SEO対策
Googleガイドライン診断、マネジメント、ブログ執筆など
システム開発系(SES請負契約向け)
■役職
プロジェクトマネジメント、PMO、リーダー、開発(要件定義~納品まで)
■スキル
工数見積(FP法)、折衝・提案、計画、調査、設計、実装(C、Java、クライアント系、SQL等)
データベース全般、テスト計画・項目作成、運用・保守
その他
Excel、プログラミングなどソフト系のお困りごと
対象地域
千葉県:東葛エリア(松戸市、柏市、我孫子市、市川市、流山市、船橋市、鎌ヶ谷市、白井市、浦安市) 他要相談
茨城県:取手市、土浦市、他要相談
埼玉県:三郷市、草加市、春日部市、他要相談
東京都:23区、他要相談
京都府:南区、他要相談
ご質問ございましたら、お問い合わせページよりご連絡ください。