• 検索結果がありません。

CSRF(クロスサイト・リクエスト・フォージェリ)

ドキュメント内 安全なウェブサイトの作り方 改訂第3版 (ページ 30-34)

1. ウェブアプリケーションのセキュリティ実装

1.6 CSRF(クロスサイト・リクエスト・フォージェリ)

1.6 CSRF(クロスサイト・リクエスト・フォージェリ)

ウェブサイトの中には、サービスの提供に際しログイン機能を設けているものがあります。ここで、ログ インした利用者からのリクエストについて、その利用者が意図したリクエストであるかどうかを識別する仕 組みを持たないウェブサイトは、外部サイトを経由した悪意のあるリクエストを受け入れてしまう場合があ ります。このようなウェブサイトにログインした利用者は、悪意のある人が用意した罠により、利用者が予 期しない処理を実行させられてしまう可能性があります。この問題を悪用した攻撃手法は「CSRF

(Cross-Site Request Forgeries/クロスサイト・リクエスト・フォージェリ)」と呼ばれています。

■ 発生しうる脅威

CSRF 攻撃により、発生しうる脅威19 は次のとおりです。

- ログインした利用者のみが利用可能なサービスの悪用 不正送金、商品購入、退会処理 など

- ログインした利用者のみが編集可能な情報の改ざん

各種設定の変更(管理者画面、パスワードなど)、掲示板への不適切な書き込み など

■ 注意が必要なウェブサイトの特徴

19 前述「1.4 セッション管理の不備」における脅威と比較してみると、攻撃者は、「ログインした利用者のみが閲覧可能な情 報」を閲覧することができない、という違いがあると言えます。ただし、「パスワード変更」のように、次の攻撃(成りすまし)

クリック!

ウェ ブサイトにCSRFの脆弱性が ある場合、悪意あ る人により、利 用者が予期しな い処理を実行さ せられてしま う可能性があ りま す。

CSRF (クロスサイト・リクエスト・フォージェリ)

5. リンクのクリック等によ り、 利用者の意図しな い攻 撃リクエ ストを ウェ ブア プリ ケーションに送信

1.通常通り ログイン

4.罠とは知らず、悪意ある 退会 サイトの罠ページなどを閲覧

3. ロ グインし た状態を維持 2.セッション IDを発行

罠サイト

ウェブ アプリケーション

(ログイン用)

ウェブサイト 利用者

設定変更

CSRFの脆弱性がある ウェブアプリケーション

強制投稿 利用者

悪意のある人

1.6 CSRF 次の技術を利用してセッション管理を実装しているウェブサイトが、CSRF 攻撃による影響を受けます。

- Cookie を用いたセッション管理 - Basic 認証

- SSL クライアント認証

また、上記を実装するウェブサイトのうち、ログイン後に決済処理などの重要な処理を行うサイトは、攻 撃による被害が大きくなるため、特に注意が必要です。

- 金銭処理が発生するサイト

ネットバンキング、ネット証券、ショッピング、オークション など - その他、ログイン機能を持つサイト

管理画面、会員専用サイト、日記サイト など

■ 届出状況

CSRF に関する届出は、ウェブサイトの届出全体に占める割合は数パーセントと多くはありませんが、

ソフトウェア製品の届出を含め、2006 年頃から継続的に届出を受けています。たとえば、ブロードバンド ルータなど、組み込み製品のウェブ管理画面に同脆弱性が存在する例が報告されています。下記は、

IPA が届出を受け、同脆弱性の対策が施されたソフトウェア製品の例です。

・複数のヤマハルーター製品におけるクロスサイト・リクエスト・フォージェリの脆弱性

http://jvndb.jvn.jp/contents/ja/2008/JVNDB-2008-000005.html

・「AirStation シリーズ」および「BroadStation シリーズ」における クロスサイト・リクエスト・フォージェリの脆弱性

http://jvndb.jvn.jp/contents/ja/2007/JVNDB-2007-000875.html

・「TeraStation HD-HTGL シリーズ」における

クロスサイト・リクエスト・フォージェリの脆弱性

http://jvndb.jvn.jp/contents/ja/2006/JVNDB-2006-000665.html

■ 根本的解決

1)-1 処理を実行するページを POST メソッドでアクセスするようにし、その「hidden パラメータ」に秘 密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を 実行するようにする。

解説 これは、CSRF に対して、脆弱な原因を作らない実装です。

具体的な例として、「入力画面 → 確認画面 → 登録処理」のようなページ遷移を考 えます。まず、利用者の入力内容を確認画面として出力する際、合わせて秘密情報を

