کدنویسی امن (Secure Coding) چیست؟
امروزه بسیاری از نشتهای اطلاعاتی و همچنین تصاحب زیرساخت سازمانها، از طریق آسیبپذیریهای اپلیکیشنها رخ میدهد. از این رو اهمیت توجه به امنیت نرم افزار و به خصوص کدنویسی امن (Secure Coding) برای افزایش آگاهی رسانی امنیتی توسعه دهندگان، مدیران سیستم و همچنین کاهش آسیبپذیریها در سطح اپلیکیشن (برنامه) امری ضروری خواهد بود.
به عبارت دیگر، کدنویسی امن، مجموعهای از اقدامات است که ملاحظات امنیتی را برای نحوه کدگذاری و رمزگذاری نرمافزارها با اجرای بهترین دفاع در برابر حملات سایبری یا آسیبپذیریها اعمال میکند.

به صورت کلی مفهوم کدنویسی امن (Secure Coding) شامل چرخه توسعه امن و امنیت نرم افزار، شناسایی تهدیدات امنیتی در سطح سورس کد و روشهای جلوگیری از بروز آسیبپذیری و رفع آنها است.
نحوه شناسایی آسیبپذیریها بر اساس مدلهای تهدیدات تدوین شده است و مستندات معماری نرمافزار در سطح سورس کد، به دو روش دستی و خودکار انجام میگردد. در روش دستی بر اساس الگوهای آسیبپذیری و الگوهای نرمافزار و همچنین در روش خودکار بررسی با استفاده از اسکنرها یا پویشگرهای تجاری مانند checkmarx ، fortify sca ، semgrep و codeql صورت میگیرد.
چرا به کدنویسی امن (Secure Coding) نیاز داریم؟
در چرخه بسیاری از حملات گروههای پیشرفته و همچنین نشتهای اطلاعاتی، آسیب پذیریهای اپلیکیشن و عدم تنظیمات صحیح امنیتی، منجر به دسترسی مهاجمان به اطلاعات سازمان میگردد. با توجه به اهمیت اپلیکیشن و امنیت نرم افزار در ریسکهای مرتبط با سازمان، پیشنهاد میشود که مفهوم SSDLC برای تیمهای توسعه اجرایی گردد.

اجزای امنیت نرم افزار در کدنویسی امن
چرخه توسعه امن محصول یا SDLC شامل مراحل ذیل است.
آموزش و آگاهی رسانی در کدنویسی امن
بر اساس دورههای آموزشی مطرح در حوزه امنیت نرم افزار به خصوص کدنویسی امن (Secure Coding)، توسعه دهندگان و مدیران سیستم، برای افزایش دانش خود، آموزش خواهند دید. همچنین در این مرحله انواع داراییهای آموزشی مانند کتابچه و چک لیست نیز تدوین میگردد.
نیاز سنجی امنیتی
کلیه نیازمندیهای طراحی، توسعه و استقرار اپلیکیشن، بعد از بررسی امنیتی، به صورت الگو با کمک ابزارهای ترسیم، اجرا میشوند.
اولویت و متدولوژی
با توجه به سطح اهمیت و اولویت در نوع ریسکهای احتمالی، بر اساس الگوهای امنیتی از پیش تعیین شده، طراحی و توسعه آنها، پیاده سازی خواهد شد.
تشخیص الگو تهدیدات در کدنویسی امن (Secure Coding)
پس از ایجاد مدلهای نیازمندی و همچنین مشخص کردن متدولوژیها، الگوهای تهدیدات امنیتی بر اساس آسیب پذیریها و ریسکهای موجود، مدلهای عملیاتی رویکرد جلوگیری و پچ نمودن آسیب پذیری های مشخص میگردند.
نیاز سنجی معماری
در این مرحله بر اساس بخشهای مختلف سامانه معماری و کدنویسی امن، مکانیزمهای امنیتی در خصوص پیادهسازی و جلوگیری از بروز آسیبپذیری، مشخص خواهند شد.
- ماژولار بودن: برنامهی خود را به چند بخش مستقل تقسیم کنید
- جداسازی: هر بخش برنامه باید توانایی عملکرد درست را بدون درنظر گرفتن سایر بخشهای برنامه داشته باشد
- دفاع در عمق: به جای اعتماد به یک مکانیسم حفاطتی، چند لایهی دفاعی برای سیستم خود درنظر بگیرید
- ساده سازی: با استفاده از راهکارهای پیچیده، ممکن است کد نوشته شده خود را، ناامن کنید

