TTPS · روش‌ها و تکنیک‌ها طراحی امن

Threat Modeling — مدل‌سازی تهدید

Threat Modeling

مدل‌سازی تهدید یک جلسه‌ی ساختاریافته است برای پیدا کردن نقص‌هایی که در طراحی سامانه وجود دارند — نقص‌هایی که به تعبیر OWASP «با پیاده‌سازی بی‌نقص هم رفع نمی‌شوند».

تیم فنی پی‌هانتر

مدل‌سازی تهدید چیست؟

مدل‌سازی تهدید (Threat Modeling) فعالیتی است که تیم، پیش از ساخت یا هنگام تغییر یک سامانه، نظام‌مند می‌پرسد چه چیزی می‌تواند اشتباه پیش برود و چه کنترلی باید در طراحی گنجانده شود. چارچوب رایجش چهار پرسش است:

  1. چه چیزی می‌سازیم؟ — مرز سامانه، مؤلفه‌ها، داده‌ها و بازیگران.
  2. چه چیزی می‌تواند اشتباه پیش برود؟ — شناسایی تهدید با روشی ساختاریافته مثل STRIDE.
  3. چه می‌کنیم؟ — تصمیم برای هر تهدید: کنترل، پذیرش، انتقال یا حذف قابلیت.
  4. خوب انجامش دادیم؟ — بازبینی پس از پیاده‌سازی.

تفاوت کلیدی با سایر فعالیت‌های امنیتی این است که مدل‌سازی تهدید به کد نگاه نمی‌کند، به تصمیم نگاه می‌کند. «چرا کاربر عادی اصلاً باید بتواند شناسه‌ی فاکتور را در آدرس بفرستد؟» یک سؤال طراحی است، نه باگ پیاده‌سازی — و اگر پاسخ درست در طراحی نباشد، دقت در کدنویسی آن را جبران نمی‌کند.

STRIDE — رایج‌ترین روش شناسایی تهدید

STRIDE شش دسته‌ی تهدید را نام می‌برد و برای هر مؤلفه پرسیده می‌شود. ارزشش در کامل بودن نیست، در یادآوری منظم است: تیم به‌جای «فکر کردن به حملات»، شش پرسش مشخص را روی هر عنصر اجرا می‌کند.

حرفتهدیدویژگی نقض‌شدهنمونه‌ی وب
Sجعل هویت (Spoofing)احراز هویتپذیرش توکنی که امضایش راستی‌آزمایی نشده — نک. JWT
Tدستکاری (Tampering)یکپارچگیتغییر قیمت در بدنه‌ی درخواست پرداخت
Rانکار (Repudiation)انکارناپذیرینبود رد ممیزی برای عملیات مالی
Iافشای اطلاعاتمحرمانگیپاسخ API فیلدهایی را برمی‌گرداند که UI نمایش نمی‌دهد
Dاختلال سرویسدسترس‌پذیریاندپوینت گزارش‌گیری بدون سقف پارامتر
Eارتقای دسترسیمجوزدهیپذیرش فیلد role در بدنه‌ی به‌روزرسانی پروفایل

در عمل پرکاربردترین ستون‌ها E و I هستند — هم‌خوان با داده‌ی OWASP که کنترل دسترسی شکسته را در رتبه‌ی یک نگه داشته است.

نمودار جریان داده و درخت حمله

نمودار جریان داده (DFD) زبان مشترک جلسه است و لازم نیست زیبا باشد: موجودیت بیرونی، فرایند، مخزن داده و جریان داده. عنصر پنجم مهم‌ترین است — مرز اعتماد، خطی که نشان می‌دهد داده از یک ناحیه‌ی اعتماد به ناحیه‌ی دیگر می‌رود.

قاعده‌ی طلایی: تهدیدها روی مرزهای اعتماد متمرکزند. هر جا جریانی از مرزی عبور می‌کند باید احراز هویت، مجوزدهی، اعتبارسنجی و ثبت رخداد باشد. بیشتر یافته‌های جدی تست نفوذ در نگاه به عقب جریانی‌اند که از مرزی عبور کرده بی‌آنکه کسی بداند مرزی وجود دارد — مثل «سرویس داخلی است پس احراز هویت لازم ندارد» که مسیر SSRF را باز می‌گذارد.

