انجمن گروه موج سازان

نسخه‌ی کامل: برنامه‌ نویسی امن با زبان جاوا - آشنایی
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
روز به روز بر تعداد گزارش‌هایی كه در مورد آسیب‌پذیری در نرم‌افزارها و یا سوءاستفاده از آنها منتشر می‌شود، افزوده می‌گردد و بسیاری از این گزارش‌ها منجر به هشدارهای امنیتی فنی می‌شوند. برای برطرف ساختن این تهدید كه بر روی دولت‌ها، شركت‌ها، موسسات آموزشی و افراد تأثیر می‌گذارد، لازم است سیستم‌هایی فارغ از آسیب‌پذیری‌های نرم‌افزاری طراحی و ایجاد شوند.

بخش عمده‌ای از آسیب‌پذیری‌های نرم‌افزارها بر اثر خطاهای برنامه‌نویسی ایحاد می‌شوند. برای مثال، 64 درصد آسیب‌پذیری‌هایی كه در سال 2004 شناخته شده‌اند مربوط به خطاهای برنامه‌نویسی بوده‌اند.
زبان برنامه‌نویسی جاوا، زبان نسبتاً امنی شناخته می‌شود، چرا كه برای مثال این زبان امكانی را برای دستكاری اشاره‌گرها به صورت صریح ندارد، حدود رشته‌ها و آرایه‌ها به صورت خودكار بررسی می‌شوند، تلاش برای ارجاع به اشاره‌گر تهی ناكام می‌ماند، عملیات‌ ریاضی و تبدیل انواع به خوبی تعریف شده و مستقل از پلت‌فرم هستند، همچنین امكان bytecode verifier تضمین می‌كند كه این بررسی‌ها همواره انجام می‌شوند.علاوه بر این، جاوا دارای مكانیزم‌های جامع امنیتی است به طوری كه می‌تواند دسترسی به فایل‌ها، سوكت‌ها و دیگر منابع حساس را كنترل نماید.

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

در ادامه مواردی كه در آنها احتمال نقض امنیت برنامه‌های جاوا وجود دارد، آورده شده است:


1- اعتبارسنجی ورودی و پاكسازی داده‌ها

اعتبارسنجی به منظور حصول اطمینان از اینكه داده‌های ورودی در دامنه مورد انتظار و معتبر برنامه قرار دارند، انجام می‌شود. این امر مستلزم اینست كه ورودی‌ها، نیازمندی‌های نوع و دامنه عددی را رعایت كرده و همچنین مطابق با متغیرهای كلاس یا زیرسیستم مربوطه باشند.
پاكسازی داده‌ها در مورد حصول اطمینان از تطابق داده‌هایی كه مستقیماً به زیرسیستم‌ها ارسال می‌شوند، انجام میشود.


2- نشت اطلاعات حساس

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


3- نشت قابلیت ها

اصطلاح قابلیت اولین بار توسط Dennis و Van Horn مطرح شد. ایده اصلی اینست كه هر برنامه برای دسترسی به یك شئ باید مجوز لازم را دارا باشد. این مجوز شئ مورد نظر را معین كرده و به برنامه اجازه اجرای مجموعه مشخصی از عملیات‌ها (مانند خواندن یا نوشتن) را بر روی شئ مذكور می‌دهد. چنین مجوزی به عنوان قابلیت شناخته می‌شود.
یكی از منابع اصلی نشت قابلیت‌ها كلاس‌های داخلی (Inner classes) هستند، زیرا كلاس‌ها به همه فیلدهای كلاس‌های داخلی خود نیز دسترسی دارند. امكان bytecodes برای جاوا در این زمینه كمبود داشته و از كلاس‌های داخلی پشتیبانی نمی‌نماید و در نتیجه در زمان كامپایل به صورت كلاس‌های معمولی در می‌آیند.


4- انكار سرویس

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


5- ارتقای حق دسترسی

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


در قسمت‌های بعدی این سلسله مقالات هر كدام از شرایط مطرح شده را به صورت مفصل و با جزئیات مربوطه شرح خواهیم داد.



منبع