「CSRFとはどのような攻撃?」
「CSRFの対策は、何から取り組むべき?」
CSRFとは、クロスサイト・リクエスト・フォージェリの略称で、Webアプリケーションの仕組みを悪用する攻撃手法が特徴の脆弱性です。CSRFの脆弱性を突いた攻撃が行われると、なりすましや金銭的な被害を受けるリスクがあり、Webサイトの信頼が大きく損なわれる恐れがあるため確実な対策が必要です。
本記事では、CSRFの脆弱性が発生するしくみから最新の対策方法までポイントを絞って解説していきます。攻撃のしくみを知りセキュリティ対策を効率的に推進していきたい方は、ぜひご覧ください。
ECサイトなどオンラインサービスを提供している企業の方、必見!
CSRFの対策は、何から取り組むべき?
Webシステムの脆弱性をチェックし、最適な対策を実施することが大切です。 まずは、サービス紹介資料をご覧ください。
CSRFとは?
CSRF(クロスサイト・リクエスト・フォージェリ)は、Webアプリケーションへのリクエストを偽造(フォージェリ)され、ユーザーの意図しない処理が実行されてしまう脆弱性です。
CSRFの脆弱性は、ECサイトでの物品購入や会員制サイトでのパスワード変更、SNSへの投稿など、リクエスト送信者がユーザー本人か否かを確認すべき処理で発生します。
CSRFのしくみは、以下になります。
- ユーザーが正規のサイトにログインする(正規のWebアプリケーションAへのログイン)
- ログインした状態のユーザーが、攻撃者によって作られた罠サイトを閲覧する
- 罠サイトに仕込まれたJavaScriptにより、正規のWebアプリケーションAのサーバーに対して「ユーザーパスワードを変更しなさい」というリクエストが送信される
- 正規のWebアプリケーションAのユーザーパスワードが変更される
攻撃のなかで「正規のWebアプリケーションA」と「罠サイト」の2つのサイトをまたいで(クロス・サイト)、リクエストを偽造する(リクエスト・フォージェリ)点が、CSRF攻撃の特徴です。
XSSとCSRFの違い
CSRFと似た名前の脆弱性に クロスサイトスクリプティング(XSS)があります。
XSSは、サイトをまたぐ(クロスサイト)という点ではCSRFと共通していますが、脆弱性の発生原因が異なります。
CSRFはWebアプリケーションのセッション管理に問題があると発生する脆弱性ですが、XSSはユーザーの入力を出力する処理に問題の原因があります。
XSS攻撃では、ユーザーがメールやSNSなどを通じて罠のしかけられたリンクをクリックしてしまった結果、脆弱性のあるサイトにアクセスして罠のリンクに含まれる不正なスクリプトを実行させられてしまいます。不正なスクリプトの実行により、情報漏えいやマルウェア感染などの被害が想定されます。
XSSはWebアプリケーションの脆弱性を狙った攻撃の中でも報告が多くみられる脆弱性です。「クロスサイトスクリプティング(XSS)|影響と対策をわかりやすく解説」では、攻撃のしくみや対策についてわかりやすく解説しています。XSSの脆弱性対策を知りたい方は、ご一読いただくことをおすすめします。
CSRF攻撃を受けると何が起こるのか
CSRF攻撃を受けると、ユーザーの意図しないタイミングで重要な処理が実行されてしまいます。
他者に重要な処理を実行された場合の被害例は、以下になります。
- パスワードを勝手に変更されることでなりすまし被害に遭う
- オンラインバンキングの送金処理により金銭的被害を被る
- SNSに勝手に投稿されることで、誹謗中傷や業務妨害などの責を負わされる
特にオンラインバンキングやECサイトなど、送金やクレジットカード決済といった決済処理を行うWebサイトの場合、攻撃により大きな被害が生じる可能性が高いといえます。
EC構築システム EC-CUBEで起きた攻撃
EC-CUBEはCSRFの脆弱性を突いた攻撃などを受け、2019年時点で約14万件のクレジットカード番号などが流出しています。そのため、IPAが届出を受け対策を施したシステムの一つ※1です。
近年ECサイトが増加し、それらのセキュリティの甘さを利用した攻撃が多発していることもあり、2023年3月にはIPAが「ECサイト構築・運用セキュリティガイドライン」を公開するなど、ECサイトのセキュリティ向上を目的とした動きが活発化しています。
「EC-CUBEの脆弱性|リスクを最小限にするための簡単な方法」では、ECサイト運用者が知っておくべき攻撃の手法や被害、予防策が記載されています。ご一読いただき、ECサイトのセキュリティを強化することをおすすめします。
※1:JVA iPedia「 EC-CUBE におけるクロスサイトリクエストフォージェリの脆弱性」より
CSRFの対策が必要な箇所は限定的である
CSRFは、Webアプリケーションのあらゆる箇所で発生し得る攻撃という訳ではありません。対策が必要になるのは、ログイン中のユーザー本人しか実行できない処理が勝手に行われることを阻止するためです。
例えば、公開アカウントでSNSに投稿した内容を閲覧する時に、CSRFの対策は必要ありません。対して、SNSアカウントのパスワード変更、投稿または投稿の削除、退会処理などは他ユーザーによって実行されてはならない処理ですので、対策が必要です。
CSRFの対策を行う際は、自社のWebアプリケーションの対策が必要な箇所を把握しておきましょう。
CSRFの対策
CSRFの脆弱性が生じる原因は、「重要な処理の実行を求めるリクエストについて、ユーザー本人による正規の手順をふんだリクエストか否かの確認を行っていない」という点にあります。
ここからは、この原因をふまえたCSRFの対策方法について解説します。
根本的な対策
CSRFの根本的な対策は、信頼できるフレームワークやライブラリを利用するというものです。
CSRFは昔からある攻撃で、現代の有名なフレームワーク・ライブラリであれば対策が施されています。例えば、SpringではSpring SecurityのCSRF機能を使用するための設定があります。
開発者が独自の方法でCSRF対策を実装するよりも、非常に簡単にセキュアなWebアプリケーション開発が可能です。信頼できるフレームワーク・ライブラリを利用できる場合は必ず利用し、正しく設定しましょう。
一番の対策はフレームワークやライブラリの利用ですが、CSRFの対策方法を具体的に知ることで理解を深めることができます。以下では、代表的なCSRF対策をご紹介します。
トークンの利用
一つ目の対策は、トークンの利用です。ライブラリやフレームワークもこの対策を採用している場合が多く、最もポピュラーなCSRF対策と言えます。
重要な処理の実行に際して、本人しか知り得ない秘密情報が含まれていることの確認をもって処理を通すことで、第三者によるリクエストの偽造を防ぐことができます。このような秘密情報を「トークン」と呼びます。
トークンの利用は、通常ユーザーの入力を必要とせず、Webアプリケーション側の設定で行います。そのため、ユーザーの負担を増やさずにセキュリティを強化できる対策として、多くのWebアプリケーション開発で利用されています。
トークンの発行には、攻撃者に推測されにくい乱数を生成できるフレームワークや関数を利用しましょう。
リクエストヘッダの確認
Refererのチェックも、CSRFの対策になります。Refererとはリクエストヘッダの一種で、その直前に閲覧していたページのURLを示す情報です。
CSRF攻撃で罠サイトから偽造されたリクエストが送信される場合、Refererはその罠ページのURLを示しています。一方、ユーザーが正規の手順でリクエストを送信する場合、Refererは正規のページのURLを示しています。そのため、Refererをチェックすれば、正規のリクエストか罠サイトからのリクエストかを判別することができるのです。
しかし、Refererのチェックによる対策には弱点もあります。ユーザーがブラウザの設定などでRefererを送信しないようにしている場合、正規のリクエストとして扱うことができず、ユーザーがサービスを利用できなくなる可能性があります。また、Refererのチェックには漏れも生じやすいため、トークンの利用と併せて実施することをおすすめします。
CSRF対策には脆弱性診断が有効
CSRFのさらなる対策として、「脆弱性診断の実施」や「脆弱性診断ツールの導入」が挙げられます。
CSRFを含むWebアプリケーションの様々な脆弱性を検知できる点が、脆弱性診断の最大のメリットです。
脆弱性診断の実施
セキュリティの専門知識がないまま、脆弱性を漏れなく把握し対応していくのは至難の業です。診断ベンダーなど第三者に脆弱性診断を依頼して、CSRFの脆弱性を洗い出してもらいましょう。
検出された場合の該当箇所、および対応策の提示をしてもらえるだけでなく、SQLインジェクションやクロスサイトスクリプティングなど他の脆弱性のチェックもできるので、セキュアなWebアプリケーション運用に役立ちます。
脆弱性診断について不明点がある方は、ぜひ「脆弱性診断(セキュリティ診断)とは|必要性からやり方まで、すべて解説」にて最新の脆弱性診断情報を確認し、自社のセキュリティ強化にお役立てください。
脆弱性診断ツールの導入
診断ベンダーに依頼せず、自社で診断を実施することも可能です。脆弱性診断ツールを導入すれば、自社の好きなタイミングで迅速な診断を実施でき、ベンダーに何度も依頼するよりもコストをおさえることができます。
Webアプリケーションのセキュリティを全体的に強化したい方は、診断ツールの導入を検討されることをおすすめします。
詳しくは「脆弱性診断ツール(サービス)|有料・無料の違いと5つの選定ポイント」をご覧ください。
まとめ|CSRFは最新の情報を知り正しく対策をすれば防ぐことができる
本記事では、CSRFの対策について解説しました。CSRFは、ユーザーの意図しないリクエストを勝手に実行させる攻撃で、ユーザーのなりすましや金銭的被害が発生する恐れがあるため、適切な脆弱性対策を実施しましょう。
CSRFの最もポピュラーな対策は、トークンの利用です。最新のフレームワーク・ライブラリを利用し、正しく設定することで十分な対策となります。
対策状況のチェックには、脆弱性診断の実施をおすすめします。診断ベンダーのサービスを受ける方法のほか、脆弱性診断ツールを導入して自社で診断することも可能です。コストや実施時期を考慮し、自社に合った方法を選びましょう。