
محرك ربط (Hooking) في وضع المستخدم بدون تصحيح (Patch-less) يعتمد على نقاط توقف الأجهزة (DR0-DR7)، وأدوات قياس عن بُعد (Telemetry Instrumentation) — (إثبات مفهوم لـ AMSI وWLDP وETW).
إثبات مفهوم (POC) لأبحاث الأمن يُظهر اعتراض الدوال باستخدام نقاط التوقف العتادية (سجلات تصحيح المعالج) كبديل عن الترقيع التقليدي للشيفرة في الذاكرة.
الغرض والنطاق
يُنشر هذا المستودع بشكل صارم لأغراض أبحاث الأمن الدفاعي، وتعليم الفرق الحمراء/البنفسجية، وهندسة الكشف، والدراسة الأكاديمية لبنى Windows الداخلية. وهو يُظهر كيف يمكن لمهاجم إساءة استخدام سجلات تصحيح المعالج لتعطيل القياسات التشخيصية الأمنية في وضع المستخدم — والأهم من ذلك بنفس القدر، ما الذي ينبغي على المدافعين مراقبته من أجل كشف مثل هذه التقنيات. المؤلف غير مسؤول عن أي إساءة استخدام لهذه الشيفرة. يُعدّ استخدام هذه التقنية ضد أنظمة دون تفويض صريح غير قانوني وينتهك قوانين الاحتيال وإساءة استخدام الحاسوب ذات الصلة في معظم الولايات القضائية. لا تنشر هذا في أي بيئة لا تملكها أو لا تملك إذنًا كتابيًا صريحًا لاختبارها.
يُنفّذ mora_hwbp.c مكتبة DLL تعترض، بمجرد تحميلها/حقنها في عملية مستهدفة (مثل مضيف PowerShell)، أربع دوال في وضع المستخدم حصريًا عبر نقاط التوقف العتادية للمعالج المخزّنة في سجلات التصحيح المعمارية (DR0–DR7) لكل خيط في العملية:
| السجل | الدالة المعترَضة | الوحدة | الغرض |
|---|---|---|---|
DR0 | AmsiScanBuffer | amsi.dll | تعطيل فحص محتوى AMSI |
DR1 | WldpQueryDynamicCodeTrust | wldp.dll | فرض ثقة WLDP بالشيفرة الديناميكية (Device Guard / WDAC) |
DR2 | WldpIsClassInApprovedList | wldp.dll | فرض موافقة WLDP على الفئة (Device Guard / WDAC) |
DR3 | NtTraceEvent | ntdll.dll | قطع تدفق ETW بأكمله في وضع المستخدم |
يستقبل معالج الاستثناءات الموجّه (VEH) لكل عملية أخطاء EXCEPTION_SINGLE_STEP (0x80000004) التي ترفعها سجلات التصحيح، ويحاكي مسار العودة الناجح للدالة الأصلية عبر إعادة كتابة سياق الاستثناء، ثم يستأنف التنفيذ — كل ذلك دون تعديل بايت واحد من الذاكرة القابلة للتنفيذ.
وهذا يجعل التقنية مثيرة للاهتمام بشكل خاص من المنظورين الهجومي والدفاعي:
.text معدّلة (الاعتراض المضمّن الكلاسيكي، أو ترقيع EAT/IAT، أو تجميد Etwp*).GetThreadContext/SetThreadContext) يمكن استخدامها للكشف.تشترك أساليب الاعتراض التقليدية في وضع المستخدم — التحويلات المضمّنة (كتابة فوق 5–14 بايت)، واعتراض جدول عناوين الاستيراد (IAT)، واعتراض جدول عناوين التصدير (EAT) — في ضعف مشترك: فهي تعدّل ذاكرة يمكن لماسحات السلامة وETW ملاحظتها.
تُنفّذ منتجات AV/EDR الحديثة:
pageguard/guard-page، وانتقالات VirtualProtect إلى PAGE_EXECUTE_READWRITE، وعدم تطابق تجزئات المقاطع.تتجاوز نقاط التوقف العتادية كل ذلك:
.text.SetThreadContext، والتي لا تُطلق إشارات "تم تعديل الذاكرة" الكلاسيكية التي تستخدمها أدوات فحص السلامة.يستكشف هذا الإثبات العملي (POC) فعالية هذه التقنية وقابلية اكتشافها ضد AMSI (واجهة فحص البرامج الضارة)، وWLDP (سياسة تأمين Windows)، وETW (تتبع الأحداث لـ Windows) — وهي البدائيات الأمنية الثلاثة الأكثر اعتمادًا في وضع المستخدم ضمن حزمة الأمان الحديثة في Windows.
AMSI هي نقطة التكامل في منصة Windows التي تتيح للتطبيقات (PowerShell، وOffice، وVBScript، ومضيفات .NET، وغيرها) طلب فحص المحتوى من مزوّدي مكافحة البرامج الضارة المسجّلين. نقطة الدخول الأساسية محل الاهتمام هي:
AmsiScanBuffer(HANDLE hamsiContext, PVOID buffer, ULONG length, LPCWSTR contentName, HANDLE hamsiSession, AMSI_RESULT *pResult)بإجبار AMSI_RESULT المُعاد على القيمة AMSI_RESULT_CLEAN (0)، يعتقد محرك النصوص البرمجية أن المحتوى قد فُحص ووُجد غير ضار، فيستمر التنفيذ دون انقطاع.
تطبّق WLDP تقييم السياسات الخاصة بـ Windows Defender Application Control (WDAC / Device Guard). يعترض هذا الإثبات العملي نقطتي دخول في WLDP:
WldpIsClassInApprovedList عمّا إذا كان صنف COM معيّن (محدَّد بمعرّف GUID) مسموحًا بموجب السياسة الحالية. تستشير AMSI داخليًا WLDP لتقرير ما إذا كانت أصناف نصوص برمجية/محتوى معيّنة "موثوقة" (ضمن القائمة المعتمدة). فإذا أبلغت الدالة أن الصنف معتمد، فقد تتخطى AMSI تدقيقًا إضافيًا لذلك النوع من المحتوى.WldpQueryDynamicCodeTrust عمّا إذا كانت قطعة معيّنة من الشيفرة المولّدة ديناميكيًا (مثل مخرجات .NET JIT أو ذاكرة قابلة للتنفيذ مولّدة بأي طريقة أخرى) موثوقة بموجب سياسة التأمين الحالية.تضبط مكتبة DLL معامل الإخراج isApproved (RDX) في WldpIsClassInApprovedList على القيمة TRUE وتُعيد S_OK، وتُجبر WldpQueryDynamicCodeTrust على إعادة S_OK (0) — مما يجعل صنف المحتوى المُقيَّم والشيفرة الديناميكية المستعلَمة يبدوان موثوقين.
تُعدّ NtTraceEvent في ntdll.dll أدنى نقطة دخول في وضع المستخدم إلى النظام الفرعي ETW — فجميع إصدارات أحداث ETW تقريبًا تمر عبرها (بما في ذلك EtwEventWrite وواجهات Etw* الأعلى مستوى). وبالتالي فإن اعتراضها يقطع مجرى ETW بأكمله من وضع المستخدم، مع آثار جانبية واسعة ذات صلة بمراقبة الأمان:
Microsoft-Windows-DotNETRuntime)تُعيد مكتبة DLL ببساطة STATUS_SUCCESS (0) دون تنفيذ الدالة الحقيقية.