SSRF(サーバーサイドリクエストフォージェリ)脆弱性の概要 1. 脆弱性の概要 SSRF(Server-side Request Forgery)は、攻撃者がサーバー側アプリケーションに対して意図しない宛先へのリクエスト发起をさせられるWebセキュリティの脆弱性です。典型的なSSRF攻撃では、攻撃者はサーバーを組織内のインフラストラクチャや任意のサードパーティシステムに接続させ、認証情報などの機密データを漏洩させる可能性があります。 2. 影響範囲 成功したSSRF攻撃は、通常以下の結果を招きます: 認可されていない操作またはデータアクセス:組織内部、またはアプリケーションが通信可能な他のバックエンドシステム内のデータへのアクセス。 任意のコマンド実行:特定のケースでは、SSRF脆弱性により攻撃者が任意のコマンドを実行できる場合があります。 悪意ある後の攻撃:脆弱なアプリケーションをホストしている組織を起源とする、悪意ある後続攻撃を引き起こす可能性があります。 3. 一般的な攻撃手法 3.1 サーバーに対する攻撃 (SSRF attacks against the server) 攻撃者は、アプリケーションがループバックネットワークインターフェース経由で、アプリケーションをホストしているサーバー自体に対してHTTPリクエストを发起させます。これには通常、ループバックアダプタ( )または を指すURLを提供することが含まれます。 通常のリクエスト例: 攻撃用リクエスト例(URLをローカルアドレスに修正): 原理: サーバーはリクエストが信頼されたローカルソースから来ていると見なすため、通常のアクセス制御を回避し、管理機能(例: )へのアクセスを許可してしまいます。 3.2 その他のバックエンドシステムに対する攻撃 (SSRF attacks against other back-end systems) アプリケーションは、通常ルーティング可能なプライベートIPアドレスを持ち、セキュリティが比較的弱いバックエンドシステムと相互作用する場合があります。 攻撃用リクエスト例: 原理: 攻撃者はSSRF脆弱性を利用し、これらのシステム(例: )へのバックエンド管理インターフェースにアクセスします。これらのシステムは、認証機能を持たないか、認証が緩いのが一般的です。 4. 一般的なSSRF防御策の回避 4.1 入力フィルター(ブラックリストベース)の回避 (SSRF with blacklist-based input filters) 一部のアプリケーションは、特定のホスト名(例: , )や機密性の高いURL(例: )を含む入力をブロックします。 回避技術: 代替IP表記の使用:例: , , または 。 DNSリバインディング:標的のIPアドレスに解決されるドメイン(例: )を登録する。 URLエンコードまたは大文字小文字のバリエーション:ブロックされた文字列をごまかす。 リダイレクト:標的URLにリダイレクトする、攻撃者が支配するURLを提供する(例: から へリダイレクト)。 4.2 入力フィルター(ホワイトリストベース)の回避 (SSRF with whitelist-based input filters) 一部のアプリケーションは、ホワイトリストに一致する値のみを許可します。 回避技術: 資格情報の埋め込み:URLのホスト名の前に 文字を使用する。例: 。 URLフラグメント: 文字を使用してURLフラグメントを示す。例: 。 DNSネーム空間の利用:DNSの階層構造を利用して、必要な入力を配置する。例: 。 URLエンコードによるごまかし:URLエンコード文字を使用してURL解析コードをごまかし、または二重エンコードを試す。 4.3 オープンリダイレクトを通じた回避 (Bypassing SSRF filters via open redirection) アプリケーションにオープンリダイレクトの脆弱性がある場合、フィルターベースの防御を回避するためにこれを利用できます。 通常のリクエスト例: リダイレクト先: 攻撃用リクエスト例: 原理: アプリケーションはまず URL が許可されたドメイン内にあることを検証し、その後そのURLをリクエストします。このリクエストはリダイレクトを引き起こし、最終的に攻撃者が選択した内部URLへのリクエストが発生します。 5. その他の重要情報 ブラインドSSRF (Blind SSRF vulnerabilities):アプリケーションがバックエンドのHTTPリクエストを発行するが、そのレスポンスがアプリケーションのフロントエンドレスポンスとして返されない場合に発生します。ブラインドSSRFは利用が難しいですが、サーバーやその他のバックエンドコンポーネントにおいて完全なリモートコード実行に至る可能性があります。 隠れた攻撃面の調査: リクエスト内の部分URL:アプリケーションはホスト名またはURLパスの一部のみをパラメータとして受け付ける場合がありますが、サーバー側ではそれらを結合して完全なURLを作成します。 データ形式内のURL**:JSONやXMLに含まれるURLなど。