تعیین الگوریتمهای رمزنگاری
نوع الگوریتم مناسب برای حفظ محرمانگی و یکپارچگی آن، با توجه به کلیه دادهها بر اساس اولویت و سطح اهمیت آنها، مشخص میگردد. همچنین الگوریتمهای مورد استفاده از لحاظ امنیت نرم افزار بررسی و ملاحظات مربوطه تدوین میشوند.
تعیین ریسکهای مرتبط با شرکتهای سوم شخص (third party)
امروزه بسیاری از منابع مورد استفاده توسط اپلیکیشنها، از طریق درگاههای واسطه دریافت میشوند. با این وجود، ملاحظات امنیتی در خصوص ورودی و خروجیهای اپلیکیشن بررسی و نوع ارتباط با شرکتهای واسطه و سورسهای آنها، بررسی میگردد. همچنین با توجه به سطح اهمیت دارایی مورد استفاده، ملاحظات امنیتی برای ایزوله نمودن ورودی و خروجیها نیز مشخص میشوند.
تعیین ابزارها در کدنویسی امن (Secure Coding)
در این مرحله از چرخه کدنویسی امن (Secure Coding)، برای آنکه رویکرد استفاده از ابزارها، در جهت افزایش امنیت اپلیکیشن و کاهش ریسکهای امنیت نرم افزار در سطح سورس کد راه اندازی شود، ابزارهای مورد نیاز برای تیم توسعه، تیم معماری و همچنین مدیران محصول، نصب و تنظیم میگردد.
بررسی امنیتی به صورت ثابت (SAST)
یکی از مهمترین مراحل در چرخه کدنویسی امن محصول، بررسی و پایش سورس کد است که به دو روش دستی و خودکار انجام میگردد بدین سبب کلیه آسیبپذیریها در سطح سورس کد به صورت commit based, model based, component based بررسی و مشخص میگردند.
مقاله پیشنهادی برای مطلعه
تست استاتیک امنیت اپلیکیشن (SAST) چیست؟
بررسی امنیتی به صورت پویا (DAST)
یکی دیگر از مراحل مهم در چرخه کدنویسی امن محصول، بررسی و پایش اپلیکیشن بدون دسترسی به سورس کد است. به این صورت که کلیه ورودی و خروجیهای اپلیکیشن بررسی و آسیب پذیریهای موجود شناسایی میشوند.
تست نفوذ (Penetration Testing)
در این مرحله از کدنویسی امن (Secure Coding)، گزارشهایی به همراه روشهای بهره برداری از کلیه آسیب پذیریهای قابل شناسایی، انجام میشود. اپلیکیشنها بدون دسترسی به سورس کد و بر اساس تست کیسهای OWASP، به دو صورت داخلی و خارجی بررسی میگردند.
اگر هنوز با مفهوم تست نفوذ (Pentest)، آشنایی ندارید، پیشنهاد ما به شما، مطالعه مقاله تست نفوذ چیست؟ است. همچنین درصورت نیاز به مشاوره در این خصوص، میتوانید با حادث در ارتباط باشید.
درصورتی که علاقمند به مطالعه مطالب بیشتر در حوزه امنیت سایبری هستید، میتوانید با مراجعه به وبلاگ شرکت ایمن برهان رهیافت آذرحش (امنیت سایبری حادث) از مقالات ما در این حوزه استفاده کنید.

