绕过最新版 EMET 5.2 保护摘要
绕过EMET 5.2 EAT保护:
【保护原理】
分别对ntdll、kernel32和kernelbase的EAT基址下断点,断点地址记录在调试寄存器dr0、dr1、dr2、dr3上,dr6保存最新调试异常的状态信息,dr7包含4个断点的设置,当利用漏洞去调用EAT时就会触发中断。
开启EAT保护前:
1 | 0:000> rM 20 |
开启EAT保护后:
1 | 0:000> rM 20 |
【绕过方法】
通过构造异常触发,来构造寄存器上下文,防止后面因dr寄存器清空也触发异常。
1 | mov eax, 150h ; 指向服务号,防止异常处理失效 |
绕过EMET 5.2 MemProt保护:
【保护原理】
EMET对VirtualProtect和VirtuaProtectEx进行Hook,正常情况下,执行上述函数后调用ntdll!ZwProtectVirtualMemory,接着向eax=0x4d传递服务号,然后调用 call dword ptr fs:[0C0h],此时EDX传递5个参数(进程句柄、地址、大小、可读写执行权限、可写地址),然后继续执行下去。
【绕过方法】
旧版EMET如4.1上,可以用VirtualAlloc/VirtuAllocEx。
最新版EMET 5.2上,可以用后面执行的原始代码去代替被EMET HOOK的地方,即构造ROP,使得eax=0x4d,然后通过ntdll!NtQueryInformationThread中的call dword ptr fs:[0c0h]指令去执行。
1 | [ |