درخت حمله مکمل و از بالا به پایین است: در ریشه هدف مهاجم نوشته می‌شود («خواندن فاکتور مشتری دیگر») و شاخه‌ها راه‌های رسیدن به آن را باز می‌کنند — IDOR روی اندپوینت فاکتور، دسترسی به فایل ذخیره‌شده، یا گرفتن نشست از راه XSS. بهترین بازده را روی یک دارایی بحرانی دارد.

نسبت مدل‌سازی تهدید با تست نفوذ

مدل‌سازی تهدیدتست نفوذ
زمانپیش از کدنویسی یا هنگام تغییر طراحیروی سامانه‌ی ساخته‌شده
ورودیمعماری، مستندات، دانش تیمسامانه‌ی در حال اجرا
می‌یابدکنترل‌های غایب و فرض‌های نادرستکنترل‌های ناقص یا قابل دور زدن
هزینه‌ی رفعپایین — هنوز چیزی ساخته نشدهبالاتر — بازکاری و انتشار دوباره
خروجیفهرست تهدید با تصمیم و مسئولگزارش یافته با شواهد و شدت

در استاندارد PTES هم «مدل‌سازی تهدید» یکی از هفت فاز اجرای تست است — آنجا به معنای مدل‌سازی مهاجم و دارایی پیش از شروع آزمون. رابطه‌ی درست این است: مدل تهدید ورودی خوبی برای تعیین دامنه‌ی تست می‌دهد و متدولوژی تست نفوذ بازخوردی می‌دهد که مدل بعدی را دقیق‌تر می‌کند.

اجرای عملی: چه زمانی، چه کسانی، خروجی چیست

چه زمانی؟ نه در هر اسپرینت و نه یک‌بار برای همیشه؛ نقاط طبیعی: قابلیت جدیدی که با پول، هویت یا داده‌ی حساس سروکار دارد، یکپارچگی با سرویس بیرونی، تغییر مدل نقش‌ها، و مهاجرت معماری.

چه کسانی؟ جلسه‌ی مؤثر ۴ تا ۸ نفره و ۶۰ تا ۹۰ دقیقه است: معمار یا توسعه‌دهنده‌ی ارشد، مالک محصول، یک نفر از عملیات و یک تسهیل‌گر با دانش امنیت. اما مدل‌سازی تهدید وظیفه‌ی تیم امنیت نیست؛ اگر تیم توسعه نقش فعال نداشته باشد، خروجی سندی می‌شود که کسی نمی‌خواندش.

خروجی چه شکلی است؟ نه گزارش صد صفحه‌ای؛ یک نمودار ساده به‌همراه فهرستی از تهدیدها که هر ردیفش تصمیم، مسئول و وضعیت دارد و در همان ابزار پیگیری کار تیم ثبت می‌شود:

Element : POST /api/v1/invoices  (crosses trust boundary)
STRIDE  : E - Elevation of Privilege
Threat  : user reads another tenant's invoice
Control : scope query by session tenant, enforced in data layer
Owner   : team-billing    Status: planned    Ref: SEC-114

بزرگ‌ترین مانع مهارت نیست، عادت است؛ تیمی که یک‌بار جلسه‌ی درست را تجربه کند، دفعه‌ی بعد خودش شروع می‌کند. آموزش عملی همین جلسه روی سامانه‌ی واقعی تیم، بخشی از دوره‌ی سازمانی توسعه‌ی امن است.

نگاشت به A06:2025 و باورهای غلط

مدل‌سازی تهدید مستقیماً به A06:2025 طراحی ناامن (Insecure Design) نگاشت می‌شود، و جمله‌ی کلیدی خودِ OWASP بهترین توصیف موضوع است: «یک طراحی امن هم می‌تواند نقص پیاده‌سازی داشته باشد که به آسیب‌پذیری منجر شود؛ اما یک طراحی ناامن با پیاده‌سازی بی‌نقص هم رفع نمی‌شود.»

