UnsplashのKaur Kristjanが撮影した写真
SSRF(Server-Side Request Forgery)は、Webアプリケーションが持つ「サーバー側から外部へ通信する機能」を悪用し、攻撃者の意図する宛先へリクエストを送らせる脆弱性です。内部ネットワークへの到達、クラウドのメタデータ情報の取得、社内向け管理画面の不正操作、外部サービスへの攻撃の踏み台など、影響は広範囲に及びます。この記事では、SSRFの仕組み・典型パターン・被害シナリオ・診断観点・実務的な対策を整理し、「どこが危ないのか」「どう塞ぐのか」を判断できる状態を目指します。
SSRFは、Server-Side Request Forgery(サーバーサイドリクエストフォージェリ)の略称で、攻撃者が細工した入力を通じて、サーバーに“本来想定していない宛先”へリクエストを送らせる攻撃(または脆弱性)を指します。ポイントは「被害がサーバー側で発生する」ことです。クライアント(ブラウザ)では到達できない内部宛て通信を、サーバーが代わりに実行してしまうことで問題が起こります。
Webアプリケーションには、外部URLの取得、画像のプロキシ、Webhookの送信、SSOやAPI連携など、サーバー側からHTTPリクエストを送る機能が数多く存在します。SSRFは、この“送信先”や“送信条件”をユーザー入力でコントロールできてしまう状態から発生します。
SSRFの特徴は、次の3点に集約できます。
SSRFは「URLを入力できる機能」だけの話ではありません。実務では、次のような機能が入口になりやすいです。
「ユーザー入力が宛先(ホスト/ポート/プロトコル)に影響するか」という観点で棚卸しすると、見落としが減ります。
SSRFは、概ね次の流れで成立します。
根本原因は、「送信先を信頼できない入力で組み立てている」ことです。加えて、DNS解決、リダイレクト追従、IP表記の揺らぎ(10進/16進/8進、短縮表記など)を適切に扱えないと、対策しているつもりでもすり抜けられることがあります。
SSRFの影響は「到達できる宛先」と「その宛先が何を許すか」で決まります。代表的な被害は次のとおりです。
なお「SSRF=必ず情報が抜かれる」ではありません。しかし、内部到達が成立すると、二次被害(認証回避、権限拡大、秘密情報の取得)に連鎖しやすいため、入口段階で止めることが重要です。
クリプトジャッキングは、攻撃者が不正に計算資源を使って暗号資産のマイニング等を行う行為です。SSRFそのものが直接マイニングを実行するわけではありませんが、SSRFがあると「内部管理用のエンドポイントに到達してジョブを起動する」「クラウド権限情報の取得を足がかりに別の侵害へ進む」など、侵害の入口として利用される可能性があります。
つまり、SSRFを放置すると、単発の情報漏えいだけでなく、侵害後の不正利用(計算資源の悪用を含む)に発展する余地が生まれます。SSRFは“入口の穴”として評価し、早期に塞ぐべき脆弱性です。
SSRFは「Webアプリにありがちな便利機能」から生まれやすく、しかもネットワーク境界(内部/外部)をまたぐため影響が大きくなりがちです。ここでは、発生要因と実装パターン、診断の観点を具体化します。
SSRFが発生しやすい要因は、次のように整理できます。
「アプリの入力検証」だけでなく「ネットワークの出口制御」まで含めて設計することが、SSRF対策では特に重要になります。
SSRFを招きやすい実装パターンには、次のようなものがあります。
「URLを取得する機能」は分かりやすい入口ですが、Webhookや外部連携のように“設定画面で一度登録される”タイプも危険です。運用上は、登録後に悪用されるため気づきにくい点に注意が必要です。
SSRF診断は、入力点の特定と「どこへ到達できるか」の確認が中心になります。代表的な観点を表にまとめます。
| 診断観点 | 確認内容 |
|---|---|
| 入力点の洗い出し | URL/ホスト/エンドポイントを指定できる箇所、外部連携、画像プロキシ、Webhookなどを網羅する |
| 宛先制御の可否 | 内部IP、ローカル、リンクローカル、管理系ドメイン等へ到達できないかを確認する |
| リダイレクト・DNSの挙動 | リダイレクト追従で宛先が変わらないか、DNS解決後にIP判定しているかを確認する |
| 情報の返り方 | レスポンス本文が画面/ログ/エラーに出ていないか、時間差で推測できないかを確認する |
| ネットワーク出口制御 | サーバーからの外向き通信が無制限になっていないか、到達可能範囲を確認する |
実務では、レスポンス本文が見えなくても「応答時間」や「ステータス差」「エラーメッセージの違い」から内部到達を推測されることがあります。表示の有無だけで安全と判断しないことが大切です。
見つけるためのコツは、「サーバーが外へ出る理由」をアプリ内で探すことです。
「URL入力欄」だけを見て終わらず、連携・取り込み・通知の機能全体を対象にすることで、SSRFの見落としは大きく減ります。
SSRF対策は、アプリケーション側の入力検証だけで完結しません。サーバーのネットワーク権限が強いほど被害が大きくなるため、「アプリ」「実行環境(ネットワーク/権限)」「運用(監視/検査)」の多層で考えるのが現実的です。
アプリケーション設計としては、次の原則が効果的です。
ブラックリストは回避されやすいため、「許可できるものを限定する」方が堅牢です。特にWebhookなどは、許可ドメイン・証明書・署名検証など、用途に応じた制約を設計段階で入れておくと安全性が上がります。
SSRFは“サーバーが送る通信”なので、インフラ側の制御が有効です。代表的には次の対策があります。
アプリが万一すり抜けても、ネットワークで止めるという発想が、SSRFでは特に効きます。
SSRFは実装変更や連携追加で混入しやすいため、検査を継続運用に組み込むことが重要です。主に次のアプローチが取られます。
| アプローチ | 説明 |
|---|---|
| 静的解析(SAST) | URL取得やHTTPクライアント呼び出し箇所を検出し、ユーザー入力との結合や検証不足を早期に見つける |
| 動的検査(DAST) | 実際に動く環境へ入力を与え、到達挙動やエラー差分からSSRFの兆候を探す |
| 設計レビュー/チェックリスト | Webhook・外部取得・プロキシなど“SSRFが入りやすい機能”追加時に、許可リストや出口制御を必須確認にする |
| 監視とアラート | 外向き通信の急増、未知ドメインへの接続、内部宛て到達の兆候をログで検知し、初動を早める |
SSRF対策は単発対応で終わりにせず、追加機能や連携のたびに“同じ穴”が開かないよう、開発プロセスに埋め込むのが現実的です。
SSRFは、サーバー側通信機能を悪用し、攻撃者の意図した宛先へリクエストを送らせる脆弱性です。内部ネットワーク到達やクラウド環境での情報取得、踏み台化など、影響はサーバーのネットワーク権限に比例して大きくなります。対策の要点は、送信先の許可リスト化、DNS解決後のIP判定、リダイレクト制御、返却情報の最小化に加え、出口制御やネットワーク分離などインフラ側の多層防御を組み合わせることです。SSRFは“便利機能”に紛れて混入しやすいため、検査とレビューを継続運用に組み込み、設計段階から塞ぐことが求められます。
外部URL取得、画像プロキシ、Webhook送信、外部連携のエンドポイント指定など、サーバーが外へ通信する機能で発生しやすいです。
サーバー側から通信が行われるため、ブラウザでは到達できない内部宛てや管理系宛てにアクセスされ得る点が大きな違いです。
安全ではありません。DNS解決後のIP判定やリダイレクト追従の制御など、実到達先を基準にした検証が必要です。
十分ではありません。IP表記の揺らぎやDNS、リダイレクトで回避され得るため、許可リスト方式と多層防御が有効です。
関係があります。最初は安全なURLでも、追従後に内部宛てへ遷移するとSSRFが成立するため、追従制限や最終到達先の再検証が必要です。
問題になります。応答時間やエラー差分で内部到達を推測されたり、踏み台として悪用されたりする可能性があるためです。
送信先を信頼できない入力で決めないことと、必要な宛先だけに限定する許可リスト方式を採ることです。
あります。出口制御で到達先を絞り、ネットワーク分離で管理系への到達を遮断することで、アプリの取りこぼしを補えます。
許可ドメインを限定し、リダイレクトを抑止し、DNS解決後のIP判定も行ったうえで、必要最小限の宛先だけを許可する設計が有効です。
外部連携や取り込み機能が増え、サーバー側通信の機会が多くなったことで、入力検証が不十分だとSSRFが混入しやすいためです。