译者: d_infinite
假设某机器安装了CylancePROTECT(EDR产品),当我们尝试dumplsass.exe
进程的时候,操作会被拦截。
本篇文章将教你如何在Windows API被Hook的前提下,绕过CylancePROTECT的拦截。
钩取Windows API这项技术在非常早的时间已经出现,具体可以参考文章https://medium.com/@fsx30/bypass-edrs-memory-protection-introduction-to-hooking-2efb21acffd,该文章讲述了EDR是如何使用该技术进行防御的
(本篇文章将演示如何Unhook MiniDumpWriteDump
这个API,同理你也可以Unhook其他API)
什么是钩子?
Windows API钩子就好比网络代理,应用程序产生的API调用(如CreateFile
,ReadFile
, OpenProcess
),都会经过该钩子,并由它来判断行为操作是否恶意
钩子是如何实现的?
通常来讲,EDR类产品会通过修改/劫持Windows DLLs(如,kernel32.dll
/ntdll.dll
)中的API,实现钩子
在API的起始地址插入JMP指令,当我们调用被修改的API时,会重定向到EDR的检测函数。EDR会判断该API操作是否恶意,进而决定选择上报/拦截等操作。(注: 这种技术通常被称为detour
/trampoline
)
下图展示了上述过程的完整流程
但并不是所有API都会被Hook,只有经常用于恶意操作的API才会被Hook,如CreareRemoteThread
, NtQueueApcThread
实际演示
示例程序是一个简单的C++程序,该程序调用MiniDumpWriteDump
dump了lsass.exe
进程的内存映像。在安装了CylancePROTECT的主机上运行该程序,可以看到进程直接被kill了
不难看出,CylancePROTECT已经Hook了MiniDumpWriteDump
或者更底层的NtReadVirtualMemory
(在ntdll.dll
中)
使用Windbg
对Invoke-CreateMemoryDump.exe
进行调试,可以看到在进程启动时,Cylance将CyMemDef64.dll
注入到了进程中,该模块用于API Hook以及恶意行为检测
由于MiniDumpWriteDump
的底层是NtReadVirtualMemory
,因此我们查看NtReadVirtualMemory
的汇编指令
u NtReadVirtualMemory
可以看到该NtReadVirtualMemory
第一条指令为jmp,并且jmp指向的地址超过了ntdll的范围
进一步查看该地址
u 0000000047980084
发现该地址指向了CyMemDef64.dll
的范围内(CylancePROTECT注入的DLL),说明NtReadVirtualMemory
已经被Hook
在NtReadVirtualMemory
打上断点并运行,可以看到程序停在了断点处
如果我们继续跟进,就会走到Cylance的检测模块
为了能够绕过EDR的检测,我们需要先看一下EDR修改前的NtReadVirtualMemory
,查看ntdll的导出函数表及其对应的RVA
将RVA转换为实际的物理地址(在本篇文章测试环境中RVA为00069C70),可以看到NtReadVirtualMemory
的前五个字节是4c 8b d1 b8 c3
因此,只要将NtReadVirtualMemory
的前五个字节修改为4c 8b d1 b8 3c
,即可绕过CylancePROTECT的检测
在如下代码中,我们找到NtReadVirtualMemory
的地址并修改函数开头的内容
重新编译代码并尝试dumplsass.exe
的内存映像,可以看到成功获取并绕过了EDR的拦截
使用Mimikatz解析上述dump的文件,可窃取用户敏感信息
在本篇文章中仅仅修改了NtReadVirtualMemory
这个函数,但实际上通过比较硬盘上函数的定义和内存指向中指向函数做对比,自动化Unhook所有函数
参考资料
https://youtu.be/7hP9HcaZtyA
https://medium.com/@fsx30/bypass-edrs-memory-protection-introduction-to-hooking-2efb21acffd6
https://www.mdsec.co.uk/2019/03/silencing-cylance-a-case-study-in-modern-edrs/
原文始发于微信公众号(redteam101):通过Unhook API钩子bypass杀毒引擎/EDR类产品