OWASP سه ستون برای این دسته تعریف می‌کند: مدیریت الزامات و منابع، طراحی امن (که مدل‌سازی تهدید در آن قرار دارد)، و چرخه‌ی عمر توسعه‌ی امن. راهکارهایش هم همین‌هاست: گنجاندن مدل‌سازی تهدید در پالایش طراحی، کتابخانه‌ای از الگوهای امن، آزمون برای سناریوهای سوءاستفاده، و جداسازی لایه‌ها و مستأجران در طراحی. شناسه‌های CWE پرکاربرد: CWE-501 (نقض مرز اعتماد)، CWE-269 و CWE-434.

باور غلط رایج

«ما تست نفوذ می‌دهیم، پس نیازی به مدل‌سازی تهدید نداریم.» این دو یک چیز را نمی‌سنجند. تست نفوذ کنترل‌های موجود را می‌آزماید؛ اگر کنترلی اصلاً طراحی نشده باشد، تستر نبودش را گزارش می‌کند اما در بدترین زمان ممکن — پس از ساخت و اغلب پس از انتشار. باور غلط قرینه هم هست: «مدل‌سازی تهدید کردیم پس امنیم.» مدل تهدید فرض‌ها را می‌سنجد، نه کد را؛ راستی‌آزمایی پیاده‌سازی همچنان به بازبینی کد و تست نفوذ نیاز دارد.

پرسش‌های متداول

مدل‌سازی تهدید چه زمانی باید انجام شود؟

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

چه کسانی باید در جلسه‌ی مدل‌سازی تهدید حاضر باشند؟

چهار تا هشت نفر: معمار یا توسعه‌دهنده‌ی ارشد، مالک محصول، یک نفر از عملیات یا زیرساخت، و یک تسهیل‌گر با دانش امنیت. نکته‌ی مهم این است که مدل‌سازی تهدید وظیفه‌ی تیم امنیت نیست؛ اگر تیم توسعه نقش فعال نداشته باشد، خروجی به سندی تبدیل می‌شود که کسی نمی‌خواند.

تفاوت STRIDE و درخت حمله چیست؟

STRIDE از پایین به بالا کار می‌کند: برای هر عنصر سامانه شش دسته‌ی تهدید را بررسی می‌کنید و پوشش نسبتاً کاملی به‌دست می‌آورید. درخت حمله از بالا به پایین است: یک هدف مهاجم را در ریشه می‌گذارید و مسیرهای رسیدن به آن را باز می‌کنید. STRIDE برای پوشش سیستماتیک بهتر است و درخت حمله برای تمرکز عمیق روی یک دارایی بحرانی.

آیا مدل‌سازی تهدید جای تست نفوذ را می‌گیرد؟

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

پیشگیری / رفع

به‌کارگیری و بهترین‌روش — چهار گام برای شروع در یک تیم واقعی:

  1. با یک جریان بحرانی شروع کنید، نه کل سامانه: پرداخت، احراز هویت یا مسیر داده‌ی حساس. یک جلسه‌ی ۹۰ دقیقه‌ای روی یک جریان مشخص، از تلاش شش‌هفته‌ای برای مدل‌سازی همه‌چیز ارزشمندتر است.
  2. نمودار را با هم بکشید و مرزهای اعتماد را علامت بزنید. اگر تیم نتواند در ده دقیقه نمودار جریان داده را روی تخته بکشد، این خودش نخستین یافته است.
  3. STRIDE را روی هر عنصر مرزی اجرا کنید و برای هر تهدید تصمیمی ثبت کنید: کنترل، پذیرش، انتقال یا حذف. تهدیدی که تصمیم ندارد، ثبت نشده است.
  4. خروجی را وارد چرخه‌ی کاری کنید: هر تهدیدِ دارای تصمیم به یک آیتم در ابزار پیگیری تبدیل شود، با مسئول و وضعیت، و در تعریف «انجام‌شده»ی قابلیت بندی برای بستن آن‌ها باشد.

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

→ بازگشت به دانشنامه
PUT IT TO THE TEST

امنیت سامانه‌ی شما را
به مهاجمان واگذار نکنید

تیم پی‌هانتر با دیدِ یک مهاجم واقعی، این آسیب‌پذیری‌ها و ده‌ها مورد دیگر را روی دارایی‌های شما می‌سنجد.