فصل ۲: مدلهای تهدید (STRIDE/DREAD)
آموزش مدلسازی تهدید با چارچوب STRIDE و ارزیابی ریسک با DREAD، معرفی PASTA و درخت حمله، با تمرین عملی روی یک وباپلیکیشن.
مدلسازی تهدید چیست؟
مدلسازی تهدید (Threat Modeling) فرایندی ساختاریافته برای شناسایی، دستهبندی و اولویتبندی تهدیدات احتمالی علیه یک سیستم است. بهجای صبر کردن تا وقوع حمله، تیم امنیت در مرحلهٔ طراحی، نقاط ورود، جریان داده و داراییهای ارزشمند را نقشهبرداری میکند و سپس میپرسد: «چه کسی میتواند از کدام مسیر، به چه چیزی آسیب بزند؟»
شروع مدلسازی تهدید در فاز طراحی میتواند تا ۱۰۰ برابر ارزانتر از رفع آسیبپذیری در فاز تولید باشد. طبق اصل DevSecOps، امنیت باید Shift-Left یعنی به سمت چپِ مرحلهٔ توسعه منتقل شود تا در همان ابتدا کشف و رفع گردد.
مدلسازی تهدید یکباره نیست
بسیاری از سازمانها مدل تهدید را یکبار در آغاز پروژه میسازند و سپس فراموش میکنند. هر تغییر معماری بزرگ (افزودن سرویس جدید، تغییر احراز هویت، انتقال به کلاد) باید منجر به بهروزرسانی مدل تهدید شود.
مراحل چهارگانهٔ مدلسازی تهدید
۱. شناسایی داراییها: چه چیزی ارزش محافظت دارد؟ (دادهٔ کاربر، کلیدها، سرویسها) ۲. نقشهبرداری معماری: دیاگرام جریان داده (DFD) رسم کنید. ۳. شناسایی تهدیدات: با چارچوبهایی مانند STRIDE تهدیدات را پیدا کنید. ۴. اولویتبندی و کاهش: با DREAD ریسک را امتیازدهی کرده و کنترلها را تعیین کنید.
چارچوب STRIDE
STRIDE که توسط مایکروسافت توسعه یافته، شش دستهٔ تهدید را پوشش میدهد. هر حرف نمایانگر یک دسته است:
| حرف | دسته | نقض کدام اصل CIA | مثال |
|---|---|---|---|
| S | Spoofing | محرمانگی/اصالت | سرست session cookie برای جعل هویت |
| T | Tampering | یکپارچگی | تغییر پارامتر قیمت در فرم سفارش |
| R | Repudiation | عدمانکار | کاربر خریدی را انکار کند چون لاگ ندارد |
| I | Information Disclosure | محرمانگی | پیام خطای دیتابیس رمز را فاش کند |
| D | Denial of Service | در دسترسبودن | SYN flood برای قطع وبسایت |
| E | Elevation of Privilege | اصالت/کنترل دسترسی | کاربر عادی با باگ به admin تبدیل شود |
مثال برای هر دسته
S — Spoofing: یک ایمیل فیشینگ با آدرس admin@paypa1.com (با عدد ۱ بهجای حرف l) کاربر را گول میزند. پیشگیری: SPF، DKIM، DMARC و آموزش کاربر.
T — Tampering: مهاجم با ابزار Burp Suite مقدار price=999 را در درخواست POST به price=1 تغییر میدهد. پیشگیری: اعتبارسنجی سمت سرور و امضای دیجیتال روی مقادیر حساس.
R — Repudiation: کاربری مبالغ را از کیف پول برداشت میکند ولی چون تراکنش لاگ نشده، انکار میکند. پیشگیری: لاگنویسی append-only با timestamp و امضای HMAC.
I — Information Disclosure: صفحهٔ ورود خطای «رمز اشتباه است برای کاربر admin» میدهد و به مهاجم میفهماند این کاربر وجود دارد. پیشگیری: پیامهای خطای عمومی و مدیریت استثنا.
D — Denial of Service: حملات UDP reflection با تقویت DNS سرور را غرق میکنند. پیشگیری: rate limiting، CDN و فایروالهای Anti-DDoS.
E — Elevation of Privilege: آسیبپذیری IDOR به کاربر عادی اجازه میدهد با تغییر user_id به ۱، پروفایل مدیر را ویرایش کند. پیشگیری: بررسی مجوز در هر درخواست (Authorization سمت سرور).
چارچوب DREAD برای اولویتبندی
پس از شناسایی تهدید با STRIDE، از DREAD برای امتیازدهی استفاده میکنیم. هر معیار از ۱ تا ۱۰ امتیاز میگیرد و میانگین، ریسک کلی را نشان میدهد.
| معیار | سوال | ۱ | ۱۰ |
|---|---|---|---|
| Damage | میزان خسارت | بدون خسارت | فلج کامل |
| Reproducibility | تکرارپذیری | سخت | همیشه |
| Exploitability | سهولت استثمار | نیاز به متخصص | کاربر مبتدی |
| Affected Users | کاربران تحت تأثیر | هیچکس | همه |
| Discoverability | کشفپذیری | پنهان | بدیهی |
نمونهٔ امتیازدهی
فرض کنید تهدید «SQL Injection در صفحهٔ ورود» را شناسایی کردهایم:
Damage : 10 (سرقت همهٔ رمزهای عبور)
Reproducibility : 9 (همیشه با URL تکرار میشود)
Exploitability : 8 (ابزار sqlmap خودکار است)
Affected Users : 10 (تمام کاربران)
Discoverability : 7 (اسکنرها بهراحتی پیدا میکنند)
------------------------------------
Average : 8.8 (بحرانی)امتیاز بالای ۷ یعنی باید قبل از Release اصلاح شود.
DREAD انتقادی است
انتقاد رایج به DREAD این است که امتیازدهی ذهنی است و دو تحلیلگر میتوانند امتیازهای متفاوت بدهند. در عمل، با CVSS (Common Vulnerability Scoring System) که فرمولمحور است ترکیبش کنید.
چارچوب PASTA
PASTA (Process for Attack Simulation and Threat Analysis) یک روش هفتمرحلهای و risk-centric است:
۱. تعریف هدف کسبوکار ۲. تعریف scope فنی ۳. تجزیهٔ اپلیکیشن ۴. تحلیل تهدید ۵. تحلیل آسیبپذیری ۶. شبیهسازی حمله ۷. تحلیل ریسک و کاهش
PASTA نسبت به STRIDE زمانبرتر اما برای سیستمهای بحرانی مانند بانکداری مناسبتر است.
درخت حمله (Attack Tree)
درخت حمله روشی بصری است که ریشهٔ درخت، هدف مهاجم (مثلاً «دزدی دیتابیس کاربران») و فرزندان، روشهای دستیابی به آن هستند. هر گره با AND/OR به فرزندانش متصل میشود و میتوان هزینه یا احتمال موفقیت را به هر مسیر نسبت داد.
دزدی دیتابیس کاربران
├── SQL Injection در فرم جستجو
│ ├── پیدا کردن پارامتر آسیبپذیر
│ └── دور زدن WAF
├── سرقت بکآپ
│ ├── دسترسی به S3 عمومی
│ └── فیشینگ ادمین DevOps
└── نفوذ داخلی
├── malware روی لپتاپ DBA
└── misuse دسترسی rootاین روش به مدیران کمک میکند کنترلهایی را طراحی کنند که مسیرهای ارزشمند را قطع کنند.
تمرین عملی: مدلسازی تهدید یک وباپلیکیشن
فرض کنید یک اپلیکیشن فروشگاهی با معماری زیر داریم:
- فرانتاند React
- بکاند Node.js با Express
- پایگاهداده PostgreSQL
- احراز هویت JWT
- آپلود فایل برای عکس کالا
- پرداخت با درگاه شخص ثالث
مراحل مدلسازی:
۱. داراییها: دادهٔ کاربر (نام، آدرس، کارت)، حساب کاربری، موجودی انبار، کدهای تخفیف.
۲. DFD: کاربر به CDN، CDN به API Gateway، API Gateway به Express، Express به PostgreSQL/Redis و درگاه پرداخت.
۳. STRIDE: حداقل شش تهدید شناسایی کنید:
- S: جعل JWT با کلید ضعیف
- T: دستکاری مقدار مبلغ در درخواست پرداخت
- R: انکار سفارش بهدلیل نبود لاگ
- I: نشت پیام خطای SQL
- D: آپلود فایل حجیم برای پر کردن دیسک
- E: IDOR برای ویرایش سفارش دیگران
۴. DREAD: هر کدام را امتیازدهی و سه تهدید با بالاترین امتیاز را برای رفع در اسرع وقت انتخاب کنید.
اشتباهات رایج مدلسازی
سه اشتباه متداول: الف) تمرکز فقط روی تهدیدات خارجی و فراموشکردن insider threat. ب) نادیدهگرفتن زنجیرهٔ تأمین (پکیجهای npm مخرب). ج) فهرست تهدیدات طولانی بدون اولویتبندی که هیچ اقدامی انجام نمیشود.
خلاصه و گام بعدی
مدلسازی تهدید با STRIDE و DREAD به شما کمک میکند پیش از کدنویسی، آسیبپذیریها را شناسایی و اولویتبندی کنید. PASTA و Attack Tree برای سیستمهای پیچیدهتر مفید هستند. کلید موفقیت، تکرارپذیری فرایند و بهروزرسانی مدل با هر تغییر معماری است.
در فصل بعد با رمزنگاری و رمزگذاری آشنا میشوید؛ پایهایترین ابزار محافظت از محرمانگی و یکپارچگی داده.
این صفحه در تاریخ ۸ تیر ۱۴۰۵ بهروزرسانی شده است.