منح غير معقول لحقوق المسؤول

كل يوم جمعة ، أصدقاء. نشارككم اليوم مادة أخرى مترجمة عشية إطلاق دورة الهندسة العكسية .



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

فشل LoadLibrary


ربما تكون على دراية بهذا المفهوم بالفعل ، لكنني سأشرح لك ماهية هذا. عندما يستدعي التطبيق LoadLibrary في dll ، لكنه لا يوفر المسار الكامل للملف ، يتحقق النظام أولاً من مفتاح التسجيل KnownDlls ، الذي يبحث فيه عن المسار ، وإذا لم يكن هناك ، فسوف يبحث النظام في الدليل الذي تم تنفيذ التطبيق منه ، ثم يبحث في مسارات النظام مثل system32 / syswow64.

يمكنك وضع dll الخاص بك في نفس الدليل كتطبيق ومنحها نفس الاسم مثل dll النظام المحمل عادة ، ولكن على أي حال ، يجب أن يفي dll بالمتطلبات التالية:

  • يجب على التطبيق تنزيل dll بالاسم وليس المسار الكامل (كما هو الحال في كثير من الأحيان) ؛
  • يجب ألا تكون المكتبة المطلوبة موجودة في HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ KnownDLLs؛
  • يجب أن يتطابق dll مع بنية المعالج (تذكر أن معالجات 64 بت ببساطة ستتخطى المكتبات 32 بت والعكس صحيح) ؛
  • تقع المكتبة في System32 أو Syswow64 ، نظرًا لأن المسارات المحددة لا تعمل غالبًا.

استخدم فيروس ZeroAccess هذه الطريقة للاستفادة من "الهندسة الاجتماعية" وإجبار المستخدم على تشغيل الملف. بادئ ذي بدء ، تم تنزيل مثبت Adobe Flash من المثبت الرسمي ، وتم تسجيل bot dll في نفس الدليل المثبت ، ثم تم إطلاق المثبت. عندما يتم تنفيذ برنامج التثبيت ، يعرض التحكم في حساب المستخدم رسالة مفادها أن التطبيق مزود بواسطة مصدر موثوق به من "Adobe Systems Incorporated" ، ومن المرجح أن يقوم المستخدم بتثبيت هذا التطبيق (يؤدي ذلك إلى تنفيذ dll dot bot).


هل هذا تحديث حقيقي لبرنامج Flash Player؟ أو ZeroAccess؟ لا أحد يعلم.

طريقة أقل الغازية


تخيل أن هناك مجلدًا يوجد به 90٪ من التطبيقات التي تتطلب حقوق حساب مرتفعة ، وأنه قابل للكتابة بدون هذا النوع من الحقوق. حسنًا ، يوجد مثل هذا المجلد وهذا هو المجلد %userprofile%Downloads . ربما تفهم ما أحصل عليه.

لم أكن أتوقع العثور على ملف dll الذي يقوم بتحميل معظم التطبيقات وفي الوقت نفسه يفي بجميع المعايير الخاصة بدل ضار ، وبعد حوالي خمس دقائق من البحث ، عثرت على منجم ذهب: dwmapi.dll . لم تستوف هذه المكتبة جميع المعايير فحسب ، بل قامت أيضًا بتنزيل جميع ملفات التثبيت. الآن لنقم بإنشاء ملف dll الخاص بنا ، “dwmapi.dll” ، “dwmapi.dll” بوضعه في مجلد "التنزيلات" وتشغيل ملف التثبيت.



النجاح! ولكن الحقيقة هي أنه بمجرد بدء التثبيت ، لن ينجح ذلك ، لأننا استبدلنا مكتبة مهمة ، ولكن هذا سهل الإصلاح. نحن تصيب دلل.

خلق دلل تصيب


في البداية ، أردت فقط إضافة رأس قسم جديد ، وتغيير حقل NumberOfSections في رأس PE ، ثم فقط إضافة القسم الخاص بي إلى نهاية ملف PE. اتضح أنه بعد عنوان القسم الأخير مباشرة ، يوجد دليل استيراد ذو صلة سيتم الكتابة فوقه بواسطة عنوان القسم. لذلك ، بعد حوالي ساعتين من كتابة طلب لاستعادة كل PE من نقطة الصفر ، ذكرني أحدهم بأن دليل الاستيراد المرتبط موجود فقط لتسريع تنزيل الملفات المستوردة ويمكن الكتابة فوقه ، ثم تعطيله ببساطة في رأس PE.

خلال الخمسة عشر دقيقة التالية ، أمسك CTRL + Z لأعود إلى حيث بدأت وشعرت بالغباء. بعد سطرين من التعليمات البرمجية ، عملت العدوى الخاصة بي كما ينبغي ، ويمكنني الانتقال إلى الخطوة التالية. الآن يقوم infector ببساطة بفصل وإعادة كتابة دليل الاستيراد ذي الصلة برأس قسم جديد ، ويضيف قسمًا جديدًا إلى نهاية ملف PE ، ويضبط SizeOfImage لاستيعاب القسم الجديد ، ثم يغير AddressOfEntryPoint للإشارة إلى القسم الجديد.

كل ما نحتاجه الآن هو الكود الذي وضعناه هناك.

كود القشرة


كان الخيار الواضح هو إجبار القسم المُضاف على تنفيذ كود القشرة ، لذلك لم نكن بحاجة إلى القلق بشأن عمليات الترحيل والاستيراد. الكود الفعلي بسيط ومكتوب باستخدام بعض وحدات ماكرو FASM المريحة ، وسرعان ما سأتعرف على كيفية عمله.

  • يتم التحقق من المكدس للتأكد من أن dwmapi.dll قد تم استدعاء بواسطة DLL_PROCESS_ATTACH؛
  • يتم استخدام بنية Ldr PEB للحصول على العنوان الأساسي Kernel32 و Ntdll؛
  • يتم استخدام تطبيق GetProcAddress بسيط لاستيراد الوظائف التالية: NtOpenProcessToken و NtQueryInformationToken و NtClose و ExpandEnvironmentStringsA و CreateProcessA؛
  • يتم فتح الرمز المميز للعملية الحالية ويطلبه الرمز لتأكيد أن التطبيق الذي بدأنا منه يتمتع بحقوق مسؤول UAC ؛
  • اتضح مسار cmd.exe ، ثم يتم استدعاء سطر الأوامر ؛
  • يتم نقل التنفيذ مرة أخرى إلى نقطة الدخول الحقيقية لـ dwmapi.dll ، وهذا هو سبب استمرار التنفيذ.

وضع كل ذلك معا


النتيجة النهائية للعملية تصيب dwmapi.dll برمز القشرة الخاص بنا وتضعه في مجلد التنزيل ، بمجرد قيام المستخدم بتنزيل المثبت وتشغيله ، الأمر الذي يتطلب حقوق المسؤول ، سيتم استدعاء سطر الأوامر كمسؤول (بسبب Wow64FsRedirect وحقيقة أن تعمل معظم الإعدادات تحت wow64 ، يمكننا استخدام نفس الرمز على أنظمة Windows 32 بت و 64 بت).

يمكنك العثور على infector و shellcode الكامل على github: https://github.com/MalwareTech/UACElevator .

هذا كل شيء. أراك في الدورة!

Source: https://habr.com/ru/post/ar457082/


All Articles