
Implementación de una mitigación de protección de la tabla de direcciones de exportación, como Export Address Filtering (EAF)
Implementación de una mitigación de protección de la tabla de direcciones de exportación, como Export Address Filtering (EAF)
Este proyecto se compone de tres binarios que, una vez compilados, se pueden encontrar en EATGuard\bin\. Son:
EATGuardApplication.exe - Aplicación "maliciosa" que carga EATGuardDll.dll en el proceso y luego ejecuta algo de código ejecutable (shellcode) que ejecuta notepad.exe.EATGuardDll.dll - DLL que proporciona un "puente" entre el modo de usuario y el modo kernel. Esta DLL registra un Vectored Exception Handler (VEH) que envía las detecciones de acceso a la tabla de direcciones de exportación (EAT) de kernel32.dll al driver EATGuardDriver.sys. Esta DLL asigna una página de guarda en la EAT de kernel32.dll, lo que provoca una excepción cuando se accede a la EAT dentro del espacio de proceso de EATGuardApplication.exe. Esto enruta la ejecución al VEH registrado, que procesa estas excepciones y es responsable de continuar la ejecución una vez finalizado el análisis.EATGuardDriver.sys - Driver de dispositivo en modo kernel que verifica el acceso a la EAT de kernel32.dll. Actualmente, como POC, comprueba si la memoria que accede a kernel32.dll está respaldada por disco.Tenga en cuenta que EATGuardApplication.exe carga EATGuardDll.dll desde la ruta relativa de EATGuardApplication.exe. Esto significa que tanto el .exe como el .dll deben estar en el mismo directorio al ejecutar. Tenga en cuenta también que no debe ejecutar este proyecto en una máquina que tenga habilitada la depuración del kernel. Esto puede causar problemas, ya que EATGuardDll.dll utiliza una excepción de paso único para la continuación de la ejecución. Aquí hay un ejemplo de uso del proyecto:
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(...)
Este proyecto es un POC que imita la funcionalidad de Export Address Filtering.