ارزیابی امنیت کد سامانه های ایستا و پویا

توسعه و تولید نرم افزار های امن

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

اکثر سازمان‌ها برای محفاظت از مرزهای شبکه خود در برابر تهدیدات امنیتی، منابع، زمان و هزینه زیادی را صرف می‌کنند. غافل از اینکه یک راهکار امنیتی، هر چقدر هم که مستحکم باشد، معمولا در حفاظت از آسیب‌پذیری‌های داخل شبکه خصوصا در لایه برنامه‌های کاربردی ضعف‌های زیادی دارد. بر اساس گزارش منتشر شده توسط شرکت امنیتی Veracode در سال ۲۰۲۰، از تعداد ۸۵٫۰۰۰ برنامه کاربردی که بر روی آن‌ها آزمون ارزیابی امنیتی انجام شده، نزدیک به ۸۳ درصد آن‌ها دارای حداقل یک نقص امنیتی بوده‌اند. بسیاری از این برنامه‌ها، بیش از یک نقص داشتند و حدودا ۲۰ درصد از برنامه‌ها، حداقل یک آسیب‌پذیری با درجه اهمیت بالا داشتنه‌اند. در مجموع ۱۰ میلیون نقص امنیتی در این پژوهش ثبت شده است. این آمار نگران‌ کننده نشان می‌دهد که سازمان‌ها و شرکت‌ها هرچه سریعتر می‌بایست نقایص امنیتی موجود در نرم‌افزارهایشان را برطرف کنند. می‌توان گفت که بروز نقص یا اشتباه در فرآیند توسعه نرم‌افزار تقریبا اجتناب ناپذیر است. برای مثال یکی از اشتباهات رایج در هنگام توسعه نرم‌افزار این است که ورودی‌های کاربر تایید نشوند. این اشتباه، نرم‌افزار را در برابر حمله تزریق SQL، آسیب‌پذیر می‌کند و می‌تواند منجر به نشت اطلاعات گردد. نکته اساسی اینجاست که این اشتباهات بایستی در زمان مناسب شناسایی و اصلاح گردند.

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

چرا امنیت نرم‌افزارها به اندازه امنیت شبکه مورد توجه قرار نمی‌گیرد؟

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

راهکار چیست؟

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

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

آیا افزودن امنیت باعث کاهش سرعت توسعه و انتشار نرم‌افزار خواهد شد؟

اگر اینکار به درستی انجام شود جواب منفی است. به طور کلی هر گونه استفاده جدید از ابزار یا راهکاری که به طور یکپارچه و شفاف در فرآیندهای موجود ادغام نشود، سرعت آن‌ها را کاش می‌دهند. در اکثر پروژه‌های موفق نرم‌افزاری، امنیت بدون ایجاد اختلال، در فرآیند توسعه نرم‌افزار (DevOps) ادغام می‌شود. برای مثال خط تولید یک یک کارخانه مواد غذایی را در نظر بگیرید که دارای چندین ورودی است و هر ورودی، مواد خوراکی منجمد را در ۱۰۰ دقیقه تولید می‌کند. اگر قرار باشد برای رعایت الزامات بهداشتی و موارد ایمنی در این خط تولید مثلا جداسازی ذرات فلز موجود در غذا، هر بار از وردی‌ها خارج شوید و اینکار را به صورت دستی انجام دهید، سرعت تولید به طرز چشمگیری کاهش خواهد یافت. همین رویکرد در فرآیند توسعه نرم‌افزار هم کاربرد دارد و اگر به صورت صحیح پیاده‌سازی گردد کیفیت و سرعت توسعه محصول به مراتب بالاتر خواهد رفت.

یکپارچه‌سازی امنیت در فرآیند توسعه نرم‌افزار

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

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

ارزیابی امنیت سامانه‌های نرم‌افزاری

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

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

توسعه نرم‌افزار امن

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

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

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

ایجاد و توسعه ابزارهای امنیتی

مشاور هوشمند مجازی امنیت (VISC (Virtual Intelligence Security Consultants به عنوان یکی از نخستین سامانه‌های نرم افزاری حوزه خدمات امنیت اطلاعات در مجموعه آرمان داده پویان می‌باشد. محصولی که با هدف آگاهی رسانی امنیتی و کمک به ایجاد حداقل‌های امنیتی در سازمان‌ها، طراحی گردید. این ابزار به عنوان یک سامانه اطلاع رسانی با قابلیت ایجاد یک نمایه از مشترکین و ارائه مستندات امنیتی به آنها عمل می‌نماید. با تکمیل نمایه اطلاعاتی و در نهایت بهره‌گیری از پایگاه دانش ایجاد شده این محصول می‌تواند مستندات امنیتی لازم را ایجاد و در اختیار مشتری قرار دهد. ایده این محصول در سال ۱۳۸۸ جزو یکی از سه ایده برتر در همایش شیخ بهایی شناخته شد و دانشگاه شهید بهشتی به عنوان پشتیبان از این طرح اعلام آمادگی نمود.

توسعه افزونه‌های امنیتی برای سامانه‌های موجود

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