حلقه حفاظتی

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از حلقهٔ حفاظتی)
پرش به ناوبری پرش به جستجو
حلقه‌های ارجحیت x86 در حالت محافظت شده

در علوم کامپیوتر، حفاظت سلسله مراتبی،[۱][۲] اغلب حلقه‌های حفاظتی نامیده می‌شوند، که مکانیسم‌هایی هستند که برای محافظت از داده‌ها و ادامه کار سیستم در هنگام وقوع خطا استفاده می‌شوند. این روش نقطه مقابل امنیت براساس توانایی است.

[ نیازمند منبع ] سیستم عامل‌های کامپیوتری سطوح مختلف دسترسی به منابع را فراهم می‌کنند. یک حلقه حفاظت یکی از حداقل دو لایه یا سطح دسترسی در معماری یک سیستم کامپیوتری است. حلقه‌های محافظت معموملا در معماری CPU پیاده‌سازی می‌شوند که حالت‌های مختلف CPU را در سطح سخت‌افزار یا کد میکروتیک ارائه می‌دهند. حلقه‌ها در یک سلسله از بیشترین، دستزسی (معمولا حلقه شماره صفر) به کمترین دسترسی (آخرین حلقه) مرتب شده‌اند. در بیشتر سیستم‌های عامل، حلقه ۰ بیشترین سطح دسترسی را دارد و با سخت‌افزار ارتباط برقرار می‌کند

راه‌های ویژه ای بین حلقه‌ها طراحی شده‌اند که به حلقه‌های بیرونی اجازه می‌دهند تا یک حلقه بیرونی به بعضی از منابع حلقه‌های درونی به صورت کنترل شده دسترسی داشته باشد. دسترسی صحیح حلقه‌ها به یک دیگر می‌تواند امنیت را از طریق جلوگیری دسترسی یک برنامه به منابع ای که نباید به ان‌ها دسترسی بدون اجازه داشته باشد بهبود بخشد. به عنوان مثال، یک بدافزار که به عنوان یک برنامه در حلقه ۳ اجرا می‌شود، نباید بتواند از وبکم بدون اطلاع کاربر استفاده کند، زیرا دسترسی به سخت‌افزار از دسترسی‌های Ring 1 است که درایور‌ها باید از آن استفاده کنند. برنامه‌هایی مانند مرورگرهای وب که در حلقه‌های با شماره بالا در حال اجرا هستند باید دسترسی به شبکه را درخواست کنند که یک منبع محدود به حلقه شماره پایین‌تر است.

پیاده‌سازی[ویرایش]

حلقه‌های چندگانه حفاظت در میان مفاهیم انقلابی معرفی شده توسط سیستم عامل Multics بود، یک پیشگام بسیار امن از خانواده سیستم عامل‌های یونیکس امروزی است. رایانه GE 645 دارای کنترل دسترسی سخت‌افزاری بود، اما برای پشتیبانی کامل از حلقه‌ها در سخت‌افزار کافی نبود، به همین دلیل Multics آنها را با گیر انداختن درخواست‌های انتقال حلقه‌ها در نرم‌افزار کامل کرد.[۳] جانشین آن، Honeywell 6180، آنها را در سخت‌افزار، با پشتیبانی از هشت حلقه اجرا کرد.[۴] با این حال، اکثر سیستم‌ها از دو حلقه استفاده می‌کنند، حتی اگر سخت‌افزارهایی که در آنها اجرا می‌شوند، حالت‌های CPU بیشتری را از آن ارائه می‌دهند. به عنوان مثال، ویندوز ۷ و ویندوز سرور ۲۰۰۸ (و پیشینیان آنها) تنها از دو حلقه استفاده می‌کنند، حلقه ۰ مربوط به حالت هسته و حلقه ۳ به حالت کاربر[۵] زیرا نسخه‌های قبلی ویندوز در پردازنده‌هایی که فقط دو سطح حفاظت را پشتیبانی می‌کردند اجرا می‌شد.[۶]

بسیاری از معماری‌های مدرن CPU (از قبیل معماری معماری محبوب اینتل x86) شامل نوعی حفاظت از نوع حلقه‌های محافظتی هستند، گرچه سیستم عامل ویندوز NT، مانند یونیکس، به‌طور کامل از این ویژگی استفاده نمی‌کند. OS / 2 تا حدودی از سه حلقه استفاده می‌کرد:[۷] حلقه ۰ برای کد کرنل و درایورها، حلقه ۲ برای کدهای با دسترسی (برنامه‌های کاربر با مجوزهای دسترسی I / O) و حلقه ۳ برای کد غیرمجاز (تقریبا تمام برنامه‌ها). در DOS، تمام برنامه‌ها (کرنل و درایورها و برنامه‌های سطح کاربر) در حلقه ۳ اجرا می‌شوند (با این حال، این منحصر به مواردی است که در آن درایورهای حالت محافظت شده یا افزونه‌های DOS استفاده می‌شود؛ به عنوان یک سیستم عامل که از آدرس دهی real mode استفاده می‌کرد، سیستم حفاظت نشده‌ای بود)، در حالی که ۳۸۶ مموری منیجرهایی مانند EMM386 در حلقه ۰ کار می‌کنند. علاوه بر این، EMM386 3.xx DR-DOS می‌تواند به صورت اختیاری برخی از ماژول‌ها (مانند DPMS) را روی حلقه ۱ اجرا کند.

