SSRF(サーバサイドリクエストフォージェリ)
攻撃者がサーバを操り、任意の宛先へリクエストを送らせる攻撃です。外部からは届かない内部資源やクラウドメタデータが狙われます。
- 1.SSRF は、URL を受け取って取得する機能を悪用し、サーバ自身に「攻撃者が指定した宛先」へリクエストを送らせる攻撃です。
- 2.怖いのは、サーバが内部ネットワークの一員である点。外部から直接届かない内部 API や管理画面、DB に到達されます。
- 3.クラウドのメタデータエンドポイント(169.254.169.254)から認証情報を盗まれる被害が代表例。許可リスト方式の宛先制限が要です。
SSRF とは何か
SSRF(Server-Side Request Forgery)は、攻撃者がサーバを踏み台にして、本来アクセスできない宛先へリクエストを送らせる攻撃です。「Forgery(偽造)」の名のとおり、サーバが意図しないリクエストを代理で発行させられるのが本質です。
きっかけになるのは、ありふれた機能です。「URL を入力すると画像を取り込む」「外部の Webhook を呼ぶ」「指定 URL のプレビューを生成する」など、ユーザーが指定した URL をサーバが取得しに行く機能はすべて候補になります。攻撃者はこの URL 欄に、外部サイトではなく内部のアドレスを入れます。
POST /api/fetch-image
Content-Type: application/json
{"url": "http://169.254.169.254/latest/meta-data/"}
サーバは言われたとおり、そのアドレスへリクエストを送ってしまいます。リクエスト元が「信頼されたサーバ自身」になることが、SSRF を強力にしています。
なぜ内部資源が危険なのか
SSRF の本当の脅威は「外部の任意 URL を叩ける」ことではなく、サーバが内部ネットワークの内側にいる点にあります。
多くのシステムでは、内部 API・管理ダッシュボード・データベース・キャッシュサーバなどが「社内(VPC 内)からのアクセスは信頼する」前提で、外部に公開していません。ファイアウォールが外部からの到達を防いでいるからです。ところが SSRF を使えば、攻撃者はファイアウォールの内側にいるサーバに代理リクエストさせることで、この防壁を回り込めます。
- 内部 API・管理画面:
http://localhost:8080/adminのような、外部非公開のエンドポイントへ到達。 - 内部ネットワークの探索:到達可否や応答時間の差から、内部に何が居るかをスキャンされる。
- 別プロトコルの悪用:実装によっては
file://(ローカルファイル読み取り)やgopher://(任意バイト送信)が通り、被害が拡大する。
SSRF が突くのは、ネットワーク境界に依存した「内側は信頼する」という設計そのものです。境界の内側に置いたから守られている、という暗黙の前提が、踏み台にされた瞬間に崩れます。内部サービスにも認証を必須にする(ゼロトラストの発想)ことが、SSRF への根本的な耐性になります。
クラウドメタデータという格好の標的
SSRF が特に深刻化したのは、クラウド環境の普及が背景にあります。多くのクラウドでは、インスタンス内から特定のリンクローカルアドレス(169.254.169.254)にアクセスすると、そのインスタンスの設定情報を返すメタデータサービスが動いています。
ここには、インスタンスに割り当てられた一時的な認証情報(アクセスキー)が含まれることがあります。SSRF でこのエンドポイントを叩かせれば、攻撃者はそのサーバの権限を丸ごと乗っ取れる——ストレージの読み書き、他リソースの操作などが可能になり、被害は単一アプリにとどまりません。
# 攻撃者がサーバに叩かせたい標的の例(クラウドメタデータ)
GET http://169.254.169.254/latest/meta-data/iam/security-credentials/
クラウド各社は、トークンを要求してから情報を返す改良版のメタデータアクセス方式(単純な GET 1回では取得できない仕組み)を提供しています。これを必須に切り替えるだけで、典型的な SSRF からの認証情報窃取を大きく防げます。あわせて、インスタンスに付与する権限を最小権限に絞れば、万一漏れても被害を限定できます。
対策:宛先を許可リストで縛る
SSRF 対策の難しさは、入口の機能(URL を取得する)自体は正当なことにあります。だから「使わせない」のではなく、「どこへ行かせてよいか」を厳しく制限するのが基本方針です。
| 対策 | 内容 | 補足 |
|---|---|---|
| 許可リスト(allowlist) | 接続を許す宛先だけを明示列挙 | 拒否リストより堅い。原則これを採用 |
| 内部アドレスの遮断 | プライベートIP・ループバック・リンクローカルを拒否 | 169.254.169.254 や 127.0.0.1、10.x 等 |
| スキーム制限 | http/https 以外を禁止 | file:// gopher:// 等を封じる |
| ネットワーク分離 | 取得処理を内部資源から隔離 | メタデータ経路自体を塞ぐ |
- 拒否リストより許可リスト:「危険な宛先を弾く」方式は抜け漏れます。
http://0177.0.0.1(8進)や DNS による偽装など、内部アドレスの書き方は無数にあるためです。許せる宛先だけを列挙するほうが堅牢です。 - リダイレクトに注意:許可した外部 URL が
302で内部アドレスへ転送し直す手口があります。リダイレクト先も毎回検証してください。 - 名前解決の落とし穴:ドメインが内部 IP に解決される場合に備え、最終的に接続する IP を検証します。検証時と接続時で解決結果が変わる攻撃(DNS リバインディング)にも注意が要ります。
URL 文字列のチェックだけでは、エンコードやリダイレクト、DNS 経由の偽装ですり抜けられます。文字列検証は層の一つに過ぎず、「最終的に接続する IP の検証」「メタデータ経路の遮断」「ネットワーク分離」を組み合わせる多層防御が前提です。単一の対策で塞ぎ切れる攻撃ではありません。
まとめ
SSRF は、URL を取得する正当な機能を悪用し、信頼されたサーバに任意の宛先へリクエストさせる攻撃です。最大の脅威は、サーバがネットワーク境界の内側にいるために、外部から届かない内部資源やクラウドメタデータへ到達される点にあります。OWASP Top 10(2021)にも独立項目として入る重要リスクです。
対策の核心は「宛先を許可リストで縛り、内部アドレスとファイル系スキームを遮断する」こと。あわせて、新方式のメタデータアクセス、最小権限、そして内部サービスにも認証を求めるゼロトラストの発想を組み合わせます。リスクの全体像はOWASP Top 10で位置づけを確認できます。
セキュリティ Article
SSRF(サーバサイドリクエストフォージェリ)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
SSRF
比較で見る軸
難易度: intermediate / カテゴリ: セキュリティ / タグ数: 4
導入後に効く点
怖いのは、サーバが内部ネットワークの一員である点。外部から直接届かない内部 API や管理画面、DB に到達されます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- セキュリティ
- タグ数
- 4
判断チェックリスト
- 自社の用途が「SSRF / セキュリティ」に近いか確認する。
- 強みである「SSRF は、URL を受け取って取得する機能を悪用し、サーバ自身に「攻撃者が指定した宛先」へリクエストを送らせる攻撃です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。