تم إعداد ترجمة المقال خاصة لطلاب دورة الهندسة العكسية .
ملخص
اكتشف الباحثون في وحدة مكافحة التهديدات الآمنة من Dell SecureWorks (CTU) برامج ضارة تتجاوز أنظمة مصادقة Active Directory (AD) التي تستخدم مصادقة أحادية العامل (كلمة المرور فقط). يمكن للمهاجمين استخدام كلمة المرور التي يختارونها للمصادقة كأي مستخدم. تسمى هذه البرامج الضارة "مفتاح الهيكل العظمي" (مفتاح عالمي).
اكتشف باحثو CTU مفتاح Skeleton على شبكة عميل يستخدم مصادقة أحادية العامل للوصول إلى بريد الويب و VPN ، مما يتيح للمهاجمين الوصول دون عائق إلى خدمات الوصول عن بُعد. يتم نشر مفتاح الهيكل العظمي كتصحيح في الذاكرة على وحدات تحكم المجال AD للضحية للسماح للمهاجم بالمصادقة على أنه أي مستخدم ، بينما يواصل المستخدمون الشرعيون المصادقة كالمعتاد. كما يسمح تجاوز مصادقة مفتاح الهيكل العظمي لمهاجمي الوصول المادي بتسجيل الدخول وإلغاء قفل الأنظمة التي تقوم بمصادقة المستخدمين على وحدات التحكم بالمجال التابعة لمجال AD.
كانت نماذج مفتاح الهيكل العظمي الوحيدة المعروفة في وقت النشر تفتقر إلى الثبات - يجب إعادة نشرها عند إعادة تشغيل وحدة تحكم المجال. يشك باحثو CTU في أن المهاجمين يمكنهم فقط تحديد إعادة التشغيل بناءً على عدم قدرتهم على المصادقة بنجاح ، حيث لم يتم اكتشاف أي برامج ضارة أخرى على وحدات التحكم بالمجال. بين ثماني ساعات وثمانية أيام من إعادة التشغيل ، استخدم المهاجمون برامج ضارة أخرى للوصول عن بُعد تم نشرها بالفعل على شبكة الضحية لإعادة نشر مفتاح الهيكل العظمي على وحدات التحكم بالمجال.
يتطلب نشر مفتاح الهيكل العظمي بيانات اعتماد مسؤول المجال. شاهد باحثو CTU المهاجمين وهم يقومون بنشر مفتاح Skeleton Key باستخدام بيانات الاعتماد المسروقة من خوادم المهام الحرجة ومحطات عمل المسؤول ووحدات التحكم بالمجال المستهدفة.
تحليل
في البداية ، لاحظ باحثو CTU عينة من الهيكل العظمي تسمى ole64.dll في شبكة معرضة للخطر (انظر الجدول 1).
الجدول 1. نموذج مفتاح الهيكل العظمي ole64.dll
.عند دراسة
ole64.dll
، اكتشف باحثو CTU إصدارًا أقدم من
msuta64.dll
على "مضيف وسيط" على شبكة الضحية (انظر الجدول 2). المضيف الوسيط هو أي نظام تم اختراقه مسبقًا بواسطة برامج ضارة للوصول عن بُعد. يتضمن هذا الخيار عوامل تشغيل تصحيح إضافية تتيح لمطور Skeleton Key مراقبة عناوين الذاكرة المتضمنة في عملية التصحيح.
جدول 2. نموذج مفتاح الهيكل العظمي msuta64.dll
.استخدم المهاجمون الخوارزمية التالية لنشر مفتاح الهيكل العظمي كملف DLL 64 بت:
- قم بتنزيل ملف DLL Skeleton Key إلى دليل التدريج على المضيف المرحلي على شبكة الضحية. لاحظ باحثو CTU ثلاثة أسماء ملفات مرتبطة بملف DLL Skeleton Key: ole64.dll و ole.dll و msuta64.dll. تتضمن أنظمة Windows ملف ole32.dll الشرعي ، لكنه لا يرتبط بهذا البرنامج الضار.
- حاول الوصول إلى الموارد الإدارية على وحدات التحكم بالمجال باستخدام قائمة بيانات اعتماد مسؤول المجال المسروقة.
- إذا لم تعد بيانات الاعتماد المسروقة صالحة ، فاستخدم أدوات سرقة كلمة المرور لاستخراج كلمات مرور مسؤول المجال بنص واضح من أحد الأماكن التالية ، مما يعني الإلمام ببيئة الضحية:
- ذاكرة خادم آخر متاح على الشبكة الضحية
- وظائف مسؤول المجال
- وحدات تحكم المجال الهدف
- استخدام بيانات اعتماد مسؤول مجال صالح لنسخ DLL مفتاح Skeleton إلى C: \ WINDOWS \ system32 \ على وحدات تحكم المجال الهدف.
- استخدم الأداة المساعدة PsExec لتشغيل ملف DLL Skeleton Key عن بعد على وحدات تحكم المجال الهدف باستخدام الأمر rundll32. يتم تنسيق كلمة المرور التي اختارها المهاجم ككلمة مرور تجزئة NTLM ، ولا يتم تقديمها بنص واضح. بعد نشر مفتاح Skeleton ، يمكن للمهاجم المصادقة على أنه أي مستخدم يستخدم تجزئة كلمة مرور
NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM>
- حذف ملف DLL الهيكل العظمي مفتاح من C: \ WINDOWS \ system32 \ على وحدات تحكم المجال الهدف.
- احذف ملف DLL Skeleton Key من الدليل المرحلي على مضيف النقل.
- اختبر النشر الناجح لمفتاح Skeleton Key باستخدام أوامر "net use" باستخدام حساب AD وكلمة مرور تتطابق مع تجزئة NTLM المكون.
اكتشف باحثو CTU نمط كلمة مرور مضمن يشير إلى أن مجموعة من المهاجمين قاموا بنشر مفتاح الهيكل العظمي في العديد من المنظمات.
يمكن اكتشاف استخدام PsExec في بيئة Windows عن طريق تنبيه أحداث Windows التي تم إنشاؤها بواسطة الأداة المساعدة. تقوم معرفات الأحداث التالية ، والتي تتم ملاحظتها على وحدات التحكم بالمجال الهدف ، بتسجيل أداة PsExec التي تقوم بتثبيت الخدمة الخاصة بها وبدء الخدمة وإيقاف الخدمة. يتم إنشاء هذه الأحداث في كل مرة يتم فيها استخدام PsExec ، لذلك يلزم إجراء تحليل إضافي للأحداث لتحديد ما إذا كانت ضارة أم شرعية:
- أحداث تثبيت خدمة PSEXESVC غير متوقع (رمز الحدث 7045) على وحدات تحكم المجال AD:
اسم السجل : النظام
المصدر : مدير التحكم بالخدمة
ملخص : تم تثبيت الخدمة على النظام.
اسم ملف الخدمة :
%SystemRoot%\PSEXESVC.exe
- أحداث بدء / إيقاف خدمة PSEXESVC غير متوقع (رمز الحدث 7036) على وحدات تحكم المجال AD:
اسم السجل : النظام
المصدر : مدير التحكم بالخدمة
ملخص :
- "خدمة PSEXESVC جاهزة للعمل."
- "انتقلت خدمة PSEXESVC إلى حالة توقف."
كمفتاح أساسي في حالة التشغيل ، تحتاج إلى تنفيذ المهام التالية:
- تحقق من أحد إصدارات 64 بت المتوافقة من Windows. البرامج الضارة غير متوافقة مع إصدارات 32 بت من Windows أو إصدارات Windows Server التي تبدأ بـ Windows Server 2012 (6.2).
- 6.1 (Windows 2008 R2)
- 6.0 (Windows Server 2008)
- 5.2 (Windows 2003 R2)
- استخدم الدالة SeDebugPrivilege للحصول على حقوق المسؤول اللازمة للكتابة إلى عملية خدمة نظام الأمان الفرعي المحلي (LSASS). تتحكم هذه العملية في ميزات الأمان لنطاق ميلادي ، بما في ذلك مصادقة حساب المستخدم.
- سرد العمليات المتاحة للحصول على مؤشر عملية LSASS.
- احصل على عناوين للوظائف المتعلقة بالمصادقة التي سيتم إصلاحها:
- CDLocateCSystem - الموجود في
cryptdll.dll
- SamIRetrieveMultiplePrimaryCredentials - الموجود في
samsrv.dll
- SamIRetrievePrimaryCredentials - الموجود في
samsrv.dll
- قم بعمل إعدادات لنظام التشغيل المحدد باستخدام مجموعة المتغيرات العامة أثناء التحقق من التوافق في الخطوة 1.
- استخدم الدالة OpenProcess للحصول على مؤشر معالجة LSASS.
- حجز وتخصيص مساحة الذاكرة اللازمة لتحرير وتصحيح ذاكرة عملية LSASS.
- تصحيح الوظائف ذات الصلة بناءً على نظام التشغيل:
- CDLocateCSystem (جميع الإصدارات المتوافقة من Windows)
- SamIRetrieveMultiplePrimaryCredentials (Windows 2008 R2 (6.1) فقط)
- SamIRetrievePrimaryCredentials (جميع الإصدارات المتوافقة من Windows باستثناء Windows 2008 R2 (6.1))
لإصلاح كل وظيفة:
- اتصل بوظيفة VirtualProtectEx لتغيير حماية الذاكرة للسماح بالكتابة إلى تخصيصات الذاكرة المطلوبة (PAGE_EXECUTE_READWRITE ، 0x40). تتيح لك هذه الخطوة تحديث رمز الوظيفة في الذاكرة.
- استدعاء دالة WriteProcessMemory لتغيير عنوان الدالة الهدف بحيث يشير إلى التعليمات البرمجية التي تم تصحيحها. يؤدي هذا التغيير استدعاء دالة لاستخدام التصحيح.
- قم باستعادة حماية الذاكرة الأصلية عن طريق استدعاء VirtualProtectEx مع إشارات حماية الذاكرة الأصلية. هذه الخطوة ضرورية لتجنب تخصيص ذاكرة مشبوهة للتسجيل والتنفيذ.
بعد الترقيع ، يمكن للمهاجم استخدام كلمة مرور مفتاح Skeleton المكونة أثناء النشر لتسجيل الدخول كأي مستخدم مجال. لا يزال بإمكان المستخدمين الشرعيين تسجيل الدخول باستخدام كلمات المرور الخاصة بهم. ينطبق تجاوز التوثيق هذا على جميع الخدمات التي تستخدم مصادقة AD أحادية الاتجاه ، مثل بريد الويب و VPN ، ويسمح أيضًا للمهاجمين الذين لديهم وصول فعلي إلى نظام مخترق بإلغاء تأمين جهاز كمبيوتر عن طريق إدخال كلمة مرور مضمنة على لوحة المفاتيح.
الارتباط المحتمل مع مشاكل النسخ المتماثل المجال
رمز الهيكل العظمي الأساسي لا ينقل حركة مرور الشبكة ، مما يجعل الاكتشاف المستند إلى الشبكة غير فعال. ومع ذلك ، فقد تورطت هذه البرامج الضارة في مشاكل تكرار المجال التي يمكن أن تشير إلى الإصابة. بعد فترة وجيزة من كل نشر لبرامج Skeleton Key التي اكتشفها باحثو CTU ، واجهت وحدات التحكم بالمجال مشاكل في النسخ المتماثل لا يمكن تفسيرها أو حلها بواسطة دعم Microsoft ، وفي نهاية المطاف ، كان يلزم إعادة التشغيل لحلها. أدت عمليات إعادة التشغيل هذه إلى إزالة تجاوز مصادقة مفتاح الهيكل العظمي لأن البرنامج الضار لا يحتوي على آلية ثبات. في التين. يوضح الشكل 1 الجدول الزمني لعمليات إعادة التشغيل هذه ، بالإضافة إلى سرقة كلمات المرور اللاحقة من قبل المتسللين ، والتوسع الجانبي في مفتاح الهيكل العظمي ونشره. حدثت عمليات الترحيل عادة في غضون ساعات قليلة أو عدة أيام بعد إعادة التشغيل.
الشكل 1. علاقة النشر وإعادة التشغيل التي لاحظها باحثو CTU ، أبريل - يوليو 2014 (المصدر: Dell SecureWorks)المضادة
يتخطى مفتاح الهيكل العظمي للكود الضار المصادقة ولا يولد حركة مرور على الشبكة. نتيجة لذلك ، لن تكشف أنظمة كشف التسلل والوقاية منها (IDS / IPS) هذا التهديد. ومع ذلك ، قام باحثو CTU بتدوين توقيعات YARA في
الملحق أ لاكتشاف DLL الهيكل العظمي الرئيسي والرمز الذي يدخله في ذاكرة معالجة LSASS.
مؤشرات التهديد
يمكن استخدام مؤشرات التهديد في الجدول 3 للكشف عن النشاط المتعلق ببرنامج Skeleton Key.
الجدول 3. مؤشرات مفتاح الهيكل العظمي.استنتاج
توصي مجموعة أبحاث CTU المؤسسات بتطبيق ميزات أمان مفتاح Skeleton التالية:
- لا تسمح المصادقة متعددة العوامل لجميع حلول الوصول عن بُعد ، بما في ذلك VPN والبريد الإلكتروني عن بُعد ، للجهات الفاعلة بالتهديد بتجاوز المصادقة الفردية أو المصادقة باستخدام بيانات اعتماد ثابتة مسروقة.
- يمكن لسجل تدقيق إنشاء العمليات على محطات العمل والخوادم ، بما في ذلك وحدات التحكم في النطاق AD ، اكتشاف عمليات نشر مفتاح Skeleton Key. على وجه الخصوص ، ينبغي للمنظمات البحث عن القطع الأثرية التالية:
- عمليات PsExec.exe غير متوقع واستخدام وسيطة سطر الأوامر PsExec "-ccepteula"
- عمليات rundll32.exe غير متوقعة
- التعامل مع الوسائط المشابهة لرموز تجزئة NTLM (32 حرفًا تحتوي على أرقام من 0 إلى 9 وحروف AF)
- يمكن مراقبة أحداث Windows Service Manager على وحدات تحكم المجال AD اكتشاف أحداث تثبيت الخدمة غير المتوقعة (رمز الحدث 7045) وبدء / إيقاف أحداث (رمز الحدث 7036) لخدمة PSEXESVC PsExec.
الملحق أ - توقيعات يارا
تتبع تواقيع YARA التالية وجود مفتاح Skeleton في النظام عن طريق المسح الضوئي إما لملف مشبوه أو تفريغ ذاكرة لوحدات التحكم في مجال Active Directory التي يُفترض أنها تحتوي على مفتاح Skeleton.
rule skeleton_key_patcher { strings: $target_process = "lsass.exe" wide $dll1 = "cryptdll.dll" $dll2 = "samsrv.dll" $name = "HookDC.dll" $patched1 = "CDLocateCSystem" $patched2 = "SamIRetrievePrimaryCredentials" $patched3 = "SamIRetrieveMultiplePrimaryCredentials" condition: all of them } rule skeleton_key_injected_code { strings: $injected = { 33 C0 85 C9 0F 95 C0 48 8B 8C 24 40 01 00 00 48 33 CC E8 4D 02 00 00 48 81 C4 58 01 00 00 C3 } $patch_CDLocateCSystem = { 48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 48 8B FA 8B F1 E8 ?? ?? ?? ?? 48 8B D7 8B CE 48 8B D8 FF 50 10 44 8B D8 85 C0 0F 88 A5 00 00 00 48 85 FF 0F 84 9C 00 00 00 83 FE 17 0F 85 93 00 00 00 48 8B 07 48 85 C0 0F 84 84 00 00 00 48 83 BB 48 01 00 00 00 75 73 48 89 83 48 01 00 00 33 D2 } $patch_SamIRetrievePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 49 8B F9 49 8B F0 48 8B DA 48 8B E9 48 85 D2 74 2A 48 8B 42 08 48 85 C0 74 21 66 83 3A 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 14 E8 ?? ?? ?? ?? 4C 8B CF 4C 8B C6 48 8B D3 48 8B CD FF 50 18 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } $patch_SamIRetrieveMultiplePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 41 8B F9 49 8B D8 8B F2 8B E9 4D 85 C0 74 2B 49 8B 40 08 48 85 C0 74 22 66 41 83 38 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 12 E8 ?? ?? ?? ?? 44 8B CF 4C 8B C3 8B D6 8B CD FF 50 20 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } condition: any of them }