SSRF攻撃とは?
SSRF(Server-Side Request Forgery) とは、攻撃者が外部から操作可能なサーバーを悪用して、内部ネットワークのリソースや外部サービスに対して意図しないリクエストを送信させる攻撃手法です。
SSRFにおける「フォージェリ(forgery)」の意味
「forgery(偽装)」とは、何かを本物のように見せかけて騙す行為を意味します。
SSRFでは、攻撃者が自ら直接アクセスするのではなく、サーバーに“偽装されたリクエスト”を送らせることで、内部ネットワークなどの本来アクセスできないリソースに間接的にアクセスします。
このように、サーバーを“代理”として使い、信頼されたリソースへのアクセスを偽装することから「Server-Side Request Forgery」と呼びます。
OWASP Top 10における位置づけ
SSRFは、OWASPが公開しているWebアプリケーション脆弱性の代表リスト「OWASP Top 10 2021」において、新たに追加されたカテゴリです。
- A10:2021 - Server-Side Request Forgery (SSRF)
- クラウドやマイクロサービス環境の拡大により、外部URLにアクセスする機能を持つアプリケーションが増加
- 攻撃者はこれを悪用し、内部ネットワークやクラウドメタデータへのアクセスを試みることが可能
そのため、SSRFは現代のWebアプリケーションにおいて非常に重要な脅威の一つとされています。
SSRF攻撃の具体例
SSRFは、以下のような機能を持つWebサービスにおいて特に発生しやすいです。
1. URLプレビュー機能(OGP取得)
- 対象サービス例: Slack、Facebook、LINEなどのチャットやSNS
- 概要: ユーザーが投稿したURLをサーバーが取得し、タイトル・サムネイル画像・説明文などのOGP情報を表示
-
リスク: 攻撃者が
http://localhost/admin
やhttp://169.254.169.254/latest/meta-data/
などを指定することで、内部サービスへのアクセスが発生
2. 画像URLを指定してアップロードする機能
- 対象サービス例: CMS、ブログ、プロフィール作成系Webサービス
- 概要: ユーザーが画像のURLを入力すると、サーバーがそのURLから画像をダウンロードして保存
- リスク: 一見画像のように見せかけたURLで、内部IPやクラウドメタデータなどにアクセスさせる
3. PDFやスクリーンショット生成サービス
- 対象サービス例: WebページをPDFや画像化して提供するサービス(例:アーカイブ系、契約書出力機能など)
- 概要: 入力されたURLに対してサーバーがヘッドレスブラウザ等を用いてアクセスし、画面キャプチャやPDFを生成
- リスク: 内部ページや非公開エンドポイントをキャプチャされてしまう可能性がある
SSRF攻撃による被害
- 内部ネットワーク情報の漏洩
- 内部サービスへの不正アクセス
- クラウドサービスのメタデータへのアクセス(例: AWSメタデータサービス)
SSRF攻撃の具体的な対策
以下の具体的な対策を検討し、実施することが重要です。
1. 入力の厳密なバリデーション
- ユーザー入力からURLを取得する際に、許可されたドメインやスキーマ(http、https)を明示的に制限する。
- URLのスキーマや形式を正規表現で厳密にチェックする。
2. 入力値のサニタイズ
- 取得したURLをサニタイズし、不正な文字や不必要なクエリ文字列を削除する。
- 特殊な文字やエスケープ文字の処理を適切に行うことで攻撃に使われるパターンを防ぐ。
3. リクエスト先の制限
- リクエスト先のIPアドレスやホスト名が内部ネットワーク、ローカルホスト、特定のクラウドメタデータサービス(例: AWS EC2のメタデータURL 169.254.169.254)を指さないようチェックを実施する。
- DNS解決後のIPアドレスによるチェックを追加する。
4. ファイアウォールやネットワークACLの利用
- サーバーからの外部への通信を明示的に許可された先に限定し、不必要なアクセスを遮断する。
- 内部リソースへのアクセスを明示的に遮断するようなネットワーク構成を検討する。
SSRF攻撃は一度侵入を許してしまうと内部被害が甚大になります。
非常にクリティカルな攻撃のためもしリクエストでURLを受け取ってアクセスをするようなら必ず確認するようにしましょう。
追記
この記事はAIで添削しています。