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