تحليل واستغلال ثغرة 0day في نظام ويندوز من مايكروسوفت
في الآونة الأخيرة، أصدرت مايكروسوفت تصحيح أمان يعالج ثغرة تصعيد الامتياز في win32k التي يتم استغلالها بنشاط. تؤثر هذه الثغرة بشكل أساسي على الإصدارات السابقة من نظام Windows، ويبدو أنه لا يمكن تفعيلها على Windows 11. ستقوم هذه المقالة بتحليل كيف يمكن للمهاجمين الاستمرار في استغلال مثل هذه الثغرات في بيئة الأمان الحالية. يستند هذا التحليل إلى بيئة Windows Server 2016.
خلفية الثغرة
تشير ثغرات 0day إلى الثغرات الأمنية غير المعلنة وغير المرقعة، وهي مشابهة لمفهوم تداول T+0 في الأسواق المالية. بمجرد استغلال هذه الثغرات بشكل خبيث، يمكن أن تسبب أضرارًا جسيمة. الثغرة المكتشفة في نظام Windows 0day يمكن أن تمنح المهاجمين السيطرة الكاملة على النظام، مما يمكّنهم من تنفيذ هجمات مثل سرقة المعلومات، وتدمير النظام، وزرع البرمجيات الخبيثة. من منظور Web3، يمكن أن يؤدي ذلك إلى سرقة المفاتيح الخاصة، وتحويل الأصول الرقمية، وحتى تعريض النظام البيئي بأكمله القائم على بنية Web2 للخطر.
تحليل التصحيح
تحليل رمز التصحيح يكشف أن المشكلة الرئيسية التي تم إصلاحها هي معالجة عدّ مرجع الكائن. من التعليقات في شفرة win32k السابقة، يتبين أن الشفرة الأصلية كانت تقفل كائن النافذة فقط، دون قفل كائن القائمة داخل النافذة، مما قد يؤدي إلى الإشارة غير الصحيحة لكائن القائمة.
إثبات مفهوم استغلال الثغرات ( PoC )
تحليل أظهر أن دالة xxxEnableMenuItem قد تعيد حالة عنصر القائمة من القائمة الرئيسية أو القائمة الفرعية. قمنا بإنشاء هيكل قائمة خاص من أربع طبقات يتضمن الخصائص التالية:
يجب أن تكون معرف القائمة الأساسية D من نوع قائمة النظام.
يجب أن تكون القائمة العلوية A أيضًا قائمة النظام، ولكن يجب حذف العناصر التي تحمل نفس معرف القائمة D.
حذف الإشارة إلى القائمة C في القائمة B.
يبدو أن وجود القائمة B يساعد في إطلاق القائمة C.
عند وجود ثغرة، يتم حذف ارتباط القائمة C و B عند عودة xxxRedrawTitle إلى مستوى المستخدم، ويتم تحرير القائمة C. هذا يؤدي إلى الإشارة اللاحقة إلى كائن القائمة C غير الصالح في دالة xxxEnableMenuItem.
استغلال الثغرات ( Exp ) التنفيذ
الفكرة العامة
النظر في اتجاهين محتملين للاستفادة:
تنفيذ shellcode: الإشارة إلى ثغرات سابقة مثل CVE-2017-0263، ولكن قد تواجه العديد من العقبات في إصدارات Windows الأحدث.
استخدام عمليات القراءة والكتابة لتعديل الرمز: في السنوات الأخيرة لا يزال هناك تجارب عامة يمكن الاستفادة منها، والجانب الرئيسي الذي يحتاج إلى حل هو كيفية التحكم في قيمة cbwndextra للمرة الأولى.
نحن نتبنى الخيار الثاني، حيث نقوم بتقسيم exp إلى خطوتين: التحكم في قيمة cbwndextra وإنشاء بدائل قراءة وكتابة مستقرة.
 الكتابة الأولى للبيانات
