نشر خبير أمن المعلومات ديفيد ويلز طريقة لتجاوز عناصر التحكم في حساب مستخدم UAC في Windows 10
مرحبا بالجميع!
أثناء البحث عن بعض الحلول الجديدة للتحكم في حساب المستخدم (UAC) ، اكتشفت حلاً جديدًا تمامًا لـ UAC في وقت كتابة هذه السطور. تجدر الإشارة إلى أن Microsoft لا تعتبر UAC حدًا أمنيًا ، ومع ذلك ، ما زلنا نبلغ عن العديد من الأخطاء في Microsoft وأريد مشاركة تفاصيل الثغرة التي وجدتها هنا. تم اختبار هذه الطريقة بنجاح على Windows 10 Build 17134. قبل التعمق في تفاصيل البحث ، سأعطيك أولاً شرحًا صغيرًا لكيفية عمل خدمة UAC.
Uac التمهيديعندما يريد مستخدم عضو في مجموعة المسؤولين تشغيل تطبيق يتطلب امتيازات عالية ، يعرض UAC طلبًا مناظرًا ويحتاج المستخدم الذي هو عضو في مجموعة المسؤولين تأكيد الإجراء. ومع ذلك ، لا يحدث طلب UAC هذا لجميع الملفات القابلة للتنفيذ إداريًا على Windows . هناك بعض الاستثناءات التي سترفع "تلقائيًا" امتيازات الملف القابل للتنفيذ دون التسبب في طلب UAC ، متجاوزًا UAC (مما يثير الدهشة!). تخضع هذه المجموعة المحددة من الملفات التنفيذية الموثوقة المحددة لفحوصات أمنية إضافية من قبل النظام للتأكد من أن هذه الملفات موثوقة بالفعل ، وبالتالي لا يسيء مهاجمو المعلومات استخدام هذه الميزة. تم استخدام هذا النهج في طرق تجاوز UAC السابقة وسيكون أساس طريقة التجاوز الجديدة الخاصة بي. ومع ذلك ، هناك بعض الثغرات التي يجب أن نأخذها حتى ينجح هجومنا. دعونا نلقي نظرة على المتطلبات التي يجب استيفاؤها إذا أردنا أن يكون ملفنا التنفيذي "يرتقي تلقائيًا إلى الامتيازات". للقيام بذلك ، سوف أعرض بعض الصور من مكتبة appinfo.dll المفككة (خدمة AIS التي تعالج طلبات التصعيد ذات الامتياز هي أحد المكونات الرئيسية لـ UAC).
المتطلب 1: تم تكوين الملف لرفع الامتيازات تلقائيًا
عند ظهور طلب لتصعيد الامتيازات لبرنامج ، تقوم خدمة AIS (appinfo.dll) بإجراء استدعاء RPC مع المسار القابل للتنفيذ الهدف الذي تم تمريره كوسيطة. ستقوم هذه الخدمة بعد ذلك بتعيين المحتويات القابلة للتنفيذ للملف المطلوب قراءته. في بيان الملف القابل للتنفيذ ، تتم محاولة قراءة القيمة للحصول على المفتاح "autoElevate" (إن وجد).
الشكل 1 - قراءة بيان الملف القابل للتنفيذ للحصول على القيمة الرئيسية "autoElevate".

إذا تم استلام القيمة وكانت صحيحة ، فسيتم اعتبار الملف كملف قابل للتنفيذ بامتياز مرتفع "تلقائي" ، والذي سيتم تشغيله بامتياز رفع ولن يتم استدعاء مربع حوار خدمة UAC (شريطة أن يكون قد اجتاز المتطلبات التالية المذكورة أدناه).
الشكل 2 - استدعاء "bsearch" للتحقق من اسم الملف التنفيذي في قائمة الملفات التنفيذية "رفع تلقائي"

يتم إدراج بعض هذه الملفات المبرمجة في النظام في القائمة البيضاء:
"cttunesvr.exe" و "inetmgr.exe" و "migsetup.exe" و "mmc.exe" و "oobe.exe" و "pkgmgr.exe" و "providehare.exe" و "providestorage.exe" و "تثبيت" .exe '،' winsat.exe '
المتطلب 2: تم التوقيع بشكل صحيح
من المفترض أن الشرط الثاني لزيادة الامتياز "تلقائيًا" بعد إرسال طلب إلى UAC هو إجراء فحص توقيع باستخدام "wintrust! WTGetSignatureInfo ".
وهذا يعني أن المهاجم لن يكون قادرًا على إنشاء ملف بيانه أو ملفه التنفيذي الخاص به ضروريًا لرفع الامتيازات "تلقائيًا" وينجح ، نظرًا لأن الملف الثنائي للمهاجم من المرجح أن يتم توقيعه بشكل غير صحيح ، كما سيفشل الشرط الأخير ، وهو التنفيذ. من دليل موثوق به.
المتطلب 3: التنفيذ من دليل موثوق به
الشرط الأخير للحصول على ارتفاع "تلقائي" للامتيازات هو أن الملف التنفيذي الهدف موجود في "دليل موثوق به" ، على سبيل المثال ، "C: \ Windows \ System32". يوضح الشكل 3 أن AIS يقوم بإجراء هذا الفحص للمسار مع طلب الترقية ، وفي هذه الحالة فإن أحد المسارات التي تعتبر "موثوقًا" هو "C: \ Windows \ System32".
الشكل 3

