
في 13 أغسطس 2024، كشف مركز مايكروسوفت للاستجابة الأمنية عن الثغرة الأمنية CVE-2024-38063، وهي ثغرة خطيرة في مكدس Windows TCP/IP يمكن استغلالها لتعريض وظائف الشبكات الحيوية داخل نظام التشغيل للخطر. هنا، يقدم المشاركون في برنامج زمالة OPSWAT للخريجين دراسة شاملة للتفاصيل التقنية لهذه الثغرة وتأثيرها المحتمل، بالإضافة إلى استراتيجيات التخفيف الموصى بها لهذه الثغرة.
المشاركون في برنامج زمالة OPSWAT : فام نغوك ثين - جامعة هو تشي منه لتكنولوجيا المعلومات
نظرة عامة
CVE-2024-38063 هي ثغرة أمنية خطيرة في مكدس TCP/IP لنظام التشغيل Windows بدرجة 9.8 CVSS، تؤثر على معالجة حزم IPv6. يمكن للمهاجمين عن بُعد استغلال هذه الثغرة الأمنية باستخدام تدفق عدد صحيح ناقص عند معالجة رؤوس امتداد IPv6 لتنفيذ تعليمات برمجية ضارة أو التسبب في حدوث حالة رفض الخدمة (DoS).
نظرًا لأن IPv6 مُمكّن افتراضيًا في معظم الأنظمة الحديثة، فإن هذا الخلل الذي لا ينطوي على نقرات يشكل خطرًا كبيرًا. ونتيجة لذلك، فإن جميع إصدارات ويندوز 10 وويندوز 11 وويندوز Server 2008 و2012 و2016 و2019 و2022 غير المصححة التي تم تمكين IPv6 فيها معرضة لهذا الثغرة.
المفاهيم الرئيسية
مكدس TCP/IP لنظام التشغيل Windows
مكدس Windows TCP/IP هو مكون نظام تشغيل أساسي مسؤول عن الاتصال بالشبكة عبر مجموعة بروتوكول التحكم في الإرسال/بروتوكول الإنترنت (TCP/IP). وهو يتعامل مع جميع تفاعلات الشبكة، مما يسهل الاتصال بين الأجهزة عبر الشبكات المحلية والعالمية.
IPv6 ورؤوس الامتدادات IPv6
تم تطوير IPv6 لمعالجة قيود IPv4. وقد أدخلت تحسينات مختلفة، مثل النمطية والمرونة من خلال رؤوس الامتداد. تدعم الرؤوس، الموضوعة بين رأس IPv6 والحمولة، البيانات الاختيارية والميزات المتقدمة.
تتضمن رؤوس امتدادات IPv6 الرئيسية ما يلي:
- خيارات القفزة تلو الأخرى (الرأس التالي = 0)
- رأس التوجيه (الرأس التالي = 43)
- رأس الجزء (رأس الجزء التالي = 44)
- رأس خيارات الوجهة (الرأس التالي = 60)
- رأس المصادقة (AH) (الرأس التالي = 51)
- تغليف حمولة الأمان (ESP) (الرأس التالي = 50)
يشير كل رأس امتداد إلى التالي عبر حقل الرأس التالي، مما ينشئ سلسلة متسلسلة. تُدخل هذه النمطية تعقيدًا على عملية معالجة الحزمة وناقلات الاستغلال المحتملة.
تدفق الأعداد الصحيحة الناقصة
يحدث التدفق الناقص للعدد الصحيح عندما ينتج عن عملية حسابية قيمة أصغر من الحد الأدنى للقيمة القابلة للتمثيل لنوع البيانات. على سبيل المثال، يمكن أن يؤدي طرح قيمة أكبر من قيمة أصغر إلى عدد صحيح غير موقّع إلى أن تصبح النتيجة قيمة موجبة كبيرة جدًا.
يحدث التجاوز الزائد للعدد الصحيح عندما تتجاوز القيمة الحد الأقصى لنوع البيانات و"تفيض" إلى الحد الأدنى للقيمة القابلة للتمثيل (على سبيل المثال، 0 في نطاق 0-10). ويحدث كلا السيناريوهين بسبب التعامل غير السليم مع الشروط الحدية في العمليات الحسابية، مما يؤدي إلى ثغرات خطيرة في أنظمة البرمجيات.
تحليل نقاط الضعف
سير عمل معالجة IPv6
بعد تلقي حزمة IPv6، يقوم Windows أولاً بتحليل رأس IPv6. بعد ذلك، تتحقق الدالة IppReceiveHeaderBatch من قيمة حقل الرأس التالي لاختيار المعالج المناسب للرؤوس اللاحقة. لكل رأس ملحق في السلسلة، تستدعي الدالة IppReceiveHeaderBatch الروتين المقابل لمعالجة ذلك الرأس المحدد.
على الرغم من التصميم المرن والمعياري لهذه الآلية، إلا أنها تقدم ناقل هجوم محتمل. في IPv6، عادةً ما يتم إعادة تجميع الحزم المجزأة في وجهتها، حيث توجد ثغرة في عملية إعادة تجميع الأجزاء ومعالجة الرؤوس.
يمكن للمهاجمين تحفيز سوء إدارة الذاكرة وتحفيز تجاوز سعة المخزن المؤقت عن طريق إرسال العديد من الحزم المشوهة مع رؤوس امتدادات تم التلاعب بها. يسمح ذلك للبيانات الزائدة بالكتابة فوق مناطق الذاكرة غير المقصودة، مما قد يسمح بتنفيذ تعليمات برمجية عشوائية. تم تحديد هذه الثغرة الأمنية باسم CVE-2024-38063.
ثغرة خطيرة في مكدس TCP/IP في ويندوز
قام الباحث الأمني ماركوس هاتشينز بفحص دقيق لتصحيح مايكروسوفت لمعالجة الثغرة الأمنية CVE-2024-38063. تقدم مدونته التقنية رؤى مفصلة حول السبب الجذري لهذه الثغرة الأمنية. وبناءً على النتائج التي توصل إليها، قام زميلنا بمزيد من الاستكشاف للمشكلة لفهم الثغرة بشكل شامل.
تحليل الرقعة
تضمّن التصحيح تحديثًا لملف tcpip.sys، بما في ذلك تعديل داخل دالة Ipv6pProcessOptions. وقد استبدل تغيير من سطر واحد استدعاءً من IppSendErrorList() باستدعاء إلى IppSendError()، مما يشير إلى أن IppSendErrorList() ربما ساهم في حدوث مكافحة التطرف العنيف.
حجم الحزمة صفر
كشف الفحص الدقيق للدالة IppSendErrorList() أنها تعالج قائمة مرتبطة من الحزم عن طريق استدعاء الدالة IppSendError() لكل منها. تقوم الدالة IppSendError() بتعيين الحالة STATUS_DATA_NOT_NOT_ACCEPTED للحزم المعيبة. ثم تنشئ رسالة خطأ ICMP تحتوي على معلومات حول الحزمة المعيبة وترسلها مرة أخرى. ومع ذلك، عندما يتم استدعاء الدالة IppSendErrorList() مع Always_send_icmp = true على حزم متعددة، فإنها تقوم بتعيين الحقل packet_size إلى صفر لكل حزمة.
تم تصميم الدالة Ipv6pProcessOptions لمعالجة رؤوس الامتدادات التي تحتوي على حقول قيمة الخيارات، بما في ذلك رؤوس خيارات القفزة بالقفزة وخيارات الوجهة. من خلال تعيين نوع الخيار إلى أي قيمة أكبر من 0x80، يمكن للمهاجمين تشغيل خطأ محدد في معالجة رؤوس الخيارات، مما يجبر على تعيين always_send_icmp إلى صواب وبالتالي يؤدي إلى تعيين حجم الحزمة إلى صفر.
في حين أن الحزمة ذات الحجم الصفري عادةً ما يتم تجاهلها، يمكن للمهاجمين التلاعب بحقل العنوان التالي في حزمة IPv6 الأصلية. يمكّن هذا التلاعب المهاجمين من التحكم في كيفية تفسير الحزمة في مراحل المعالجة اللاحقة، مما يجنب الرفض الفوري ويخلق فرصة للاستغلال.
تدفق الأعداد الصحيحة الناقصة في معالجة الأجزاء
من خلال تعيين حقل الرأس التالي إلى 44، للإشارة إلى رأس الجزء، يتم التعامل مع الحزمة بواسطة إجراءات تجزئة IPv6 أو إعادة التجميع. عندما تصل الحزمة إلى محلل الأجزاء، Ipv6pReceiveFragment()، فإنه يحدد
- حجم الحزمة صفر.
- يشير رأس الجزء إلى أن هناك بيانات إضافية متبقية لتتم معالجتها.
في الدالة Ipv6pReceiveFragment()، يتم حساب حجم التخصيص لـ Ipv6pReceiveFragment()، يتم حساب حجم التخصيص لـ fragment_size على أنه طرح 0x30 (طول رأس الحزمة) من حجم الحزمة دون أي تحقق من الصحة. إذا كان حجم الحزمة يساوي صفرًا، فإن هذا الطرح لا يفيض، مما ينتج عنه قيمة كبيرة 16 بت (حوالي 0xFFD0 أو 65488)، مما يتسبب في معالجة المحلل لذاكرة زائدة خارج الحدود الصالحة للحزمة ويؤدي إلى تلف الذاكرة.
من التدفق الناقص إلى التدفق الزائد وعدم التطابق في التخصيص
تعد الدالة Ipv6pReassemblyTimeout() مسؤولة عن تنظيف أجزاء IPv6 غير المكتملة بعد وقت محدد باستخدام عملية حسابية 16 بت لتحديد أحجام المخازن المؤقتة وعمليات النسخ. ونظراً للتدفق الناقص في الخطوة السابقة، حيث يصبح طول_الحزمة أو حجم الجزء 0xFFD0، يحدث تجاوز في التدفق أثناء التخصيص.
يؤدي الحساب الناتج إلى إعادة تعيين السجل إلى الصفر، مما يؤدي إلى تخصيص 48 بايت فقط من الذاكرة. ومع ذلك، نظرًا لأن كمية البيانات المنسوخة (65,488 بايت من إعادة التجميع->التحميل) لا تتوافق مع الذاكرة المخصصة، يحدث تجاوز في المخزن المؤقت يمكن التحكم فيه في تجمع النواة.
يفتح هذا التباين الباب أمام المهاجمين لتنفيذ تعليمات برمجية خبيثة عبر حزمة مصممة خصيصًا تستغل الثغرة في معالجة IPv6.
دليل إثبات المفهوم CVE-2024-38963
في محاولة لإعادة إنتاج الثغرة الأمنية CVE-2024-38963، قام زملاؤنا بصياغة سلسلة من الحزم المشوّهة المصممة لاستغلال الثغرة. كانت العملية التي اتبعوها هي
1. صياغة حزم IPv6 المشوّهة
إدراج رأس امتداد خيارات الوجهة IPv6 (النوع 60) بعد رأس IPv6 الأساسي، ثم تضمين خيار غير صالح (على سبيل المثال، نوع الخيار 0x81).
تُجبر هذه المعالجة نواة Windows kernel (tcpip.sys) على تعيين always_send_icmp = true، مما يؤدي إلى إنشاء خطأ ICMPv6 عبر روتين IppSendErrorList().
2. فرض معالجة قائمة المخزون الصافي (NBL)
أدى إغراق الهدف بدفعات سريعة من هذه الحزم المشوّهة إلى زيادة فرص النواة في تجميع حزم متعددة في قائمة مخزن صافي واحد (NBL). عندما يتم تجميع حزمتين أو أكثر، يتم تنشيط حلقة IppSendErrorList() الضعيفة، مما يؤدي إلى إعادة تعيين البيانات الوصفية DataLength و Offset بشكل غير صحيح في الأجزاء اللاحقة (حجم الحزمة الآن صفر).
3. حقن حزم IPv6 المجزأة
بعد إرسال حزم مشوهة، يتم إرسال حزم IPv6 المجزأة التي تتضمن رؤوس امتدادات مجزأة. تتم معالجة هذه الأجزاء باستخدام قيم DataLength التالفة بالفعل.
4. استغلال مهلة إعادة التجميع
يحتفظ kernel بأجزاء لمدة 60 ثانية (تتم إدارتها بواسطة Ipv6pReassemblyTimeout) للسماح بإعادة تجميع الحزمة. أثناء هذه المهلة، تؤدي قيم DataLength التالفة إلى حدوث نقص في تدفق عدد صحيح في Ipv6pReceiveFragment، مما يؤدي إلى حساب حجم الجزء بشكل غير صحيح (كبير بشكل مفرط).
5. تشغيل تجاوز سعة مخزن الكومة العازلة
يخصص kernel مخزنًا مؤقتًا للكومة استنادًا إلى القيم التي تم تجاوزها. تحدث عمليتان حسابيتان مختلفتان أثناء عملية إعادة التجميع: إحداهما تحدد حجم تخصيص الذاكرة (والذي يصبح صغيرًا جدًا بسبب الفائض البالغ 16 بت)، والأخرى تحسب طول النسخة باستخدام القيمة الكبيرة التي تم تجاوزها.
يؤدي عدم التطابق هذا إلى كتابة خارج الحدود، مما يتسبب في تجاوز سعة المخزن المؤقت المستند إلى كومة يمكن استغلالها لتشغيل حالة رفض الخدمة (DoS) أو تنفيذ التعليمات البرمجية عن بُعد.
الشفرة المصدرية المستخدمة في إعادة إنتاج مكافحة التطرف العنيف لهجوم الحرمان من الخدمة:
عندما يتم استغلال هذه الثغرة من قبل أحد المهاجمين، قد يتعطل نظام الضحية على الفور، مما يؤدي إلى ظهور شاشة زرقاء للموت:
الاصلاح
إن إهمال تحديث نظام التشغيل الخاص بك بانتظام يعرّض جهازك لتهديدات أمنية، بما في ذلك تلك المرتبطة بمكافحات التطرف العنيف (CVEs). وللتخفيف من هذه المخاطر، يوفر MetaDefender Endpoint™ حماية قوية من خلال الكشف عن إصدار نظام التشغيل الخاص بك والتحقق من الثغرات الأمنية، بما في ذلك CVEs المعروفة، مثل CVE-2024-38063.
صُمم MetaDefender Endpoint لحماية الأجهزة داخل شبكات تكنولوجيا المعلومات/التشغيل الحساسة من تهديدات الأجهزة الطرفية والوسائط القابلة للإزالة. فهو يضمن تحديث نظام التشغيل والتطبيقات المثبتة لديك، ويحدد أي إصدارات قديمة أو ضعيفة، ويسرد التطبيقات ذات الثغرات المعروفة ومكافحة التطرف العنيف، إلى جانب الإصلاحات الموصى بها. كما أنه يساعد في حماية الأجهزة من مخاطر الوسائط القابلة للإزالة من خلال حظر الوصول إلى محركات أقراص USB حتى يتم فحصها والعثور عليها نظيفة باستخدام محركات متعددة لمكافحة البرامج الضارة أثناء إجراء فحص عميق CDR™ على أكثر من 180 نوعاً من الملفات.
تحدث إلى أحد خبرائنا اليوم لتعرف كيف يمكن ل MetaDefender Endpoint أن يحوّل وضعك الأمني من خلال الذكاء الرائد في المجال.