虽然不同厂商的 EDR 挂钩可能略有不同 , 但原理仍然相同,而且都有一个共同的弱点:它们都位于用户模式下 。由于钩子和 EDR 的 DLL 都必须放在每个进程的地址空间内,因此恶意进程可以篡改它们 。
3.绕过EDR钩子绕过 EDR 钩子的方法有很多,我只介绍主要的几种 。
卸载EDR钩子由于挂钩的 ntdll 位于我们自己进程的内存中,因此我们可以使用 VirtualProtect() 使内存可写 , 然后用原始函数代码覆盖 EDR 的 jmp 指令 。为了替换钩子,我们当然需要知道原来的汇编指令是什么 。最常见的方法是从磁盘读取 ntdll.dll 文件,然后将内存版本与磁盘版本进行比较 。前提是 EDR 不会检测或阻止从磁盘手动读取 ntdll.dll 。
这种方法的主要缺点是,EDR 可以定期检查 ntdll 的内存,查看其钩子是否已被删除 。如果 EDR 检测到其钩子已被移除,它可能会将钩子写回,更有甚者会终止进程并触发检测事件 。虽然钩子可能需要放在用户模式下,但检查钩子可以在内核模式下进行,因此我们也没有什么办法来防止这种情况发生 。
手动映射DLL与其从磁盘中读取 ntdll 的纯净拷贝来解锁原始 ntdll,我们还不如直接将纯净拷贝加载到进程内存中,然后使用它来代替原始 ntdll 。由于 LoadLibrary() 和 LdrLoadDll() 等函数不允许系统两次加载同一个 DLL,所以我们必须手动加载 。手动映射 DLL 的代码可能会很繁杂,而且容易出错或被检测到 。
【绕过用户模式EDR Hook原理及思路】DLL 通常也会调用其他 DLL,因此我们要么只能使用手动加载的 ntdll 中的函数,要么为我们需要的每个 DLL 加载第二个副本,并修补它们,使其只能使用其他手动加载的 DLL,这可能会变得非常混乱 。如果杀毒软件在进行内存扫描时 , 发现每个 DLL 都有多个副本加载到内存中,那么也很有可能被发现 。
直接系统调用正如前面讨论的那样,用户模式下的Nt/Zw函数实际上除了执行系统调用之外并不执行其他任何操作 。因此,我们实际上不需要映射整个新的ntdll副本来执行一些系统调用 。相反,我们可以直接将系统调用逻辑实现到我们自己的代码中 。我们只需将要调用的函数的SSN(函数号)移动到eax寄存器中,然后执行syscall指令 。
__asm {mov r10, rcxmov eax, 0x123syscallret}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
从ntdll读取一个干净的拷贝
你可能已经对这个想法感到厌倦了,但我们可以从磁盘上读取一个干净的ntdll副本,然后从中提取SSN 。由于SSN始终被放入eax寄存器 , 我们只需扫描我们想要调用的函数以找到"mov eax, imm32"指令即可 。但是 , 如果我们想要一种不仅仅是从磁盘读取ntdll的变体呢?别担心!
根据函数顺序计算系统调用号
系统调用ID是索引 , 因此是顺序的 。如果我们想要调用的函数的SSN是0x18,那么直接在它之前的可能是0x17,直接在它之后的可能是0x19 。由于EDR并不挂钩每个Nt函数,我们可以简单地从最近的未被挂钩的函数中获取SSN , 然后通过添加或减去在它和我们目标函数之间有多少个函数来计算我们想要的函数的SSN 。

文章插图
图片
这种方法确实有一个缺陷:我们无法百分之百地保证系统调用号将永远保持连续 , 或者DLL不会跳过一些 。
硬编码最简单的方法就是直接硬编码系统调用号 。虽然它们在不同版本之间会有所改变,但在过去它们的变化并不是很大 。检测操作系统版本并加载正确的SSN集并不是太难的工作 。事实上,j00ru友好地发布了每个Windows版本的每个系统调用号的列表 。这种方法唯一的缺点是,如果系统调用号发生变化,代码可能在新的Windows版本上无法自动运行 。
直接系统调用的问题在过去的十多年里,直接系统调用一直是绕过用户模式钩子的首选方法 。实际上 , 我自己在2012年初次尝试了这种方法 。不幸的是 , 为了防止这种绕过方式,已经进行了很多工作 。最常见的检测方法是让EDR的内核模式驱动程序检查调用堆栈 。
尽管EDR不能再在内核中挂钩很多地方,但它可以利用操作系统提供的监视功能,比如:
推荐阅读
- 《未成年人网络保护条例》正式施行 《蛋仔派对》成网易“未成年人模式”试点产品
- 王者荣耀觉醒装备合成,王者荣耀觉醒模式怎么开
- 电脑上怎么查看宽带密码,华为手机怎么查电脑的宽带用户名和密码
- 华为手机如何调整单手操作模式
- 海贼无双4怎么添加2p,海贼无双3怎么双人玩双人模式加入方法
- win0电脑如何添加用户帐户
- 华为如何移除管控中心,华为平板如何解除管控模式
- 赛博朋克2077是什么意思,赛博朋克2077直播模式什么意思
- 手机怎么退出开发者选项,手机怎么把开发者模式选项关闭呢
- 手机屏幕太大单手不好操作怎么办?教你一键改成小屏模式,真实用