「hidden パラメータ」に出力するようにします。この秘密情報は、セッション管理に使用 しているセッション ID を用いる方法の他、セッション ID とは別のもうひとつの ID(第 2 セ

1.6 CSRF ッション ID)をログイン時に生成して用いる方法などが考えられます。生成する ID は安 全な擬似乱数を用いて、第三者に予測困難なように生成する必要があります。次に確 認画面から登録処理のリクエストを受けた際は、リクエスト内容に含まれる「hidden パ ラメータ」の値と、秘密情報とを比較し、一致しない場合は、登録処理を行わないように します。このような実装であれば、攻撃者が 「hidden パラメータ」に出力された秘密情 報を入手できない限り、攻撃は成立しません。

なお、このリクエストは、POST メソッドで行うようにします20。GET メソッドで行った場 合、外部サイトに送信される Referer に秘密情報が含まれてしまうことになるためです。

1)-2 処理を実行する直前のページで再度パスワードの入力を求め、実行ページでは、入力されたパス ワードが正しい場合のみ処理を実行するようにする

解説 これは、CSRF に対して、脆弱な原因を作らない実装です。

この対策方法は、上記 1)-1 と比べて実装が簡単となる場合があります。たとえば、

ログイン処理に Basic 認証を用いている既存のシステムに対策を施す場合、セッション ID が存在せず、1)-1 の対策をするには新たに秘密情報を作る必要がある場合があり ます。そのような場合に、安全な擬似乱数生成系を用意することが容易でないならば、

この 1)-2 の対策が採用しやすいといえます。

ただし、この方法は、画面設計の仕様変更を要する対策であるため、場合によって は採用できないかもしれません。実装の変更だけで対策をする場合には、1)-1 または 1)-3 の対策を検討してください。

1)-3 Referer が正しいリンク元かを確認し、正しい場合のみ処理を実行するようにする 解説 これは、CSRF に対して、脆弱な原因を作らない実装です。

Referer を確認することにより、本来の画面遷移を経ているかどうかを判断すること ができます。確認できない場合は、処理を実行しないようにします。Referer が空の場 合も、処理を実行しないようにします。これは、Referer を空にしてページを遷移する方 法が存在するため、攻撃者がその方法を利用して CSRF 攻撃を行う可能性があるた めです。

ただし、ウェブサイトによっては、攻撃者がそのウェブサイト上に罠を設置することが できる場合があり、このようなサイトでは、この対策法が有効に機能しない可能性があ ります。また、この対策法を採用すると、ブラウザやパーソナルファイアウォールなどの 設定で Referer を送信しないようにしている利用者が、そのサイトを利用できなくなる不 都合が生じます。本対策の採用には、これらの点にも注意してください。

20 HTTP/1.1 の仕様を定義している RFC2616 には、「機密性の求められるデータの送信には GET メソッドを使わず、

POST メソッドを使うべきである」という内容の記述があります(15.1.3 Encoding Sensitive Information in URI's)。

1.6 CSRF

■ 保険的対策

2)重要な操作を行った際に、その旨を登録済みのメールアドレスに自動送信する 解説 これは、CSRF 攻撃を行われた場合に、早期発見につながる実装です。

メールの通知は事後処理であるため、CSRF 攻撃を防ぐことはできませんが、実際 に攻撃があった場合に、利用者が異変に気付くきっかけを作ることができます。なお、メ ール本文には、プライバシーに関わる重要な情報を入れないように注意が必要です。

以上の対策により、CSRF 攻撃に対する安全性の向上が期待できます。CSRF に関する情報について は、次の資料も参考にしてください。

参考 URL

IPA: 知っていますか?脆弱性 (ぜいじゃくせい) 3. CSRF (クロスサイト・リクエスト・フォー ジェリ)

http://www.ipa.go.jp/security/vuln/vuln_contents/csrf.html http://www.ipa.go.jp/security/vuln/vuln_contents/csrf_flash.html IPA: セキュア・プログラミング講座 「リクエスト強要(CSRF)対策」

http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html 産業技術総合研究所 高木浩光: 「CSRF」と「Session Fixation」の諸問題について http://www.ipa.go.jp/security/vuln/event/documents/20060228_3.pdf

IPA: 情報セキュリティ白書 2006 年度版 「ウェブサイトを狙う CSRF の流行」

http://www.ipa.go.jp/security/vuln/documents/2005/ISwhitepaper2006.pdf

ドキュメント内 安全なウェブサイトの作り方 改訂第3版 (ページ 30-34)

関連したドキュメント