サーバーサイドリクエストフォージェリ(Server-Side Request Forgery、SSRF)とは、攻撃者がサーバーにリクエストを送信させることで、通常はアクセスできないサーバー内のリソースや外部システムに不正アクセスを試みる攻撃手法です。SSRFの攻撃対象は、サーバー側でリクエストを作成・送信するWebアプリケーションやAPIです。この脆弱性を悪用することで、攻撃者は内部システムへのアクセスや機密情報の窃取、外部への不正リクエスト送信を行うことができます。
SSRFは、クラウド環境やマイクロサービスアーキテクチャのシステムに特に大きな脅威となります。これらの環境では、サーバーが複数のサービスやネットワークと連携して動作するため、SSRF攻撃によって内部のAPIやデータベースなどに不正アクセスされるリスクが高まります。
サーバーサイドリクエストフォージェリの仕組み
SSRFは、主に以下のような手順で行われます。
- 外部からのリクエスト送信を誘導
攻撃者は、ユーザー入力やAPIリクエストパラメータなどを通じてサーバーに送信先URLを指定させ、サーバーがそのURLにリクエストを送信するよう仕向けます。 - サーバーから他のリソースにアクセスさせる
サーバーが、ユーザー入力をもとにリクエストを送信する場合、攻撃者はその入力を内部ネットワークのアドレス(例:http://localhost
やhttp://127.0.0.1
)や他のサーバー上のリソースに書き換え、サーバーから直接アクセスさせることが可能です。 - 内部リソースへのアクセスやデータ漏洩
これにより、通常はアクセスが制限されている内部リソース(データベースや管理API)へのリクエストを送信させたり、外部にリクエストを転送させたりすることで、機密情報を窃取したり、不正な操作を実行したりできます。
SSRFの代表的な攻撃例
1. 内部リソースへの不正アクセス
例えば、企業内システムで使用されているWebアプリケーションがSSRFの脆弱性を抱えている場合、攻撃者は以下のように攻撃します:
http://vulnerable.com/fetch?url=http://localhost/admin
上記のように、リクエスト先のURLをhttp://localhost/admin
に指定することで、攻撃者は管理者専用の内部APIや管理画面に不正アクセスできます。このとき、攻撃者は認証不要で内部システムにアクセスできる可能性があります。
2. クラウドメタデータサービスの悪用
AWSやGCPといったクラウドサービスでは、インスタンスのメタデータを提供するために「メタデータサービス」というエンドポイントが用意されています。SSRF攻撃でこのメタデータにアクセスできる場合、以下のようなリクエストを使って、機密情報を取得することが可能です:
http://vulnerable.com/fetch?url=http://169.254.169.254/latest/meta-data/
このリクエストが成功すると、AWSのアクセスキーやトークン情報が漏洩し、攻撃者がクラウド環境を不正に利用できるようになります。
3. 外部への不正リクエスト送信
SSRF攻撃では、サーバーをプロキシのように利用し、外部のWebサーバーやAPIへリクエストを送信させることもできます。例えば、http://attacker.com/evil
にリクエストを送信することで、サーバーに他のシステムを攻撃させたり、特定のWebサービスに対してDDoS攻撃を仕掛けたりすることが可能です。
SSRFのリスクと影響
SSRFが成功すると、以下のようなリスクや影響が発生します:
- 内部ネットワークの情報漏洩
攻撃者は、サーバーを介して内部ネットワークの情報にアクセスすることで、データベースや管理APIの情報を不正に取得できます。これにより、機密データやユーザー情報が流出するリスクが高まります。 - クラウド環境の侵害
クラウドインスタンスのメタデータサービスから機密情報(APIキーや認証トークンなど)を取得し、攻撃者がクラウドリソースを操作できる状態となります。これにより、クラウドサービスが悪用され、予期せぬコストの発生やシステムの停止リスクが生じます。 - 不正な操作の実行やリソース消費
攻撃者は、SSRFを利用してサーバーに不要なリクエストを送信させ、他のサーバーに不正な操作を実行したり、システムに負荷をかけてリソースを消費させたりすることが可能です。 - 外部攻撃の踏み台
サーバーが他のシステムへの攻撃の踏み台として利用されると、被害者側には攻撃元が実際の攻撃者ではなく、被害者のサーバーとして見えるため、システム管理者にとっては対応が困難になります。
サーバーサイドリクエストフォージェリに対する対策
SSRFの脅威を軽減するためには、以下のような対策が有効です。
- ユーザー入力のバリデーションとサニタイズ
ユーザーが入力するURLやパラメータは厳密にバリデーションし、不正なアクセス先やプロトコルを含むリクエストをブロックします。例えば、ローカルアドレスや内部ネットワークへのアクセスを拒否するフィルタを設けます。 - 外部リクエストの制限
サーバーから外部リクエストを送信する必要がない場合は、ファイアウォールやネットワークセキュリティグループで外部接続を制限し、サーバーからの外部リクエストを必要最小限に抑えます。 - クラウドメタデータへのアクセス制御
クラウドサービスでは、メタデータサービスへのアクセスを制限することで、メタデータ情報の漏洩リスクを抑えることができます。例えば、IAM(Identity and Access Management)でメタデータにアクセスできる役割や権限を制限します。 - WAF(Webアプリケーションファイアウォール)の導入
WAFを導入し、SSRFのパターンに合致するリクエストを検知・ブロックすることで、悪意あるリクエストがサーバーに到達する前に対処することが可能です。 - ネットワークセグメントの分離
内部ネットワークや管理APIなど重要なリソースを別セグメントに分離し、アクセス制御を強化することで、SSRFによる不正アクセスを防ぎます。 - ロギングと監視
サーバーのリクエストログを定期的に監視し、異常なリクエストパターンや内部システムへの不正アクセスを検知できるようにします。ログの分析を行うことで、SSRF攻撃の兆候を早期に発見できます。
まとめ
サーバーサイドリクエストフォージェリ(SSRF)は、サーバーを利用して内部ネットワークやクラウドリソースに不正アクセスを試みる攻撃手法であり、特にクラウド環境やマイクロサービス環境において大きなリスクをもたらします。SSRF攻撃に対する対策としては、ユーザー入力のバリデーション、外部リクエストの制限、クラウドメタデータへのアクセス制御、WAFの導入などが有効です。これらの対策を講じることで、SSRFのリスクを最小限に抑え、セキュリティを強化することが可能です。