Ethical Hacking Academy · レッスン

メタデータとSSRF

クラウド固有の攻撃

レッスン 4/413 ステップ

「メタデータと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-role

SSRF とは

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. クラウドの攻撃対象領域
  2. IAMの設定ミス
  3. S3とストレージの露出
  4. メタデータとSSRF
← Ethical Hacking Academyに戻る