استخدم كائن الاسم WNDClass من فئة النوافذ لاحتلال وإطلاق ذاكرة كائن القائمة المحررة. في دالة xxxRedrawWindow، ابحث عن موقع البيانات القابل للكتابة، من خلال التحكم في بيانات الذاكرة الخاصة بالكائن السابق لتلبية فحص العلامات في الدالة.
![Numen حصرية: ثغرة 0day من مايكروسوفت يمكن أن تقلب لعبة Web3 على النظام + المستوى الفيزيائي]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) تخطيط الذاكرة المستقرة
تصميم تخطيط الذاكرة لكائن HWND بحجم 0x250 بايت متتالي، تحرير الكائنات الوسيطة واستخدام كائن HWNDClass. تستخدم كائنات HWND الأمامية والخلفية للتحقق من الوظائف وتنفيذ العمليات الأساسية للقراءة والكتابة. تحديد ترتيب الكائنات بدقة من خلال تسرب عنوان مقبض النواة.
![Numen حصرية: ثغرة 0day من مايكروسوفت يمكن أن تكشف عن نظام + المستوى الفيزيائي في لعبة Web3]###https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
) تنفيذ القراءة والكتابة للعبارات الأساسية
يمكن استخدام دالة GetMenuBarInfo للقراءة بشكل عشوائي، واستخدام دالة SetClassLongPtr للكتابة بشكل عشوائي. باستثناء الكتابة إلى TOKEN، تتم جميع عمليات الكتابة الأخرى من خلال كائن الفئة للكائن النافذة الأول.
مايكروسوفت تعيد بناء كود win32k باستخدام Rust، وقد تحل هذه الثغرات بشكل كامل في المستقبل.
تعتمد هذه الثغرات بشكل رئيسي على تسرب عنوان مقبض كومة سطح المكتب، مما يشكل خطرًا أمنيًا على الأنظمة القديمة.
قد يكون اكتشاف هذه الثغرة نتيجة لتحسينات في كشف تغطية الشيفرة.
تساعد مراقبة تخطيط الذاكرة غير الطبيعي وعمليات القراءة والكتابة على بيانات النوافذ في اكتشاف ثغرات مماثلة.
شاهد النسخة الأصلية
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
تسجيلات الإعجاب 11
أعجبني
11
6
مشاركة
تعليق
0/400
TestnetNomad
· منذ 14 س
ماذا تتحدث عن Rust؟
شاهد النسخة الأصليةرد0
StealthDeployer
· منذ 14 س
لقد بدأت باستخدام لينكس منذ فترة طويلة، إنه خيار حكيم
شاهد النسخة الأصليةرد0
CryptoMotivator
· منذ 14 س
مرة أخرى يحدث شيء، هذا الخطأ في مايكروسوفت تقليدي حقًا
تحليل ثغرات 0day في نظام ويندوز: من رفع الامتيازات في win32k إلى مخاطر أمان Web3
تحليل واستغلال ثغرة 0day في نظام ويندوز من مايكروسوفت
في الآونة الأخيرة، أصدرت مايكروسوفت تصحيح أمان يعالج ثغرة تصعيد الامتياز في win32k التي يتم استغلالها بنشاط. تؤثر هذه الثغرة بشكل أساسي على الإصدارات السابقة من نظام Windows، ويبدو أنه لا يمكن تفعيلها على Windows 11. ستقوم هذه المقالة بتحليل كيف يمكن للمهاجمين الاستمرار في استغلال مثل هذه الثغرات في بيئة الأمان الحالية. يستند هذا التحليل إلى بيئة Windows Server 2016.
خلفية الثغرة
تشير ثغرات 0day إلى الثغرات الأمنية غير المعلنة وغير المرقعة، وهي مشابهة لمفهوم تداول T+0 في الأسواق المالية. بمجرد استغلال هذه الثغرات بشكل خبيث، يمكن أن تسبب أضرارًا جسيمة. الثغرة المكتشفة في نظام Windows 0day يمكن أن تمنح المهاجمين السيطرة الكاملة على النظام، مما يمكّنهم من تنفيذ هجمات مثل سرقة المعلومات، وتدمير النظام، وزرع البرمجيات الخبيثة. من منظور Web3، يمكن أن يؤدي ذلك إلى سرقة المفاتيح الخاصة، وتحويل الأصول الرقمية، وحتى تعريض النظام البيئي بأكمله القائم على بنية Web2 للخطر.
تحليل التصحيح
تحليل رمز التصحيح يكشف أن المشكلة الرئيسية التي تم إصلاحها هي معالجة عدّ مرجع الكائن. من التعليقات في شفرة win32k السابقة، يتبين أن الشفرة الأصلية كانت تقفل كائن النافذة فقط، دون قفل كائن القائمة داخل النافذة، مما قد يؤدي إلى الإشارة غير الصحيحة لكائن القائمة.
إثبات مفهوم استغلال الثغرات ( PoC )
تحليل أظهر أن دالة xxxEnableMenuItem قد تعيد حالة عنصر القائمة من القائمة الرئيسية أو القائمة الفرعية. قمنا بإنشاء هيكل قائمة خاص من أربع طبقات يتضمن الخصائص التالية:
عند وجود ثغرة، يتم حذف ارتباط القائمة C و B عند عودة xxxRedrawTitle إلى مستوى المستخدم، ويتم تحرير القائمة C. هذا يؤدي إلى الإشارة اللاحقة إلى كائن القائمة C غير الصالح في دالة xxxEnableMenuItem.
استغلال الثغرات ( Exp ) التنفيذ
الفكرة العامة
النظر في اتجاهين محتملين للاستفادة:
تنفيذ shellcode: الإشارة إلى ثغرات سابقة مثل CVE-2017-0263، ولكن قد تواجه العديد من العقبات في إصدارات Windows الأحدث.
استخدام عمليات القراءة والكتابة لتعديل الرمز: في السنوات الأخيرة لا يزال هناك تجارب عامة يمكن الاستفادة منها، والجانب الرئيسي الذي يحتاج إلى حل هو كيفية التحكم في قيمة cbwndextra للمرة الأولى.
نحن نتبنى الخيار الثاني، حيث نقوم بتقسيم exp إلى خطوتين: التحكم في قيمة cbwndextra وإنشاء بدائل قراءة وكتابة مستقرة.
 الكتابة الأولى للبيانات
