رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه‌نویسی امن با زبان جاوا – ارتقای حق دسترسی
#1
Tongue 
روز به روز بر تعداد گزارش‌هایی كه در مورد آسیب‌پذیری در نرم‌افزارها و یا سوءاستفاده از آنها منتشر می‌شود، افزوده می‌گردد و بسیاری از این گزارش‌ها منجر به هشدارهای امنیتی فنی می‌شوند. برای برطرف ساختن این تهدید كه بر روی دولت‌ها، شركت‌ها، موسسات آموزشی و افراد تأثیر می‌گذارد، لازم است سیستم‌هایی فارغ از آسیب‌پذیری‌های نرم‌افزاری طراحی و ایجاد شوند.

بخش عمده‌ای از آسیب‌پذیری‌های نرم‌افزارها بر اثر خطاهای برنامه‌نویسی ایحاد می‌شوند. برای مثال، 64 درصد آسیب‌پذیری‌هایی كه در سال 2004 شناخته شده‌اند مربوط به خطاهای برنامه‌نویسی بوده‌اند.

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

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

اصل حداقل حق دسترسی

بر اساس اصل حداقل حق دسترسی، هر برنامه و هر كاربری كه به سیستم دسترسی دارند باید از حداقل دسترسی هایی كه برای كامل كردن وظیفه شان ضروری است، استفاده نمایند [Saltzer 1974, Saltzer 1975]. اجرای برنامه ها با حداقل حق دسترسی خطر سوءاستفاده را در صورت كشف آسیب پذیری در برنامه كاهش می دهد. این اصل می تواند به روش های مختلفی در زبان برنامه نویسی جاوا مورد استفاده قرار گیرد. به طور معمول هر سیستم دارای اجزای مختلفی است كه اكثر آنها نیازمند یك مجموعه از دسترسی های پایه هستند، اما تعداد كمی از اجزا نیازمند حق دسترسی بالاتری نسبت به دیگران هستند كه اصطلاحاً گفته می شود این اجزا با حق دسترسی ارتقا یافته اجرا می شوند. تنها برنامه های مربوط به این اجزا امضا یا علامت گذاری می شوند و دیگر برنامه هایی كه نیازمند حق دسترسی ارتقا یافته نیستند نباید امضا شوند (بر اساس قانون ENV00-J).

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

قوانینی كه مرتبط با اصل حداقل حق دسترسی هستند عبارتند از:

·         قانون ENV03-J – تركیب خطرناكی از مجوزها را اعطا نكنید.

·         قانون SEC00-J – اجازه ندهید بلوك های ارتقا یافته اطلاعات حساس را در یك محدوده قابل اعتماد افشا نمایند.

·         قانون SEC01-J – اجازه ورود متغیرهای مشكوك را به بلوك های ارتقا یافته ندهید.

قوانین فوق در مقاله های آتی به تفصیل شرح داده خواند شد.

برنامه هایی كه نیازمند علامت گذاری هستند می توانند همراه با كلاس های علامت گذاری نشده در یك فایل JAR وجود داشته باشند. اما پیشنهاد می شود همه برنامه های ارتقا یافته با یكدیگر بسته بندی شوند (بر اساس قانون ENV01-J).

عملیات های ارتقا یافته باید به كوچكترین مجموعه بلوك های برنامه كه نیازمند آن ارتقا هستند، محدود شوند. مكانیزم AccessController در جاوا تنها به بخش های معینی از برنامه اجازه می دهد تا درخواست ارتقای حق دسترسی كنند. مكانیزم AccessController به طور موثر با سیاست امنیتی در تعامل است.

یك كلاس برای محافظت از حق دسترسی های خود، برنامه های ارتقا یافته را در یك بلوك doPrivileged() اجرا می كند. از آنجایی كه كاربران از جزئیات مدل امنیتی آگاه نیستند و همچنین نمی توانند سیاست های امنیتی را به صورت مناسب با نیازمندی های خود تطبیق دهند، كدهای ارتقا یافته ای كه در بلوك های doPrivileged() قرار دارند باید در كمترین حد قرار داشته باشند تا از بروز آسیب پذیری های امنیتی اجتناب شود.

مدیر امنیت (Security Manager)

كلاس SecurityManager یك سیاست امنیتی را برای برنامه جاوا تعریف می كند. این سیاست عملیات هایی را كه ناامن یا حساس هستند، مشخص می نماید. هر عملیاتی كه توسط سیاست امنیتی تأیید نشده باشد منجر به ایجاد یك استثنای امنیتی یا SecurityException می شود. برنامه می تواند از مدیر امنیت خود برای شناسایی عملیات های مجاز پرس و جو نماید. مدیر امنیت همچنین می تواند برای كنترل عملیات هایی كه API های معتمد می توانند انجام دهند مورد استفاده قرار گیرد. برای مثال یك برنامه نامطمئن نباید اجازه دسترسی به كلاس های سیستمی را داشته باشد و به همین دلیل باید مجوزهای خاصی به آن اعطا شود كه از دسترسی به كلاس های معتمد ممانعت به عمل آورد. مجوز accessClassInPackage این قابلیت را فراهم می نماید.

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

