جداسازی جدول صفحه هسته

دانشنامه عمومی

جداسازی جدول صفحهٔ هسته ( Kernel page - table isolation یا KPTI ) [ ۱] [ ۲] یکی از ویژگی های هسته لینوکس است که سبب کاهش اثر آسیب پذیری امیتی Meltdown ( که بیشتر بر روی پردازنده های مدل x86 شرکت اینتل رخ می دهد ) [ ۳] و افزایش مقاومت هستهٔ لینوکس در برابر تلاش هایی به منطور دور زدن سازوکار KASLR می شود. این ویژگی با جداسازی بهتر فضای آدرس کاربر و فضای آدرس هسته لینوکس در حافظهٔ کار می کند. [ ۴] [ ۵] KPTI ابتدا در نسخه لینوکس ۴٫۱۵ ارائه شد سپس به نسخه های قبلی ۴٫۱۴٫۱۱، ۴٫۹٫۷۵، و ۴٫۴٫۱۱۰ نیز افزوده شد. سیستم های عامل Windows و macOS نیز این ویژگی را به خودشان اضافه کردند. KPTI آسیب پذیری Spectre را پوشش نمی دهد.
KPTI در واقع مبتنی بر KAISER ( یک تکنیک به نام جداسازی فضای آدرس هسته به منظور حذف مؤثر کانال های جانبی ) طراحی شده است. روش KAISER در سال ۲۰۱۶ طراحی شد[ ۶] و در سال ۲۰۱۷ منتشر شد هنگامی که هنوز آسیب پذیری Meltdown شناخنه نشده بود. KAISER باعث افزایش مقاومت KASLR، که روشی ارائه شده برای یک موضوع کم اهمیت تر در سال ۲۰۱۴ بود، می شود.
در سال ۲۰۱۴ قابلیت تصادفی سازی چیدمان فضای آدرس هسته ( KASLR ) [ ۷] به هستهٔ لینوکس اضافه شد. این قابلیت سبب سخت تر شدن بهره برداری از دیگر آسیب پذری های هسته لینوکس که به دلیل آدرس دهی فضای حافظهٔ هسته که از دید کاربران مخفی می ماند، به وجود می آمدند، می شد. با وجود جلوگیری از دسترسی به فضای آدرس دهی حافظه هسته، مشخص شد چندین کانال جانبی در پردازنده های امروزی وجود دارند که سبب مشخص شدن فضای آدرس هسته در حافظه حتی در حضور KASLR می شوند.
KAISER این مشکلات موجود در KASLR را با حذف تعدادی از منابع که باعث نشت آدرس می شدند حل می کند. در حالیکه KASLR تنها از نشت اطلاعات آدرس دهی جلوگیری می کند، KAISER علاوه بر آن از نشت خود داده ها هم جلوگیری می کند که سبب پوشش آسیب پذیری Meltdown می شود.
KPTI بر اساس KAISER طراحی شده است. هنگامی که KPTI غیرفعال است، هرگاه که کدی در فضای آدرس کاربران ( به طور کلی برنامه های کاربردی ) اجرا شود، لینوکس تمامی حافظهٔ هسته خود را که در جداول صفحه ( Page Tables ) آدرس دهی شده اند را حفظ می کند و از آن ها در مقابل دسترسی محافظت می کند. مزیت این روش این است که وقتی یک برنامه یک فراخوان سیستمی ( System call ) تولید می کند یا یک سیگنال وقفه دریافت می شود، جداول صفحهٔ هسته همواره حاضر هستند که سبب می شود بتوان از بیشتر سربارهای مربوط به عملیات context switch ( مانند TLB Flush و page - table swapping و . . ) جلوگیری کرد.
عکس جداسازی جدول صفحه هسته
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلف

پیشنهاد کاربران

بپرس