
وقتی صحبت از معماری نرمافزار میشود، بسیاری از ما به مقیاسپذیری، کارایی، قابلیت نگهداری و طراحی سیستم فکر میکنیم. اما یکی از مهمترین مسئولیتهای یک معمار، در نظر گرفتن امنیت از همان مراحل ابتدایی طراحی است.
یکی از شناختهشدهترین چارچوبها برای تحلیل تهدیدات امنیتی، STRIDE است. این مدل توسط مایکروسافت معرفی شده و به تیمهای فنی کمک میکند تا تهدیدات احتمالی را پیش از پیادهسازی یا استقرار سیستم شناسایی کنند.
کلمه STRIDE از حروف اول شش دسته تهدید امنیتی تشکیل شده است:
در این نوع حمله، مهاجم خود را به جای یک کاربر، سرویس یا سیستم معتبر جا میزند.
نمونهها:
سرقت توکنهای دسترسی (Access Token)
استفاده از رمز عبور لو رفته
جعل هویت سرویسهای داخلی
راهکارها:
احراز هویت چندمرحلهای (MFA)
مدیریت صحیح توکنها
استفاده از مکانیزمهای قوی احراز هویت
در این سناریو مهاجم تلاش میکند دادهها را بدون مجوز تغییر دهد.
نمونهها:
تغییر اطلاعات ارسالی بین کلاینت و سرور
دستکاری دادههای ذخیرهشده در پایگاه داده
تغییر پیامهای ارسالشده بین سرویسها
راهکارها:
استفاده از HTTPS
امضای دیجیتال
کنترل یکپارچگی دادهها
کاربر یا مهاجم پس از انجام یک عملیات، آن را انکار میکند و سیستم نیز مدرکی برای اثبات آن ندارد.
نمونهها:
انکار انجام تراکنش مالی
انکار حذف یا تغییر اطلاعات
راهکارها:
ثبت لاگهای دقیق
Audit Trail
امضای دیجیتال عملیات حساس
در این حالت اطلاعاتی که باید محرمانه باشند در اختیار افراد غیرمجاز قرار میگیرند.
نمونهها:
نشت اطلاعات کاربران
افشای اطلاعات کارت بانکی
نمایش Stack Trace در محیط Production
راهکارها:
رمزنگاری دادهها
کنترل دسترسی مناسب
حذف اطلاعات حساس از لاگها
هدف مهاجم مصرف منابع سیستم و جلوگیری از ارائه سرویس به کاربران واقعی است.
نمونهها:
حملات DDoS
ارسال تعداد زیادی درخواست به API
مصرف بیش از حد منابع پردازشی یا دیتابیس
راهکارها:
Rate Limiting
Load Balancing
استفاده از CDN و WAF
مهاجم موفق میشود دسترسیهایی بیشتر از سطح مجاز خود به دست آورد.
نمونهها:
تبدیل یک کاربر عادی به مدیر سیستم
دسترسی به منابعی که نباید قابل مشاهده باشند
راهکارها:
اصل حداقل دسترسی (Least Privilege)
کنترل دسترسی مبتنی بر نقش (RBAC)
بازبینی مداوم مجوزها
بسیاری از آسیبپذیریهای امنیتی نه در مرحله توسعه، بلکه در مرحله طراحی سیستم ایجاد میشوند. اگر در جلسات طراحی معماری، برای هر کامپوننت و هر جریان داده، شش سؤال زیر را مطرح کنید، بخش بزرگی از ریسکهای امنیتی را قبل از تولید محصول شناسایی خواهید کرد:
آیا امکان جعل هویت وجود دارد؟
آیا دادهها قابل دستکاری هستند؟
آیا امکان انکار عملیات وجود دارد؟
آیا اطلاعات محرمانه افشا میشوند؟
آیا سرویس قابل از دسترس خارج شدن است؟
آیا امکان افزایش سطح دسترسی وجود دارد؟
STRIDE یک چکلیست ساده نیست؛ بلکه یک طرز فکر امنیتی است که به شما کمک میکند امنیت را از روز اول وارد معماری سیستم کنید، نه اینکه پس از وقوع حادثه به دنبال رفع مشکل باشید.
امنیت چیزی نیست که بعداً به سیستم اضافه شود؛ امنیت باید بخشی از طراحی باشد.