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