※本ページにはプロモーション(広告)が含まれています
ログイン中のユーザーの意図しない操作を別サイトから強制実行させる攻撃。設定変更や送金などの被害を引き起こす。
詳しい解説
CSRF(クロスサイトリクエストフォージェリ)は、ログイン済みのユーザーが別の悪意あるサイトにアクセスした際、そのサイトから元のサービスに対して意図しないリクエスト(設定変更・投稿・送金など)を送信させる攻撃です。ユーザー自身のブラウザから正規のCookieを付けて送られるため、サーバー側はユーザーの本人意思によるリクエストと見分けがつかず、処理を受け付けてしまいます。
攻撃の流れは、①ユーザーがサービスAにログインしたまま、別タブで悪意あるサイトBを開く、②サイトBに埋め込まれた画像タグやフォームが、自動的にサービスAへリクエストを送る、③サービスAはCookie付きリクエストを正規のものとして処理する、というものです。結果として、メールアドレス変更・パスワード変更・送金処理・退会処理などが勝手に実行されてしまいます。
防御の基本は『CSRFトークン』です。サーバー側がフォーム表示時にランダムなトークンを発行し、送信時に必ず照合することで、外部サイトからのリクエストは通らなくなります。加えて、①CookieへのSameSite=Lax/Strict属性付与、②重要操作での再認証要求、③Referer/Originヘッダー検証、④GETリクエストで状態変更を行わない設計原則、⑤重要操作後の確認画面挿入、などを多層的に組み合わせます。
モダンなフレームワーク(Laravel・Rails・Django・Spring等)はCSRFトークン機能を標準装備しており、デフォルト設定を外さないことが最良の防御となります。古いシステムやカスタム実装では見落とされがちで、ペネトレーションテスト時に頻出する指摘事項です。
ユーザーがあるSNSにログインしたまま、別タブで攻撃者の用意した画像投稿サイトを開いたとします。ページ内には見えないフォームが仕掛けられており、自動送信によりSNS上で勝手に迷惑投稿が行われてしまう、というのがCSRFの典型です。SNS側がリクエストごとにCSRFトークンを検証していれば、外部サイトからの自動送信は受理されず攻撃は失敗します。
別の呼び方
XSRF
クロスサイトリクエストフォージェリ
Cross-Site Request Forgery
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!