سیستم Multics اصلی دارای هشت حلقه بود، اما بسیاری از سیستم‌های مدرن تعداد حلقه‌های کمتری دارند. سخت‌افزار به کمک ثبات‌ها از حلقه ای که یک رشته پردازش باید در ان اجرا شود آگاه است. در بعضی از سیستم‌ها، قسمت‌هایی از حافظه مجازی به حلقه‌های مختلف اختصاص داده شده‌اند. یک مثال Data General Eclipse MV / 8000 است که در آن سه بیت بالا رجیستر شمارنده برنامه (PC) به عنوان رجیستر حلقه استفاده می‌شود. به عنوان مثال، برنامه ای که رجیستر PC ان مقدار 0xE200000 را دارد، به صورت خودکار در حلقه ۷ قرار می‌گیرد و فراخوانی یک تابع در بخش‌های مختلف حافظه به‌طور خودکار باعث انتقال حلقه می‌شود.

سخت‌افزار به شدت راه‌هایی که موجب انتقال کنترل از حلقه ای به حلقه دیگر می‌شود را محدود می‌کند و همچنین محدودیت‌هایی را برای نوع دسترسی به حافظه ای که می‌توانند در حلقه‌ها انجام شوند، ایجاد می‌کند. به عنوان مثال، در x86، یک خاصیت وجود دارد [نیازمند شفاف‌سازی] که توسط دستورالعمل call کنترل را به شیوه ای امن از حلقه ای به حلقه دیگر انتقال می‌دهد [نیازمند شفاف‌سازی]؛ این عمل به عنوان یک سرپرست در بسیاری از سیستم عامل‌های که از حلقه‌های حفاظت استفاده می‌کنند پیاده‌سازی شده‌است. محدودیت‌های سخت‌افزاری برای محافظت در مقابل رفتارهای خطرناک مفید طراحی شده‌اند. علاوه بر این، حلقه‌های ممنوعه ممکن است دارای قابلیت‌های خاصی باشند (مانند استفاده از آدرس دهی real mode که حافظه مجازی را دور می‌زند).

ARM معماری V7 دارای سه سطح امتیاز: برنامه، سیستم عامل، و Hypervisor. که برخلاف معمول، سطح 0 (PL0) حداقل سطح امتیاز، در حالی که سطح 2 (PL2) بالاترین سطح امتیاز است.[۸]

حلقه‌های محافظت در برخی از سیستم‌ها می‌تواند با حالت‌های پردازنده (master / kernel / privileged / supervisor mode vs. slave / unprivileged / user mode) ترکیب شوند. سیستم عامل‌ها در حال اجرا بر روی سخت‌افزاری که از هر دو حالت پشتیبانی می‌کنند می‌توانند از هر دو نوع حفاظت یا تنها یک استفاده کنند.

استفاده مؤثر از معماری حلقه‌ها نیاز به همکاری نزدیک بین سخت‌افزار و سیستم عامل دارد. سیستم عامل‌های طراحی شده برای کار بر روی چندین سخت‌افزار ممکن است استفاده محدودی از حلقه‌ها داشته باشند، اگر آنها در همه پلتفرم (سخت‌افزارها) پشتیبانی نمی‌شوند. اغلب مدل امنیتی حلقه‌ها به «هسته» و «کاربر» ساده شده‌است، حتی اگر سخت‌افزار حلقه‌های بیشتری را پشتیبانی کند.

حالت‌ها[ویرایش]

در زمینه کامپیوتر، حالت سرپرست یک flag سختافزاری است که می‌تواند توسط کدهایی که در سطح سیستم اجرا می‌شوند تغییر کند. برنامه‌های در حال اجرا در سطح سیستم از این flag استفاده می‌کنند، در حالی که برنامه‌های سطح کاربر (مرورگر وب) توانایی استفاده از این flag را ندارند. این پرچم تعیین می‌کند که آیا می‌توان کدهای ماشینی که کارهایی مانند اصلاح ثبات‌ها برای اصلاح descriptor tableها، یا انجام عملیات مانند قطع interruptها ممکن است یا خیر. ایده داشتن دو حالت مختلف برای اجرا برنامه‌ها از جمله " کنترل بیشتر مسئولیت بیشتر می‌آورد " یک برنامه که درsupervisor mode اجرا می‌شود هرگز نباید اشتباه کند، زیرا یک اشتباه می‌تواند موجب سقوط کل سیستم شود.

حالت supervisor mode "یک حالت اجرای در برخی از پردازنده‌ها است که امکان اجرای تمام دستورالعمل‌ها، از جمله دستورالعمل‌های با دسترسی‌ها خاص را فراهم می‌کند. همچنین ممکن است اجازه دسترسی به یک address space متفاوت را بدهد. در این حالت معمولا سیستم عامل‌ها اجرا می‌شود. "[۹]

