اعتبارنامه
اطلاعات احراز هویت مانند رمز عبور، کلیدهای API، توکنها یا گواهیها که برای تأیید هویت و اعطای دسترسی استفاده میشود.
تعریف کوتاه
اعتبارنامهها مدرک هویت دیجیتال شما هستند — رمز عبور، کلیدهای API، توکنها، گواهیها. آنها به سیستمها میگویند "بله، این واقعاً شما هستید." دزدیدن اعتبارنامه مثل دزدیدن کلیدهای کسی است: به هر چیزی که آنها دسترسی داشتند دسترسی پیدا میکنی.
تعریف کامل
اعتبارنامه اطلاعاتی هستند که برای احراز هویت و مجوز دسترسی به سیستمها، برنامهها یا دادهها استفاده میشوند.
انواع:
اعتبارنامه کاربر:
- نام کاربری + رمز عبور
- کدهای PIN
- سوالات امنیتی
اعتبارنامه برنامهمحور:
- کلیدهای API
- توکنهای دسترسی
- توکنهای OAuth
- JWT (JSON Web Tokens)
اعتبارنامه ابری:
- کلید دسترسی + کلید مخفی (AWS)
- کلیدهای حساب سرویس (GCP)
- رشتههای اتصال
گواهیها:
- گواهیهای SSL/TLS
- گواهیهای کلاینت
- گواهیهای امضای کد
مبتنی بر نشست:
- کوکیهای نشست
- توکنهای نشست
- توکنهای Bearer
چرا مهم است
- هدف اصلی مهاجمان
- در صورت سرقت، اکثر کنترلهای امنیتی را دور میزند
- اغلب هاردکد یا بد ذخیره میشوند
- یک مجموعه اعتبارنامه میتواند کل زیرساخت را به خطر بیندازد
- سرقت اعتبارنامه آسانتر از بهرهبرداری از آسیبپذیریها است
چگونه مهاجمان از آن استفاده میکنند
روشهای سرقت اعتبارنامه:
۱. SSRF به سرویس متادیتا:
1# سرقت اعتبارنامه AWS2url = "http://169.254.169.254/latest/meta-data/iam/security-credentials/role"3→ کلیدهای دسترسی را برمیگرداند
۲. اسکن GitHub:
1# ابزارهای خودکار به دنبال موارد زیر میگردند:2aws_access_key_id = "AKIAIOSFODNN7EXAMPLE"3aws_secret_access_key = "wJalr..."4DATABASE_URL = "postgres://user:pass@host/db"
۳. متغیرهای محیطی:
1# در خطاها، لاگها، /proc/ افشا میشود2env | grep -i secret3env | grep -i password
۴. رهگیری ترافیک:
1# HTTP رمزنگارینشده2POST /login3username=admin&password=secret123
۵. پر کردن اعتبارنامه (credential stuffing):
1# استفاده از رمزهای لو رفته از نقضهای دیگر2# امتحان رمز یکسان در چندین سرویس
مهاجمان با اعتبارنامه دزدیده شده چه میکنند:
- دسترسی به منابع ابری
- فراخوانی API
- حرکت جانبی
- افزایش امتیاز
- تخلیه داده
- ایجاد درهای پشتی
چگونه تشخیص یا پیشگیری کنیم
پیشگیری:
ذخیرهسازی:
- هرگز در کد منبع هاردکد نکنید
- استفاده از مدیریت اسرار (Secrets Manager, Vault)
- متغیرهای محیطی (با محافظت مناسب)
- فایلهای پیکربندی رمزنگاری شده
انتقال:
- همیشه از HTTPS/TLS استفاده کنید
- بدون اعتبارنامه در URLها
- مدیریت صحیح نشست
دسترسی:
- چرخش منظم (حداکثر ۹۰ روز)
- استفاده از اعتبارنامه موقت در صورت امکان
- اعمال کمترین دسترسی
- فعال کردن MFA در صورت امکان
نمونه کد (رویههای خوب):
1import os2from cryptography.fernet import Fernet34# بارگیری از محیط5api_key = os.getenv('API_KEY')67# یا پیکربندی رمزنگاری شده8def load_encrypted_config():9 key = os.getenv('ENCRYPTION_KEY')10 cipher = Fernet(key)11 with open('config.encrypted', 'rb') as f:12 return cipher.decrypt(f.read())
تشخیص:
- نظارت بر استفاده از اعتبارنامه از مکانهای غیرعادی:
- موقعیتهای جغرافیایی
- آدرسهای IP
- زمان روز
- الگوهای دسترسی
- هشدار در مورد ایجاد اعتبارنامه جدید
- اسکن مخازن کد برای نشت
- نظارت بر وب تاریک برای اعتبارنامههای لو رفته
- ردیابی تلاشهای احراز هویت ناموفق
ابزارها:
- GitGuardian (اسکن مخازن)
- TruffleHog (یافتن اسرار در تاریخچه گیت)
- AWS IAM Access Analyzer
- Have I Been Pwned (بررسی لو رفتن)
باورهای غلط رایج
- "حذف از کد = ایمن" - تاریخچه گیت آنها را نگه میدارد
- "مخزن خصوصی = امن" - مخازن به خطر میافتند
- "رمزهای پیچیده کافی هستند" - نیاز به ذخیرهسازی مناسب هم هست
- "اعتبارنامه موقت نمیتواند آسیب بزند" - تا زمانی که معتبرند میتوانند
- "MFA از همه چیز محافظت میکند" - از کلیدهای API محافظت نمیکند
مثال واقعی
Capital One - سرقت اعتبارنامه از طریق SSRF
1# گام ۱: SSRF به متادیتا2curl http://169.254.169.254/.../iam/security-credentials/WAF-Role34# گام ۲: اعتبارنامه گرفت5{6 "AccessKeyId": "ASIA...",7 "SecretAccessKey": "wJal...",8 "Token": "..."9}1011# گام ۳: از اعتبارنامه استفاده کرد12aws s3 ls --profile stolen13→ ۷۰۰+ باکت فهرست شد1415# گام ۴: داده دانلود کرد16aws s3 sync s3://sensitive-data ./17→ بیش از ۱۰۰ میلیون رکورد دزدیده شد
Uber - نشت اعتبارنامه GitHub (۲۰۱۶)
1# مخزن خصوصی شامل:2AWS_ACCESS_KEY_ID = "AKIA..."3AWS_SECRET_ACCESS_KEY = "..."45# مهاجم:6۱. به مخزن خصوصی دسترسی یافت7۲. اعتبارنامه را در کد پیدا کرد8۳. برای دسترسی به باکت S3 استفاده کرد9۴. بیش از ۵۷ میلیون رکورد کاربر دانلود کرد
حمله زنجیره تأمین CodeCov (۲۰۲۱)
1# مهاجم اسکریپت را تغییر داد2# اسکریپت اعتبارنامه را از CI/CD جمعآوری کرد:3- متغیرهای محیطی4- اعتبارنامه ابری5- کلیدهای API6- رمزهای دیتابیس78# به سرور مهاجم ارسال شد9# صدها شرکت را تحت تأثیر قرار داد
اصطلاحات مرتبط
Authentication, Access Key & Secret Key, API, IMDS, Token