img

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

/
/
/

چکیده
با بررسی روشهای جدید مقابله با دزدی داده‌ها در پردازنده که از سال ۲۰۱۵ به بعد توسط شرکت Intel با برند Skylake و Goldmont Plus سری Atom و برند EPYC شرکت AMD با معماری Zen معرفی شده به این نتیجه می توان رسید که فن آوری معرفی شده توسط شرکت AMD کاربردی تر به نظر می رسد و به لحاظ بکارگیری در سیستم ها نیز آسان تر جلوه می کند. فن آوری SGX شرکت اینتل در رقابت با AMD در مبحث ماشین های مجازی حرفی برای گفتن ندارد و در سهولت استفاده در محیط کاربری نیز بازی را به حریف واگذار نموده است! تنها میتوان پیچیدگی بیشتر الگوریتم های رمز و وجود دسترسی های سخت تر در محیط حفاظت شده آن را نقطه قوت اینتل در نظر گرفت. هر دو سیستم از نقطه ضعف هایی برخوردار هستند که شامل مواردی همچون امکان کشف رمز توسط یک برنامه دستکاری شده سرور، کند شدن روند اجرای برنامه ها در حافظه رمزنگاری شده و امکان کشف کلید های RSA از Cache پردازنده میباشند{۳}،{۴}.

 

۱- مقدمه
یکی از مهمترین جوانب امنیت سیستمهای کامپیوتری این روزها مبحث امنیت خدمات سرورهای ابری و امنیت داده های کاربران در آنها می باشد. با وارد شدن ماژول های NVDIMM به بازار ضرورت وجود یک سیستم رمزنگاری حافظه اصلی نیز بیشتر مورد توجه قرار گرفت. شرکتهای Intel و AMD هر کدام روش های متمایزی در پیش گرفتند که نهایتاً فن آوری های Intel SGX (Software Guard Extensions) توسط شرکت Intel و SME/SEV (Secure Memory Encryption / Secure Encrypted Virtualization ) توسط شرکت AMD معرفی شدند. امکانات ارائه شده در نسخه های دو شرکت باهم یکسان نیست و نگاه طراحان سیستم به نیازهای کاربری و نحوه پیاده سازی متفاوت می باشد.
پشتیبانی از دستورات رمزنگاری در پردازنده های x86 از سال ۲۰۱۰ با معرفی سری پردازنده های Westmere شرکت Intel آغاز گردید و در سالهای بعد تکمیل تر شده و دستورات کاملتری نیز به مجموعه آنها اضافه شد. شرکت AMD نیز عیناً این دستورات را در پردازنده های خود پشتیبانی می کند اما راه دو شرکت در پشتیبانی از رمزنگاری حافظه اصلی به جهت جلوگیری از سرقت داده ها یا دستکاری روند اجرای برنامه های کاربردی در ماشین های مجازی یا موارد حساس از هم جدا شده است. این سیستم رمزنگاری ذاتاً آدرس دهی پردازنده و کنترل کننده حافظه اصلی را نیز درگیر می نماید. بطوریکه دیگر فقط این پردازنده اصلی سیستم نیست که عمل رمزنگاری و رمزگشایی داده ها را به انجام می رساند بلکه این کنترل کننده حافظه RAM است که می بایست عملیات رمزنگاری/رمزگشایی را به سرعت و در پشت صحنه به انجام رساند. با توجه به ساختارهای پیچیده آدرس دهی در استانداردهای x86 و Intel 64 و معادل آن AMD64 پیاده سازی عملی هر کدام از روش های فوق مزایا و معایبی در قیاس با یکدیگر دارد که به آنها می پردازیم.

 

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

 

