【しーえすあーるえふ】

CSRF とは?

💡 ログイン中の「信頼」を悪用してこっそり操作を実行させる攻撃
📌 このページのポイント
CSRF:クロスサイトリクエスト偽造 ユーザー (ログイン済) 正規サイト (銀行など) 悪意あるサイト (罠サイト) ① ログイン済み(Cookie保持) ② 罠サイトを訪問 ③ 不正リクエスト送信 (Cookieが自動付与) サーバーはCookieが正規なので正当なリクエストと判断してしまう 対策:CSRFトークン・SameSite Cookie・Refererチェック ユーザーの認証情報を悪用して意図しない操作を実行する攻撃
ユーザーになりすまして不正なリクエストを送信する攻撃手法
ひよこ ひよこ

CSRFって何をされる攻撃なの?

ペンギン先生 ペンギン先生

ネットバンクにログインしたままの状態で、悪意あるサイトを開いたときに「送金してください」というリクエストが勝手に送られてしまう、みたいな攻撃だよ。本人が操作したわけじゃないのに操作したことになってしまうんだ。

ひよこ ひよこ

どうしてそんなことができるの?

ペンギン先生 ペンギン先生

ブラウザはリクエストを送るとき、そのドメインクッキー(ログイン情報)を自動的につけて送る仕様があるんだ。罠サイトから別サイトへのリクエストでも、クッキーが一緒に送られてしまうから「正規ユーザーからのリクエスト」として処理されてしまう。

ひよこ ひよこ

XSSと何が違うの?

ペンギン先生 ペンギン先生

XSSは「スクリプトを実行させてブラウザ内の情報を盗む」攻撃で、CSRFは「ユーザーが意図しないリクエストをサーバに送らせる」攻撃だよ。目的と仕組みが違うんだ。どちらもWebアプリの重要な脆弱性だけどね。

ひよこ ひよこ

どうやって防ぐの?

ペンギン先生 ペンギン先生

CSRFトークンがメインの対策だよ。サーバがフォームにランダムな値(トークン)を埋め込んでおいて、リクエスト時にそのトークンが正しいか確認する。罠サイトはトークンの値を知れないから、検証で弾けるんだ。

ひよこ ひよこ

SameSite属性のクッキーって最近よく聞くけどCSRFと関係あるの?

ペンギン先生 ペンギン先生

すごく関係あるよ!クッキーに「SameSite=Strict」や「SameSite=Lax」を設定すると、別サイトからのリクエスト時にそのクッキーを送らないようにブラウザが制御してくれる。近年のブラウザデフォルトでLaxを適用するようになってきていて、CSRFの難易度が上がっているけど、完全に防げるわけではないのでCSRFトークンとの組み合わせが推奨されるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
CSRFって出てきたら「ログイン中のユーザーに知らないうちに悪意ある操作をさせる攻撃」と思えばだいたいOK!
📖 おまけ:英語の意味
「Cross-Site Request Forgery」 = サイトをまたいだリクエストの偽造
💬 「Forgery(偽造・なりすまし)」がポイント。正規ユーザーのリクエストを「偽造」して送らせる攻撃だよ
← 用語集にもどる