
Implémentation d'une protection de table d'adresses d'exportation, comme le filtrage d'adresses d'exportation (EAF).
Implémentation d'une mitigation de protection de la table d'adresses d'exportation, comme l'Export Address Filtering (EAF)
Ce projet est composé de trois binaires qui, une fois compilés, se trouvent dans EATGuard\bin\. Il s'agit de :
EATGuardApplication.exe - Application « malveillante » qui charge EATGuardDll.dll dans le processus puis exécute du code exécutable (shellcode) qui lance notepad.exe.EATGuardDll.dll - DLL qui fournit un « pont » entre le mode utilisateur et le mode noyau. Cette DLL enregistre un Vectored Exception Handler (VEH) qui transmet les détections d'accès à la table d'adresses d'exportation (EAT) de kernel32.dll au pilote EATGuardDriver.sys. Cette DLL alloue une page de garde sur l'EAT de kernel32.dll, ce qui déclenche une exception en cas d'accès à l'EAT dans l'espace du processus EATGuardApplication.exe. Cela achemine l'exécution vers le VEH enregistré qui traite ces exceptions et est responsable de la poursuite de l'exécution une fois l'analyse terminée.EATGuardDriver.sys - Pilote de périphérique en mode noyau qui vérifie l'accès à l'EAT de kernel32.dll. Actuellement, en tant que POC, il vérifie si la mémoire qui accède à kernel32.dll est adossée au disque.Veuillez noter que EATGuardApplication.exe charge EATGuardDll.dll à partir du chemin relatif de EATGuardApplication.exe. Cela signifie que le .exe et la .dll doivent se trouver dans le même répertoire lors de l'exécution. Veuillez également noter de ne pas exécuter ce projet sur une machine où le débogage du noyau est activé. Cela peut causer des problèmes, car EATGuardDll.dll utilise une exception de pas à pas pour la poursuite de l'exécution. Voici un exemple d'utilisation du projet :
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(...)
Ce projet est un POC qui imite la fonctionnalité de l'Export Address Filtering.