Spook.js، قصة مخيفة قبل النوم

كيف يعمل Spook.js، أول هجوم عملي قائم على ثغرة سبيكتر(Spectre).

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

في عام 2018، أثبت الباحثون أن السيناريو كان ممكنًا من الناحية النظرية، وكشفوا عن أول متغيرين من ثغرة سبيكتر (Spectre). بعد ثلاث سنوات، شهد سبتمبر 2021 أول هجوم واقعي باستخدام Spectre v1. يُعرف باسم Spook.js، مفهوم الهجوم معقد، لكننا سنحاول تجريده.

خلفية سبيكتر في 1 (Spectre v1)

أخبار أول هجومين لهذه العائلة – سبيكتر (Spectre) وميلتداون (Meltdown) – ظهرت في عام 2018. استغلت الهجمات آلية توقع الفروع (branch prediction)، المصممة لتسريع تنفيذ الأوامر، الموجودة في جميع وحدات المعالجة المركزية الحديثة.

[ شعار ثغرة سبيكتر (Spectre)]

عندما يقوم المستخدم بإدخال كلمة مرور لتسجيل الدخول إلى موقع ويب، إذا كانت كلمة المرور صحيحة، يتم تنفيذ مجموعة واحدة من التعليمات. إذا لم يكن كذلك، يتم تنفيذ مجموعة أخرى. ومع ذلك – وهذا هو المكان الذي يبدأ فيه تنبؤ الفرع – قبل تلقي الإجابة، تبدأ وحدة المعالجة المركزية (CPU) في تنفيذ مجموعة التعليمات التي تعتقد أنها ستحتاجها على الأرجح.

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

في الهجوم المتعلق بثغرة سبيكتر (Specter )، تتم محاولة قراءة منطقة البيانات التي لا يستطيع البرنامج الوصول إليها. في المرحلة الأولى من الهجوم، يتم إجراء مكالمات متعددة إلى مناطق بيانات الوصول المفتوح (الوصول الحر)، حيث يتم “تدريب” نظام التنبؤ بالفرع على إجراء عملية القراءة المحظورة أيضًا. باستخدام آلية التنبؤ بالفروع (branch prediction)، تقوم وحدة المعالجة المركزية (CPU) بإجراء العملية مقدمًا لأنها تُستخدم في مطالبة البرنامج بقراءة البيانات المسموح لها بالفعل بقراءتها. لكن عملية الفحص والتحقق تكشف أن البرنامج ممنوع من الوصول إلى البيانات، لذلك يتم تجاهل الحسابات المنفذة بشكل تخميني. حتى الآن، الأمور جيدة جدًا – لكن البيانات التي تقرؤها وحدة المعالجة المركزية (CPU) يتم تخزينها لبعض الوقت في ذاكرة التخزين المخبئية المؤقتة، وهي ذاكرة وحدة المعالجة المركزية (CPU) الخاصة.

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

والنتيجة هي خلل أساسي في وحدة المعالجة المركزية (CPU) يكون حله الوحيد هو تعطيل تنبؤ الفروع (branch prediction) تمامًا، وبالتالي التأثير بشكل خطير على الأداء. ومن هذا المنطلق، فإن هجمات سبيكتر (Specter) لها العديد من القيود:

· يجب أن يكون المهاجم قادرًا على تشغيل كود البرنامج على الكمبيوتر المستهدف أو جهاز الهاتف المحمول؛

· يتطلب الهجوم برنامجًا محددًا مستهدفًا يتم تشفيره لتهيئة الظروف لهجوم ناجح ؛

· حتى لو نجح الهجوم، فإن استخراج البيانات يكون بطيئًا للغاية – عشرات أو مئات البايتات في الثانية – وقراءة الأخطاء ليست مستحيلة ؛

• بشكل عام، تتطلب سرقة البيانات السرية المقصودة، مثل كلمات المرور ومفاتيح التشفير وما إلى ذلك، مجموعة من الشروط.

Spook.js – تطبيق واقعي لـ سبيكتر في 1 (Spectre v1)

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

هذا صحيح، لكن صفحات الويب الحديثة تحتوي أيضًا على كميات كبيرة من كود البرنامج الذي يتم تنفيذه على كمبيوتر المستخدم، في المتصفح. هذه هي الطريقة التي تستغل بها هجمات Spook.js ثغرة سبيكتر في 1 ( Spectre v1): يتم تحميل صفحة مصابة، ويقوم المتصفح بتشغيل الكود، ويسرق مجرم الإنترنت البيانات السرية.

مؤلفو التقرير كشفوا بعض الهجمات العملية. أولاً، سرقوا كلمة مرور مستخدم من تمبلر (Tumblr). ثانيًا، سرقوا البيانات من لاست باس (Lastpass). ثالثًا، اعترضوا صورة حملها المستخدم من وحدة تخزين خاصة على خادم جوجل (Google).

