1. 脆弱性の説明#
SSRF (Server-Side Request Forgery, サーバーサイドリクエストフォージェリ) は、攻撃者がリクエストを作成し、サーバーがリクエストを送信するセキュリティ上の脆弱性です。通常、SSRF 攻撃の対象は外部からアクセスできない内部システムです(サーバーがリクエストを送信するため、サーバーは自身と接続され、外部から隔離された内部システムにリクエストを送信できます)。
2. 脆弱性の原理#
SSRF 脆弱性の主な原因は次のとおりです:
サーバーが他のサーバーアプリケーションからデータを取得する機能を提供し、対象のアドレスにフィルタリングや制限処理が行われていない
例:攻撃者がサーバーを操作して、指定された URL アドレスからウェブサイトのコンテンツを取得します。
3. 悪用方法#
- インターネット内またはローカルネットワークでポートスキャンを実行し、ポートサービスのバナー情報を取得する
- インターネット内またはローカルネットワークで実行されているアプリケーションを攻撃する
- インターネット内のウェブアプリケーションを指紋スキャンし、企業内の資産情報を取得する
- file プロトコルを使用して機密ファイルを読み取る
4. SSRF でサポートされているプロトコル#
1. http プロトコル#
内部ネットワークのポートスキャンを行うために HTTP プロトコルを使用し、応答の時間と長さからポートが開いているかどうかを判断します
https://ip/ssrf.php?url=http://127.0.0.1:3389
2. file プロトコル#
file プロトコルを使用してファイル情報を読み取ります
https://ip/ssrf.php?url=file:///etc/passwd
3. dict プロトコル#
dict プロトコルを使用してサービス情報を探索します
https://ip/ssrf.php?url=dict://127.0.0.1:3306
4. gopher プロトコル#
gopher プロトコルを使用してポートを探索し、GET リクエストを送信して redis サービスを攻撃します
https://ip/ssrf.php?url=gopher://127.0.0.1:3306
5. 脆弱性の防御#
- リダイレクトの禁止
- 応答情報のフィルタリング
- 不要なプロトコルの禁止
- URL ホワイトリストの設定
- エラーメッセージの統一