مارس 20, 2019 توسط sobhan 0

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

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

مقایسه قابلیت های زبان های برنامه نویسی

هنگام توسعه نرم افزار وقتی پارامتر امنیت وارد کار می شود، طبق مدل Software Assurance Matrurity در OWASP، لازم است اقدامات امنیتی زیر را به منظور کاهش ریسک های امنیتی اجرا نمود:

  1. راهبرد و معیارها: علاوه بر ایجاد نمودن یک Roadmap امنیتی یکپارچه، Risk Tolerance (تحمل ریسک) منسجم را تنظیم کرده و هزینه‌ها را با توجه به منابع موجود تخصیص دهید.
  2. آموزش و راهنمایی:‌آموزش Software Development Life Cycle یا به اختصار SDLC را به صورت ایمن و در نقش های خاص فراهم کنید.
  3. سیاست و تطابق‌پذیری: تطبیق‏ پذیری درایورها را استخراج و سپس Gateهای انطباق‌پذیر را ایجاد کرده و همچنین برای فراهم نمودن شرایط ممیزی، داده‌های مناسبی جمع‌آوری کنید.

ساختار

  1. ارزیابی تهدید: تهدیدات مختص به برنامه را شناسایی، ارزیابی و آنها را تا حد ممکن کاهش دهید.
  2. الزامات امنیتی: کنترل‌های امنیتی لازم از جمله موافقت‌نامه‌های تامین­ کنندگان داخلی را در دستورالعمل ها و چک لیست ها مشخصی تدوین کرده و اجرا نمایید.
  3. معماری امن: یک چارچوب توسعه نرم‌افزار اتخاذ کرده و علاوه بر شناسایی الگوهای طراحی ایمن، اصول Secure-By-Default را اعمال کنید.

تاییدیه

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

عملیات

  1. مدیریت بحران: برای مواجهه راهبردی با آسیب‌پذیری‌ ها تیم های فنی و اجرایی را ایجاد کنید و ضمن پیاده­ سازی فرایند افشای مسائل امنیتی (با در نظر گرفتن دریافت پاداش در ازای پیدا کردن Bug) و اجرای تجزیه و تحلیل دقیق و ریشه‌ای، معیارهای مربوط به هر موضوع را مشخص کنید.
  2. امن­ سازی محیط: نسخه‌­­های بروزرسانی و Patchهای ضروری را نصب کرده، پیکربندی­ های موجود در شبکه را مانیتور کرده و همچنین ابزارهای حفاظت از شبکه را پیاده­ سازی کنید.
  3. امکان فعال‌سازی عملیات: ارتباطات میان تیم‌های توسعه و اپراتورها تسهیل شوند. از اطلاعات امنیتی مهم محافظت کرده و فرایندهای متداول برای هشدارهای امنیتی بکار گرفته شوند. همچنین فرایندهای مدیریت تغییرات در هر انتشار/ورژن و اجرای Code Signing ایجاد شود.

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

میزان آسیب پذیری های زبان های برنامه نویسی رایج متن باز به شرح زیر هستند:

  1. C: 46.9%
  2. PHP: 16.7%
  3. Java: 11.4%
  4. JavaScript: 10.2%
  5. Python: 5.45%
  6. C++: 5.23%
  7. Ruby: 4.25%

در ادامه مرور کوتاهی بر این زبان ها می شود:

زبان برنامه نویسی C:

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

زبان برنامه نویسی اسمبلی:

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

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

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

زبان برنامه نویسی PHP:

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

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

زمانی که به عنوان یک متخصص امنیت سایبری فعالیت می کنید، یکی از وظایف شما اجرای آزمایش های نفوذپذیری خواهد بود. این حملات شبیه سازی شده می تواند ارزیابی مناسبی از میزان خسارات احتمالی یک حمله واقعی در اختیار شما قرار دهد . حملات XSS یا Cross-site Scripting شامل اضافه کردن کدهای مخرب به اسکریپ های یک وب سایت است و در صورت داشتن دانش کافی از جاوا اسکریپت، به سرعت می توانید حملات XSS را شناسایی کرده و مشکلات مربوط به آن را در کوتاه ترین زمان ممکن برطرف کنید. در مورد جاوا گزارش شده است که آسیب پذیری های امنیتی زبان برنامه نویسی جاوا از سال ۲۰۱۵ کاهش یافته است.

زبان برنامه نویسی SQL:

