توسعه نرمافزار امن
توسعه نرمافزار امن، امنیت را در هر مرحله از ساخت نرمافزار ادغام میکند — از مدلسازی تهدید و طراحی امن گرفته تا استانداردهای کدنویسی، آزمایش و بازبینی — به طوری که از آسیبپذیریها پیشگیری میشود، نه اینکه پس از انتشار وصله شوند.
Definition
توسعه نرمافزار امن، رشتهای است که فعالیتها و کنترلهای امنیتی را در سراسر چرخه حیات توسعه نرمافزار ادغام میکند تا تعداد و شدت آسیبپذیریها در نرمافزار تحویل داده شده را کاهش دهد.
Scope
این موضوع به شیوهها و فرآیندهایی میپردازد که نرمافزار امن تولید میکنند: مدلسازی تهدید، اصول طراحی امن، استانداردهای کدنویسی امن، تحلیل ایستا و پویا، فازینگ، آزمایش امنیت، بازبینی کد، و چرخه حیات توسعه امن و DevSecOps. همچنین به امنیت زنجیره تأمین و وابستگیها میپردازد. این موضوع شامل مطالعه تهاجمی بهرهبرداری و تحلیل بدافزار پس از انتشار نمیشود که در موضوعات مرتبط دیگر بررسی میشوند.
Core questions
- چگونه امنیت از ابتدا در نرمافزار طراحی میشود، نه اینکه بعداً اضافه شود؟
- مدلسازی تهدید چیست و چگونه طراحی امن را هدایت میکند؟
- تحلیل ایستا، تحلیل پویا و فازینگ چگونه آسیبپذیریها را قبل از انتشار پیدا میکنند؟
- فعالیتهای توسعه امن چگونه در خطوط لوله CI/CD مدرن (DevSecOps) گنجانده میشوند؟
- خطرات ناشی از وابستگیهای شخص ثالث و زنجیره تأمین نرمافزار چگونه مدیریت میشوند؟
Key concepts
- مدلسازی تهدید
- اصول طراحی امن
- استانداردهای کدنویسی امن
- آزمایش امنیت برنامه ایستا (SAST)
- تحلیل پویا (DAST)
- فازینگ
- بازبینی کد
- چرخه حیات توسعه امن
- امنیت زنجیره تأمین
Key theories
- چرخه حیات توسعه امنیت
- یک فرآیند ساختاریافته، دروازههای امنیتی را در هر مرحله از توسعه — الزامات، طراحی (مدلسازی تهدید)، پیادهسازی (کدنویسی امن، تحلیل)، تأیید (آزمایش، فازینگ) و انتشار — ادغام میکند و به طور قابل اندازهگیری آسیبپذیریهای منتشر شده را کاهش میدهد.
- انتقال به چپ و تضمین خودکار
- یافتن و رفع نقصها در مراحل اولیه («انتقال به چپ») بسیار ارزانتر از پس از استقرار است؛ تحلیل ایستا/پویای خودکار و فازینگ که در یکپارچهسازی مداوم گنجانده شدهاند، تضمین مقیاسپذیر و قابل تکرار را فراهم میکنند.
Mechanisms
توسعه امن با مدلسازی تهدید (مانند STRIDE) آغاز میشود تا مشخص شود چه مشکلاتی ممکن است رخ دهد، و این اطلاعات مبنای طراحیای میشود که اصل حداقل امتیاز و دفاع در عمق را به کار میگیرد. در طول پیادهسازی، استانداردهای کدنویسی امن و تحلیل ایستا الگوهای پرخطر را شناسایی میکنند، در حالی که تحلیل پویا و فازینگ برنامه در حال اجرا را با ورودیهای نادرست آزمایش میکنند تا خرابیها و خطاهای حافظه را آشکار سازند. بازبینی کد و آزمایش امنیت قبل از انتشار انجام میشود، و در DevSecOps این بررسیها به طور خودکار در خط لوله ساخت اجرا میشوند، با اسکن وابستگیها و ساختهای امضا شده که از زنجیره تأمین محافظت میکنند.
Clinical relevance
توسعه امن، امنیت پایه تقریباً تمام نرمافزارهایی را که مردم استفاده میکنند، تعیین میکند. اتخاذ SDL توسط مایکروسافت پس از سال ۲۰۰۲ به طور قابل توجهی آسیبپذیریها را در محصولاتش کاهش داد، فازینگ مداوم (OSS-Fuzz گوگل) هزاران باگ را در کدهای متنباز پرکاربرد پیدا میکند، و شیوههای زنجیره تأمین پس از حملاتی مانند SolarWinds و Log4Shell ضروری شدند. این شیوهها انتظارات نظارتی و الزامات تدارکات را شکل میدهند.
Evidence & guidelines
چارچوبها شامل Microsoft SDL، OWASP SAMM و ASVS، BSIMM (اندازهگیری برنامههای واقعی)، و چارچوب توسعه نرمافزار امن NIST (SSDF, SP 800-218) هستند. راهنمایی اجرایی ایالات متحده اکنون گواهی SSDF را برای تأمینکنندگان نرمافزار دولتی الزامی میکند، و استانداردهای SBOM (صورتحساب مواد نرمافزاری) از شفافیت زنجیره تأمین پشتیبانی میکنند.
History
توسعه امن از این شناخت در اواخر دهه ۱۹۹۰ و اوایل دهه ۲۰۰۰ نشأت گرفت که وصله کردن نرمافزار منتشر شده مقیاسپذیر نیست. ابتکار Trustworthy Computing مایکروسافت در سال ۲۰۰۲ چرخه حیات توسعه امنیت را تولید کرد، و کتاب «امنیت نرمافزار» مکگرا (۲۰۰۶) «ساخت امنیت درونی» را مدون کرد. در دهه ۲۰۱۰ این شیوهها در گردشهای کاری چابک و DevOps (DevSecOps) ادغام شدند و پس از حوادث بزرگ زنجیره تأمین، به وابستگیها و یکپارچگی ساخت گسترش یافتند.
Key figures
- Gary McGraw
- Michael Howard
- Steve Lipner
- Ross Anderson
Related topics
Seminal works
- howard2006
- mcgraw2006
- anderson2020
Frequently asked questions
- مدلسازی تهدید چیست؟
- مدلسازی تهدید یک تحلیل ساختاریافته است که در طول طراحی انجام میشود و به این میپردازد که یک مهاجم ممکن است چه چیزی را هدف قرار دهد و چگونه. تیمها سیستم را نمودار میکنند، تهدیدات را (اغلب با یک چکلیست مانند STRIDE) برمیشمارند و قبل از نوشتن کد، در مورد کاهشدهندهها تصمیم میگیرند، بنابراین امنیت در معماری گنجانده میشود.
- چرا اجرای یک اسکنر امنیتی کافی نیست؟
- اسکنرهای خودکار بسیاری از الگوهای شناخته شده را شناسایی میکنند اما نقصهای طراحی، خطاهای منطق کسبوکار و مسائل جدید را از دست میدهند و هشدارهای مثبت کاذب تولید میکنند. برنامههای مؤثر، تحلیل خودکار را با مدلسازی تهدید، بازبینی دستی و آزمایش در سراسر چرخه حیات ترکیب میکنند.