استخدم كائن الاسم WNDClass من فئة النوافذ لاحتلال وإطلاق ذاكرة كائن القائمة المحررة. في دالة xxxRedrawWindow، ابحث عن موقع البيانات القابل للكتابة، من خلال التحكم في بيانات الذاكرة الخاصة بالكائن السابق لتلبية فحص العلامات في الدالة.
![Numen حصرية: ثغرة 0day من مايكروسوفت يمكن أن تقلب لعبة Web3 على النظام + المستوى الفيزيائي]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(
) تخطيط الذاكرة المستقرة
تصميم تخطيط الذاكرة لكائن HWND بحجم 0x250 بايت متتالي، تحرير الكائنات الوسيطة واستخدام كائن HWNDClass. تستخدم كائنات HWND الأمامية والخلفية للتحقق من الوظائف وتنفيذ العمليات الأساسية للقراءة والكتابة. تحديد ترتيب الكائنات بدقة من خلال تسرب عنوان مقبض النواة.
![Numen حصرية: ثغرة 0day من مايكروسوفت يمكن أن تكشف عن نظام + المستوى الفيزيائي في لعبة Web3]###https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(
) تنفيذ القراءة والكتابة للعبارات الأساسية
يمكن استخدام دالة GetMenuBarInfo للقراءة بشكل عشوائي، واستخدام دالة SetClassLongPtr للكتابة بشكل عشوائي. باستثناء الكتابة إلى TOKEN، تتم جميع عمليات الكتابة الأخرى من خلال كائن الفئة للكائن النافذة الأول.
![Numen حصرية: ثغرة 0day من مايكروسوفت يمكنها كشف نظام+طبقة فيزيائية لأسواق Web3]###https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(
الاستنتاج
مايكروسوفت تعيد بناء كود win32k باستخدام Rust، وقد تحل هذه الثغرات بشكل كامل في المستقبل.
تعتمد هذه الثغرات بشكل رئيسي على تسرب عنوان مقبض كومة سطح المكتب، مما يشكل خطرًا أمنيًا على الأنظمة القديمة.
قد يكون اكتشاف هذه الثغرة نتيجة لتحسينات في كشف تغطية الشيفرة.
تساعد مراقبة تخطيط الذاكرة غير الطبيعي وعمليات القراءة والكتابة على بيانات النوافذ في اكتشاف ثغرات مماثلة.
تعليق على المقال:
هل يمكن لـ rust أن ينقذ ويندوز؟ هذا مضحك حقًا