
近年、企業のITインフラをクラウドへ移行する動きが加速しています。AWS、GCP、Azureといったクラウドサービスは非常に便利ですが、同時に新たなセキュリティリスクも生み出しています。その一つが「クラウドメタデータ攻撃」です。
この記事では、この攻撃の仕組みと、特にNginxを使っている場合にどのように対策すべきかを分かりやすく解説します。
そもそも「クラウドメタデータ」って何?
クラウド環境でサーバー(インスタンス)を動かしていると、「メタデータ」というものが存在します。これは、そのサーバー自身の「身分証明書」のような情報です。
具体的には、以下のような情報が含まれます。
- インスタンスID: そのサーバー固有の識別番号
- ロール・認証情報: そのサーバーが他のクラウドサービスにアクセスするための権限や秘密鍵など
- ネットワーク情報: サーバーのIPアドレスなど
- 起動スクリプト: サーバーが起動時に実行するコマンド
これらの情報は、サーバーが自分自身を識別したり、他のクラウドサービスと安全に連携したりするために非常に重要です。そして、これらのメタデータには通常、**169.254.169.254
**という特別なIPアドレスを介して、サーバー内部からのみアクセスできるようになっています。
169.254.169.254ってどんなIP?
この169.254.169.254
というIPアドレスは、「リンクローカルアドレス」と呼ばれる特殊な範囲のIPアドレスです。これは、インターネットのような外部ネットワークからはアクセスできない、サーバー自身の内部ネットワークでのみ有効なIPアドレスです。
つまり、通常は外部からこのIPアドレスにアクセスすることはできず、サーバー内部のアプリケーションだけが、自分自身の情報を安全に取得するために使います。
クラウドメタデータ攻撃の仕組み
「クラウドメタデータ攻撃」は、この本来アクセスできないはずのメタデータに、不適切な設定を悪用してアクセスしようとする攻撃です。
攻撃者が狙うのは、ウェブサーバーとしてよく使われる「Nginx(エンジンエックス)」の設定ミスです。
curl -H "X-aws-ec2-metadata-token: $(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")" http://169.254.169.254/latest/meta-data/
攻撃の手順
- Nginxの誤設定: ウェブサーバーのNginxが、特定のルールなしに外部からのリクエストを内部のIPアドレスに転送してしまうような、不適切な設定になっているのが攻撃の前提です。
- 特別なリクエストの送信: 攻撃者は、ウェブブラウザなどから、悪意のあるHTTPリクエストをNginxサーバーに送ります。このとき、リクエストの「Hostヘッダー」という部分に、先ほどのメタデータ用IPアドレスである
169.254.169.254
を意図的に含めます。 - Nginxの転送: 誤設定されたNginxは、この
Host
ヘッダーに169.254.169.254
が含まれているリクエストを、本来ルーティング不可能なはずの内部メタデータサービスへ転送してしまいます。 - メタデータの取得: 結果として、外部の攻撃者が、サーバーの機密性の高いメタデータ(認証情報など)を不正に取得できてしまうのです。
この攻撃が成功すると、攻撃者はサーバーになりすまして他のクラウドサービスへアクセスしたり、機密情報を盗み取ったりするなど、さらに深刻な被害につながる可能性があります。
3. Nginxでクラウドメタデータ攻撃を防ぐ方法
この攻撃を防ぐための最も効果的で直接的な方法は、Nginxの設定を正しく行うことです。
Nginxの設定ファイル(通常は/etc/nginx/nginx.conf
や/etc/nginx/conf.d/
内のサイト設定ファイル)に、以下のルールを追加しましょう。
server {
listen 80;
listen 443 ssl; # HTTPSを使用している場合
server_name your-domain.com; # 実際のドメイン名に置き換えてください
location / {
# HostヘッダーがメタデータIPアドレス(169.254.169.254)の場合、
# アクセスを拒否し、403 Forbiddenエラーを返す
if ($http_host = "169.254.169.254") {
return 403;
}
}
# その他のNginx設定
# ...
}
設定のポイント
if ($http_host = "169.254.169.254")
: これが核心的な部分です。受信したリクエストのHost
ヘッダーが169.254.169.254
であるかをチェックします。return 403;
: もし一致した場合、そのリクエストをサーバーの内部処理に進ませず、すぐに「403 Forbidden(アクセス禁止)」のエラーを返します。これにより、攻撃者がメタデータにアクセスするのを防ぎます。
この設定を追加したら、必ずNginxの設定をテストし、再読み込み(または再起動)するのを忘れないでください。
sudo nginx -t # 設定ファイルの文法チェック
sudo systemctl reload nginx # Nginxの設定を再読み込み
まとめ
クラウドメタデータ攻撃は、クラウド環境を利用する上で注意すべきサイバー脅威の一つです。しかし、適切なNginxの設定を行うことで、このリスクを効果的に軽減できます。
あなたのウェブサーバーが安全に稼働しているか、今一度Nginxの設定を見直してみてはいかがでしょうか?