۲- پیش زمینه
نحوه آدرس دهی RAM و نگاشت آدرس مجازی به فیزیکی در استاندارد Intel 64 بصورت زیر می باشد.
به این شماتیک می بایست بخش تبدیل آدرس منطقی (سگمنتیشن) را که هنوز قواعد آن اعمال می شود را نیز اضافه کرد.
ساختارهای Segment Descriptors و Page Tables همگی در حافظه RAM قرار دارند و پردازنده برای آدرس دهی از آنها استفاده می کند. همچنین ساختار های GDT، IDT، LDT و TSS ها نیز در حافظه اصلی قرار دارند. با فرض اینکه GDT و IDT در اولین استفاده در Cache پردازنده قرار گرفته و تغییر نمی کنند، باز هم در عملیات Multi Tasking ساختار های LDT ها و TSS ها مدام در حال ساخته شدن و تغییر می باشند مضاف بر این بسیاری از فراخوانی های میان حلقه ای در مکانیزم حفاظتی ۴ حلقه ای استاندارد x86 که در Intel 64 نیز وجود دارد از طریق ساختار های داده ای Call Gate ها صورت می پذیرد. دسترسی های داده در دیگر سطوح نیز به ساختارهای داده ای Segment Descriptor های متناظر نیاز دارند که در سیستم های چند پردازه ای مدام در حال ساخته شدن و پاک شدن می باشند. وجود این ساختارهای داده در حافظه RAM و نیاز همیشگی پردازنده به آنها به جهت آدرس دهی و این حقیقت که تمامی Call Gate ها یا LDT ها و Segment Descriptor های داخل آنها قابل Cache شدن در محیط چند پردازه ای نیستند و افزوده شدن مکانیزم رمزنگاری حافظه اصلی که در مواردی این ساختارها را هم در بر می گیرد ما را به این نتیجه می رساند که پیاده سازی این مدل رمز نگاری با چالش های جدی Performance رو به رو خواهد بود.

 

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

 

۳- ساختار حافظه اصلی در Intel 64
در استاندارد تعریف شده سخت افزارهای امروزی رایانه های شخصی و سرور ها و حتی سیستم های مبایل و لب تاپ ها نحوه استفاده از بخش های مختلف حافظه اصلی بصورت شماتیک ۱-۳ می باشد. بخش های مختلف تعریف شده در شماتیک در تمامی سخت افزارهای ساخته شده دارای اندازه های مختلف می باشند و اندازه های آنها بستگی به مدل چیپ های ساخته شده و وجود یا عدم وجود آن چیپ ها در سخت افزار مورد نظر دارد. در بسیاری موارد بعضی بخش ها اصلاً وجود ندارند یا با بخش های دیگری جایگزین شده اند. این گستردگی و تنوع در نحوه استفاده از بخش های خاص حافظه RAM این حقیقت را روشن می کند که این بخش ها در سیستم رمزنگاری تعریف شده یا وجود نخواهند داشت یا وجود آنها سربار زیادی را به تمامی اجزاء سخت افزاری سیستم تحمیل خواهد کرد.
تقریباً بعد از وارد شدن معماری PCI به سخت افزار کامپیوتر ها تمامی عملیات I/O بر اساس Memory Mapped سیستم صورت گرفته و مدیریت تداخل سیستم رمزنگاری حافظه و این سیستم هزینه دو چندانی را به طراحی های جدید تحمیل می کند.
سیستم Memory Mapped I/O غیر از Register Mapping شامل DMA نیز می شود و با اضافه شدن این بخش مشکلی دیگر نیز اضافه خواهد شد. البته شرکت AMD در طرح خود سخن از اجباری نبودن بکارگیری تمامی قابلیت ها برای سیستم اصلی نموده و SEV را صرفاً برای ماشین های مجازی معرفی نموده است، اما در هر صورت شبیه سازی DMA برای SEV نیز کم هزینه نخواهد بود.
با توجه به مکانیزم رمز نگاری کامل حافظه در داخل SEV که توسط شرکت AMD معرفی شده تمامی ساختار فوق می بایست در داخل ماشین های مجازی رمز نگاری و مدیریت شود.

 