استفاده از مدیر امنیت محدود به بخش كاربری نمی شود. وب سرورهایی همچون Tomcat  و Websphere از این امكان برای ایزوله كردن تروجان ها و برنامه های خرابكار JSP و همچنین محافظت از منابع حساس سیستم در مقابل دسترسی های غیر عمدی استفاده می كنند.

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

از پلت فرم Java 2 SE به بعد، كلاس SecurityManager دیگر انتزاعی نیست و در نتیجه نیازی به بازنویسی متدهایش وجود ندارد. جهت ایجاد و استفاده از مدیر امنیت از طریق برنامه نویسی، برنامه باید مجوز زمان اجرای CreateSecurityManager را برای نمونه سازی از SecurityManager ومجوز setSecurityManager را برای نصب آن داشته باشد. البته این مجوزها تنها در صورتی كه یك مدیر امنیت نصب شده وجود داشته باشد مورد بررسی قرار می گیرند و بنابراین برای شرایطی مناسب است كه یك مدیر امنیت عمومی و پیش فرض وجود داشته باشد. برای مثال در یك هاست مجازی باید از جایگزینی مدیر امنیت دلخواه با مدیر امنیت پیش فرض ممانعت شود.

مدیر امنیت رابطه بسیار نزدیكی با كلاس AccessController دارد. مدیر امنیت به عنوان هاب برای كنترل دسترسی استفاده می شود در حالی كه دیگری پیاده ساز واقعی الگوریتم كنترل دسترسی است. مدیر امنیت موارد زیر را پشتیبانی می كند:

·         تطبیق پذیری عقبگرد: برنامه به ارث گرفته شده معمولاً حاوی بخشی دلخواه از كلاس مدیر امنیت است زیرا این كلاس اساساً انتزاعی (abstract) است.

   تعریف سیاست های دلخواه: ساختن زیركلاس از مدیر امنیت اجازه تعریف سیاست های امنیتی دلخواه را می دهد برای مثال چند سطحی.

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

بارگذار كلاس (Class Loader)

كلاس java.lang.classloader و كلاس های وابسته به آن به عنوان ابزاری برای بارگذاری برنامه جدید به صورت پویا در JVM به كار می روند. هر كلاس حاوی لینكی به یك class loader است كه آن را بارگذاری كرده است. همین طور هر بارگذار كلاس حاوی یك لینك بارگذار دیگر است تا جایی كه به یك بارگذار ریشه برسد. كلاس ClassLoader یك كلاس انتزاعی است و بنابراین قابلیت نمونه سازی از آن وجود ندارد. همه كلاس های بارگذار از كلاسی به نام SecureClassLoader به ارث برده می شوند كه این كلاس نیز به نوبه خود از كلاس ClassLoader به ارث گرفته شده است.

كلاس SecureClassLoader چك های امنیتی را بر روی اعضای خود و همچنین وابسته هایش به انجام می رساند. این كلاس یك تابع getPermissions() را تعریف می كند كه نشان دهنده حق دسترسی كلاس هایی است كه توسط بارگذار كلاس بارگذاری می شوند. این تابع در واقع یك مكانیزم محافظتی را برای محدود كردن كدهای ناامنی كه ممكن است توسط كلاس های دیگر بارگذاری شوند، ایجاد می كند.

در مقاله بعدی پیچیدگی های امنیتی بارگذارهای كلاس با تفصیل بیشتری شرح داده خواهند شد.






عشق، عینک سبزی است که انسان با آن کاه را یونجه می بیند..... <<مارک تواین>> [عکس: 41519046592302695883.gif]
پاسخ
سپاس شده توسط مهرداد عباسی


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Tongue برنامه‌نویسی امن با زبان جاوا – انكار سرویس علی عرفانی 0 2,374 09-14-2013, 10:07 PM
آخرین ارسال: علی عرفانی
Tongue برنامه‌نویسی امن با زبان جاوا – نشت قابلیت ها علی عرفانی 0 2,394 09-14-2013, 10:01 PM
آخرین ارسال: علی عرفانی
Tongue برنامه‌نویسی امن با زبان جاوا – نشت اطلاعات حساس علی عرفانی 0 2,365 09-08-2013, 02:19 PM
آخرین ارسال: علی عرفانی
Tongue برنامه‌نویسی امن با زبان جاوا - اعتبارسنجی ورودی و پاكسازی داده‌ها علی عرفانی 0 2,300 09-02-2013, 02:11 AM
آخرین ارسال: علی عرفانی
Tongue برنامه‌ نویسی امن با زبان جاوا - آشنایی علی عرفانی 0 2,463 08-29-2013, 04:27 PM
آخرین ارسال: علی عرفانی
  معرفی زبان Objective-C مهرداد عباسی 0 2,851 05-02-2012, 09:42 PM
آخرین ارسال: مهرداد عباسی
  آشنایی با استاندارد CERT برای برنامه نویسی امن مهرداد عباسی 1 4,873 01-16-2011, 12:32 AM
آخرین ارسال: مهرداد عباسی
  پیاده سازی برنامه client و server با زبان C آیناز محمدی 1 5,026 12-22-2010, 11:31 PM
آخرین ارسال: مهرداد عباسی
  زبان‌های دستوری spooggie 2 5,870 04-27-2010, 10:53 PM
آخرین ارسال: spooggie
  زبان‌های اعلانی spooggie 0 3,312 04-27-2010, 04:34 PM
آخرین ارسال: spooggie

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان