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 ホワイトリストを設定する
- エラーメッセージを統一する