
مثال على استخدام ثغرة "Spectre" المُكتشفة (CVE-2017-5753 وCVE-2017-5715)
مثال على استخدام ثغرة "Spectre" المُكتشفة في 2 يناير 2018 (CVE-2017-5753 و CVE-2017-5715)
تكسر Spectre العزلة بين التطبيقات المختلفة. إنها تسمح للمهاجم بخداع البرامج الخالية من الأخطاء، التي تتبع أفضل الممارسات، لتسريب أسرارها. في الواقع، فإن فحوصات السلامة لتلك الممارسات الجيدة تزيد من سطح الهجوم وقد تجعل التطبيقات أكثر عرضة لهجوم Spectre.
C، يستخدم المكتبات:
نضع النص "The Magic Words are Squeamish Ossifrage." في الذاكرة ثم نحاول قراءته باستخدام الثغرة. إذا كان النظام معرضًا للخطر، فسترى نفس النص في المخرجات، مقروءًا من الذاكرة.
في هذا الكود، إذا تم تنفيذ التعليمات المترجمة في victim_function() بترتيب برنامج صارم، فإن الدالة ستقرأ فقط من array1[0..15] لأن حجم array1 = 16. ومع ذلك، عند التنفيذ التخميني، تكون القراءات خارج الحدود ممكنة. تقوم الدالة readMemoryByte() بعدة استدعاءات تدريبية لـ victim_function() لجعل متوقع الفروع يتوقع قيمًا صالحة لـ x، ثم تستدعي مع x خارج الحدود. يحدث خطأ في توقع الفرع، وينفذ التنفيذ التخميني اللاحق قراءة بايت سري باستخدام x خارج الحدود. ثم يقرأ الكود التخميني من array2[array1[x] * 512]، مما يسرب قيمة array1[x] إلى حالة ذاكرة التخزين المؤقت. لإكمال الهجوم، يُستخدم أسلوب بسيط من نوع flush+probe لتحديد أي سطر تخزين مؤقت في array2 تم تحميله، مما يكشف محتويات الذاكرة. يُكرر الهجوم عدة مرات، حتى لو كان البايت الهدف غير مخزّن مبدئيًا، فإن التكرار الأول سيجلبه إلى ذاكرة التخزين المؤقت.
يقرأ الكود غير المحسّن ما يقرب من 10 كيلوبايت/الثانية على جهاز i7 Surface Pro 3.