
تجاوز كلمة مرور واجهة المستخدم لعميل Symantec Endpoint Protection
تجاوز المصادقة لكلمة مرور واجهة مستخدم العميل في Symantec Endpoint Protection 14.3.5351
يتيح Symantec Endpoint Protection تعيين حماية بكلمة مرور على واجهة المستخدم الخاصة به لمنع تغييرات التكوين. يتم تنفيذ هذا الفحص لكلمة المرور عبر منطق ليس في عملية محمية خفيفة (Protected Process Light - PPL) ولا في برنامج تشغيل النواة؛ إذ يسمح تغيير قيمة إرجاع في الذاكرة أو ترقيع الملف الثنائي للمهاجم بتجاوز كلمة المرور. يعمل هذا حتى إذا كانت الحماية من العبث (Tamper Protection) مفعّلة.
إذا كان بإمكان المهاجم تنفيذ تعليمات برمجية بصلاحيات المسؤول، فيمكنه استيراد XML لسياسة ضارة و/أو إعدادات اتصال للإدارة المركزية لـ SEP. وبهذا يكتسب السيطرة الكاملة تقريبًا على العميل. باستخدام استيراد السياسة، يمكنهم إضافة استثناءات، وفتح خيارات واجهة المستخدم، وتعطيل كلمة مرور المسؤول أو تغييرها، وتعطيل الحماية بشكل دائم، و/أو إلغاء تثبيت العميل.
إذا لم تكن لدى المهاجم صلاحيات المسؤول، فيمكن استخدامه لتصدير معلومات استكشاف الأخطاء وإصلاحها، وقراءة السجلات، وعرض إعدادات العميل. في الإصدار 14.0 يمكن تصدير السياسة وتعطيل الحماية من العبث دون صلاحيات المسؤول. لم يكن هذا ممكنًا في 14.3.5413.3000 .
في 14.3.5351 يتم تنفيذ الفحص التالي للتحقق من تطابق كلمة المرور:
.text:00438021 loc_438021: ; CODE XREF: sub_437FA0+73↑j
.text:00438021 mov ecx, offset ServiceName ; "SepMasterService"
.text:00438026 call sub_43DDF0
.text:0043802B test eax, eax
.text:0043802D jnz short loc_4380A5
.text:0043802F push ecx ; Src
.text:00438030 lea eax, [ebp+var_14]
.text:00438033 mov ecx, esp
.text:00438035 push eax
.text:00438036 call ds:??0?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@QAE@ABV01@@Z ; ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>(ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>> const &)
.text:0043803C call sub_4380F0
.text:00438041 test al, al
.text:00438043 jz short loc_43804F
.text:00438045 mov ecx, esi
.text:00438047 call ds:__imp_?OnOK@CDialog@@MAEXXZ ; CDialog::OnOK(void)
.text:0043804D jmp short loc_4380AD
القفزة التي يبدو أنها تتحكم في نجاح جميع محاولات كلمة المرور في SymCorpUI.exe هي تعليمة JZ الموضحة عند .text:00438043. تغيير هذه إلى JNZ (التعليمة 0x74 -> 0x75) يعكس اتجاه القفزة، مما يسمح بقبول أي كلمة مرور عشوائية.
يقوم السكربت المكتوب بلغة Python بالعثور على مجلد التثبيت لـ SEP، وقراءة SymCorpUI.exe، وكتابة نسخة مصححة في المجلد المجاور للسكربت، وتشغيل النسخة المصححة في دليل العمل الأصلي. قم بتشغيله بصلاحيات مرتفعة، وسيُطلق واجهة مستخدم SEP تقبل أي كلمة مرور غير صحيحة يتم إدخالها.
يمكن للمهاجم الآن تصدير XML السياسة من خلال Help -> Troubleshooting. سيحتوي هذا على التكوين بما في ذلك أي تجزئات لكلمة مرور المسؤول. يمكن للمهاجم بعد ذلك تعديل XML لتغيير أي إعداد في العميل، على سبيل المثال استبدال تجزئة كلمة المرور أو تعطيل اشتراط كلمة المرور. يمكن بعد ذلك استيراد XML السياسة الضارة مرة أخرى باستخدام الزر المجاور لـ Export.
يقوم السكربت ببعض الفحوصات لمعرفة ما إذا كان يعمل بصلاحيات مرتفعة، وإذا لم يكن كذلك، فإنه يُجبر الملف الثنائي المصحح على العمل دون صلاحيات المسؤول. لتشغيل واجهة المستخدم بصلاحيات المسؤول، قم بتشغيل سكربت Python بصلاحيات المسؤول أو اكتب المتغير as_admin بقيمة True بشكل ثابت (hardcode).
لتجنب الحاجة إلى تخزين إزاحات محددة لكل إصدار، يقوم السكربت ببحث/استبدال عام لتتابع من التعليمات وجدت أنه فريد في الإصدارات الثلاثة التي اختبرتها. من الممكن أن يحتوي إصدار مختلف على عدة نتائج مطابقة قد تكسر إثبات المفهوم (PoC). في هذه الحالة، ابحث في النتائج المطابقة عن كتلة تبدأ بـ mov ecx, offset ServiceName ; "SepMasterService" للعثور على تعليمة JZ ذات الصلة لترقيعها بالقرب من الأسفل.
لاختبار وظيفة كلمة المرور، يمكن إضافة ما يلي في XML السياسة (على نفس مستوى GlobalGroups) لتفعيل الحماية. التجزئة هي MD5 للسلسلة "test".
<AdminPassword ExitNeedPassword="1" UINeedPassword="1" ImportExportNeedPassword="1" UninstallNeedPassword="1">098f6bcd4621d373cade4e832627b4f6</AdminPassword>
استجابت Symantec بسرعة للمشكلة، وتم تسجيل CVE من قبلهم ونُشر إصلاح كإصدار 14.3 RU6.
https://support.broadcom.com/external/content/SecurityAdvisories/0/21014