
Windows - تسليح الكتابات المميزة للملفات باستخدام خدمة Update Session Orchestrator
⚠️ تحديث 2020-06-06: لم تعد هذه الخدعة تعمل على أحدث إصدارات Windows 10 Insider Preview. هذا يعني أنه على الرغم من أنها لا تزال تعمل على الإصدار الرئيسي من Windows 10، يجب أن تتوقع أن يتم تصحيحها في الأشهر القادمة.
يوضح هذا الإثبات (PoC) تقنية يمكن استخدامها لاستغلال ثغرات كتابة الملفات المميزة في ويندوز. إنه يوفر بديلاً لـ "استغلال" تحميل DLL الخاص بـ DiagHub الذي اكتشفه James Forshaw (المعروف بـ @tiraniddo)، والذي تم إصلاحه بواسطة مايكروسوفت بدءًا من إصدار build 1903.
بدءًا من Windows 10، قدمت مايكروسوفت خدمة Update Session Orchestrator. كمستخدم عادي، يمكنك التفاعل مع هذه الخدمة باستخدام COM، وبدء "فحص التحديثات" (أي التحقق من توفر التحديثات) أو بدء تحميل التحديثات المعلقة على سبيل المثال. هناك حتى أداة مضمنة غير موثقة تسمى usoclient.exe، تخدم هذا الغرض.
من وجهة نظر المهاجم، هذه الخدمة مثيرة للاهتمام لأنها تعمل كـ NT AUTHORITY\System وتحاول تحميل DLL غير موجودة (windowscoredeviceinfo.dll) عند إنشاء جلسة تحديث.
هذا يعني أنه إذا وجدنا ثغرة في كتابة الملفات المميزة في ويندوز أو في برنامج طرف ثالث، يمكننا نسخ نسختنا الخاصة من windowscoredeviceinfo.dll إلى C:\Windows\Sytem32\ ثم تحميلها بواسطة خدمة USO للحصول على تنفيذ تعليمات برمجية عشوائية كـ NT AUTHORITY\System.
لمزيد من المعلومات:
الجزء 1 - https://itm4n.github.io/usodllloader-part1/
الجزء 2 - https://itm4n.github.io/usodllloader-part2/
يتكون هذا الحل من مشروعين: WindowsCoreDeviceInfo و UsoDllLoader.
يوفر DLL PoC سيقوم بتشغيل bind shell على المنفذ 1337 (محلي فقط)، عندما يتم استدعاء الدالة QueryDeviceInformation(). هذا هو اسم الدالة المستخدمة من قبل عمال USO.
إنها نسخة مبسطة من usoclient.exe. يمكن تشغيلها كمستخدم عادي للتفاعل مع خدمة USO وجعلها تحمل windowscoredeviceinfo.dll. بعد ذلك، سيحاول الاتصال بـ bind shell. في حالة حدوث أخطاء، يرجى قراءة قسم "المشكلات المعروفة".
الحل مُعد مسبقًا لذا يجب أن تكون عملية التجميع سهلة. أنا أستخدم Visual Studio 2019. قد لا يعمل مع الإصدارات الأقدم.
Release ومعمارية x64..\x64\Release\WindowsCoreDeviceInfo.dll والمحمل .\x64\Release\UsoDllLoader.exe.لأغراض الاختبار، يمكنك:
WindowsCoreDeviceInfo.dll إلى C:\Windows\System32\.NT AUTHORITY\SYSTEM.إذا فشل UsoDllLoader.exe، يمكنك تنفيذ ما سبق يدويًا.
WindowsCoreDeviceInfo.dll إلى C:\Windows\System32\.usoclient StartInteractiveScan كمستخدم عادي. لاحظ أنك لن تحصل على أي رد من الأمر.nc.exe 127.0.0.1 1337 للاتصال بـ bindshell.من المحتمل أن تفشل هذه الطريقة إذا كان هناك تحديث واحد أو أكثر في انتظار التثبيت، أو إذا كانت التحديثات قيد التثبيت.
اعتمادًا على إصدار ويندوز، قد يفشل UsoDllLoader.exe مع رموز أخطاء مختلفة. لم أتحقق كثيرًا من هذه المشكلات. السبب في ذلك هو أنه مجرد PoC، قمت بتطويره للراحة. ما يهم أكثر هو DLL، وليس المحمل. راجع "الاستخدام 2" لمزيد من التفاصيل.