تم اكتشاف ثغرة أمنية من فئة Meltdown في معالجات AMD المستندة إلى البنى الدقيقة Zen+ وZen 2

حدد مجموعة من الباحثين من جامعة دريسدن التقنية ثغرة أمنية (CVE-2020-12965) في معالجات AMD المبنية على معماريات Zen+ وZen 2 الدقيقة، والتي تسمح بهجوم فئة Meltdown. كان من المفترض في البداية أن معالجات AMD Zen+ وZen 2 ليست عرضة لثغرة Meltdown، لكن الباحثين حددوا ميزة تؤدي إلى الوصول التخميني إلى مناطق الذاكرة المحمية عند استخدام عناوين افتراضية غير أساسية.

تستخدم بنية AMD64 فقط أول 48 بت من العنوان الظاهري وتتجاهل الـ 16 بت المتبقية. تم تحديد أن البتات من 48 إلى 63 يجب أن تنسخ دائمًا قيمة البتة 47 (امتداد بت الإشارة). إذا تم انتهاك هذا الشرط وتمت محاولة الوصول إلى عنوان ذي قيم عشوائية للبتات العليا، فسيقوم المعالج بإنشاء استثناء. يؤدي ملء البتات العلوية بشكل متكرر إلى تقسيم مساحة العنوان المتوفرة إلى كتلتين - كتلة سفلية (من 0 إلى 00007FFFFFFFFFFFFFF)، حيث يتم تعيين البتات العليا على 800000000000، ووحدة علوية (من FFFF1 إلى FFFFFFFFFFFFFFFF)، حيث تم ضبط جميع البتات العلوية على XNUMX.

تسمى العناوين التي تقع ضمن الكتل المحددة بالعناوين الأساسية، وتسمى العناوين غير الصحيحة ذات المحتويات العشوائية للبتات العليا بالعناوين غير القانونية. عادةً ما يتم تخصيص النطاق الأدنى من العناوين الأساسية لبيانات العملية، ويتم استخدام النطاق العلوي لبيانات kernel (يتم حظر الوصول إلى هذه العناوين من مساحة المستخدم على مستوى فصل الامتيازات).

تعتمد ثغرة Meltdown الكلاسيكية على حقيقة أنه أثناء التنفيذ التخميني للتعليمات، يمكن للمعالج الوصول إلى منطقة بيانات خاصة ثم تجاهل النتيجة لأن الامتيازات المحددة تمنع مثل هذا الوصول من عملية المستخدم. في البرنامج، يتم فصل الكتلة المنفذة بشكل تخميني عن الكود الرئيسي بواسطة فرع شرطي، والذي يتم تشغيله دائمًا في الظروف الحقيقية، ولكن نظرًا لحقيقة أن العبارة الشرطية تستخدم قيمة محسوبة لا يعرفها المعالج أثناء التنفيذ الوقائي الكود، يتم تنفيذ جميع خيارات الفرع بشكل تخميني.

نظرًا لأن العمليات التي يتم تنفيذها بشكل تخميني تستخدم نفس ذاكرة التخزين المؤقت مثل التعليمات التي يتم تنفيذها بشكل طبيعي، فمن الممكن أثناء تنفيذ التخمين تعيين علامات في ذاكرة التخزين المؤقت تعكس محتويات البتات الفردية في منطقة ذاكرة خاصة، ثم في التعليمات البرمجية التي يتم تنفيذها بشكل طبيعي لتحديد قيمتها من خلال التوقيت يصل التحليل إلى البيانات المخزنة مؤقتًا وغير المخزنة مؤقتًا.

إحدى ميزات الثغرة الأمنية الجديدة التي تؤثر على معالجات AMD Zen+ وZen 2 هي أن وحدات المعالجة المركزية (CPUs) تسمح بعمليات القراءة والكتابة التخمينية التي تصل إلى الذاكرة باستخدام عناوين غير قانونية غير صالحة، مع تجاهل الـ 16 بت العليا ببساطة. وبالتالي، أثناء تنفيذ التعليمات البرمجية التخمينية، يستخدم المعالج دائمًا الـ 48 بت الأقل فقط، ويتم التحقق من صحة العنوان بشكل منفصل. إذا تم اكتشاف تطابق في الجزء الأساسي من العنوان عند ترجمة عنوان افتراضي غير قانوني إلى عنوان فعلي في مخزن الترجمة المؤقت (TLB)، فإن عملية التحميل التخميني ستعيد القيمة دون مراعاة المحتويات من 16 بت العلوي، والذي يسمح بتجاوز مشاركة الذاكرة بين المواضيع. بعد ذلك، سيتم اعتبار العملية غير صالحة ويتم تجاهلها، ولكن سيتم إكمال الوصول إلى الذاكرة وستنتهي البيانات في ذاكرة التخزين المؤقت.

خلال التجربة، وباستخدام تقنية تحديد محتويات ذاكرة التخزين المؤقت FLUSH+RELOAD، تمكن الباحثون من تنظيم قناة لنقل البيانات المخفية بسرعة 125 بايت في الثانية. وبالإضافة إلى شرائح AMD، تؤثر المشكلة أيضًا على كافة معالجات Intel، المعرضة لثغرة Meltdown الكلاسيكية. يمكن استخدام نفس الأساليب التي تساعد في منع هجمات Meltdown، مثل استخدام تعليمات LFENCE، للحماية من هذا النوع الجديد من الهجمات. على سبيل المثال، إذا كان معالج Intel يتضمن حماية الأجهزة ضد Meltdown أو كان النظام مزودًا بحماية البرامج، فإن هذه التكوينات لن تكون عرضة لمتغير الهجوم الجديد.

وفي الوقت نفسه، لاحظ الباحثون أنه بالمقارنة مع معالجات إنتل، فإن بنية معالجات AMD تحد من إمكانية تنفيذ هجمات حقيقية، لكنها لا تستبعد استخدام أسلوب جديد بالاشتراك مع هجمات معمارية دقيقة أخرى لزيادة فعاليتها. على وجه الخصوص، لا يسمح الهجوم المقترح بتحديد محتويات مناطق الذاكرة للنواة والعمليات الأخرى، ولكنه يقتصر على القدرة على الوصول إلى سلاسل رسائل أخرى لنفس البرنامج الذي يعمل في نفس مساحة الذاكرة الافتراضية.

نظرًا لأن البرنامج الذي لا يحتوي على ثغرة أمنية لديه القدرة على الوصول إلى سلاسل الرسائل الخاصة به، فمن الناحية العملية، تعد هذه الطريقة ذات أهمية لتجاوز عزل وضع الحماية وتنظيم التداخل مع عمل سلاسل الرسائل الأخرى في البرامج التي تسمح بتنفيذ برامج الطرف الثالث. التعليمات البرمجية، مثل متصفحات الويب ومحركات JIT. قام الباحثون بفحص مدى تعرض محرك SpiderMonkey JavaScript ونواة Linux للهجوم، لكنهم لم يعثروا على تسلسلات تعليمات برمجية ضعيفة يمكن استخدامها لتنفيذ الهجوم. بالإضافة إلى مهاجمة التطبيقات، يمكن أيضًا استخدام هذه الطريقة لفرض تدفقات غير مقبولة من البيانات بين العناصر المعمارية الدقيقة للمعالج أثناء استغلال نقاط الضعف المعمارية الدقيقة الأخرى.

المصدر: opennet.ru

إضافة تعليق