عنوان هذه المقالة هو "تجاوز التحكم في حساب المستخدم (UAC) عن طريق محاكاة الدلائل الموثوق بها" ، لذلك يمكنك بسهولة تخمين ما سيحدث بعد ذلك.
تجاوز UACكما ذكرنا سابقًا في قسم UAC Primer ، سيتم تنفيذ الامتياز التلقائي (تجاوز UAC) للملفات القابلة للتنفيذ التي:
- تم التهيئة لاستلام تصعيد امتياز "تلقائي"
- موقعة بشكل صحيح
- التشغيل من دليل موثوق به ("C: \ Windows \ System32")
يستخدم Appinfo.dll (AIS) واجهة برمجة التطبيقات RtlPrefixUnicodeString للتحقق مما إذا كان مسار الملف القابل للتنفيذ يطابق "C: \ Windows \ System32 \" للتحقق من أحد الأدلة الموثوقة. هذا اختبار خرساني مقوى إلى حد ما ، نظرًا لمقارنته بموقع الملف القانوني.
لذلك ، لتنظيم تجاوز هذا الاختيار ، أقوم بإنشاء دليل يسمى "C: \ Windows \" (لاحظ المساحة بعد "Windows"). بالطبع ، باستخدام هذا الإجراء ، لا يزال بإمكانك اجتياز اختبار RtlPrefixUnicodeString ، وسأذكر أيضًا أن هذا اسم دليل غير صالح إلى حد ما (أو على الأقل "غير ودي") ، نظرًا لأن Windows لا يسمح بإضافة مسافات إلى نهاية الاسم عند إنشاء الدليل (حاول )
ومع ذلك ، باستخدام CreateDirectory API وإضافة "\\؟ \ "إلى اسم الدليل الذي أريد إنشاؤه ، يمكننا تجاوز بعض قواعد تصفية الأسماء هذه وإرسال طلب لإنشاء الدليل مباشرة إلى نظام الملفات.

يؤدي هذا إلى إنشاء دليل غير مريح يتعايش بسعادة في نظام الملفات مع "C: \ Windows \" الحقيقي (باستثناء عندما تحاول القيام بشيء ما باستخدامه في مستكشف Windows).

الآن بعد أن أصبح لدينا دليل "C: \ Windows \" ، يمكننا إنشاء دليل "System32" فيه ونسخ أحد الملفات القابلة للتنفيذ الموقعة (التي يسمح بها النظام برفع الامتيازات "تلقائيًا") من الدليل الحقيقي "C: \ Windows \ System32 ".
للقيام بذلك ، قمت بنسخ "winSAT.exe" (أحد الملفات الموجودة في القائمة البيضاء للملفات القابلة للتنفيذ لـ Windows مع تمكين نظام رفع الامتياز "التلقائي").
عندما نحاول تشغيل هذا الملف من دليلنا الجديد "C: \ Windows \ System32 \ winSAT.exe" ، فسوف يمر عبر واجهات برمجة التطبيقات التالية (انظر الشكل 6) في appinfo.dll قبل إجراء فحص دليل موثوق به. هذا مهم وأساس لماذا يعمل هذا الحل.
الشكل 6

عندما يتم إرسال هذا المسار غير المناسب الذي يحتوي على مسافة إلى AIS لطلب تصعيد الامتياز ، يتم تمرير المسار إلى GetLongPathNameW ، والذي يحوله مرة أخرى إلى "C: \ Windows \ System32 \ winSAT.exe" (تمت إزالة المساحة).
عظيم!
الآن هذا هو السطر الذي مر فيه فحص الدليل الصحيح (باستخدام RtlPrefixUnicodeString) لبقية الفحص.
جمال حلّي هو أنه بعد التحقق من الدليل الموثوق به ، يتم تنفيذ هذا المسار المحول ، والذي يتم تحريره بعد ذلك ، ويتم تنفيذ باقي عمليات التحقق (والطلب النهائي لتصعيد الامتيازات) بالاسم الأصلي للدليل القابل للتنفيذ (مع مساحة إضافية).
يسمح لك هذا بالاطلاع على جميع عمليات التحقق الأخرى ويؤدي إلى قبول appinfo.dll نسختي من WinSAT.exe كما هو الحال مع رفع الامتيازات "تلقائيًا" (نظرًا لأنه تم التوقيع عليه وإضافته بشكل صحيح إلى القائمة البيضاء لرفع الامتيازات "تلقائيًا").
لاستخدام الشفرة الخبيثة فعليًا ، قمت بنسخ ملف WINMM.dll المزيف (الذي تم استيراده WinSAT.exe) في الدليل الحالي "C: \ Windows \ System32 \" لتزييف ملف dll المحلي. يمكن رؤية المفهوم الكامل في الشكل أدناه.
الشكل 7

→
رابط إلى جيثب