クロスサイトリクエストフォージェリ(Cross-Site Request Forgery、CSRF)とは、ユーザーが認証済みのWebサイトに対して、攻撃者が意図したリクエストをユーザーの操作によって送信させるサイバー攻撃です。ユーザーの意図とは無関係に、不正なリクエストが送信されるため、攻撃者は認証済みのユーザーになりすまして操作を実行することができます。CSRFは、セッション情報やCookieが自動的に含まれる仕組みを悪用するため、ユーザーがログインしている状態のWebアプリケーションが狙われやすく、金銭の不正送金や情報漏洩などの被害につながることがあります。
CSRFの仕組み
CSRF攻撃は、通常以下の手順で行われます。
- 被害者が認証を行いログイン
ユーザー(被害者)がWebアプリケーションにログインすると、セッションが開始され、ブラウザには認証情報が含まれたCookieが保存されます。 - 攻撃者が不正リクエストを仕込む
攻撃者は、被害者がアクセスする別のWebページやメールなどに、不正なリクエストを仕込んだリンクやボタンを埋め込みます。例えば、フォームや画像のリンク、ボタンが使用されます。 - 被害者がリンクをクリックまたはページを閲覧
被害者が攻撃者の意図したリンクをクリック、またはページを閲覧することで、ブラウザが自動的にリクエストを送信します。この際、ブラウザには認証情報が含まれるため、被害者になりすました形でリクエストが実行されます。 - 攻撃の実行と不正な操作
Webアプリケーションは、リクエストにユーザーの認証情報が含まれているため正規のユーザーからのリクエストと見なし、内容を処理します。結果として、ユーザーのアカウントで不正な操作が行われます。
このように、CSRF攻撃では、ユーザーが攻撃者の意図したリクエストを送信させられるため、Webサイトの管理者にとっても見逃しやすく、非常に危険な攻撃となります。
CSRFの被害例
CSRF攻撃によって発生する代表的な被害例には、以下のようなものがあります。
- 不正送金
オンラインバンキングのWebアプリケーションに対するCSRF攻撃では、被害者のアカウントから攻撃者の指定する口座へ不正に送金が行われる可能性があります。 - パスワード変更
被害者のアカウントに対して不正なパスワード変更リクエストを送り、アカウントが乗っ取られるリスクがあります。 - 個人情報の漏洩
ユーザーの個人情報を攻撃者が取得するためのリクエストを送信させ、情報漏洩の原因となることがあります。 - SNSへのスパム投稿
SNSアカウントを使って、攻撃者が意図した内容のスパムメッセージやリンクが投稿され、他のユーザーに悪意あるリンクを広めるなど、攻撃の拡散に使われることもあります。
CSRFの防止策
CSRF攻撃を防ぐためには、Webアプリケーション側とユーザー側での対策が重要です。
1. CSRFトークンの導入
Webアプリケーションでは、フォームやリクエストごとにCSRFトークンを発行し、サーバー側でトークンの一致を検証することで、不正リクエストの実行を防ぎます。CSRFトークンは、ユーザーがリクエストを送信するたびに生成され、リクエストの一部としてサーバーに送信されるため、第三者がトークンを予測することは困難です。
2. SameSite属性のCookie設定
Cookieに「SameSite属性」を設定することで、異なるサイトからのリクエストにはCookieを送信しないようにできます。これにより、外部サイトからのCSRF攻撃を防止することが可能です。
3. HTTPメソッドの制限
GETメソッドは情報取得に用い、システム変更やデータ更新にはPOSTメソッドを用いるようにします。GETメソッドでデータ更新を行うと、攻撃者が画像やリンクに仕込むことで簡単にCSRF攻撃が行えるため、適切なHTTPメソッドの使用が推奨されます。
4. リファラーのチェック
サーバー側でリクエスト元のリファラー情報をチェックし、正規のサイトからのリクエストのみを許可する方法も効果的です。ただし、リファラー情報はブラウザ設定で送信されないこともあるため、他の対策と組み合わせて使用します。
5. 二要素認証(2FA)の実施
ユーザーにとって重要な操作(送金やパスワード変更など)には二要素認証を導入することで、リクエストが正規ユーザーによるものであるかを確認し、CSRF攻撃の被害を防ぐことが可能です。
CSRFとXSSの違い
CSRF(クロスサイトリクエストフォージェリ)とXSS(クロスサイトスクリプティング)は似たようなサイバー攻撃ですが、異なる点も多く、それぞれ異なる対策が求められます。
- CSRF
ユーザーが既に認証済みの状態であることを悪用し、意図しない操作を実行させる攻撃です。主にCSRFトークンやSameSite属性で対策を行います。 - XSS
悪意のあるスクリプトをWebページに埋め込み、他のユーザーに実行させる攻撃です。攻撃者は、スクリプトを通じてユーザーのCookieや個人情報を取得することができます。主にサニタイズ(入力値の無害化)やエスケープ処理で対策を行います。
まとめ
クロスサイトリクエストフォージェリ(CSRF)は、ユーザーが既に認証されているWebアプリケーションに対して、攻撃者の意図したリクエストを送り、不正な操作を実行させるサイバー攻撃です。CSRFトークンの実装、SameSite属性の設定、HTTPメソッドの適切な使用、リファラーチェックなどを活用し、攻撃リスクを下げることが可能です。また、ユーザーの重要な操作には二要素認証を導入することで、セキュリティをさらに高めることができます。CSRF対策を適切に行うことで、ユーザーの安全を確保し、アプリケーションの信頼性を高めることができます。