通过Unhook API钩子bypass杀毒引擎/EDR类产品

渗透技巧 4年前 (2021) admin
444 0 0

译者: 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)

下图展示了上述过程的完整流程

通过Unhook API钩子bypass杀毒引擎/EDR类产品

但并不是所有API都会被Hook,只有经常用于恶意操作的API才会被Hook,如CreareRemoteThread, NtQueueApcThread

实际演示

示例程序是一个简单的C++程序,该程序调用MiniDumpWriteDumpdump了lsass.exe进程的内存映像。在安装了CylancePROTECT的主机上运行该程序,可以看到进程直接被kill了

通过Unhook API钩子bypass杀毒引擎/EDR类产品

不难看出,CylancePROTECT已经Hook了MiniDumpWriteDump或者更底层的NtReadVirtualMemory(ntdll.dll)

使用WindbgInvoke-CreateMemoryDump.exe进行调试,可以看到在进程启动时,Cylance将CyMemDef64.dll注入到了进程中,该模块用于API Hook以及恶意行为检测

通过Unhook API钩子bypass杀毒引擎/EDR类产品

由于MiniDumpWriteDump的底层是NtReadVirtualMemory,因此我们查看NtReadVirtualMemory的汇编指令

u NtReadVirtualMemory

可以看到该NtReadVirtualMemory第一条指令为jmp,并且jmp指向的地址超过了ntdll的范围

通过Unhook API钩子bypass杀毒引擎/EDR类产品

进一步查看该地址

u 0000000047980084

发现该地址指向了CyMemDef64.dll的范围内(CylancePROTECT注入的DLL),说明NtReadVirtualMemory已经被Hook

通过Unhook API钩子bypass杀毒引擎/EDR类产品

NtReadVirtualMemory打上断点并运行,可以看到程序停在了断点处

通过Unhook API钩子bypass杀毒引擎/EDR类产品

如果我们继续跟进,就会走到Cylance的检测模块

为了能够绕过EDR的检测,我们需要先看一下EDR修改前的NtReadVirtualMemory,查看ntdll的导出函数表及其对应的RVA

通过Unhook API钩子bypass杀毒引擎/EDR类产品

将RVA转换为实际的物理地址(在本篇文章测试环境中RVA为00069C70),可以看到NtReadVirtualMemory的前五个字节是4c 8b d1 b8 c3

通过Unhook API钩子bypass杀毒引擎/EDR类产品

因此,只要将NtReadVirtualMemory的前五个字节修改为4c 8b d1 b8 3c,即可绕过CylancePROTECT的检测

在如下代码中,我们找到NtReadVirtualMemory的地址并修改函数开头的内容

通过Unhook API钩子bypass杀毒引擎/EDR类产品

重新编译代码并尝试dumplsass.exe的内存映像,可以看到成功获取并绕过了EDR的拦截

通过Unhook API钩子bypass杀毒引擎/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类产品

版权声明:admin 发表于 2021年2月26日 下午2:46。
转载请注明:通过Unhook API钩子bypass杀毒引擎/EDR类产品 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...