SSRF(Server-Side Request Forgery)は、サーバーサイドリクエストフォージェリと呼ばれ、攻撃者がサーバーに悪意のあるリクエストを送信させ、内部ネットワークのサービスや他のサーバーにアクセスさせる攻撃手法です。SSRFは、通常は外部からアクセスできないサーバーの内部リソースや、データベースやAPIなどのインターナルサービスにアクセスするために悪用され、企業の内部情報が漏洩するリスクがあります。
SSRFは、クラウド環境やマイクロサービス、REST APIといったリモート通信を行うアーキテクチャにおいて、特に脆弱性が発生しやすいとされています。この攻撃は、通常、リクエストURLや送信先アドレスをユーザーが指定できるアプリケーションで見られます。
SSRFの仕組みと攻撃の流れ
SSRF攻撃は、以下の流れで行われます:
- リクエストパラメータの改ざん
攻撃者は、対象となるアプリケーションの入力パラメータに悪意のあるURLやIPアドレスを指定します。 - サーバーによるリクエストの代理送信
アプリケーションサーバーがそのURLに対してリクエストを代理で送信し、攻撃者が意図したリソースにアクセスします。ここで、攻撃者は内部ネットワークや外部の他のサーバーに接続させることが可能になります。 - レスポンスの取得と利用
サーバーがリクエスト先から得たレスポンスを攻撃者が利用します。これにより、機密情報の漏洩、内部ネットワークの偵察やサービスの悪用が発生する可能性があります。
SSRFの利用例
- 内部サービスのスキャンとデータ取得
攻撃者は、SSRFを使ってアクセス制限のある内部サーバーにアクセスし、データベースの機密情報を取得します。 - クラウドメタデータの取得
AWSやGCPのクラウド環境では、メタデータサービスを利用してインスタンス情報を取得できますが、SSRFによってこのメタデータにアクセスされ、認証情報が漏洩するリスクがあります。 - 外部サービスへの攻撃
攻撃者がSSRFを使って、他のサービスに対してDDoS攻撃の一部として利用する場合があります。
SSRFの種類
- 基本的なSSRF
サーバーが内部ネットワークや外部のサーバーにリクエストを送信することを利用し、レスポンスを通じて機密情報を取得する攻撃です。 - Blind SSRF(ブラインドSSRF)
サーバーがリクエストのレスポンスを攻撃者に返さない場合でも、内部サービスに対してリクエストを行い、レスポンスからアクセスの成否や特定情報の漏洩を推測する攻撃です。たとえば、エラーメッセージやタイムアウトの挙動から内部構成を推測します。
SSRFの対策
- 外部アクセスの制限
アプリケーションが必要以上に外部リクエストを送信できないようにし、特定のホワイトリストでアクセスを許可するURLやIPアドレスを制限します。 - ユーザー入力のサニタイズ
リクエストURLをユーザーが入力できる場合、URLをサニタイズし、IPアドレスやポート番号の不正なリクエストを拒否します。 - 内部ネットワークのアクセス制限
内部のサービスやAPIには、内部ネットワークのIPアドレスからのアクセス制限を設け、必要最小限のアクセスに限定します。さらに、ファイアウォールで不要な通信を遮断することも重要です。 - Web Application Firewall(WAF)の活用
WAFを導入し、SSRF攻撃の特徴的なリクエストパターンを検出してブロックします。 - クラウド環境のメタデータサービスへのアクセス制限
クラウド環境では、メタデータサービスへのアクセス制限を設けて、SSRFによる機密情報取得を防ぎます。 - ネットワーク分離とフィルタリング
特に内部ネットワークや管理用ネットワークに直接アクセスすることがないように、ネットワーク分離とフィルタリングを行います。これにより、サーバーがリクエストを送信できる範囲が限定されます。
SSRFの検出方法
- ログの監視と分析
予期しない外部や内部へのアクセスリクエストが発生していないか、ログを監視します。不審なアクセス先があれば、攻撃の兆候と判断できます。 - セキュリティテストの実施
SSRF脆弱性がないか確認するため、セキュリティテストを実施します。ペネトレーションテストや動的アプリケーションセキュリティテスト(DAST)ツールを活用することで、リクエスト先の改ざんに対する耐性がチェックできます。 - コードレビュー
特にリクエストURLや送信先の情報をユーザーから取得している部分があれば、コードレビューを通じて脆弱性がないか確認します。デフォルトのセキュリティ設定や外部依存ライブラリの確認も重要です。
まとめ
SSRF(Server-Side Request Forgery)は、サーバーに悪意あるリクエストを送信させ、内部リソースや他のサーバーにアクセスさせる攻撃手法であり、特にクラウド環境やマイクロサービス構成のアプリケーションに対してリスクが高まっています。適切なアクセス制限、リクエストのサニタイズ、ファイアウォールの設定などの対策を講じることで、SSRF脆弱性による情報漏洩や不正アクセスを防止できます。また、定期的なセキュリティテストやログ監視によって早期の検出と対処が可能です。