الهجمات الإلكترونية المدعومة بالذكاء الاصطناعي: كيفية الكشف عن التهديدات الذكية ومنعها والدفاع ضدها

اقرأ الآن
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

مدعوم من MetaDefender Endpoint
ب OPSWAT
شارك هذا المنشور
صورة للمشاركين في برنامج زمالة OPSWAT هواي نام دو ومينه كوان لي
المشاركون في برنامج زمالة OPSWAT

حول CVE-2024-0517

الثغرة CVE-2024-0517 هي ثغرة أمنية في الكتابة خارج الحدود في محرك V8 JavaScript في Google Chrome قبل الإصدار 120.0.6099.224، والتي تسمح للمهاجمين عن بُعد باستغلال تلف الكومة عبر صفحة HTML مصممة خصيصًا. تم الإبلاغ عن الثغرة لأول مرة من قبل توان (سوتو) فام من شركة Qrious Secure. 

لقطة شاشة تُظهر درجة الخطورة الأساسية ل CVSS 3.x البالغة 8.8 (عالية) مع وصف تفصيلي للناقلات من NVD
CVE-2024-0517 على قاعدة البيانات الوطنية للثغرات الأمنية (NVD)

تنشأ هذه الثغرة من الخلط في النوع، والذي يحدث عندما يقوم أحد التطبيقات بتخصيص أو تهيئة مورد مثل مؤشر أو كائن أو متغير باستخدام نوع واحد، ولكن في وقت لاحق يصل إلى هذا المورد باستخدام نوع غير متوافق مع النوع الأصلي (CWE-843). في حالة مكافحة التطرف العنيف هذه، يحدث الخلط بين النوعين أثناء عملية تخصيص الذاكرة التي تسمى التخصيص المطوي، والتي يتم استخدامها لتحسين الذاكرة بواسطة Maglev، وهو محول برمجي محسن لمحرك V8 JavaScript. 

من خلال استغلال الخلط في النوع وكتابة رموز shellcodes عشوائية بواسطة WebAssembly، يمكن للمهاجم تنفيذ أوامر على جهاز الضحية. 

مراحل الهجوم

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

مخطط تخطيطي يوضح عملية من أربع خطوات لاستغلال ثغرة أمنية باستخدام رسالة بريد إلكتروني تصيدية مع ملف HTML خبيث يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد
الحملة الهجومية التدريجية 

محرك جافا سكريبت V8 

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

ماجليف والتخصيص المطوي

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

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

رسم تخطيطي يوضح تمثيلات مرمزة بالألوان لتخصيصات المجلدات مع المجلدات المعينة وبدونها
مالف وتخصيص المجلدات

جمع القمامة من الأجيال 

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

رسم تخطيطي يوضح عملية تخصيص الكائنات في أجيال الذاكرة الصغيرة والوسيطة والقديمة أثناء عملية جمع القمامة (GC)
مساحات الذاكرة: جيل الشباب والجيل القديم

تحليل نقاط الضعف

نظرة عامة

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

تحليل الأسباب الجذرية 

أجرى الزملاء الخريجون من OPSWAT تحليلاً مفصلاً لسير عمل V8 أثناء عملية التخصيص، وحددوا أن الوظائف التالية يتم استدعاؤها أثناء هذه العملية 

رسم تخطيطي يوضح سير عمل V8 أثناء عملية تخصيص الكائن، من العثور على المنشئ إلى امتداد التخصيص الخام
سير عمل V8 أثناء عملية التخصيص 

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

نتيجةً لذلك، يتم دائمًا تخصيص الكائن التالي الذي تم إنشاؤه مباشرةً بعد الذاكرة التي يشير إليها current_raw_allocation_، بغض النظر عن أي أحداث قبل التخصيص الثاني. 

رسم بياني يوضح إنشاء كائن جديد في الذاكرة، والانتقال من "التخصيص الخام الحالي" إلى "الكائن التالي"
"التخصيص_السحب_الحالي" و"الكائن التالي" في منطقة الذاكرة

إذا تم استدعاء GC، يمكن تعيين منطقة الذاكرة المجاورة للذاكرة المجاورة لـ current_raw_allocation_ إلى كائنات أخرى. يمكن أن يؤدي هذا إلى موقف حيث، بعد تشغيل GC وإنشاء كائن آخر، يشير مؤشرين إلى نفس منطقة الذاكرة ولكن لهما أنواع بيانات مختلفة، مما يؤدي إلى ثغرة في الخلط بين النوعين.

رسم تخطيطي يوضح عملية إرباك من نوع الثغرات، ويوضح مشغل جمع القمامة وتخصيص الكائنات الذي يؤدي إلى مشاكل محتملة
نوع الارتباك في النوع الضعف 

الاستغلال

ولاستغلال هذه الثغرة، أنشأ زملاء OPSWAT الخريجون من OPSWAT مثيلات WebAssembly تحتوي على رمز shellcode وحاولوا إحداث ارتباك في النوع من خلال GC للتحكم في الذاكرة وتنفيذ رمز shellcode: 