ایجاد الگو پاسخگویی به تهدیدات
در مرحله پاسخگویی به تهدیدات، کلیه خروجیهای مراحل قبل به همراه مدلهای تهدید، بر اساس معماری اپلیکیشن و همچنین گزارشات SAST, DAST, IAST و تست نفوذ، برای مانیتور کردن اپلیکیشن به صورت دائمی، استفاده میشوند.
خدمات کدنویسی امن (Secure Coding) و انواع آنها
خدمات کدنویسی امن و پویش آسیب پذیریها در سطح سورس کد، شامل بررسی به سه روش SAST و DAST و همچنین روش ترکیبی IAST است.
- روش SAST: کلیه آسیب پذیریها در سطح سورس کد، با توجه به الگوهای تعیین شده، شناسایی میشوند.
- روش DAST: کلیه آسیب پذیریها بدون دسترسی مستقیم به سورس کد پیدا میشوند.
- روش IAST: کلیه اجزا اپلیکیشن با در نظر گرفتن ورودی _ خروجیهای مربوطه و همچنین اطلاعات جمع آوری شده در DAST به صورت ترکیبی بررسی خواهند شد.

متدولوژی مختلف در کدنویسی امن (Secure Coding)
بررسی آسیب پذیریها در سطح سورس کد، بر اساس منابع اصلی زبان برنامه نویسی انجام میگیرد. همچنین الگوهای از پیش تعیین شده و Best Practice های امنیتی به کمک بسیاری از آسیب پذیریها در سطح سورس کد شناسایی میشوند. در این روش باید نحوه بهره برداری مهاجم از کلیه آسیب پذیریها مجددا بررسی گردد.
ابزارهای مورد استفاده در این روش
برای بررسی آسیب پذیریها در سطح سورس کد، ابزارهای زیادی وجود دارند که بر اساس الگوهای مشخص و همچنین الگوریتمهای هوش مصنوعی، شناسایی خواهند شد. به صورت کلی این ابزارها در سطح سورس کد، به دو دسته ابزارهای SAST و IAST تقسیم میگردند. از طرفی اپراتور استفاده کننده از ابزار، وظیفه تشخیص آسیب پذیری و نحوه جلوگیری از آن در کدنویسی امن (Secure Coding) را دارد. زیرا واحد انسانی باید بسیاری از آسیب پذیریهای شناسایی شده و False Positive ها را مجددا بررسی کند .
چرا کدنویسی امن برای ما مناسب است؟
امروزه بیش از هر زمان دیگری نیاز به امنیت در دنیای تکنولوژی احساس میشود. وجود نقاط آسیبپذیری در نرمافزارها، آسیبهای مختلفی به سازمانها وارد میکنند. درنتیجه شرکتها به دنبال روشهای ارتقای امنیت نرمافزارها و حفظ اطلاعات مهم خود و همچنین کاربران خود هستند. متخصصان ما در حوزه امنیت سایبری، با توجه به تنکاتی که در این مقاله ذکر شد، میتوانند عملکرد خوبی در ارتقای سطح امنیتی سازمان شما داشته باشند. همچنین میتوانند با استفاده از ابزارهای تست امنیت نرمافزار مختلف، نقاط آسیبپذیری در سیستم شما را کشف و آنها را رفع کنند.
بسیاری از سازمانها از خدمات تست نفوذ برای پایش آسیبپذیری و افزایش امنیت اپلیکیشن استفاده مینمایند. در فرآیند امنیت نرمافزار، با توجه به معماری و مدلهای تهدیدات اپلیکیشن، خدمات کدنویسی امن ارائه میگردد. با توجه به شناسایی اغلب آسیبپذیریهای حیاتی در سطح سورس کد، میتوان نتیجه گرفت که استفاده از خدمات کدنویسی امن (Secure Coding) مانند روش تست استاتیم امنیت اپلیکیشن (SAST) پیشنهاد میگردد.
با توجه به اینکه پیشتر، مفهوم تست استاتیک امنیت اپلیکیشن (SAST) را توضیح دادیم، اگر شما برای سازمان خود نیاز به این محصول و یا پشتیبانی در خصوص خدمات کدنویسی امن را دارید، اینجا کلیک کنید.