
تنفيذ إجراء تخفيف لحماية جدول عناوين التصدير، مثل تصفية عناوين التصدير (Export Address Filtering - EAF)
تنفيذ لتخفيف حماية جدول عناوين التصدير، مثل تصفية عناوين التصدير (Export Address Filtering - EAF)
يتكوّن هذا المشروع من ثلاثة ملفات ثنائية، يمكن العثور عليها بعد الترجمة (الكومبايل) في EATGuard\bin\. وهي:
EATGuardApplication.exe - تطبيق "خبيث" يقوم بتحميل EATGuardDll.dll داخل العملية ثم ينفّذ بعض التعليمات البرمجية القابلة للتنفيذ (شيلكود) والتي تقوم بتشغيل notepad.exe.EATGuardDll.dll - مكتبة DLL توفر "جسرًا" بين وضع المستخدم ووضع النواة. تقوم هذه المكتبة بتسجيل معالج استثناءات متجه (Vectored Exception Handler - VEH) يرسل اكتشافات الوصول إلى جدول عناوين التصدير (Export Address Table - EAT) الخاص بـ kernel32.dll إلى برنامج التشغيل EATGuardDriver.sys. تقوم هذه المكتبة بتخصيص صفحة حارس (guard page) على جدول EAT الخاص بـ kernel32.dll مما يسبّب استثناءً عند الوصول إلى جدول EAT داخل مساحة عملية EATGuardApplication.exe. وهذا يوجّه التنفيذ إلى معالج VEH المسجَّل الذي يعالج هذه الاستثناءات ويكون مسؤولًا عن مواصلة التنفيذ بعد اكتمال التحليل.EATGuardDriver.sys - برنامج تشغيل أجهزة بوضع النواة يتحقق من الوصول إلى جدول EAT الخاص بـ kernel32.dll. حاليًا، وكإثبات مفهوم (POC)، يتحقق ما إذا كانت الذاكرة التي تصل إلى kernel32.dll مدعومة بالقرص (backed by disk).يُرجى ملاحظة أن EATGuardApplication.exe يقوم بتحميل EATGuardDll.dll من المسار النسبي لـ EATGuardApplication.exe. وهذا يعني أن كلاً من .exe و.dll يجب أن يكونا في نفس الدليل عند التنفيذ. يُرجى أيضًا ملاحظة عدم تشغيل هذا المشروع على جهاز تم تمكين تصحيح أخطاء النواة (kernel debugging) عليه. فقد يتسبب ذلك في مشاكل، لأن EATGuardDll.dll يستخدم استثناء خطوة واحدة (single-step exception) لمواصلة التنفيذ. فيما يلي مثال على استخدام المشروع:
C:\Users\ANON\Desktop>sc create EATGUARD type= kernel binPath= C:\Users\ANON\Desktop\EATGuardDriver.sys
[SC] CreateService SUCCESS
C:\Users\ANON\Desktop>sc start EATGUARD
SERVICE_NAME: EATGUARD
TYPE : 1 KERNEL_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 0
FLAGS :
C:\Users\ANON\Desktop>EATGuardApplication.exe
[+] KERNEL32.dll EAT: 0x00007FFB1D83F898
[+] Number of functions in the KERNEL32.dll EAT: 1678
[+] EATGuard analysis complete!
[+] Target address: 0x24AA138005C
[>] IsRipRwxMemory: TRUE
[>] IsRipMappedSection: FALSE
[>] IsRipBackedByImage: FALSE
[>] HasPageProtectionChanged: FALSE
[>] RegionBaseAddress: 0x24AA1380000
[>] MemoryRegionSize: 0x1000
[>] MemoryCommtSize: 0x1000
[+] EATGuard analysis complete!
[+] Target address: 0x24AA138005F
[>] IsRipRwxMemory: TRUE
[>] IsRipMappedSection: FALSE
[>] IsRipBackedByImage: FALSE
[>] HasPageProtectionChanged: FALSE
[>] RegionBaseAddress: 0x24AA1380000
[>] MemoryRegionSize: 0x1000
[>] MemoryCommtSize: 0x1000
[+] EATGuard analysis complete!
[+] Target address: 0x24AA138008F
[>] IsRipRwxMemory: TRUE
[>] IsRipMappedSection: FALSE
[>] IsRipBackedByImage: FALSE
[>] HasPageProtectionChanged: FALSE
[>] RegionBaseAddress: 0x24AA1380000
[>] MemoryRegionSize: 0x1000
[>] MemoryCommtSize: 0x1000
[+] EATGuard analysis complete!
[+] Target address: 0x24AA138009B
[>] IsRipRwxMemory: TRUE
[>] IsRipMappedSection: FALSE
[>] IsRipBackedByImage: FALSE
[>] HasPageProtectionChanged: FALSE
[>] RegionBaseAddress: 0x24AA1380000
[>] MemoryRegionSize: 0x1000
[>] MemoryCommtSize: 0x1000
[+] EATGuard analysis complete!
[+] Target address: 0x24AA13800A2
[>] IsRipRwxMemory: TRUE
[>] IsRipMappedSection: FALSE
[>] IsRipBackedByImage: FALSE
[>] HasPageProtectionChanged: FALSE
[>] RegionBaseAddress: 0x24AA1380000
[>] MemoryRegionSize: 0x1000
[>] MemoryCommtSize: 0x1000
(...)TRUNCATED(...)
هذا المشروع هو إثبات مفهوم (POC) يحاكي وظيفة تصفية عناوين التصدير.