≪ Today I learned.
RSS購読
    公開日
    タグ
    Security
    著者
    ダーシノ

    Open Redirectionの攻撃手法と対策

    Open Redirectionとは、任意のURLにリダイレクトさせる攻撃手法のこと。リダイレクトの仕組みを用い、ユーザーの秘匿情報の盗取やマルウェア配布などを行うことができる。

    代表的なリダイレクト処理

    リダイレクト処理を実現する代表的な方法は、以下の3種類。

    1. HTTPヘッダを用いたリダイレクト
    2. metaタグを用いたリダイレクト
    3. JavaScriptを用いたリダイレクト

    1. HTTPヘッダを用いたリダイレクト

    HTTPレスポンスのステータスコードとLocationヘッダを用いてリダイレクトを行う。

    リダイレクトに関するステータスコード

    具体的なレスポンス

    HTTP/1.1 301 Moved Permanently
    Location: https://example.com/new-location
    ...

    2. metaタグを用いたリダイレクト

    ページのmetaタグを用いてリダイレクトを行う。

    <head>
      <meta http-equiv="refresh" content="5;URL=http://example.com/" />
    </head>

    ※一般的に http-equiv="refresh"はアクセシビリティに関する問題があるので使用には注意が必要。

    3. JavaScriptを用いたリダイレクト

    JavaScriptのdocument.location.hrefなどを用いてリダイレクトを行う。

    document.location = 'https://example.com/new-location';
    document.location.href = 'https://example.com/new-location';
    document.location.replace('https://example.com/new-location');

    攻撃手法

    URLや入力されたデータを元にリダイレクトする場合、https://trust.example.com?redirect=https://phishing.example.comのようなURLを用意し、被害者に送信する。被害者は「trust.example.com」が信頼できるサイトだと思いリンクをクリックすると、悪意のあるページにリダイレクトし、秘匿情報が盗まれる可能性がある。

    また、認証情報の窃取(OAuthの悪用)やマルウェアのダウンロードなどが考えられる。

    対策

    1. 外部から受け取った値でURLを生成しない
    2. 外部から受け取る場合
      • ホワイトリスト化する
      • 入力内容の制限と適切なバリデーションを行う
    3. リダイレクト前にクッションページを表示する
      • 某掲示板で外部リンクに移動するときに挟まる例のページのようなもの