جعلت إحدى خاصيات متصفح جوجل كروم (Google Chrome) كل هذا ممكنًا. منذ الإفراج عن المعلومات حول سبيكتر (Spectre)، اتخذ مطورو كروم (Chrome) إجراءات لدرء الهجمات المحتملة عن طريق إجبار مواقع الويب على التحميل بمعزل عن غيرها. نظرًا لأن كل موقع ويب ينشئ عمليته الخاصة، فلا يمكن استخدام الأكواد والتعليمات البرمجية الضارة على صفحة واحدة لسرقة البيانات من مصدر آخر. ولكن هناك استثناء واحد: يتم تجميع الصفحات المتعددة من نفس الموقع أو النطاق معًا في عملية متصفح مشتركة. إذا تم تشغيل الكود الضار (المكتوب بلغة جافا سكريبت، ومن ثم .js في اسم الهجوم) على أحدها، فيمكن سرقة البيانات الموجودة على الصفحات الأخرى.

هجوم Spectre.js على تمبلر (Tumblr)

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

من خلال استغلال ثغرة سبيكتر (Spectre)، يمكن للهجوم التفاعل بشكل عرضي مع علامة تبويب أخرى من نفس الموقع وسرقة البيانات بوسائل غير مباشرة. الهجوم الناجح باستخدام هذا الأسلوب لا يترك أي أثر تقريبًا.

هجوم Specter.js على لاست باس (LastPass)

كان الهجوم على مدير كلمات مرورلاست باس (LastPass) مختلفًا من حيث إن الكود الذي يهدف لسرقة البيانات باستخدام سبيكتر في (Spectre v1) كان مضمنًا في ملحق ضار لجوجل كروم (Google Chrome). كان ملحق لاست باس (LastPass) يعمل أيضًا في المتصفح. في بعض الحالات، يتم تشغيل الملحقات أيضًا في عملية متصفح مشتركة، مما يجعل سرقة البيانات ممكنة.

هجوم Specter.js على مخزن جوجل السحابي/جوجل كلاود (Google Cloud Storage)

مثال آخر يستخدم الهجمات على مخزن جوجل السحابي/جوجل كلاود (Google Cloud Storage): تحتوي علامة تبويب واحدة في متصفح على صفحة ضارة مستضافة على sites.google.com ؛ وآخر يتيح للمستخدمين تحميل الصور إلى مساحة التخزين الخاصة بهم في خدمة جي سويت (G Suite). في هذا السيناريو، يمكن للمهاجم استخدام أكواد وتعليمات برمجية ضارة للوصول إلى الصور.

[ مقارنة الصورة الأصلية بالصورة المسروقة من جوجل السحابي/جوجل كلاود (Google Cloud Storage باستخدام هجوم Spook.js]
[Caption: الصورة الأصلية (على اليسار) والصورة المسروقة من مخزن جوجل السحابي/جوجل كلاود (Google Cloud Storage باستخدام هجوم Spook.js. مصدر]

قيود الطريقة

أظهر الباحثون كيف يمكن تنفيذ الهجوم على وحدات المعالجة المركزية المختلفة، بما في ذلك العديد من المعالجات الحديثة من Intel وحتى Apple M1 الجديد القائم على بنية إيه آر إم ARM. في جميع الحالات، تم تنفيذ الهجوم في جوجل كروم (Google Chrome). من حيث المبدأ، تجعل العديد من الخاصيات الفريدة للمتصفح هجوم Spook.js ممكنًا. المتصفحات الأخرى المستندة إلى كروميوم (Chromium)، مثل مايكروسوفت إيدج (Microsoft Edge)، معرضة أيضًا لهذا الهجوم.

ومع ذلك، هناك بعض القيود. الأول هو السرعة المنخفضة لسرقة البيانات (400-600 بايت في الثانية، اعتمادًا على وحدة المعالجة المركزية (CPU))، وهذا هو السبب في أن الملف الهدف في العرض التوضيحي الأخير صغير جدًا. الثاني هو عدد الأخطاء الكبير عند سرقة البيانات من ذاكرة التخزين المخبئية المؤقتة لوحدة المعالجة المركزية (CPU). ما يصل إلى 4٪ من البيانات خاطئة ؛ ومن هنا جاءت القطع الأثرية في النسخة المسروقة من الصورة.

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

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

لا داعي للذعر

تعد دراسة Spook.js مهمة لأن الباحثين تمكنوا، لأول مرة، من إظهار سيناريو واقعي إلى حد ما لاستغلال إحدى الثغرات في سبيكتر (Spectre). ومع ذلك، فإن فرص حدوث هجوم في العالم الحقيقي منخفضة. أولاً، قام مطورو جوجل كروم (Google Chrome)، على خلفية هذا البحث، بتعزيز آلية عزل المواقع المحملة عن بعضها البعض. ثانيًا، يمتلك مجرمو الإنترنت العديد من الطرق الأسهل لسرقة بيانات المستخدم، من البرامج الضارة التقليدية إلى الهندسة الاجتماعية، وهذا يتطلب معرفة جادة بالأعمال منخفضة المستوى لوحدات المعالجة المركزية الحديثة.

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

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

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

النصائح

برمجيات تنقيب مخفية بداخل جووجل بلاي ستور!

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