はじめに
Web セキュリティにおいて SSRF(Server-Side Request Forgery)は、
「ある/ない」では語れない脆弱性です。
同じ SSRF でも、
- ほぼ影響のないもの
- 内部ネットワークを完全に突破できるもの
では 危険度が桁違い です。
本記事では、SSRF を 実務で判断できる 5 つのレベル に分解し、
- 各レベルの具体例
- 攻撃視点での意味
- 防御(Blue Team)視点での必須対策
を 1 本のモデルとして整理します。
結論:SSRF は「段階的に能力が解放される」
Level 0 → Level 1 → Level 2 → Level 3 → Level 4
SSRF はスイッチではなく、能力ツリーです。
上位レベルに行くほど、被害は指数関数的に拡大します。
SSRF 5 レベル全体像(Mermaid 攻撃パス)
Level 0:パラメータ可制御(疑似 SSRF)
定義
URL パラメータは操作できるが、
サーバが実際にリクエストしている証拠がない。
例
/preview.php?url=https://example.com
- 表示は変わる
- しかし以下は不明:
- サーバ通信か?
- フロントエンド fetch か?
- キャッシュか?
評価
- 重大度:Info / Low
- SSRF 未確定
Level 1:外部 SSRF(確認済み)
定義
攻撃者が管理するドメインに、サーバからの通信を確認できる。
例
/preview.php?url=http://xxx.burpcollaborator.net
ログで以下を確認:
- DNS lookup
- HTTP GET
- Source IP / User-Agent
できること
- SSRF の存在証明
- Blind SSRF
- ネットワーク出口の把握
評価
- 重大度:Medium
- 攻撃チェーンの起点
Level 2:内部 SSRF(境界突破)
定義
サーバが 内部アドレス / localhost にアクセス可能。
例
/preview.php?url=http://127.0.0.1:8080
/preview.php?url=http://169.254.169.254/latest/meta-data/
リスク
- 内部管理画面
- クラウドメタデータ(IAM 認証情報)
- 内部 API
評価
- 重大度:High
- 防御境界の崩壊
Level 3:プロトコル SSRF(非 HTTP)
定義
gopher:// などを利用し、
内部 TCP サービスに任意バイト列を送信可能。
例
/preview.php?url=gopher://127.0.0.1:6379/_PING%0D%0A
特徴
- HTTP の枠を超える
- Redis / FastCGI / SMTP 等に直接命令
- SSRF が「通信代理」になる
評価
- 重大度:Critical
- Red Team レベル
Level 4:状態変更・実行(SSRF → RCE)
定義
SSRF により 不可逆な状態変更 が可能。
典型チェーン
- SSRF → Redis → cron 書き込み → RCE
- SSRF → Cloud Metadata → IAM Token → クラウド制御
- SSRF → 内部管理 API → 管理者作成
評価
- 重大度:Critical+
- 完全侵害
実例:gopher 転送スクリプトはどこに位置するか?
以前示した以下のようなスクリプトは:
- ローカルで HTTP を受信
- リクエストを gopher payload に変換
- SSRF を通じて内部 TCP サービスへ送信
👉 Level 3(プロトコル SSRF)を「対話可能な通路」に昇格させるツール
前提条件:
- Level 1(外部 SSRF 確認済み)
- Level 2(内部到達可能)
-
gopher://許可
Level 4 に到達するかは
内部サービス側の設計次第。
Blue Team 視点:各レベルの必須対策(要点)
| レベル | 必須対策 |
|---|---|
| L0 | URL 機能の設計制限(白リスト前提) |
| L1 | scheme 白リスト(http/https のみ)+リダイレクト制御 |
| L2 | 出口通信制御 + 私有 IP / localhost の完全遮断 |
| L3 | gopher/file 等のプロトコル完全無効化 |
| L4 | Fetch サービスの完全分離(無権限・無内部アクセス) |
重要な判断基準(覚えておくべき)
「SSRF があるか」ではなく
「最大でどのレベルまで到達できるか」を問う
同じ SSRF でも、
- Level 1 と Level 4 では
被害規模が 100 倍以上違う
まとめ
- SSRF は段階的に危険度が上がる
- 真に危険なのは Level 2 以降
-
gopher://が許されている時点で 設計ミス - 防御は「入力検証」ではなく ネットワークと権限設計