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

当ページでは、「クロスサイトリクエストフォージェリ(CSRF)」と呼ばれるサイバー攻撃の概要、攻撃手順やその被害の例、対策方法について分かりやすく図解を用いてまとめています。
 
 
 

クロスサイトリクエストフォージェリとは

クロスサイトリクエストフォージェリ(Cross-Site Request Forgeries: CSRF)とは、情報の登録・更新・削除などの重要な処理をする機能において、ユーザが攻撃者の用意したリンクへアクセスするだけで、本人が意図せずに重要な処理を実行してしまうサイバー攻撃。
 

攻撃手順の例

クロスサイトリクエストフォージェリ攻撃によって、Webサイト「shukapin.com」のユーザが攻撃者によってログインパスワードを「hacked」に勝手に変更されてしまう例を示す。
【攻撃手順】
① 被害者ユーザはWebサイトにログインしており、セッション管理用のCookieをWebサーバから受け取っている状態。
② 攻撃者はパスワードを「hacked」に変更するリクエストを含むリンクを、ユーザへ送信する。
③ ユーザは攻撃者から送られてきたリンクをクリックする。ユーザ自身のセッション管理用Cookieと共にリクエストがWebサーバへ送信される。
④ Webサーバは送られたセッション管理用Cookieから被害者ユーザ自身のリクエストだと判定し、パスワード変更処理を実行する。
 

攻撃された場合の被害

具体的には以下のような被害が起きる可能性がある。
 
  • パスワードを勝手に変えられてアカウントを乗っ取られる。
 
  • 自分のアカウントで勝手に投稿処理される。
    • 掲示板機能があるサイトでは、悪質サイトへの誘導・犯罪予告といった投稿を被害者アカウント名で実行されてしまう。
 

対策方法

ユーザができる対策とサービス提供者(システム開発者)ができる対策をそれぞれ挙げる。

ユーザの対策

不審なリンクにアクセスしない

受信メールに貼られているリンクを不用意にクリックしないこと。
不審なWebサイトにはアクセスしないこと。
 

サービス利用後はログアウトする

サービスを利用終了した際は、できるだけログアウトを実行することでセッションを破棄すること。
 

サービス提供者の対策

正しい遷移元画面からの実行かを検証する

遷移元にてランダム値をセッション変数とフォームのhiddenに格納し、処理の前に値を検証する。
クロスサイトリクエストフォージェリ(CSRF)対策用に付与されたランダム値を「CSRFトークン」と呼ぶ。
 

重要処理の前にはパスワードを要求する

パスワード変更・商品購入などを実施する前には再度パスワード入力を要求することで、ユーザが意図せずに重要処理を実行することを防ぐことが可能。
 

CookieにSameSite属性を付ける

SameSite属性とはCookieの属性の一種で、別のドメインに貼られているリンクからアクセスした際のCookie送信の許可/拒否を設定する項目。
SameSite属性の値を以下の「Strict」または「Lax」に設定することで、仮にクロスサイトリクエストフォージェリが行われても、セッション管理用のCookieが一緒に送信されないため攻撃が失敗する。
  • Strict: 別のドメインからのアクセスがあった際はCookieは送信しない。
  • Lax: トップレベルナビゲーション(ブラウザのアドレスバーに表示されているURLが変更される処理)かつ、GETメソッドのリクエストの場合のみCookieを送信する。
 
CookieやCookieの属性の詳細についてはこちらのページを参照!
 

関連情報・参考情報

その他のサイバー攻撃・セキュリティ関連記事も良かったらご参照ください!