۴ – پشتیبانی سیستم عامل ها
از آنجایی که روشهای پیشنهادی Intel و AMD کاملاً متفاوت هستند سیستم عامل ها نیز میبایست برای پشتیبانی از روشهای متفاوت این دو شرکت در بهترین حالت برای هرکدام قابلیت های جداگانه ای را به هسته مرکزی خود اضافه نموده و اینترفیس های نرم افزاری متفاوتی را به مجموعه توابع خود اضافه نمایند. روش پایه شرکت اینتل بر اساس فن آوری MEE (Memory Encryption Engine) شکل گرفته است که از الگوریتم AES مبتنی بر CTR در کنترل کننده حافظه بهره می برد. روش شرکت AMD بر پایه الگوریتم AES مبتنی بر ECB می باشد {۳}. سیستم SGX اجرای بخش های رمز شده اپلیکیشن را در Page های Enclave می بیند که توسط Enclave Cypher Block تهیه می شوند و پس از پایان عملیات از حافظه حذف خواهند شد. ایجاد این صفحات توسط دستورات SGX صورت می پذیرد و سخت افزار سیستم و BIOS نیز برای پشتیبانی از SGX می بایست آماده باشند چرا که آماده سازی اولیه MEE نیاز به پشتیبانی هر دو مورد دارد. بطور کلی فن آوری پیشنهادی اینتل رمزنگاری کل حافظه در دسترس را ندیده است و مدل مشابه SEV شرکت AMD در طرح SGX مشاهده نمی شود. اگرچه ممکن است بنا به شباهت کاربردی MEE با SME شرکت اینتل مدعی امکان پشتیبانی از مدلی مشابه SEV نیز در SGX باشد.
علی ایحال چه سیستم عامل ها بخواهند هر دو مکانیزم را پشتیبانی کنند یا فقط یکی را بپذیرند مشکلات آنها از تهیه و نگهداری Page Table های رمز شده و آدرس دهی متفاوت آنها در سیستم SME ، دسترسی متفاوت در هر دو سیستم و کنترل وقفه ها و Exception های پدید آمده در داخل آنها شروع می شود و به نحوه مدیریت Thread های پردازه های رمز شده و پردازه های عادی و تداخل آنها خاتمه می یابد.
بطور مثال در سیستم عامل ویندوز Thread های سطح کاربر توسط یک Scheduler در بازه های زمانی مشخص میان پروسس های در حال اجرای کاربر تخصیص داده می شوند و در صورت بروز خطا در هر پروسس، کد مدیریتی Thread سطح کاربر محتوی پروسسی که خطا در آن اتفاق افتاده را می خواند و بایت های آن را نمایش می دهد و می تواند تمام حافظه آن پروسس را در همان لحظه ای که خطا بروز نموده Dump نماید تا بعداً در اشکال زدایی استفاده شود اما در پروسس های رمز شده با روش های SME و MEE چنین امکانی بصورت مستقیم وجود ندارد و سیستم عامل می بایست برای برخورد با این گونه پروسس ها تمهیدات دیگری را در نظر گیرد. همچنین توابع ارتباطی میان پردازه ای در نحوه برخورد با این پردازه ها می بایست مورد بازبینی قرار گیرد و بسیاری از امکانات موجود برای پردازه های عادی برای دسترسی به دیگر پردازه ها از این پروسس ها حذف شود. ماشین های مجازی پدید آمده با SEV و SEV-ES (Encrypted State) نیز نیاز به پشتیبانی خاص توسط سیستم عامل یا Hypervisor خواهند داشت.
از دیدگاه نرم افزاری پشتیبانی از SME آسانتر از MEE و پروتکل های SGX جلوه می کند اما نقطه ضعف هایی از SME آشکار شده است {۳} که بکارگیری آن را با تردیدهایی مواجه می کند. SGX نیز پیچیدگی هایی دارد که بکارگیری آن را در همه موارد بسیار سخت یا غیر ممکن می سازد. بطور مثال ساخت بلوک های Enclave برای هر نیاز ارتباطی یا اجرایی امن در هسته سیستم عامل اگر کاری غیر ممکن در نظر گرفته نشود دست کم بسیار سخت است !
SME به سادگی با تخصیص بیت آخر آدرس دهی مجازی ( بیت ۴۷ ) به نشان رمزنگاری بودن محتوی آن صفحه حافظه تکلیف خودش را با آدرس دهی و کنترل کننده RAM روشن می سازد اما SGX برای ساخت و کنترل و اجرای دستورات درEnclave نیاز به بهره گیری از چندین دستور جدید پردازنده دارد. از دیدگاه نرم افزاری و برنامه نویس استفاده از SME تقریباً به اندازه تغییر یک بیت در آدرس دهی آسان است در حالیکه SGX و MEE درون آن نیاز به برنامه نویسی خاص و رعایت موارد بسیاری دارند.

 

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

