KavLabs
خانهبلاگ
KavLabs

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

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

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

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

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

اعتبارنامه

مبتدینسخه انگلیسی

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

اعتبارنامهاحراز-هویترمز-عبورکلید-apiتوکن

تعریف کوتاه

اعتبارنامه‌ها مدرک هویت دیجیتال شما هستند — رمز عبور، کلیدهای API، توکن‌ها، گواهی‌ها. آنها به سیستم‌ها می‌گویند "بله، این واقعاً شما هستید." دزدیدن اعتبارنامه مثل دزدیدن کلیدهای کسی است: به هر چیزی که آنها دسترسی داشتند دسترسی پیدا می‌کنی.

تعریف کامل

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

انواع:

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

  • نام کاربری + رمز عبور
  • کدهای PIN
  • سوالات امنیتی

اعتبارنامه برنامه‌محور:

  • کلیدهای API
  • توکن‌های دسترسی
  • توکن‌های OAuth
  • JWT (JSON Web Tokens)

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

  • کلید دسترسی + کلید مخفی (AWS)
  • کلیدهای حساب سرویس (GCP)
  • رشته‌های اتصال

گواهی‌ها:

  • گواهی‌های SSL/TLS
  • گواهی‌های کلاینت
  • گواهی‌های امضای کد

مبتنی بر نشست:

  • کوکی‌های نشست
  • توکن‌های نشست
  • توکن‌های Bearer

چرا مهم است

  • هدف اصلی مهاجمان
  • در صورت سرقت، اکثر کنترل‌های امنیتی را دور می‌زند
  • اغلب هاردکد یا بد ذخیره می‌شوند
  • یک مجموعه اعتبارنامه می‌تواند کل زیرساخت را به خطر بیندازد
  • سرقت اعتبارنامه آسان‌تر از بهره‌برداری از آسیب‌پذیری‌ها است

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

روش‌های سرقت اعتبارنامه:

۱. SSRF به سرویس متادیتا:

python
1# سرقت اعتبارنامه AWS
2url = "http://169.254.169.254/latest/meta-data/iam/security-credentials/role"
3→ کلیدهای دسترسی را برمی‌گرداند

۲. اسکن GitHub:

bash
1# ابزارهای خودکار به دنبال موارد زیر می‌گردند:
2aws_access_key_id = "AKIAIOSFODNN7EXAMPLE"
3aws_secret_access_key = "wJalr..."
4DATABASE_URL = "postgres://user:pass@host/db"

۳. متغیرهای محیطی:

bash
1# در خطاها، لاگ‌ها، /proc/ افشا می‌شود
2env | grep -i secret
3env | grep -i password

۴. رهگیری ترافیک:

bash
1# HTTP رمزنگاری‌نشده
2POST /login
3username=admin&password=secret123

۵. پر کردن اعتبارنامه (credential stuffing):

bash
1# استفاده از رمزهای لو رفته از نقض‌های دیگر
2# امتحان رمز یکسان در چندین سرویس

مهاجمان با اعتبارنامه دزدیده شده چه می‌کنند:

  • دسترسی به منابع ابری
  • فراخوانی API
  • حرکت جانبی
  • افزایش امتیاز
  • تخلیه داده
  • ایجاد درهای پشتی

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

پیشگیری:

ذخیره‌سازی:

  • هرگز در کد منبع هاردکد نکنید
  • استفاده از مدیریت اسرار (Secrets Manager, Vault)
  • متغیرهای محیطی (با محافظت مناسب)
  • فایل‌های پیکربندی رمزنگاری شده

انتقال:

  • همیشه از HTTPS/TLS استفاده کنید
  • بدون اعتبارنامه در URLها
  • مدیریت صحیح نشست

دسترسی:

  • چرخش منظم (حداکثر ۹۰ روز)
  • استفاده از اعتبارنامه موقت در صورت امکان
  • اعمال کمترین دسترسی
  • فعال کردن MFA در صورت امکان

نمونه کد (رویه‌های خوب):

python
1import os
2from cryptography.fernet import Fernet
3
4# بارگیری از محیط
5api_key = os.getenv('API_KEY')
6
7# یا پیکربندی رمزنگاری شده
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

bash
1# گام ۱: SSRF به متادیتا
2curl http://169.254.169.254/.../iam/security-credentials/WAF-Role
3
4# گام ۲: اعتبارنامه گرفت
5{
6 "AccessKeyId": "ASIA...",
7 "SecretAccessKey": "wJal...",
8 "Token": "..."
9}
10
11# گام ۳: از اعتبارنامه استفاده کرد
12aws s3 ls --profile stolen
13→ ۷۰۰+ باکت فهرست شد
14
15# گام ۴: داده دانلود کرد
16aws s3 sync s3://sensitive-data ./
17→ بیش از ۱۰۰ میلیون رکورد دزدیده شد

Uber - نشت اعتبارنامه GitHub (۲۰۱۶)

python
1# مخزن خصوصی شامل:
2AWS_ACCESS_KEY_ID = "AKIA..."
3AWS_SECRET_ACCESS_KEY = "..."
4
5# مهاجم:
6۱. به مخزن خصوصی دسترسی یافت
7۲. اعتبارنامه را در کد پیدا کرد
8۳. برای دسترسی به باکت S3 استفاده کرد
9۴. بیش از ۵۷ میلیون رکورد کاربر دانلود کرد

حمله زنجیره تأمین CodeCov (۲۰۲۱)

bash
1# مهاجم اسکریپت را تغییر داد
2# اسکریپت اعتبارنامه را از CI/CD جمع‌آوری کرد:
3- متغیرهای محیطی
4- اعتبارنامه ابری
5- کلیدهای API
6- رمزهای دیتابیس
7
8# به سرور مهاجم ارسال شد
9# صدها شرکت را تحت تأثیر قرار داد

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

Authentication, Access Key & Secret Key, API, IMDS, Token

منابع و مراجع

  • www.cisa.gov/sites/default/files/publications/cybersecurity-glossary.pdf

مفاهیم مرتبط

کلید دسترسی و کلید مخفی

یک جفت اعتبارنامه (مثل نام کاربری و رمز عبور) که برای احراز هویت دسترسی برنامه‌محور به سرویس‌های ابری از طریق APIها استفاده می‌شود.

رابط برنامه‌نویسی کاربردی(API)

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

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

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