見出し画像

🌈 にじいろ式|CSRF クロスサイトリクエストフォージェリー(IPA・「安全なWebサイトの作り方」から覚える)


問題作成者の意図を攻略することが、試験ゲームへの近道

こんにちは。事務をしながら情報処理安全確保支援士を目指して勉強しているにじいろです。

前回は、クロスサイトスクリプティングとクロスサイトリクエストフォージェリの言葉の違いを“後ろの言葉”に注目して学習しました。

今回は クロスサイトリクエストフォージェリー(CSRF) を、
IPAの「安全なWebサイトの作り方」を読みながら整理してみます。

IPAのページはこちらです。
安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)

IPA公式HP 安全なWebサイトの作り方 CSRF図解

このページを読んで「なるほど、理解できた」という方はそれでOKです👏
もう以下の私のブログは読まなくてOKです・笑

もし「用語が多くてよく分からない」と感じた方は、私と同じで 前提知識でつまずいている可能性 があります。一緒に頑張りましょう。

この記事では

  • CSRFの前提となる用語

  • 攻撃の仕組み

  • IPAの説明の意図

を整理してから、もう一度IPAのページを読む流れにしてみました。

🔶この話は誰向け?

まず大事なことを最初に書きます。

IPAのクロスサイトリクエストフォージェリの説明は、
ユーザー向けではありません。
これは、Webサイトを作っているエンジニア向けの説明です。

つまり、

  • SBI証券

  • 楽天銀行

  • Amazon

  • ネットバンク

のような攻撃されやすいサイトを作る側の対策の話です。
「サイト側がどう守るか」 を説明しています。

🔷CSRFを操り人形でイメージ

CSRFは、攻撃者がユーザーのブラウザを操る攻撃です。
にじいろ式ではイメージキャラを操り人形にしてみました😊

意図してないのにブラウザが動いてしまう

攻撃者

操られるブラウザ

ログイン中のサイト

という構造です。

🔶具体例(SBI証券)

例えばこんな状況を想像してください。

あなた(太郎さん)はSBI証券にログインしています。
そのまま別のタブで「AI株おすすめランキング」のサイトを開きました。
でもそのサイトは、実は攻撃者の罠サイトでした😨

すると裏側でこんなことが起きます。

  • 攻撃者「ブラウザよ、SBI証券に送金リクエストを送れ」

  • ブラウザ「了解。ログイン中なので送ります」

  • SBI証券「太郎さんのリクエストですね。処理します」

つまり攻撃者ではなく あなたのブラウザ(ChromeやSafariなど)が命令を送ってしまう のがCSRFです。
攻撃者は、まるで“ブラウザを操る人形遣い”みたいですね。

※ここで登場するSBI証券は、あくまで説明のための例です。
CSRFは特定の企業を狙う攻撃ではなく、「ログイン状態のWebサービス」であれば成立する可能性があります。
試験問題でも、企業名は単なる“事例”として出てくることが多いので、
「何が起きている攻撃なのか」に注目するのがポイントです。

🔷ここで大事なポイント

攻撃者は「特定の人」を狙っていません。
罠サイトに来た人の中で、あらかじめ設定した任意のサイト

  • SBI証券

  • 楽天銀行

  • Amazon

などにログインしている人がいたらラッキー、という攻撃です。

だから「都合よく同時にログインしている人なんている?」と思っても、実際には結構成立します😨数打ちゃ当たる理論でしょうか。

※補足:CSRFには“特定の人を狙う標的型”も存在しますが、IPAの説明や一般的なCSRF対策では「不特定多数を狙う攻撃」と理解して問題ありません。

🔶IPAの対策(hiddenパラメータ)

ここからが、IPAの説明です。IPAでは次の対策が紹介されています。

「処理を実行するページをPOSTメソッドでアクセスするようにし、その「hiddenパラメータ」に秘密情報を入れる」

まず、hiddenパラメータとは何か。
これは、ユーザーには見えないデータです。

例えば

入力画面

確認画面

登録

という画面があったとします。
確認画面には、実はこんなデータが入っています。

✅hiddenパラメータ
✅秘密トークン

ユーザーには見えません。でも、サーバは覚えています。
そして、登録処理の時に

✅hiddenパラメータ
=サーバが持っている秘密情報
が一致したときだけ処理を実行します。
この秘密情報を、CSRFトークンと言います。

🔷POSTメソッドを使う理由

IPAの文章には次の説明もあります。
このリクエストはPOSTメソッドで行う
これは、GETメソッドだと危険だからです。
※補足:POSTでもRefererが送られる場合はありますが、URLに秘密情報を含めないことで漏洩リスクを大幅に下げられます。

🔶GETメソッド

GETは、URLにデータが入ります。
例:example.com/send?token=ABC123
この token が秘密情報だった場合URLに見えてしまいます。

🔶Refererとは

IPAの文章では
「外部サイトに送信されるRefererに秘密情報が含まれる」
と書かれています。
Refererとは「どこから来たページか」を知らせる仕組みです。
例えば
Aサイト

Bサイト

と移動するとBサイトには「Aから来ました」
という情報が送られることがあります。

これがRefererです。もしURLに秘密情報が入っていると
そのURLがRefererとして
外部サイトに送られる可能性があります。つまり
秘密情報が、外部サイトに漏れる可能性があります。

そのため秘密情報はURLに入らないPOSTを使うようにします。

🔷CSRF対策まとめ

CSRF対策の基本は

・POSTメソッドを使う
・hiddenパラメータに秘密情報を入れる
・サーバ側で一致を確認する です。

つまり攻撃者が「操り人形を動かしても」
秘密の合言葉がないと処理できないようにします。

🌈感想

IPAの文章は正確ですが前提知識がないと少し読みづらいです。
でも仕組みをイメージしてから読むととてもよく整理されています。

もう一度IPAのページを読んでみてください

ここまで読んだあとにもう一度こちらを読むと、かなり理解しやすくなると思います😊
どうでしょう?

  • IPA 安全なWebサイトの作り方 CSRF対策

最初に読んだ時より少し見え方が変わっていたらとっても嬉しいです🙌
私はエンジニアではないので、エンジニアの皆さん安全なWebサイトを私たちのために作ってくださいね。

今日、一番面白かったところは、
そんな都合よく別タブで該当ページを狙った罠リンク開いてくれる❓
と生成AIにきいたら、

罠リンクに訪れた人で、正規の狙いたいサイトのログイン中の人がいたら、ラッキー✌️

という話でした。
なので、罠リンク🔗と言われるんですねー。

罠リンクには気をつけてね

ではでは、今日も一つ勉強になりました。
本日もお忙しい中、私のサイトをご覧になってくださりありがとうございます。
いいね、フォローも励みになります。

それではごきげんよう😊


いいなと思ったら応援しよう!

この記事が参加している募集