طراحی ناامن(N/A)
آسیبپذیریهایی که به دلیل نقص در طراحی معماری و منطق برنامه ایجاد میشوند، نه باگهای کدنویسی.
طراحی ناامن چیه؟
خلاصه در یه جمله: وقتی از اول طرح سیستم غلط باشه، هر چقدر هم کد تمیز بنویسی، بازم ناامنه!
فرض کن میخوای یه خونه بسازی. اگه از اول نقشه رو غلط بکشی (مثلاً در ورودی رو رو به دره بزنی!)، هر چقدر هم در رو محکم کنی، فایده نداره! طراحی ناامن همینه — مشکل از کد نیست، مشکل از نقشهست .
تفاوت باگ کد و طراحی ناامن:
باگ کد: کد اشتباه نوشته شده. مثلاً فراموش کردی چک کنی کاربر لاگین کرده یا نه. این رو میشه با Patch درست کرد.
طراحی ناامن: از اول طرح غلطه. مثلاً سیستم طوری طراحی شده که کاربر میتونه بدون لاگین به دادهها دسترسی داشته باشه. این رو نمیشه با Patch درست کرد، باید کل طراحی رو عوض کرد!
مثالهای طراحی ناامن:
۱. بازیابی پسورد ضعیف: سوال امنیتی میذاری "نام حیوان خانگی تو چیه؟" این رو هر کسی میتونه از شبکههای اجتماعی پیدا کنه!
۲. Rate Limiting نداره: کاربر میتونه بینهایت بار پسورد رو تست کنه. Brute Force راحت انجام میشه!
۳. Session Management غلط: Session ID تو URL هست. هر کسی URL رو ببینه، میتونه اکانت تو رو برداره!
۴. Trust Boundary اشتباه: به دادههای کلاینت اعتماد میکنی. مثلاً قیمت رو از کلاینت میگیری، کاربر میتونه تغییرش بده!
چرا برای امنیت مهمه؟
چون شماره ۴ OWASP Top 10 2021 هست! طراحی ناامن رو نمیشه با کد درست کرد. باید از اول با امنیت طراحی بشه (Security by Design). برای همین Threat Modeling مهمه — قبل از کد زدن، فکر کنی هکر چطور حمله میکنه.