0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProwlerCheckがIMDSv2の設定を見逃していた? 「未設定」と「無効化」の判定ミスかもしれない話

0
Posted at

みなさん、こんにちは!
今回はAWSのセキュリティ診断ツール4製品(ProwlerCheck、Steampipe、AWS Service Screener V2、AWS Security Hub)を比較検証している中で見つかった、ちょっと気になる判定結果の食い違いについてお届けします。
あるEC2起動テンプレートのIMDSv2必須化チェックで、ProwlerCheckだけが「問題なし」と判定していた事例です。

はじめに(結論)

結論から言うと、あるEC2起動テンプレートに対して、SecurityHubとSteampipeは「要対応(FAIL)」と正しく判定していたのに対し、ProwlerCheckだけが「問題なし(PASS)」と判定していました。

原因を調べたところ、ProwlerCheckが「設定が何も指定されていない状態」を「わざと無効化されている状態」と取り違えて判定していた可能性が高いことが分かりました。ただしこれはあくまで「可能性が高い」という段階の話であり、断定はできていません。

なおProwlerCheckは、今回の検証全体では無料でカバー範囲が広いなど高く評価しているツールです。
今回はその中で見つかった1つのチェックロジックに関する注意点、という位置づけの話としてご覧ください。

IMDSv2とは

一言でいうと、IMDSv2はEC2インスタンスがAWSの内部情報(認証情報など)を安全に取得するための仕組みの新しいバージョンです。

EC2インスタンスは「メタデータサービス」と呼ばれる仕組みを使って、自分自身に関する情報や、一時的な認証情報を取得できます。旧バージョンのIMDSv1には、SSRF(サーバー側リクエスト偽造。外部から仕込んだリクエストを使って、本来アクセスできないはずの内部情報を盗み出す攻撃手法)によって悪用される脆弱性が知られており、AWSはIMDSv2への切り替えを推奨しています。

そのため多くのセキュリティ診断ツールには、EC2起動テンプレートやEC2インスタンスが「IMDSv2を必須にしているか」をチェックする項目が用意されています。

事象: 3製品で判定が割れた

一言でいうと、同じEC2起動テンプレート・同じチェック内容にもかかわらず、ProwlerCheckだけが他の2製品と違う判定結果を出していました。

4製品の検出結果を突き合わせる過程で、あるEC2起動テンプレートについて、ProwlerCheckのIMDSv2必須化チェック(CHECKID: ec2_launch_template_imdsv2_required)が一貫してPASS(問題なし)と判定していることが見つかりました。

一方、同じ起動テンプレートを他の製品で確認すると、判定は次のようになっていました。

製品 判定
SecurityHub FAIL(要対応)
Steampipe ALARM(要対応)
ProwlerCheck PASS(問題なし)

3製品中2製品が「要対応」としている中で、ProwlerCheckだけが「問題なし」としている状態です。
ProwlerCheckが生成した生のCSVファイルには、以下のように記載されていました。

項目 CSVファイルに記録されていた値
CHECKID(チェックの識別子) ec2_launch_template_imdsv2_required
STATUS(判定結果) PASS
STATUS_EXTENDED(判定理由、原文の英語) EC2 Launch Template (起動テンプレート名) has metadata service disabled in the following versions: 1.

原因調査: 「未設定」と「無効化」の混同

このEC2起動テンプレートは実際には「メタデータサービスが無効化されている」のではなく、「メタデータオプションの設定自体が何も指定されていない」状態でした。

SecurityHubの生データ(この起動テンプレートの設定情報そのもの)を確認したところ、テンプレートの「メタデータオプション」フィールドは実際には未設定(何も指定されていない状態)でした。「明示的に無効化されている」わけではありません。

マネジメントコンソールで、この起動テンプレートの「高度な詳細」タブを開き、メタデータ関連の項目を確認しました。
image.png

「アクセス可能なメタデータ」「トークンホップの制限」「メタデータのバージョン」「メタデータIPv6エンドポイント」のいずれも「-」と表示されており、何も設定されていないことが画面上でも確認できました。

画面表示だけでは省略されている可能性も否定できないため、AWS CLIで生の設定値も直接取得しました。

aws ec2 describe-launch-template-versions \
  --launch-template-id <起動テンプレートID> \
  --versions 1 \
  --region ap-northeast-1 \
  --query 'LaunchTemplateVersions[].LaunchTemplateData.MetadataOptions'

結果は空の配列([])でした。--queryを外してLaunchTemplateDataの内容を全件取得しても、MetadataOptionsというキー自体が出力に含まれていませんでした。
image.png
マネジメントコンソールの表示とCLIでも、「メタデータオプションの設定項目自体が存在しない(未設定)」ことが確認できました。

IMDSv2を必須にするには、本来この設定項目で明示的に「IMDSv2のみ許可する」よう指定する必要があります。何も指定していなければ、IMDSv2は強制されておらず、旧バージョンのIMDSv1でもアクセスできてしまう状態のままです。
つまり「未設定」は「対策していない」に等しく、本来はFAIL(要対応)と判定すべき状態です。

SecurityHubとSteampipeは、この「未設定=IMDSv2を強制していない」状態を正しくFAILと判定していました。それに対してProwlerCheckは、「メタデータオプションが未設定であること」を「メタデータサービスが無効化されていること」と誤って解釈し、PASSと判定していた可能性が高いと考えられます。

これはProwlerCheck固有の検知ロジックの誤り、または過度に楽観的な判定である可能性があり、断定はできませんが、ProwlerCheckを軸に据えて診断を行う場合の注意点として共有します。

なお、これは今回の検証で見つかった特定の1チェック(IMDSv2必須化チェック)における判定ロジックの解釈の問題であり、ProwlerCheck全体の検出力を否定するものではありません。

まとめ

今回の調査で分かったポイントを整理します。

  • あるEC2起動テンプレートのIMDSv2必須化チェックで、ProwlerCheckだけが「問題なし(PASS)」、SecurityHubとSteampipeは「要対応」と判定していた
  • ProwlerCheckの判定理由は「メタデータサービスが無効化されている」というものだったが、実際の設定は「未設定」であり「明示的な無効化」ではなかった
  • ProwlerCheckが「未設定」を「無効化」と誤って解釈していた可能性が高い
  • ProwlerCheckを軸に診断を行う場合、EC2起動テンプレートのIMDSv2必須化チェックについては、他製品や設定のデータでの裏取りをおすすめします

複数のセキュリティ診断ツールを併用し、判定が割れた項目は生データまで遡って確認することの大切さを改めて感じた事例でした。

最後までご覧いただきありがとうございました!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?