
Export Address Filtering (EAF) のようなエクスポートアドレステーブル保護緩和策の実装
Export Address Filtering (EAF) のような、エクスポートアドレステーブル保護の緩和策の実装です。
このプロジェクトは3つのバイナリで構成されており、コンパイルすると EATGuard\bin\ にあります。それらは以下のとおりです:
EATGuardApplication.exe - プロセスに EATGuardDll.dll を読み込み、その後 notepad.exe を実行する実行可能コード(シェルコード)を実行する「悪意のある」アプリケーションです。EATGuardDll.dll - ユーザーモードとカーネルモードの間の「ブリッジ」を提供するDLLです。このDLLは Vectored Exception Handler (VEH) を登録し、kernel32.dll の Export Address Table (EAT) へのアクセス検出を EATGuardDriver.sys ドライバに送信します。このDLLは kernel32.dll のEAT上にガードページを割り当て、EATGuardApplication.exe のプロセス空間内でEATがアクセスされると例外を発生させます。これにより実行が登録済みVEHにルーティングされ、VEHはこれらの例外を処理し、解析完了後に実行を継続する役割を担います。EATGuardDriver.sys - kernel32.dll のEATへのアクセスを検証するカーネルモードデバイスドライバです。現在はPOCとして、kernel32.dll にアクセスするメモリがディスクによってバックアップされているかどうかをチェックします。EATGuardApplication.exe は 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 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(...)
このプロジェクトは、Export Address Filtering の機能を模倣したPOCです。