در یک کرنل یکپارچه، سیستم عامل در حالت سرپرست اجرا می‌شود و برنامه‌ها در حالت کاربر اجرا می‌شوند. انواع دیگر از سیستم عامل‌ها، مانند سیستم عامل‌هایی که از کرنل نوع exokernel یا میکروکرنل استفاده می‌کنند، لزوماً این رفتار را به اشتراک نمی‌گزارند.

  • لینوکس، macOS و ویندوز سه سیستم عامل هستند که از حالت سرپرست / کاربر استفاده می‌کنند. برای انجام کارهای تخصصی، یک برنامه باید با استفاده از system callها استفاده کند.
  • می‌توان با استفاده از ماژول‌های کرنل کد به کرنل اضافه کرد، اما این کار فقط توسط کاربری که دسترسی‌های لازم را دارد قابل انجام است، زیرا این کار می‌تواند امنیت کل سیستم عامل را تحدید کند.
  • DOS (تا زمانی که هیچ سیستم مدریت حافظه ای نظیر EMM386 بارگزاری نشده باشد)، و همچنین سایر سیستم عامل‌های ساده و بسیاری از سیستم‌ها نهفته به‌طور دائمی در حالت supervisor mode اجرا می‌شوند، به این معنی که درایورها را می‌توان به صورت مستقیم به عنوان برنامه‌های سطح کاربر نوشت.

اکثر پردازنده‌ها حداقل دو حالت متفاوت دارند. پردازنده x86 دارای چهار حالت مختلف است. برنامه‌هایی که در حلقه ۰ اجرا می‌شوند می‌توانند با سیستم هر کاری انجام دهند و برنامه ای که در حلقه ۳ اجرا می‌شود باید بتواند در هر زمان بدون تأثیر بر بقیه سیستم کامپیوتر کرش کند. حلقه ۱ و حلقه ۲ به ندرت استفاده می‌شود، اما می‌توانند با سطوح مختلف دسترسی پیکربندی شود.

در اکثر سیستم عامل‌ها جابجایی میان user space و kernel space کار سنگینی است برا مثال برای در خواست getpid این فرایند چیزی حدود ۱۰۰۰–۱۵۰۰ کلاک سایکل زمان می‌برد.

موریس ویلکس نوشت:[۱۰]

… در نهایت مشخص شد که حفاظت سلسله مراتبی که ارائه شده حلقه‌ها را با شرایط برنامهنویسی سیستم مقایسه نمی‌کند و تنها در سیستم ساده ای که تنها دو حالت دارد بهبودی پیدا کرده یا بهبودی نداشته‌است. حلقه‌های حفاظتی خود را به اجرای سخت‌افزاری سخت افزاری سپردند، اما برای آنها چیزی کم نیاورده بود. [. . . ] جذابیت محافظت از ریزه‌ها حتی پس از اینکه متوجه شد که حلقه‌های محافظت جواب نمی‌دهد، باقی مانده‌است. . . این دوباره یک کوچه کوچه را ثابت کرد. . .

جستارهای وابسته[ویرایش]

  • دروازه تماس (اینتل)
  • بخش حافظه
  • حالت محافظت شده  –  موجود در x86-compatible 80286 CPU و جدیدتر
  • IOPL (CONFIG. دستورالعمل SYS) - دستورالعمل OS / 2 برای اجرای کد DLL در حلقه ۲ به جای حلقه ۳
  • توصیفگرهای بخش
  • حالت مدیریت سیستم (SMM)  –  گاهی اوقات نیز "حلقه -۲"
  • حلقه -۳ روت کیت

منابع[ویرایش]

  1. پل A. Karger، اندرو J. Herbert, معماری قابلیت ارتقاء برای حمایت از امنیت شبکه و ردیابی دسترسی، sp, p. 2، 1984 سمپوزیوم IEEE در مورد امنیت و حریم خصوصی، 1984
  2. والتر بایندر، طراحی و پیاده‌سازی J-SEAL2 Agent Agent Kernel , saint, p. 35، 2001 سمپوزیوم در مورد برنامه‌ها و اینترنت (SAINT'01)، 2001
  3. "A Hardware Architecture for Implementing Protection Rings". Retrieved 27 September 2012.
  4. "Multics Glossary - ring". Retrieved 27 September 2012.
  5. Russinovich, Mark E.; David A. Solomon (2005). Microsoft Windows Internals (4 ed.). Microsoft Press. p. 16. ISBN 978-0-7356-1917-3.
  6. Russinovich, Mark (2012). Windows Internals Part 1. 6th Ed. Redmond, Washington: Microsoft Press. p. 17. ISBN 978-0-7356-4873-9. The reason Windows uses only two levels is that some hardware architectures that were supported in the past (such as Compaq Alpha and Silicon Graphics MIPS) implemented only two privilege levels.
  7. Maurice Wilkes (April 1994). "Operating systems in a changing world". ACM SIGOPS Operating Systems Review. 28 (2): 9–21. doi:10.1145/198153.198154. ISSN 0163-5980.

خواندن بیشتر[ویرایش]