ايسنا - جهت تضمین امنیت نرمافزار لازم است آسیبپذیریهای مربوط به نرمافزار شناسایی شده و راهكارهای مناسب برای جلوگیری و یا مقابله با آنها تهیه شود.
طراحی و مهندسی ضعیف نرمافزار و یا بهرهبرداری ناامن از آن، ریشه اصلی بسیاری از آسیبپذیریهای امنیتی در سیستمهای رایانهای است، به همین دلیل امنیت نرمافزار به عنوان یكی از مباحث كلیدی مهندسی نرمافزار شناخته شده است.
جهت تضمین امنیت نرمافزار لازم است آسیبپذیریهای مربوط به نرمافزار شناسایی شده و راهكارهای مناسب برای جلوگیری و یا مقابله با آنها تهیه شود.
نرمافزارها به طور كلی دارای دو نوع آسیبپذیری هستند، نوع اول مربوط به ضعفهای بنیادی موجود در نرمافزارها میشود كه اینگونه از ضعفهای امنیتی را نمیتوان از بین برد، لذا برای مقابله با آنها لازم است ابتدا آنها را شناسایی كرده و سپس با استفاده از استراتژی دفاع چند لایه، احتمال سوءاستفاده از آنها را كاهش داد.
نوع دیگری از ضعفهای امنیتی نیز وجود دارند كه در زمان طراحی و پیادهسازی نرم افزار ایجاد میگردند. معمولاً اینگونه از ضعفهای امنیتی قابل پیشگیری هستند.
این امر تا حد زیادی با رعایت الزامات امنیتی در زمان طراحی، پیادهسازی و تست نرمافزار محقق میگردد.
لازم است برای آن دسته از آسیبپذیریهایی كه به هر دلیل در حین پیادهسازی نرمافزار مخفی میمانند و بعد از تولید نرمافزار شناسایی میشوند، بلافاصله اصلاحیه مربوطه ایجاد و نصب گردد و در غیر اینصورت راهكاری برای كاهش خطر تا زمانی كه اصلاحیه مربوطه تهیه گردد، ارائه شود.
به همین دلیل نصب به موقع اصلاحیهها یكی از الزامات امنیتی در بهرهبرداری از انواع نرمافزارها است. در ادامه طبقهبندی آسیبپذیریهای نرمافزار شرح داده شده است.
آسیبپذیریهای طراحی
آسیبپذیری طراحی از یك اشتباه زیربنایی و یا یك اشتباه سهوی در طراحی نرمافزار سرچشمه میگیرد. در صورت وجود یك نقص در طراحی، قطعاً نرمافزار مذكور امن نخواهد بود، زیرا نرمافزارها كاری را انجام میدهند كه برای آن طراحی شدهاند و در این صورت برای انجام كاری نادرست طراحی شدهاند.
این نوع از نقصها معمولاً به علت وجود پیشفرضهایی در مورد محیطی كه نرمافزار در آن اجرا میشود، به وجود میآیند. این آسیبپذیریها معمولاً به عنوان آسیبپذیریهای سطح بالا، نقصهای معماری و یا مشكلات موجود در نیازمندیها و محدودیتهای برنامه نیز شناخته میشوند.
برای مثال پروتكل TELNET برای اتصال به یك دستگاه از راه دور طراحی شده است. از دیدگاه طراحی، این پروتكل دارای آسیبپذیری است، زیرا بر ارتباطات ناامن تكیه كرده است. این پروتكل فقط در محیطهایی كه زیرساخت شبكه قابل اعتماد باشد امن است، اما در محیطهایی همچون اینترنت میتواند بسیار خطرناك باشد.
آسیبپذیریهای پیادهسازی
در آسیبپذیریهای پیادهسازی، معمولاً كد منبع آن كاری را كه باید انجام دهد، انجام میدهد، اما مشكل امنیتی در شیوه اجرای عملیات است. این آسیبپذیریها معمولاً زمانی رخ میدهند كه پیادهسازی به منظور حل برخی مشكلات فنی از طراحی منحرف میشود.
معمولاً حالتهای قابل سوءاستفاده به علت اختلافات جزئی در محیطهای پیادهسازی و زبانهای برنامهنویسی مورد استفاده رخ میدهند. به آسیبپذیریهای پیادهسازی، آسیبپذیریهای سطح پایین یا نقصهای فنی نیز گفته میشود.
برای مثال در برخی نسخههای قدیمی TELNET، آسیبپذیریهای پیادهسازی همچون عدم پاكسازی كامل متغیرهای محیطی وجود دارد كه به مهاجمان اجازه میدهد حق دسترسی خود را در دستگاههای دارای سیستم عامل یونیكس بالا ببرند.
آسیبپذیریهای عملیاتی
بر اساس اعلام مركز مديريت امداد و هماهنگي رخدادهاي رايانهاي، آسيبپذیریهای عملیاتی آن دسته از مشكلات امنیتی هستند كه هنگام پروسههای عملیاتی و استفاده از یك جزء نرمافزار در یك محیط خاص روی میدهند. راه تشخیص این دسته از آسیبپذیریها اینست كه آنها در كد منبع وجود ندارند و از شیوه تعامل نرمافزار با محیط ایجاد میشوند.
آسیبپذیریهایی كه بر اثر پیكربندی نادرست نرمافزار در محیط اجرایی ایجاد میشوند، نیز جزء این دسته از آسیبپذیریها به حساب میآیند. همچنین آسیبپذیریهای مربوط به حملات مهندسی اجتماعی و سرقت نیز به عنوان آسیبپذیریهای عملیاتی شناخته میشوند.
برای مثال در TELNET، با توجه به این نكته كه نقص طراحی به علت عدم رمزنگاری در آن وجود دارد، در صورتی كه نرمافزاری از آن برای به روزرسانی برخی اطلاعات استفاده كند، وابسته به اینكه محیط امن باشد یا خیر میتواند منجر به یك آسیبپذیری عملیاتی شود.