
استغلال إثبات المفهوم لتصعيد الامتيازات المحلية على ويندوز (CVE-2023-21746) يسيء استخدام المصادقة المحلية NTLM للحصول على امتيازات SYSTEM عبر الوصول إلى مشاركة SMB واختطاف DLL.
تم الإبلاغ عن ثغرة تصعيد صلاحيات محلية (LPE) في ويندوز إلى مايكروسوفت في 9 سبتمبر 2022 بواسطة Andrea Pierini (@decoder_it) وAntonio Cocomazzi (@splinter_code). كانت الثغرة ستسمح لمهاجم يمتلك حسابًا بصلاحيات منخفضة على جهاز بقراءة/كتابة ملفات تعسفية بصلاحيات SYSTEM.
في حين أن الثغرة بحد ذاتها لن تسمح مباشرة بتنفيذ أوامر بصلاحيات SYSTEM، يمكننا دمجها مع عدة نواقل لتحقيق هذه النتيجة. وبشكل ملائم، في 13 فبراير، تم نشر PoC آخر لتصعيد الصلاحيات بواسطة BlackArrowSec يستغل خدمة StorSvc، مما يسمح للمهاجم بتنفيذ كود بصلاحيات SYSTEM طالما يمكنه كتابة ملف DLL إلى أي دليل في PATH.
يستفيد PoC الخاص بـ LocalPotato من خلل في حالة خاصة من مصادقة NTLM تسمى المصادقة المحلية NTLM لخداع عملية متميزة لمصادقة جلسة يبدأها المهاجم ضد خادم SMB المحلي. ونتيجة لذلك، ينتهي الأمر بالمهاجم بالحصول على اتصال يمنحه الوصول إلى أي مشاركات بصلاحيات العملية المخدوعة، بما في ذلك المشاركات الخاصة مثل C$ أو ADMIN$.
العملية التي يتبعها الاستغلال هي كما يلي:
من خلال امتلاك اتصال متميز بمشاركات SMB، يمكن للمهاجم قراءة أو كتابة ملفات على الجهاز المستهدف في أي موقع. بينما لن يسمح لنا هذا بتشغيل أوامر مباشرة ضد الجهاز المصاب، سنقوم بدمج هذا مع ناقل هجوم مختلف لتحقيق تلك الغاية.
لاحظ أن الثغرة موجودة في بروتوكول NTLM وليس في خادم SMB، لذلك يمكن نظريًا استخدام نفس ناقل الهجوم ضد أي خدمة تستخدم المصادقة عبر NTLM. عمليًا، ومع ذلك، يجب التعامل مع بعض المحاذير عند اختيار البروتوكول المستهدف. يستخدم الـ PoC خادم SMB لتجنب بعض الحمايات الإضافية الموضوعة للبروتوكولات الأخرى ضد نواقل الهجوم المماثلة، وينفذ حتى تجاوزًا سريعًا لجعل الاستغلال يعمل ضد خادم SMB. منشور مؤلف الاستغلال الأصلي - (https://decoder.cloud/2023/02/13/localpotato-when-swapping-the-context-leads-you-to-system/)
حتى الآن، استخدمنا LocalPotato لكتابة ملفات تعسفية على الجهاز المستهدف. للحصول على شل بصلاحيات متميزة، ما زلنا بحاجة إلى معرفة كيفية استخدام الكتابة التعسفية لتشغيل أمر.
مؤخرًا، تم العثور على ناقل تصعيد صلاحيات آخر، حيث يمكن للمهاجم اختطاف DLL مفقود لتشغيل أوامر تعسفية بصلاحيات SYSTEM. المشكلة الوحيدة في هذا الناقل كانت أن المهاجم يحتاج إلى كتابة DLL في PATH الخاص بالنظام لتشغيله. افتراضيًا، يتضمن PATH الخاص بويندوز فقط الدلائل التي لا يمكن للحسابات المتميزة الكتابة فيها. بينما قد يكون من الممكن العثور على أجهزة غيّر فيها تثبيت تطبيقات معينة متغير PATH وجعل الجهاز عرضة للخطر، فإن ناقل الهجوم ينطبق فقط على سيناريوهات معينة. دمج هذا الهجوم مع LocalPotato يسمح لنا بالتغلب على هذا القيد والحصول على استغلال تصعيد صلاحيات يعمل بالكامل.
StorSvc واختطاف DLL كما اكتشف BlackArrowSec (https://github.com/blackarrowsec/redteam-research/tree/26e6fc0c0d30d364758fa11c2922064a9a7fd309/LPE via StorSvc)، يمكن للمهاجم إرسال استدعاء RPC إلى طريقة "SvcRebootToFlashingMode" التي توفرها خدمة "StorSvc"، والتي سينتهي بها الأمر إلى تشغيل محاولة لتحميل DLL مفقود يسمى "SprintCSP.dll". إذا لم تكن معتادًا على RPC، فاعتبرها واجهة برمجة تطبيقات (API) تكشف وظائف بحيث يمكن استخدامها عن بُعد. في هذه الحالة، تكشف خدمة StorSvc عن طريقة SvcRebootToFlashingMode، والتي يمكن لأي شخص لديه وصول إلى الجهاز استدعاؤها. نظرًا لأن StorSvc تعمل بصلاحيات SYSTEM، فإن إنشاء SprintCSP.dll في مكان ما في PATH سيؤدي إلى تحميله كلما تم إجراء استدعاء إلى SvcRebootToFlashingMode.
تجميع الاستغلال رابط الاستغلال - (https://github.com/decoder-it/LocalPotato) لاستخدام هذا الاستغلال، ستحتاج أولاً إلى تجميع كلا الملفين المقدمين:
لنبدأ بالتعامل مع "RpcClient.exe". كما ذكرنا سابقًا، سنحتاج إلى تغيير الاستغلال اعتمادًا على إصدار ويندوز للجهاز المستهدف. للقيام بذلك، سنحتاج إلى تغيير الأسطر الأولى من "LPE via StorSvc\RpcClient\RpcClient\storsvc_c.c" بحيث يتم اختيار نظام التشغيل الصحيح. سيؤدي هذا إلى ضبط الاستغلال لاستخدام معرّف واجهة RPC الصحيح. الآن بعد تصحيح الكود، دعنا نفتح موجه أوامر مطور ونبني المشروع عن طريق تشغيل الأمر التالي: الأوامر: C:\LPE via StorSvc\RpcClient> msbuild RpcClient.sln C:\LPE via StorSvc\RpcClient> move x64\Debug\RpcClient.exe C:\Users\user\Desktop\ (ستجد الملف التنفيذي المُجمَّع على سطح المكتب الخاص بك.)
الآن لتجميع "SprintCSP.dll"، نحتاج فقط إلى تعديل دالة "DoStuff()" في "C:\LPE via StorSvc\SprintCSP\SprintCSP\main.c" بحيث تنفذ أمرًا يمنحنا وصولًا متميزًا إلى الجهاز. للتبسيط، سنجعل DLL يضيف مستخدمنا الحالي إلى مجموعة المسؤولين. يمكننا أيضًا الحصول على شل عكسي من الهدف إلى جهازنا. نقوم الآن بتجميع DLL عن طريق تشغيل الأمر التالي ونقل النتيجة مرة أخرى إلى سطح المكتب الخاص بنا: الأوامر: C:\LPE via StorSvc\SprintCSP> msbuild SprintCSP.sln C:\LPE via StorSvc\SprintCSP> move x64\Debug\SprintCSP.dll C:\Users\user\Desktop\
نحن الآن جاهزون لإطلاق الاستغلال. تأكد من امتلاكك لملفات الاستغلال "LocalPotato.exe" و"RpcClient.exe" و"SprintCSP.dll".
الاكتشاف والتخفيف
الاكتشاف الآن بعد أن فهمنا كيف يعمل استغلال localpotato وكيف يمكن ربطه مع خدمة StorSrv لتنفيذ كود بصلاحيات SYSTEM، حان الوقت لمعرفة كيف يمكن اكتشاف ذلك داخل النظام وكيفية منع مثل هذه الهجمات.
قاعدة YARA: نظرًا لأن هذا الهجوم يتضمن ملفًا تنفيذيًا يعمل في سطر أوامر الطرفية مع وسائط، فإن طريقتين شائعتين لاكتشاف هذا النشاط ستكونان استخدام أداة مطابقة الأنماط YARA لاكتشاف أنماط الملفات وفحص الأحداث الناتجة عن تنفيذ أداة الاختراق هذه localpotato.exe. نظرًا لأن الهجوم يستخدم أداة الاختراق المعروفة باسم localpotato.exe، يمكننا إنشاء قاعدة YARA لاكتشاف وجود هذه الأداة داخل النظام باستخدام YARA أو أدوات اكتشاف أخرى مثل THOR لفحص الجهاز. (قاعدة YARA مرفقة في هذا المستودع، تبحث هذه القاعدة البسيطة عن أنماط سلاسل شائعة في الملف التنفيذي لـ localpotato).
قاعدة Sigma: SIGMA هي لغة توقيعات عامة تُستخدم لكتابة قواعد اكتشاف بناءً على الأنماط الموجودة في سجلات الأحداث. من أجل اكتشاف localpotato في الشبكة، من المتوقع أن تكون مراقبة السجلات المركزية مفعلة في المكان. قاعدة SIGMA التالية مأخوذة من المستودع الرسمي لـ SIGMA (https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_hktl_localpotato.yml).
يمكننا استخدام قواعد sigma هذه للتحويل إلى أداة الاكتشاف / المراقبة الموجودة والبحث في سجلات الأحداث لاصطياد الهجمات المحتملة.
التخفيف