اکثر زبان های برنامه نویسی امکان ایجاد ابزارهای خودکار برای نظارت بر وب سایت ها یا مشخص کردن سطح ایمنی آنها در برابر حملات را فراهم می کنند. یکی از بهترین این زبان ها SQL (Structured Query Language) است. تعداد حملات سایبری شناخته شده با عنوان SQL Injection به سرعت در حال افزایش است که در آن از داده های موجود در بانک اطلاعاتی یک سرویس یا وب سایت به صورت غیرمجاز استفاده می شود. احتمالا مشهورترین این حملات، دسته ای هستند که به سرقت اطلاعات کارت های بانکی و مشخصات فردی کاربران می پردازند و ممکن است آسیب های مالی بسیار زیادی به آنها وارد کنند. مشخصات برجسته زبان SQL عبارتند از:

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

زبان برنامه نویسی ++C:

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

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

رفتار تعریف نشده ممکن است شامل مختل شدن عملکرد برنامه(Crash) خروجی نامربوط و غلط، بروز آسیب پذیری های نرم افزاری و موارد دیگر می باشد. وجود رفتار نامتعارف در یک برنامه نه تنها امنیت خود آن برنامه، بلکه ممکن است امنیت سیستم عامل، شبکه را نیز به خطر اندازد. از مباحث مهم برنامه نویسی تدافعی و ایمن، جلوگیری از بروز رفتارهای تعریف نشده و مقابله با آن ها است. برگفته از iostream.

زبان برنامه نویسی Ruby:

زبان برنامه نویسی Ruby در سال ۱۹۹۰ توسط ماتسوموتو ایجاد شد. روبی زبان برنامه نویسی تماما شی گرا است. با توجه به همه منظوره بودن و تفسیر پذیری آن میتوان گفت مشابه زبان های .زبان های برنامه نویسی پرل ( Perl ) و پایتون ( python ) است. قابلیت های برجسته زبان روبی عبارتند از:

  • زبان برنامه نویسی روبی ، یک زبان متن باز بوده و بطور رایگان در وب در دسترس است، اما دارای کپی رایت است.
  • منظوره و تفسیر شده است.
  • شئ گرا است.
  • زبان برنامه نویسی Ruby، زبان اسکریپت نویسی سمت سرور همانند زبان پرل و زبان پایتون است.
  • از زبان برنامه نویسی روبی می توان برای نوشتن اسکریپت های رابط دروازه عمومی ( CGI ) استفاده کرد.
  • از زبان برنامه نویسی Ruby می توان در زبان نشانه گذاری فرا متنی ( HTML ) استفاده کرد.
  • سینتکس بی نقص و آسانی دارد که امکان یادگیری بسیار سریع و آسان زبان برنامه نویسی Ruby را برای یک توسعه دهنده جدید فراهم می آورد. سینتکس زبان برنامه نویسی Ruby شبیه سینتکس بسیاری از زبان های برنامه نویسی از قبیل زبان برنامه نویسی C++ و پرل است.
  • زبان برنامه نویسی روبی بسیار مقیاس پذیر بوده و برنامه های بزرگ نوشته شده در زبان برنامه نویسی روبی به آسانی قابل نگهداری هستند.
  • از زبان برنامه نویسی Ruby می توان برای توسعه برنامه های کاربردی اینترنت و اینترانت استفاده کرد.
  • زبان برنامه نویسی روبی در محیط های ویندوز و POSIX قابل نصب است.
  • زبان برنامه نویسی Ruby از ابزارهای GUI نظیر Tcl / TK ، GTK و OpenGL پشتیبانی می کند.
  • زبان برنامه نویسی روبی به سادگی به DB ، MySQL ، Oracle و Sybase متصل می شود.
  • این زبان دارای مجموعه ای غنی از توابع داخلی بوده که می توانند مستقیما در اسکریپت های زبان برنامه نویسی روبی مورد استفاده قرار گیرند.

موارد استفاده زبان های برنامه نویسی مشهور:

توسعه‌ی نرم‌افزار‌های دسکتاپ: C/C++, Java, Delphi, VB.Net, C#, JavaScript, Objective-C

توسعه‌ی وب‌سایت: C++, Java, Php, JavaScript, C#, Ruby, Python

توسعه‌ی نرم‌افزار‌های موبایل: , C++, Java, Objective-C, Swift, JavaScript, Kotlin

توسعه‌ی نرم‌افزار‌های اِمبِد: C/C++, Python

توسعه‌‌ی بازی‌های کامپیوتری: ++C و #C

توسعه‌ی هوش مصنوعی: C++,Python, R, Prolog, Java, Haskell, AIML

توسعه‌ی رابط‌کاربری: JavaScript, QML, XAML

از ما حمایت کنید

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