۵ – نگاهی به پیاده سازی SME و SEV
روش خواندن و نوشتن در صفحات SME در شکل ۱-۵ مشخص است.
کد اجرایی در داخل صفحه رمز شده با استفاده از مکانیزم خود داده های خود را بصورت غیر رمز می بیند اما کد های اجرایی واقع در صفحات عادی صفحه رمز شده را بصورت رمز می خوانند و داده های آن برایشان بی معنی خواهد بود. عمل رمز گشایی و رمزنگاری در داخل پیج رمز شده بصورت اتوماتیک توسط سخت افزار صورت می پذیرد و نرم افزار اجرایی از وقوع این عمل کاملاً نا آگاه است.
عمل رمز نگاری توسط یک پردازنده ARM Cortex-A5 در داخل کنترل کننده حافظه اصلی صورت می پذیرد. بیت C در آدرس فیزیکی واقع در PTE یک خواهد بود که به معنای صفحه رمز شده است.
آدرس دهی در حافظه اصلی می تواند به هر دو صورت Full Memory Encryption برای ماشین های مجازی و هم Partial Memory Encryption بصورت همزمان صورت پذیرد.
امکان استفاده از SME بگونه ای که حتی سیستم عامل نیز از وجود آن بی خبر باشد با استفاده از فن آوری Transparent SME (TSME) وجود دارد. در این حالت فارغ از ست بودن بیت C تمامی صفحات RAM سیستم رمز شده هستند ولی سیستم عامل و برنامه های کاربردی آنها را بصورت رمز نشده می بینند.
در SEV برنامه Hypervisor یا سیستم عامل به محتویات نرم افزارهای در حال اجرا یا کلید های رمز صفحات آنها دسترسی ندارد. بدین صورت محرمانگی آنها حفظ می شود و در نتیجه بکارگیری این روش در سیستم های ابری نرم افزارهای دستکاری شده ای همچون سیستم عامل های معیوب سرور ها یا Hypervisor های معیوب و حتی Admin سرور ها نیز نمی توانند به داده های استفاده کنندگان دسترسی داشته باشند.
ارتباط میان Hypervisor و Guest فقط از طریق صفحات غیر رمزی که Guest ایجاد می کند امکان پذیر است.

 

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

۶ – پیاده سازی Intel SGX
بر اساس مستندات ارائه شده از سوی شرکت اینتل معماری MEE به شکل ۱-۶ پیاده سازی شده است.
در سیستم SGX صفحات رمز شده توسط پروسس های غیر مجاز بطور کلی قابل دسترس نیستند. ( دسترسی Abort می شود ) منطق حفاظتی و عملکرد MEE در شکل ۲-۶ آمده است.
دستورات اضافه شده به پردازنده برای پشتیبانی از سیستم SGX1 :
EEXIT, EGETKEY،EREPORT , EENTER, ERESUME, ECREATE, EADD،EEXTEND ,EINIT ،EBLOCK ,ETRACK ,EWB ,ELD ,EPA ,EREMOVE
و دستورات پشتیبانی از دیباگ سیستم EDBGRD و EDBGWR.
هم اکنون نسخه جدید تر SGX2 نیز معرفی شده است که تعدادی دستورات جدید به مجموعه قبلی اضافه می کند و امکاناتی جدیدتر در کار با Enclave ها فراهم می سازد. یک روال ساده استفاده از سیستم SGX در شکل های ۳-۶ الی ۶-۶ آمده است.
دستور ECREATE یک Enclave جدید را برای استفاده معرفی می کند. ساختار SECS آن در EPC قرار می گیرد.
دستور EADD کد و داده های Enclave را برای سیستم SGX مشخص می سازد و بدینوسیله به داخل EPC منتقل می شوند.
دستور EEXTEND صحت انتقال داده های منتقل شده به EPC را در قالب های ۲۵۶ بایتی محاسبه کرده و در ساختار SECS آپدیت می کند.
در نهایت با اجرای دستور EINIT عملیات آماده سازی Enclave برای اجرا به پایان می رسد و پس از آن کد اجرایی درون آن می تواند با دستور EENTER اجرا شود. کد اجرایی درون Enclave با اجرای دستور EEXIT پایان می یابد و روند اجرا به بیرون Enclave انتقال یافته و سازنده Enclave با اجرای دستور EREMOVE می تواند Enclave و ساختارهای آن را از EPC و حافظه سیستم پاک نماید.
در هنگام اجرای دستورات درون Enclave اگر وقفه یا Exception روی دهد روند اجرا متوقف شده و روتین سرویس وقفه یا Exception سیستم عامل صدا زده می شود. اما آدرس برگشت طبق روال عادی دستور بعدی درون Enclave نمی باشد بلکه آدرس محلی موسوم به Trampoline Code می باشد که معمولاً داخل برنامه سازنده Enclave می باشد. این قسمت از برنامه با اجرای دستور ERESUME روند اجرا را به داخل Enclave و دستور بعدی پس از وقوع وقفه یا Exception منتقل می کند.
تا اینجا فقط یک روند ساده نحوه استفاده از سیستم SGX را بررسی کردیم اما این سیستم دارای قابلیت های بیشتری می باشد که مجال پرداختن به آنها نیست. ( همچون قابلیت ارتباط و انتقال Enclave ها در سیستم Local یا حتی خارج از آن، قابلیت خارج ساختن صفحات EPC از آن و سپس بازگردانی آنها و … ) اما برای آنکه دید درستی نسبت به طراحی SGX بدست آمده باشد تا همین جا نیز برای ما کفایت می کند.

 

نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD نگاهی به روشهای رمزنگاری حافظه اصلی توسط پردازنده های جدید شرکتهای Intel و AMD

 

۷ – مقایسه سیستم ها و نتیجه گیری
با اولین نگاه مشخص است که دو شرکت دو مسیر کاملاً متفاوت را برای پیاده سازی سیستم امنیتی به جهت جلوگیری از سرقت داده ها در پیش گرفته اند. شرکت AMD بیشتر متمرکز بر امنیت هر ماشین بطور کلی بوده است و شرکت Intel بیشتر متمرکز بر امنیت اجرای یک یا چند برنامه کاربردی در داخل ماشینها. راه حل شرکت اینتل امنیت ماشینهای مجازی را بدون تغییر کد نویسی نرم افزارها تضمین نمی کند اما شرکت AMD با معرفی سیستم SEV سعی در تضمین این امنیت بدون نیاز به دستکاری نرم افزارهای کاربران دارد. مدل SME بسیار راحت تر قابل استفاده است تا MEE شرکت اینتل که برای استفاده از آن مجبور به ساخت Enclave هستیم. هر دو سیستم مورد آزمایشات امنیتی قرار گرفته اند و نقاط ضعفی از آنها آشکار شده است. {۳}،{۴}.
از دیدگاه کاربری امکانات معرفی شده در SEV شرکت AMD هنوز معادلی در طراحی Intel ندارد و از این نظر AMD پیشرو می باشد. بلحاظ بکارگیری و پشتیبانی از این سیستم ها در محیط سیستم عامل نیز همانطور که در بخش ۴ تا حدی بدان پرداختیم فن آوری معرفی شده توسط AMD راحت تر پیاده سازی می شود و با پیچیدگی کمتری رو به رو است و برای استفاده در برنامه های کاربردی هم دست برنامه نویس برای استفاده از امکانات حافظه رمز نگاری شده و حجم داده ها و کد مورد نیاز بسیار باز تر می باشد چرا که محدودیت درگیری با EPC و اندازه محدود آن را ندارد.
فن آوری SEV به تازگی بر روی پردازنده های سری EPYC شرکت AMD به بازار آمده در صورتی که SGX2 بیش از یک سال است که در چندین مدل از پردازنده های شرکت اینتل وجود دارد. اینکه در نهایت کدامیک ماندگار شود هم اکنون قابل پیشبینی نیست اما پشتیبانی طراحان سیستم عامل و برنامه نویسان سیستم و VMM ها می تواند تعیین کننده باشد.

 

منابع
۱- AMD 64 Architecture Programmer’s Manual Volume 2: System Programming (March 2017)
۲- Intel® Software Guard Extensions (Intel® SGX) Intel Corporation – June 2015 Reference Number: 332680-002 Revision Number: 1.1
۳- Secure Encrypted Virtualization is Unsecure! (2017) Zhao-Hui Du, Zhiwei(Victor) Ying, Zhenke Ma, Yufei(Michael) Mai, Phoebe Wang, Jesse Liu and Jesse Fang* Tangram Technologies, Incorporated Shanghai, China
۴- Software Guard Extensions en.wikipedia.org
۵- Intel® ۶۴ and IA-32 Architectures
Software Developer’s Manual (2016)
۶- AMD Memory Encryption Whitepaper v7-Public (April 21 2016)

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text