مخطط انسيابي مفصّل خطوة بخطوة لكيفية تحفيز تنفيذ التعليمات البرمجية عن بُعد من خلال الخلط بين الأنواع في محرك V8، بدءًا من تحفيز الخلط بين الأنواع إلى تنفيذ التعليمات البرمجية القشرية
خطوات تشغيل تنفيذ التعليمات البرمجية عن بُعد في محرك V8 

ارتباك في نوع المشغل

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

مقتطف كود يوضِّح دالة تُشغِّل عملية جمع القمامة في JavaScript، وتُنشئ مخزنًا مؤقتًا للمصفوفة

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

مقتطف كود جافا سكريبت قصير يوضّح حلقة إنشاء مثيلات متعددة لفئة فرعية

سيحدث ارتباك في النوع بعد تهيئة هذه الكائنات بشكل متكرر في حلقة.

إنشاء أوليات القراءة والكتابة

بعد النجاح في تشغيل الارتباك في النوع، يتطلب تنفيذ رمز الصدفة قراءة الذاكرة والكتابة فوق الذاكرة في عنوان متحكم به. للقيام بذلك، أنشأنا أوليات القراءة والكتابة. ستستفيد أوّليات الاستغلال من البيانات الوصفية في الكائنات لمنحنا مناطق ذاكرة للقراءة/الكتابة العشوائية واستخدامها لتشغيل شيفرة عشوائية. 

تمثيل مرئي لبدائية القراءة والكتابة، يوضح مناطق الذاكرة والقيم التي يتم الكتابة فوقها
القراءة والكتابة البدائية 

ستمكننا أساسيات القراءة والكتابة في هذه الخطوة من التحكم في مؤشر جدول القفز لمثيل WebAssembly في الخطوة التالية. 

إنشاء مثيلات WebAssembly

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

مقتطف كود مكتوب بلغة WebAssembly يوضح الوصول إلى الذاكرة وتخزين الوظائف

مؤشر جدول قفزة التحكم في التحكم في مثيل WebAssembly

باستخدام أساسيات القراءة والكتابة؛ نقوم بتعديل مؤشر جدول القفز في مثيل WebAssembly الثاني لتخطي بعض البايتات من الشيفرة المترجمة للثوابت في مثيل WebAssembly الأول بحيث يتم تفسير ثوابت الفاصلة العائمة على أنها رمز الصدفة المقصود:

مقتطف كود تجميعي يوضح تعليمات نقل البيانات إلى السجلات

قم بتشغيل مثيل WebAssembly لتنفيذ الرمز البرمجي للرمز الصدفي 

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

صُمم رمز الصدفة الذي نستخدمه لإنهاء جميع العمليات على جهاز لينكس، كما في الأمر التالي: 

مقتطف بسيط من أمر طرفي بسيط مع الأمر 'kill' لإنهاء العمليات

سيكون كود التجميع لتنفيذ هذا الأمر، المحول من أرقام الفاصلة العائمة، على النحو التالي: 

مقتطف كود تجميعي لاستدعاء النظام الذي ينهي عملية باستخدام الأمر 'kill'

محاكاة الثغرة الأمنية 

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

مقتطف من كود WebAssembly مصمم لتنفيذ كود shellcode من خلال الوصول إلى الذاكرة ومعالجة البيانات

يتم إرسال رسالة بريد إلكتروني للتصيد الاحتيالي مضمنة برابط إلى النطاق الذي يستضيف صفحة HTML المصممة إلى الضحية. 

لقطة شاشة تُظهر رسالة بريد إلكتروني للتصيد الاحتيالي إلى جانب أداة مراقبة النظام، مما يدل على تنفيذ الهجوم

في حال وصول الضحية إلى الرابط باستخدام الإصدار الضعيف من Google Chrome، يتم تنفيذ الرمز البرمجي shellcode، مما يؤدي إلى إنهاء جميع العمليات. ونتيجة لذلك، يتم تسجيل خروج المستخدم، كما هو موضح أدناه: 

لقطة شاشة لشاشة تسجيل الدخول إلى Kali Linux

الاصلاح

استُخدم حل MetaDefender Endpoint™ للتخفيف من حدة مشكلة مكافحة التطرف العنيف هذه بشكل استباقي من خلال الاستفادة من إمكانية "التطبيقات الضعيفة". ويحدد الحل بشكل فعال جميع نقاط الضعف المرتبطة بتطبيقات Google Chrome داخل بيئة نقطة النهاية ويعرضها. لتحييد التهديد، يمكن للمستخدمين إلغاء تثبيت Chrome على الفور أو تطبيق أحدث تصحيح أمني. ومن خلال تنفيذ أي من الإجراءين المضادين، يتم احتواء مكافحة التطرف العنيف بالكامل، مما يقلل بشكل كبير من خطر حدوث هجوم إلكتروني ناجح على نقطة النهاية.

واجهة MetaDefender Endpoint تعرض ثغرات Google Chrome، بما في ذلك تفاصيل عن نقاط الضعف في مكافحة التطرف العنيف

أمان Endpoint من المستوى التالي 

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


ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتلقي آخر تحديثات الشركة, والقصص ومعلومات عن الفعاليات والمزيد.