
برنامج تشغيل ويندوز في وضع النواة للكشف في الوقت الفعلي عن تقنيات حقن العمليات، بما في ذلك Shellcode و DLL والحقن الانعكاسي، مع اعتراض استدعاءات النظام وكشف الشذوذ.
FalconEye هو برنامج كشف لنقاط النهاية في ويندوز لحقن العمليات في الوقت الفعلي. وهو برنامج تشغيل في وضع kernel يهدف إلى اكتشاف عمليات حقن العمليات أثناء حدوثها (في الوقت الفعلي). نظرًا لأن FalconEye يعمل في وضع kernel، فإنه يوفر دفاعًا أقوى وموثوقًا ضد تقنيات حقن العمليات التي تحاول التهرب من خطافات وضع المستخدم المختلفة.
يمكنك الاطلاع على العرض التقديمي الخاص بنا في 2021 Blackhat ASIA Arsenal والشرائح.
يوضح الجدول أدناه حالة التنفيذ ومنطق الكشف لمختلف تقنيات حقن العمليات. WPM تعني WriteProcessMemory. لاختبار الكشف، يمكن الرجوع إلى قسم المراجع.
| التقنية | الحالة | الكشف | الإثبات المستخدم |
|---|---|---|---|
| Atombombing | ✓ | ربط QueueUserAPC والبحث عن دوال عائلة GlobalGetAtom | Pinjectra |
| Instrumentation callback injection | ✓ | اكتشاف إذا تم إنشاء خيط جديد من كود عائم | https://github.com/antonioCoco/Mapping-Injection |
| Reflective DLL Injection | ✓ | اكتشاف إذا تم إنشاء خيط جديد من كود عائم وإذا كان رأس PE يُكتب في الضحية | MInjector |
| PROPagate | ✓ | ربط SetProp للحصول على عنوان الخاصية التي يتم كتابتها وربطه باستدعاءات WPM السابقة للحصول على عنوان الكود العائم | Pinjectra |
| Process Hollowing | ✓ | تم اكتشافه باستخدام رأس PE المكتوب في ذاكرة العملية المستهدفة | MInjector |
| CreateRemoteThread with LoadLibrary | ✓ | خيط جديد بعنوان بداية يشير إلى LoadLibrary. إصدار MInjector يكتب أيضًا مسار DLL باستخدام WPM والذي يتم اكتشافه أيضًا | MInjector, Pinjectra |
| CreateRemoteThread with MapViewOfFile | ✓ | اكتشاف إذا تم إنشاء خيط جديد من كود عائم | Pinjectra |
| Suspend-Inject-Resume | ✓ | اكتشاف إذا تم إنشاء خيط جديد من كود عائم (MInjector). مسار DLL يُكتب عبر WPM (MInjector). اكتشاف إذا تم تعيين السياق على خيط معلق سابقًا (Pinjectra) | MInjector, Pinjectra |
| QueueUserAPC | ✓ | مسار DLL يُكتب عبر WPM | MInjector |
| QueueUserAPC with memset (Stackbombing) | ✓ | ربط QueueUserAPC والبحث عن memset | Pinjectra |
| SetWindowLong (Extra window memory injection) | ✓ | ربط SetWindowLong للحصول على عنوان مؤشر الدالة الذي يتم كتابته وربطه باستدعاءات WPM السابقة للحصول على عنوان الكود العائم | Pinjectra |
| Unmap + Overwrite | ✓ | تنبيه إذا كانت عملية المهاجم تقوم بإلغاء تعيين ntdll من الضحية | Pinjectra |
| Kernel Ctrl Table | ✓ | اكتشاف إذا كانت WPM تستبدل حقل KernelCallbackTable في PEB للضحية | https://github.com/odzhan/injection/blob/master/kct |
| USERDATA | ✓ | التحقق مما إذا كان عنوان هدف WPM ضمن نطاق conhost.exe. إذا كان الأمر كذلك، تحقق مما إذا كانت أي مؤشرات دالة ذات صلة من conhost تطابق عنوان WPM المخزن مسبقًا |

ملاحظة: كان تركيزنا على الكشف وليس إنشاء محرك كشف عالي الأداء. سنواصل هذه الجهود بعد عرض بلاك هات.
.
├── src
│ ├── FalconEye ---------------------------# مساحة مستخدم وكيرنل FalconEye
│ └── libinfinityhook ---------------------# تنفيذ خطاف الكيرنل
├── 2021BHASIA_FalconEye.pdf
└── README.md
BCDEDIT /set nointegritychecks ONAtombombing: Brand new code injection for windows, 2016
Propagate - a new code injection trick, 2017
Windows process injection: Extra window bytes, 2018
Pavel Asinovsky. Diving into zberp's unconventional process injection technique, 2016
Rotem Kerner. Ctrl-inject, 2018
Windows process injection: Consolewindowclass, 2018
Windows process injection: Windows notication facility, 2018
A paradox: Writing to another process without openning it nor actually writing to it, 2007
Windows process injection: Service control handler, 2018
FalconEye مرخص لك بموجب رخصة المصدر المفتوح Apache 2.0.
| https://github.com/odzhan/injection/blob/master/conhost |
| Ctrl-inject | ✓ | اكتشاف إذا كان المهاجم يقوم بـ WPM في نطاق KernelBase.dll للضحية | Pinjectra |
| ALPC Callback | ✓ | استخراج معرف الضحية في استدعاءات NtConnectPort إلى منفذ ALPC. بالنسبة لزوج المهاجم-الضحية، تحقق من استدعاءات WPM السابقة وقم بتطبيق كشف الكود العائم | Pinjectra |
| WNF Callback | ✓ | WPM متبوع باستدعاء UpdateWNFStateData | https://github.com/odzhan/injection/tree/master/wnf |
| SetWindowsHook | ✓ | حفظ مسارات الوحدات المسجلة في خطاف NtUserSetWindowsHookEx. لاحقًا، عند تحميل وحدة تطابق هذا المسار في عملية مختلفة، إنشاء تنبيه | MInjector |
| GhostWriting | ✓ | اكتشاف إذا تم تعيين السياق (تم استدعاء NtSetContextThread) على خيط معلق سابقًا | Pinjectra |
| Service Control | ✓ | WPM تستبدل معرف الخدمة لعملية (خدمة) | https://github.com/odzhan/injection/tree/master/svcctrl |
| Shellcode injection | ✓ | خيط جديد بدأ من كود عائم. مسار DLL يُكتب بواسطة WPM | MInjector |
| Image Mapping | ✓ | خيط بدأ من كود عائم. رأس PE يُكتب بواسطة WPM. مسار DLL يُكتب بواسطة WPM | MInjector |
| Thread Reuse | ✓ | خيط بدأ من كود عائم. مسار DLL يُكتب بواسطة WPM | MInjector |