导出地址表保护减轻措施的实现,类似于导出地址过滤(EAF)

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/connormcgarr/EATGuard

小编记录

EATGuard 是一个针对导出地址表(Export Address Table)保护的实现,类似于导出地址过滤(EAF)技术。它旨在提供一种有效的方法来减轻恶意软件对系统的攻击,保护系统的安全性和稳定性。

使用 EATGuard 可以帮助防止恶意软件利用导出地址表的弱点进行攻击。它提供了一层额外的保护,使得对导出函数的访问变得更加受限,从而增强了系统的安全性。通过分析导出地址表的访问模式,EATGuard 可以及时检测并阻止恶意行为,保护系统免受潜在的攻击。

EATGuard 是一个概念验证项目,模仿了导出地址过滤技术的功能。它为安全研究人员和系统开发人员提供了一个实验平台,用于探索导出地址表保护的实现方式,并为构建更强大的系统安全解决方案提供了有益的参考。

EATGuard

导出地址表保护减轻措施的实现,类似于导出地址过滤(EAF)

工作原理

该项目由三个二进制文件组成,在编译后可以在 EATGuard\bin\ 目录下找到它们:

  1. EATGuardApplication.exe - "恶意" 应用程序,加载 EATGuardDll.dll 到进程中,然后执行一些可执行代码(shellcode),用于执行 notepad.exe
  2. EATGuardDll.dll - DLL 文件,提供用户模式和内核模式之间的"桥梁"。该 DLL 注册一个向量异常处理程序(VEH),将对 kernel32.dll 的导出地址表(EAT)访问的检测发送到 EATGuardDriver.sys 驱动程序。该 DLL 在 kernel32.dll 的 EAT 上分配了一个守卫页面,当在 EATGuardApplication.exe 进程空间内访问 EAT 时,会引发异常。这将导向注册的 VEH,该处理程序处理这些异常,并负责在完成分析后继续执行。
  3. EATGuardDriver.sys - 内核模式设备驱动程序,验证对 kernel32.dll 的 EAT 的访问。目前,作为概念验证,它检查访问 kernel32.dll 的内存是否由磁盘支持。

如何使用

请注意,EATGuardApplication.exe 从相对路径中加载 EATGuardDll.dll。这意味着在执行时,.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 分析完成!
    [+] 目标地址: 0x24AA138005C
        [>] 是否为 R/W/X 内存: TRUE
        [>] 是否为 R/W/X 映射的节: FALSE
        [>] 是否为映像支持的内存: FALSE
        [>] 页面保护是否已更改: FALSE
        [>] 区域基址地址: 0x24AA1380000
        [>] 内存区域大小: 0x1000
        [>] 内存提交大小: 0x1000
[+] EATGuard 分析完成!
    [+] 目标地址: 0x24AA138005F
        [>] 是否为 R/W/X 内存: TRUE
        [>] 是否为 R/W/X 映射的节: FALSE
        [>] 是否为映像支持的内存: FALSE
        [>] 页面保护是否已更改: FALSE
        [>] 区域基址地址: 0x24AA1380000
        [>] 内存区域大小: 0x1000
        [>] 内存提交大小: 0x1000
[+] EATGuard 分析完成!
    [+] 目标地址: 0x24AA138008F
        [>] 是否为 R/W/X 内存: TRUE
        [>] 是否为 R/W/X 映射的节: FALSE
        [>] 是否为映像支持的内存: FALSE
        [>] 页面保护是否已更改: FALSE
        [>] 区域基址地址: 0x24AA1380000
        [>] 内存区域大小: 0x1000
        [>] 内存提交大小: 0x1000
[+] EATGuard 分析完成!
    [+] 目标地址: 0x24AA138009B
        [>] 是否为 R/W/X 内存: TRUE
        [>] 是否为 R/W/X 映射的节: FALSE
        [>] 是否为映像支持的内存: FALSE
        [>] 页面保护是否已更改: FALSE
        [>] 区域基址地址: 0x24AA1380000
        [>] 内存区域大小: 0x1000
        [>] 内存提交大小: 0x1000
[+] EATGuard 分析完成!
    [+] 目标地址: 0x24AA13800A2
        [>] 是否为 R/W/X 内存: TRUE
        [>] 是否为 R/W/X 映射的节: FALSE
        [>] 是否为映像支持的内存: FALSE
        [>] 页面保护是否已更改: FALSE
        [>] 区域基址地址: 0x24AA1380000
        [>] 内存区域大小: 0x1000
        [>] 内存提交大小: 0x1000

(...)TRUNCATED(...)

该项目是一个模仿导出地址过滤(Export Address Filtering)功能的概念验证。

标签:工具分享, 思路分享, 学习笔记