
أدوات لاكتشاف واستغلال اختطافات COM
شريكك في اختطاف COM
المؤلف: David Tulis (@kafkaesqu3)
يحتوي هذا المستودع على نماذج أكواد وإثباتات مفاهيم لاستكشاف اختطاف COM. اختطاف COM هو تقنية استغلال لاحقة على نظام Windows، ويمكن استخدامها لتحقيق الثبات (persistence) أو التهرب من الدفاع (defense evasion).
لمزيد من المعلومات حول واجهة COM، وكيفية العثور على نقاط الاختطاف، وتقنيات إساءة استخدام الاختطاف، يُرجى الرجوع إلى العرض المقدَّم في Derbycon 9، COM Hijacking Techniques.
Extract-HijackableKeysFromProcmonCSV: يحلل ملف CSV مُصدَّر من Procmon
للبحث عن الكائنات القابلة للاختطافHijack-CLSID: يختطف CLSID باستخدام DLL معيّنHijack-MultipleKeys: يختطف عدة CLSIDs في وقت واحد باستخدام DLL معيّن.
هذا مفيد للعثور على CLSIDs التي يتم تفعيلها بشكل متكررCreateProcessCreateRemoteThreadCreateThreadسكربت Powershell يحتوي على سكربتات مساعدة للتعامل مع اختطافات COM. أبرز المزايا:
عرض جميع CLSIDs لكائنات COM وموقع التنفيذ على القرص
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
إجراء مسح شامل لـ CLSIDs على النظام
$HKCR_keys = Get-CLSIDRegistryKeys -RegHive HKCR
$HKCR_keys | where-object {$_ -like "*inprocserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*inprocserver32"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver32"} | Measure-Object
$HKLM_keys = Get-CLSIDRegistryKeys -RegHive HKLM
$HKLM_keys | Measure-Object
$HKCU_keys = Get-CLSIDRegistryKeys -RegHive HKCU
$HKCU_keys | Measure-Object
explorer:{69486DD6-C19F-42e8-B508-A53F9F8E67B8}
explorer:{9E175B6D-F52A-11D8-B9A5-505054503030}
explorer:{30CC9D06-7E62-4966-9777-BC3442E788BD}
explorer:{3eef301f-b596-4c0b-bd92-013beafce793}
explorer:{682159d9-c321-47ca-b3f1-30e36b2ec8b9}
explorer:{6B3B8D23-FA8D-40B9-8DBD-B950333E2C52}
explorer:{9aa46009-3ce0-458a-a354-715610a075e6}
explorer:{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
explorer:{AC36A05C-FB95-4C7A-868C-A43CC8D2D926}
explorer:{B52D54BB-4818-4EB9-AA80-F9EACD371DF8}
explorer:{c2f03a33-21f5-47fa-b4bb-156362a2f239}
العثور على CLSIDs تشير إلى DLL غير موجود على النظام:
Find-MissingLibraries
3 قوالب إثبات مفهوم لإساءة استخدام اختطاف COM، كما تم استعراضها في عرض Derbycon 9:
HijackDLL-Process: إنشاء عملية جديدة عند تحميل DLLHijackDLL-CreateRemoteThread: تنفيذ تقنية حقن الخيوط باستخدام
استدعاء CreateRemoteThread API عند تحميل DLLHijackDLL-Threads: مفيد لقياس عمر الخيوط التي يتم تشغيلها في
DLL بعد الاختطافإثبات مفهوم لإظهار كيف يمكن استخدام اختطاف COM لعمليات حقن العمليات:
الخطوة الأولى هي تنفيذ الاختطاف:
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
لن يتم تفعيل الاختطاف فورًا، وقد يتطلب تشغيل التطبيق (إذا لم يكن قيد التشغيل حاليًا)، أو بعض الإجراءات الأساسية داخل التطبيق. من المحتمل وجود CLSIDs أفضل تُفعَّل بشكل أكثر تكرارًا، لكن هذه كافية.
سيقوم COMInjectTarget.dll بتسجيل تقدمه في ملف سجل داخل C:\COM. يبدو
هذا أكثر استقرارًا من استخدام شيء مثل AllocConsole من داخل عملية
أخرى والطباعة على وحدة التحكم.
يوضح ما يلي الـ DLL المحقون وهو يعمل من داخل عملية chrome.exe
الرئيسية:
[*] chrome pid=9104 ppid=4900 (count 0)
[*] chrome pid=9104 ppid=4900 (count 1)
[*] chrome pid=9104 ppid=4900 (count 2)
[*] chrome pid=9104 ppid=4900 (count 3)
[*] chrome pid=9104 ppid=4900 (count 4)
[*] chrome pid=9104 ppid=4900 (count 5)
العمليات المدعومة حاليًا هي:
لمعرفة المزيد عن COM واختطافات COM: