サーバサイドリクエストフォージェリ(SSRF)
Server-Side Request Forgery (SSRF)
サーバに任意のURLへリクエストを送らせる攻撃。特にクラウドのメタデータエンドポイント(169.254.169.254)を叩かせて認証情報を盗むのが典型。OWASP A10(2021新設)。防御は宛先allowlistと内部IP遮断、IMDSv2。
SSRFとは(なぜ危険か)
**SSRF(Server-Side Request Forgery)**は、攻撃者が指定したURLを、サーバ自身に取りに行かせる攻撃です。
なぜこれが危険なのか? カギは『サーバの立ち位置』です。サーバは社内ネットワークやクラウドの内側にいて、外部からは直接アクセスできない内部サービスにも手が届きます。攻撃者は自分では届かない内部リソースに、サーバを踏み台にして到達するのです。
たとえ話: あなた(攻撃者)は会社の建物に入れません。でも『この住所に荷物を取りに行って』と社内の配達員(サーバ)に頼めるとしたら? 配達員に『社長室の金庫(内部の認証情報)を取ってきて』と頼めてしまう——これがSSRFの構図です。
図を描画中...
典型例: クラウドのメタデータ窃取
AWS等のクラウドでは、各サーバが http://169.254.169.254/ という特別なアドレス(メタデータエンドポイント / IMDS)から、自分の設定や**一時的な認証情報(クラウドの鍵)**を取得できます。これは便利な仕組みですが、SSRFと組み合わさると最悪です。
攻撃者が『画像を取得する』機能に http://169.254.169.254/latest/meta-data/... を渡すと、サーバがそこへアクセスしてクラウドの認証情報を取得し、攻撃者に返してしまう。その鍵があれば、攻撃者はクラウド全体を乗っ取れる可能性があります。これが2021年に SSRF が OWASP Top 10 に A10 として新設された大きな理由です。
狙われやすい機能
- 『画像URLを渡すと取得して表示する』 機能(アバター取得、OGP取得)
- URLプレビュー(SlackやチャットでURLを貼ると中身を展開するアレ)
- Webhook(指定URLにサーバが通知を送る)
- PDF生成・スクリーンショット(URLを渡すとサーバがそのページを開く)
共通点は『ユーザーが指定したURLに、サーバがアクセスしに行く』こと。
防御
図を描画中...
- 宛先allowlist: 『取りに行ってよいドメイン/IP』を限定する。最も堅い。
- 内部・プライベートIP帯への到達遮断:
169.254.x.x(メタデータ)、10.x192.168.x127.0.0.1(内部)への接続を禁止。 - リダイレクト追従の制限: 最初は外部URLでも、リダイレクトで内部に誘導される手口を防ぐ。
- IMDSv2: クラウド側の対策。メタデータ取得に事前のトークン取得を必須化し、単純なGETでは認証情報を取れなくする。
つまずきポイント
- **SSRFは『サーバを内側からの攻撃者にする』**点が、外から殴るタイプの攻撃と違う。だからファイアウォール(外からの遮断)では防げない——内部への発信を絞る発想が要る。
- blocklist(内部IPだけ弾く)は抜けやすい。
http://0x7f000001(127.0.0.1の別表記)、DNSを内部IPに向けるDNSリバインディング等、回避手段が多い。可能ならallowlist方式が安全。 - 面接の鉄板質問: 『画像URLを取得して表示するAPIの危険は?』→『SSRFで内部メタデータを盗まれうる。allowlistと内部IP遮断、IMDSv2で守る』。