حلقه حفاظتی

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

سیستم عامل‌های کامپیوتری سطوح مختلف دسترسی به منابع را فراهم می‌کنند. یک حلقه حفاظت یکی از حداقل دو لایه یا سطح دسترسی در معماری یک سیستم کامپیوتری است. حلقه‌های محافظت معموملا در معماری 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) ترکیب شوند. سیستم عامل‌ها در حال اجرا بر روی سخت‌افزاری که از هر دو حالت پشتیبانی می‌کنند می‌توانند از هر دو نوع حفاظت یا تنها یک استفاده کنند.
استفاده مؤثر از معماری حلقه‌ها نیاز به همکاری نزدیک بین سخت‌افزار و سیستم عامل دارد. سیستم عامل‌های طراحی شده برای کار بر روی چندین سخت‌افزار ممکن است استفاده محدودی از حلقه‌ها داشته باشند، اگر آنها در همه پلتفرم (سخت‌افزارها) پشتیبانی نمی‌شوند. اغلب مدل امنیتی حلقه‌ها به «هسته» و «کاربر» ساده شده‌است، حتی اگر سخت‌افزار حلقه‌های بیشتری را پشتیبانی کند.