
Implementação de uma mitigação de proteção da tabela de endereços de exportação, como o Export Address Filtering (EAF)
Implementação de uma mitigação de proteção da tabela de endereços de exportação, como o Export Address Filtering (EAF)
Este projeto é composto por três binários que, após compilados, podem ser encontrados em EATGuard\bin\. São eles:
EATGuardApplication.exe - Aplicativo "malicioso" que carrega EATGuardDll.dll no processo e, em seguida, executa algum código executável (shellcode) que executa notepad.exe.EATGuardDll.dll - DLL que fornece uma "ponte" entre o modo de usuário e o modo kernel. Esta DLL registra um Vectored Exception Handler (VEH) que envia detecções de acesso à Tabela de Endereços de Exportação (EAT) do kernel32.dll para o driver EATGuardDriver.sys. Esta DLL aloca uma guard page na EAT do kernel32.dll, o que causa uma exceção quando a EAT é acessada dentro do espaço do processo do EATGuardApplication.exe. Isso redireciona a execução para o VEH registrado, que processa essas exceções e é responsável por continuar a execução após a análise ser concluída.EATGuardDriver.sys - Driver de dispositivo em modo kernel que verifica o acesso à EAT do kernel32.dll. Atualmente, como uma POC (prova de conceito), ele verifica se a memória que acessa kernel32.dll é respaldada por disco.Observe que o EATGuardApplication.exe carrega EATGuardDll.dll a partir do caminho relativo de EATGuardApplication.exe. Isso significa que tanto o .exe quanto a .dll precisam estar no mesmo diretório durante a execução. Observe também não execute este projeto em uma máquina com depuração de kernel habilitada. Isso pode causar problemas, pois o EATGuardDll.dll usa uma exceção de passo único (single-step exception) para continuar a execução. Aqui está um exemplo de uso do projeto:
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 projeto é uma POC que imita a funcionalidade do Export Address Filtering.