IRCAR201212160
تاريخ: 04/10/91
روز به روز بر تعداد گزارشهايي كه در مورد آسيبپذيري در نرمافزارها و يا سوءاستفاده از آنها منتشر ميشود، افزوده ميگردد و بسياري از اين گزارشها منجر به هشدارهاي امنيتي فني ميشوند. براي برطرف ساختن اين تهديد كه بر روي دولتها، شركتها، موسسات آموزشي و افراد تأثير ميگذارد، لازم است سيستمهايي فارغ از آسيبپذيريهاي نرمافزاري طراحي و ايجاد شوند.
بخش عمدهاي از آسيبپذيريهاي نرمافزارها بر اثر خطاهاي برنامهنويسي ايحاد ميشوند. براي مثال، 64 درصد آسيبپذيريهايي كه در سال 2004 شناخته شدهاند مربوط به خطاهاي برنامهنويسي بودهاند.
زبان برنامهنويسي جاوا، زبان نسبتاً امني شناخته ميشود، چرا كه براي مثال اين زبان امكاني را براي دستكاري اشارهگرها به صورت صريح ندارد، حدود رشتهها و آرايهها به صورت خودكار بررسي ميشوند، تلاش براي ارجاع به اشارهگر تهي ناكام ميماند، عمليات رياضي و تبديل انواع به خوبي تعريف شده و مستقل از پلتفرم هستند، همچنين امكان bytecode verifier تضمين ميكند كه اين بررسيها همواره انجام ميشوند.علاوه بر اين، جاوا داراي مكانيزمهاي جامع امنيتي است به طوري كه ميتواند دسترسي به فايلها، سوكتها و ديگر منابع حساس را كنترل نمايد.
با اين وجود، امنيت برنامههاي جاوا در شرايطي به خطر ميافتد. در ادامه به صورت خلاصه شرايطي را شرح ميدهيم كه در آنها امكان مورد سوءاستفاده قرار گرفتن برنامههاي جاوا وجود دارد و سپس مثالهايي از قوانيني را توضيح ميدهيم كه رعايت آنها منجر به كاهش اين نوع حملات ميشود. البته تمام قوانين براي تمام برنامههاي جاوا صدق نميكنند و كاربرد آنها بستگي به چگونگي به كارگيري برنامه جاوا و همچنين فرضهاي طراح در مورد ميزان امنيت برنامه دارد.
در ادامه مواردي كه در آنها احتمال نقض امنيت برنامههاي جاوا وجود دارد، آورده شده است:
اعتبارسنجي ورودي و پاكسازي دادهها
اعتبارسنجي به منظور حصول اطمينان از اينكه دادههاي ورودي در دامنه مورد انتظار و معتبر برنامه قرار دارند، انجام ميشود. اين امر مستلزم اينست كه وروديها، نيازمنديهاي نوع و دامنه عددي را رعايت كرده و همچنين مطابق با متغيرهاي كلاس يا زيرسيستم مربوطه باشند.
پاكسازي دادهها در مورد حصول اطمينان از تطابق دادههايي كه مستقيماً به زيرسيستمها ارسال ميشوند، انجام ميشود.
نشت اطلاعات حساس
ميزان حساسيت اطلاعات را سياست امنيتي تعيين ميكند، اما به طور كلي اطلاعاتي مانند كارتهاي اعتباري، رمز عبور و كليدهاي خصوصي به عنوان اطلاعات حساس شناخته ميشوند. زماني كه اجزاي برنامه با درجات متفاوتي از ميزان اعتماد، اطلاعات را با يكديگر به اشتراك ميگذارند، احتمال نشت اطلاعات وجود دارد. زماني كه يك برنامه قصد انتقال اطلاعات به جزء ديگري از برنامه را دارد، بايد ابتدا اطمينان حاصل كند كه جزء مذكور حق دسترسي به اطلاعات را دارد.
نشت قابليت ها
اصطلاح قابليت اولين بار توسط Dennis و Van Horn مطرح شد. ايده اصلي اينست كه هر برنامه براي دسترسي به يك شئ بايد مجوز لازم را دارا باشد. اين مجوز شئ مورد نظر را معين كرده و به برنامه اجازه اجراي مجموعه مشخصي از عملياتها (مانند خواندن يا نوشتن) را بر روي شئ مذكور ميدهد. چنين مجوزي به عنوان قابليت شناخته ميشود.
يكي از منابع اصلي نشت قابليتها كلاسهاي داخلي (Inner classes) هستند، زيرا كلاسها به همه فيلدهاي كلاسهاي داخلي خود نيز دسترسي دارند. امكان bytecodes براي جاوا در اين زمينه كمبود داشته و از كلاسهاي داخلي پشتيباني نمينمايد و در نتيجه در زمان كامپايل به صورت كلاسهاي معمولي در ميآيند.
انكار سرويس
حملات انكار سرويس تلاش مي كنند تا يك منبع كامپيوتري را از دسترس كاربران خارج كرده و يا كاري كنند تا به اندازه كافي در اختيار كاربران مورد نظر قرار نداشته باشد. با وجود اينكه اين حملات معمولاً براي سرورها نگرانيهاي جدي ايجاد ميكنند ولي ميتوانند براي هر نوع از برنامههاي كاربردي اتفاق بيفتند.
ارتقاي حق دسترسي
بنا بر اصل حداقل حق دسترسي، هر برنامه و هر كاربر بايد با استفاده از حداقل دسترسي هاي مورد نياز عمليات مورد نياز خود را تكميل نمايد. اجراي برنامهها با حداقل حق دسترسي ميزان سوءاستفادهها را در صورتي كه يك آسيبپذيري در كد برنامه كشف شود، به حداقل ميرساند. اين اصل ميتواند به طرق گوناگون در زبان برنامهنويسي جاوا به كار گرفته شود. به طور معمول يك سيستم داراي اجزايي است كه به صورت پيشفرض از يك سري حق دسترسيهاي پايه استفاده ميكنند و تنها تعداد كمي از اجزا نيازمند حق دسترسيهاي بيشتري هستند. به حق دسترسي آنها، حق دسترسيهاي ارتقا يافته اطلاق ميشود. سياستي كه حق دسترسيها را تعريف ميكند بايد تا حد امكان برنامهها را محدود نمايد.
در قسمتهاي بعدي اين سلسله مقالات هر كدام از شرايط مطرح شده را به صورت مفصل و با جزئيات مربوطه شرح خواهيم داد.
- 6