オープンリダイレクト:本物の信頼できるリンクが攻撃者に導く仕組み
リンクにカーソルを合わせると google.com や、よく知っているサイトの名前が表示され、安心してクリックしてしまう。しかし実際に着地するのはフィッシングページだ。これは表示のバグでもアドレスの偽装でもない。リンクは最初、本当に本物のサイトへ向かっていたのだ。これがオープンリダイレクトの仕組みである。
オープンリダイレクトとは何か
多くのサイトは、まったく正当な機能を提供している。あるアクションの後、たとえばログイン後、スポンサーリンクのクリック後、あるいはリンク短縮サービスを通じて、訪問者を別のアドレスへリダイレクトする機能だ。サイトはURLの中に転送先のアドレスを受け取り、そのアドレスへブラウザを送る。
脆弱性が生まれるのは、サイトが許可リストに含まれているかを確認せず、あらゆる転送先アドレスを受け入れてしまう場合である。開発者は便利なリダイレクトサービスを作った。ただ、裏口を閉じ忘れただけなのだ。誰でも、信頼されたサイトの名前で始まりながら、実際には別の場所――攻撃者のもとへ――たどり着くリンクを作れてしまう。
罠が仕掛けられたリンクの構造
あえて単純化した例を見てみよう。
https://www.google.com/url?q=https://site-pirate.example
このリンクは実際にGoogleのサーバー上で開く。ドメイン名google.comは本物であり、アドレスバーはその点について嘘をついていない。しかしパラメータ?q=は第二のアドレスを運んでおり、リダイレクトが発動すると、それが実際の転送先になる。同じ仕組みは、他の同じくらいよくあるパラメータ名でも見られる:?dest=、?redirect=、?target=、?next=、あるいは?url=。疑問符の直後にこうしたキーワードの一つがあり、その後に第二のウェブアドレスが続いているのを見つけることが、最も単純な警戒シグナルだ。
攻撃者がこの手口を好む理由
この手法は、攻撃者にとって2つの問題を同時に解決してくれる。
- スパムフィルターの回避。 メールのセキュリティゲートウェイ(Secure Email Gateway)は、メール内に存在するドメインに信頼スコアを割り当てる。検索エンジンや大手SNSなど、非常に評判の良いドメインで始まるリンクは、フィルターがリンクの隠れた部分を一切見ないにもかかわらず、しばしば優れたスコアを得る。
- 人間の読み方を操作する。 慎重な人は、クリックする前にドメイン名を確認することを学んでいる。しかしこの種のリンクを前にすると、その確認行為自体が裏目に出る:アドレスの一番最初にある公式ブランド名をはっきりと見て、そこで読むのをやめてしまうのだ。
この手口は、信頼できるサイトのドメインやサーバーを模倣する必要なしに、技術的な信頼(スパムフィルターのスコア)と人間的な信頼(読む際の反射)の両方を利用しているのである。
裏側の仕組み:301、302コードとリダイレクトの連鎖
技術的には、リダイレクトはサーバーからブラウザへの非常に短い応答として行われる。サーバーは目に見えるページを表示することなく、HTTPステータスコードで応答する。一時的なリダイレクトには302、恒久的なリダイレクトには301が使われる。ブラウザは即座に従い、次のアドレスを読み込むが、ユーザーには何も見えない。
複数のリダイレクトを次々に連鎖させることを妨げるものは何もない。非常に評判の良いドメインAから、より目立たず脆弱なドメインBへ、そして最終的なフィッシングページへ。追加の連結が一つ増えるたびに痕跡はさらにぼやけ、リンクを見ただけで発信元までさかのぼろうとする人の作業は難しくなる。
罠を見抜き、対応する方法
正しい方法は、最初に認識した名前で止まらず、アドレス全体を左から右へ読むことである。探すべきシグナルは単純だ。同じ行の先のほうに隠れた2つ目のhttp://またはhttps://は、直前にある?q=や?url=のようなパラメータの存在と同様、ほぼ常にオープンリダイレクトを示している。この警戒は、見た目が似た文字など、別の手段で欺瞞的なドメイン名を読み解くのに必要な警戒と通じるものがある:Punycodeとホモグラフのガイドを参照。
一切のリスクを取らずに転送先を確認するには、オンラインのリンクリゾルバーにアドレスを貼り付けるか、ターミナルからcurl -Iコマンドを実行すればよい。サーバーはリダイレクトコードと最終的な転送先を返し、ページがブラウザで読み込まれることは一度もない。
役立つ通報は2つあり、それぞれ異なる相手に関係する。まず、出発点となるドメインを持つ企業に通知する(たとえばそのセキュリティフォームや脆弱性専用アドレスを通じて)。これにより、コード内の未検証パラメータを修正してもらえる。次に、到着ページのホスティング業者に通知する。これは他のあらゆるフィッシングページの場合とまったく同じであり(ホスティング業者の正しいabuse@アドレスを見つける方法を参照)、ページを消せるのはホスティング業者だからだ。
この種のリンクを含むメールも、それ自体は本物のサーバーから送られたメールであり、独自の痕跡を持っている:フィッシングを分析する:メッセージからインフラストラクチャまでのガイドを参照。メール全文をBaitbackに貼り付けると、このツールはクリックしたりターミナルを開いたりする必要なく、最終ページに至るまでのリダイレクトの連鎖全体を自ら追跡する。
- オープンリダイレクトは、悪用された正当な機能である。出発点となるサイトは本物だが、転送先は必ずしもそうではない。
- 注意すべきパラメータは
?q=、?url=、?redirect=、?dest=、?target=、?next=のようなものである。 - この手口は、最初のドメインの評判のおかげでスパムフィルターを、そしてしばしば早く読むのをやめてしまう人間の読み方を、両方だます。
- 301と302のコードにより、罠のページに到達する前に複数の見えないリダイレクトを連鎖させることができる。
- リンク全体を読み、出発点のサイト(脆弱性を修正してもらうため)と、最終ページのホスティング業者の両方に通報する必要がある。