
Реализация механизма защиты таблицы адресов экспорта, такого как Export Address Filtering (EAF)
Реализация защитной меры для таблицы адресов экспорта, такой как Export Address Filtering (EAF)
Этот проект состоит из трёх бинарных файлов, которые после компиляции можно найти в EATGuard\bin\. Это:
EATGuardApplication.exe — «вредоносное» приложение, которое загружает EATGuardDll.dll в процесс, а затем выполняет некоторый исполняемый код (шелл-код), запускающий notepad.exe.EATGuardDll.dll — библиотека DLL, обеспечивающая «мост» между пользовательским режимом и режимом ядра. Эта DLL регистрирует векторизованный обработчик исключений (VEH), который отправляет драйверу EATGuardDriver.sys информацию об обнаруженных обращениях к таблице адресов экспорта (EAT) библиотеки kernel32.dll. Эта DLL выделяет страницу защиты (guard page) в EAT kernel32.dll, что вызывает исключение при обращении к EAT в адресном пространстве процесса EATGuardApplication.exe. Это направляет выполнение в зарегистрированный VEH, который обрабатывает эти исключения и отвечает за продолжение выполнения после завершения анализа.EATGuardDriver.sys — драйвер устройства режима ядра, который проверяет доступ к EAT kernel32.dll. В настоящее время, в рамках POC, он проверяет, подкреплена ли память, из которой происходит обращение к kernel32.dll, файлом на диске.Обратите внимание, что EATGuardApplication.exe загружает EATGuardDll.dll из относительного пути, соответствующего расположению EATGuardApplication.exe. Это означает, что при запуске и .exe, и .dll должны находиться в одном каталоге. Также обратите внимание: не запускайте этот проект на машине с включенной отладкой ядра. Это может вызвать проблемы, поскольку EATGuardDll.dll использует исключение одиночного шага для продолжения выполнения. Ниже приведён пример использования проекта:
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, имитирующим функциональность Export Address Filtering.