
تجاوز UAC عن طريق اختطاف DLL موجودة في Native Image Cache
تجاوز التحكم في حساب المستخدم (UAC) للحصول على صلاحيات مرتفعة (مسؤول) لتشغيل أي برنامج بمستوى تكامل عالٍ.

قررت تحديث ByeIntegrity ليكون أسرع وأخف وزناً وأكثر موثوقية. هذا إصلاح شامل، لذا قمت بإنشاء مشروع جديد في حل VS باسم "ByeIntegrity2021"، وهو الإصدار المحدث من هذا الهجوم. بالطبع، لا يزال الإصدار الأصلي موجوداً. لمزيد من المعلومات حول الإصدار الجديد، قم بتوسيع التفاصيل أدناه.
الإصدار الجديد الآن قادر على اختطاف NIC دون الاعتماد على الصور الأصلية المثبتة في NIC. يفعل ذلك عن طريق إنشاء واصفات صور أصلية وحمولات خاصة به، ثم نقلها إلى NIC، مما يلغي الحاجة إلى:
*.ni الموجودة المنتجة بواسطة NGEN.exeيقوم CLR بتحميل الصور الأصلية من NIC عن طريق إجراء مسح متكرر للدليل لكل إدخال، ثم قراءة ملف *.aux الخاص به. يحتوي هذا الملف على معلومات حول الصورة الأصلية وتبعياتها. بناءً على المعلومات الموجودة في ملف AUX، سيقوم CLR إما بتحميل الصورة أو رفضها، ثم الانتقال إلى المرشح التالي. إذا لم يتم العثور على مرشحين قابلين للاستخدام، فإنه يقوم بتحميل الصورة القياسية ويستخدم jit لتجميعها بشكل طبيعي. لا يتم قراءة أي جزء من الصورة الأصلية الفعلية (يتم فقط التحقق من وجودها)، لذلك يقوم ByeIntegrity ببساطة بوضع DLL الحمولة بنفس الاسم الذي ستكون عليه الصورة الأصلية.
يأتي الإصدار المحدث من ByeIntegrity مع أداة تسمى AUXGen، والتي تأخذ اسم تجميعية من GAC ثم تقوم بإنشاء ملف AUX المقابل لها. يتم إنشاء ملف AUX ليتوافق مع فحوصات CLR وسيقوم CLR بتحميل "الصورة الأصلية" الموصوفة بواسطة ملف AUX. ملاحظة: لا تتعامل AUXGen مع التبعيات عند إنشاء ملف AUX. إنها تقوم فقط بما يلزم ليقوم CLR بتحميل الصورة. سأنشر تفاصيل تنسيق ملف AUX لاحقاً.
يستخدم ByeIntegrity الآن ISecurityEditor، تماماً كما تفعل UACMe، مما يقلل من الكود المطلوب. كما يتطلب أن تكون قد قمت بإنشاء ملف AUX للتجميعية MMCEx، ووضعته في نفس الدليل الذي يوجد به ByeIntegrity. أصبحت MMCEx الآن الصورة المستهدفة بسبب ترتيب تحميلها واسمها الأقصر.
يختطف ByeIntegrity DLL موجودة في ذاكرة التخزين المؤقت للصور الأصلية (NIC). يتم استخدام NIC بواسطة .NET Framework لتخزين تجميعات .NET المحسنة التي تم إنشاؤها من برامج مثل Ngen، مولد الصور الأصلية لـ .NET Framework. نظراً لأن Ngen يتم تشغيله عادةً تحت المستخدم الحالي بصلاحيات المسؤول عبر جدولة المهام، فإن NIC يمنح صلاحية التعديل لأعضاء مجموعة المسؤولين.
تستخدم الوحدة الإضافية لجدار حماية Windows في وحدة التحكم الإدارية (MMC) إطار عمل .NET، وعند تهيئتها، يتم تحميل وحدات من NIC في عملية MMC. يستخدم الملف التنفيذي لـ MMC ميزة AutoElevate، وهي آلية تستخدمها Windows لرفع رمز العملية تلقائياً دون مطالبة UAC.
يختطف ByeIntegrity DLL محددة موجودة في NIC باسم Accessibility.ni.dll. يقوم بكتابة شيلكود في منطقة حشو ذات حجم مناسب موجودة في قسم .text من DLL. ثم يتم تحديث نقطة الدخول لـ DLL لتشير إلى الشيلكود. عند تحميل DLL، يتم تنفيذ نقطة الدخول (وهي في الواقع الشيلكود). تقوم الشيلكود بحساب عنوان kernel32!CreateProcessW، وتنشئ نسخة جديدة من cmd.exe تعمل كمسؤول، ثم تعيد TRUE ببساطة. هذا فقط لسبب DLL_PROCESS_ATTACH؛ جميع الأسباب الأخرى ستعيد TRUE فوراً.
تم تنفيذ هذا الهجوم في UACMe كطريقة رقم 63. إذا كنت ترغب في تجربة هذا الهجوم، فيرجى استخدام UACMe أولاً. الهجوم هو نفسه، لكن UACMe تستخدم طريقة مختلفة لتعديل NIC. يستخدم ByeIntegrity IFileOperation بينما تستخدم UACMe ISecurityEditor. بالإضافة إلى ذلك، تختار UACMe Accessibility.ni.dll الصحيح لنظامك وتقوم بمهام صيانة النظام إذا لزم الأمر (لتوليد مكونات NIC). يختار ByeIntegrity ببساطة أول إدخال NIC موجود (والذي قد يكون أو لا يكون الإدخال الصحيح الذي تستخدمه MMC) ولا يقوم بتشغيل مهام صيانة النظام. يحتوي ByeIntegrity على كود أكبر بكثير من UACMe، لذا فإن قراءة تنفيذ UACMe ستكون أسهل بكثير من قراءة كود ByeIntegrity. أخيراً، يطلق ByeIntegrity عملية فرعية أثناء الهجوم بينما لا تفعل UACMe ذلك.
خلاصة: UACMe أبسط وأكثر فعالية من ByeIntegrity، لذا استخدم UACMe أولاً.
إذا كنت تقرأ هذا فأنت على الأرجح تعرف كيفية تجميع المصدر. فقط لاحظ أن هذا لم يتم اختباره أو تصميمه مع وضع x86 في الاعتبار على الإطلاق، ومن المحتمل ألا يعمل على x86 على أي حال.
تماماً مثل UACMe، لن أقوم أبداً بتحميل ملفات ثنائية مترجمة إلى هذا المستودع. هناك دائماً أشخاص يريدون للعالم أن ينهار ويحترق، ولن أقدم لهم طريقاً سهلاً لتشغيل هذا على جهاز شخص آخر والتسبب في ضرر متعمد. كما لا أريد لمستخدمي النصوص البرمجية المبتدئين (script-kiddies) استخدام هذا الهجوم دون فهم ما يفعله والضرر الذي يمكن أن يسببه.
يعمل هذا الهجوم من Windows 7 (7600) وحتى أحدث إصدار من Windows.