
Implementazione di una mitigazione di protezione della tabella degli indirizzi di esportazione, come Export Address Filtering (EAF)
Implementazione di una mitigazione per la protezione della Export Address Table, come l'Export Address Filtering (EAF)
Questo progetto è composto da tre binari che, una volta compilati, si trovano in EATGuard\bin\. Essi sono:
EATGuardApplication.exe - Applicazione "malevola" che carica EATGuardDll.dll nel processo ed esegue quindi del codice eseguibile (shellcode) che avvia notepad.exe.EATGuardDll.dll - DLL che fornisce un "ponte" tra la modalità utente e la modalità kernel. Questa DLL registra un Vectored Exception Handler (VEH) che invia le rilevazioni degli accessi alla Export Address Table (EAT) di kernel32.dll al driver EATGuardDriver.sys. Questa DLL alloca una guard page sulla EAT di kernel32.dll che genera un'eccezione quando la EAT viene acceduta all'interno dello spazio di processo di EATGuardApplication.exe. Questo reindirizza l'esecuzione al VEH registrato, che elabora queste eccezioni ed è responsabile di continuare l'esecuzione dopo il completamento dell'analisi.EATGuardDriver.sys - Driver di dispositivo in modalità kernel che verifica l'accesso alla EAT di kernel32.dll. Attualmente, come POC, controlla se la memoria che accede a kernel32.dll è supportata dal disco.Si noti che EATGuardApplication.exe carica EATGuardDll.dll dal percorso relativo di EATGuardApplication.exe. Ciò significa che sia il .exe che la .dll devono trovarsi nella stessa directory durante l'esecuzione. Si noti inoltre di non eseguire questo progetto su una macchina con il kernel debugging abilitato. Ciò può causare problemi, poiché EATGuardDll.dll utilizza un'eccezione a passo singolo per la continuazione dell'esecuzione. Ecco un esempio di utilizzo del progetto:
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(...)
Questo progetto è un POC che replica la funzionalità dell'Export Address Filtering.