مهندسی امنیت نرم افزار

امنیت نرم افزار فراتر از آن است که از فایروال (Firewall) رمز گذاری قوی، تبدیل اطلاعات به کد (Encryption) و... استفاده کنیم؛ در واقع بحث درمورد این است که نرم افزار را به صورتی توسعه دهیم که از همان ابتدا ایمن‌تر باشد.

در ادامه مدل‌ها و تكنیک‌هایی که به دستیابی امنیت نرم افزار کمک می‌کنند را بررسی می‌کنیم.

مدل‌های چرخه حیات امنیت

چرخه حیات توسعه امنیت (SDL-Security Development Lifecycle) یک فرآیند امنیتی نرم افزاری پیشرو در صنعت است. در سال ۲۰۰۴ مایکروسافت مجموعه اصولی را طراحی کرد تا امنیت و حریم خصوصی را در نرم افزارهای خود تعبیه کند. چرخه حیات توسعه امنیت این امکان را برای مایکروسافت فراهم کرد تا امنیت و حریم خصوصی را در مراحل اولیه و در تمام مراحل توسعه نرم افزار فراهم کند.

اصول چرخه حیات توسعه امنیت:

- ایمن با طراحی (Secure by Design)

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

- ایمن به صورت پیش فرض (Secure by Default)

  • کمترین امتیاز: همه اجزا باید با حداقل امتیاز ممکن اجرا شوند.
  • دفاع در عمق: در مقابله با تهدیدات نباید فقط به یک راه حل تکیه کنیم تا اگر یک سد دفاعی شکسته شد، سد دفاعی دیگری داشته باشیم.
  • تنظیمات پیشفرض محافظه کارانه: از آنجایی که تیم توسعه از سطح حمله برای محصول آگاه است، باید با یک سری روش‌ها احتمال حمله را در پیکره بندی پیشفرض به حداقل برساند.
  • اجتناب از تغییرات مخاطره آمیز پیشفرض: برنامه‌ها نباید هیچ تغییر پیشفرضی در سیستم عامل یا تنظیمات امنیتی ایجاد کنند تا امنیت میزبان کاهش پیدا کند.
  • خدماتی که کمتر مورد استفاده قرار می‌گیرند به صورت پیشفرض خاموش شوند: اگر کمتر از ۸۰% کاربران یک برنامه از یک ویژگی استفاده می‌کنند، آن ویژگی نباید به صورت پیشفرض فعال باشد.

- ایمن در استقرار (Secure in Deployment)

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

- ارتباطات (Communications)

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


مهندسی الزامات امنیتی

هرچند الزامات امنیتی بخش مهمی از توسعه ایمن نرم افزار هستند ولی در عمل اغلب نادیده گرفته می‌شوند. علاوه بر مدل‌های چرخه حیات امنیتی مدل‌های زیادی وجود دارد که مختص نیازمندی‌های امنیتی است که یکی از آنها مدل SQUARE است.

مدل SQUARE:

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

مراحل مدل SQUARE:

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


موارد سوء استفاده و الگوهای حمله

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

مثال:

نحوه حمله بدافزار DroidCleaner به تلفن همراه با استفاده از برنامه ایمیل K-9.
نحوه حمله بدافزار DroidCleaner به تلفن همراه با استفاده از برنامه ایمیل K-9.


تجزیه و تحلیل ریسک امنیتی

روش‌های مختلفی برای ارزیابی ریسک امنیتی وجود دارد که یکی از آن‌ها روش چارچوب مدیریت ریسک (RMF-Risk Management Framework) است.

مراحل روش RMF:

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


مدل سازی، اولویت بندی و کاهش تهدیدات

مدل سازی تهدید (TMM-Threat Modeling Method) روشی است که هدف آن شناسایی توانایی و اهداف مهاجمان است تا از آن برای فهرست نویسی تهدیدات احتمالی استفاده شود.

استراید (STRIDE) یکسری روش‌های مدل سازی تهدید است که نحوه کار آن به این صورت است که یک سیستم را به عناصرش تقسیم می‌کند و هر عنصر را از جهت آسیب پذیر بودن نسبت به تهدیدات بررسی می‌کند.


سطح حمله

همه نقاطی که یک مهاجم از طریق آن می‌تواند به سیستم وارد شود (تا به سیستم دسترسی پیدا کند یا داده‌ها را خارج کند) را سطح حمله می‌گویند.

سطح حمله یک برنامه کاربردی:

  • مجموعه تمام مسیرها برای داده‌ها و دستورات ورودی خروجی برنامه.
  • کدی که از این مسیرها محافظت می‌کند. (از جمله احراز هویت، مجوزها، اعتبار سنجی داده و ...)
  • داده‌های ارزشمند در برنامه.
  • کدی که از این داده‌ها محافظت می‌کند. ( از جمله رمزگذاری، کنترل‌های امنیتی و ...)


پروژه امنیت نرم‌افزاری تحت وب (OWASP)

یک متدولوژی است که معیارهایی را برای افزایش امنیت نرم افزار (برای توسعه دهندگان جهت درک و مدیریت ریسک‌های امنیتی برنامه حین طراحی و همچنین توسط متخصص امنیت برنامه که ارزیابی ریسک امنیتی را انجام می‌دهند) شرح داده است.


خلاصه و ترجمه شده از کتاب مهندسی نرم افزار پرسمن ویرایش نهم