一个新的免杀payload工具包

admin 2023年5月19日11:38:06评论114 views字数 1591阅读5分18秒阅读模式

介绍

Freeze.rs是一个有效负载工具包,用于使用挂起的进程绕过EDR,直接使用RUST编写的系统调用,用于绕过EDR安全控制,以秘密的方式执行shellcode。Freeze.rs 利用多种技术不仅删除Userland EDR挂钩,而且还以绕过其他端点监控控制的方式执行shellcode。
说明

创建挂起的进程

创建进程时,Ntdll.dll是加载的第一个DLL;这发生在加载任何EDR DLL之前。这意味着在加载EDR并开始挂钩和修改系统DLL的程序集之前会有一点延迟。在查看Ntdll.dll中的Windows系统调用时,我们可以看到还没有任何东西被挂钩。如果我们创建一个处于挂起状态的进程(一个在时间上被冻结的进程),我们可以看到除了Ntdll.dll之外没有加载其他DLL。您还可以看到没有加载EDR DLL,这意味着位于Ntdll.dll中的系统调用未被修改。
一个新的免杀payload工具包

地址空间布局随机化

要使用这个干净的挂起进程从www.example.com加载器中删除钩子Freeze.rs,我们需要一种方法来以编程方式查找和读取干净的挂起进程的内存。这就是地址空间布局随机化(ASLR)发挥作用的地方。ASLR是一种防止堆栈内存损坏漏洞的安全机制。ASLR将进程内部的地址空间随机化,以确保所有内存映射对象、堆栈、堆和可执行程序本身都是唯一的。现在,这就是它变得有趣的地方,因为虽然ASLR工作,但它不适用于位置无关的代码,如DLL。DLL(特别是已知的系统DLL)的情况是,地址空间在靴子时随机化一次。这意味着我们不需要枚举远程进程信息来查找其ntdll.dll的基址,因为它在所有进程中都是相同的,包括我们控制的进程。由于每个DLL的地址在每次靴子时都是相同的,因此我们可以从自己的进程中提取此信息,而不必枚举挂起的进程来查找地址。

一个新的免杀payload工具包

有了这些信息,我们可以使用API ReadProcessMemory来读取进程的内存。该API调用通常与作为任何基于凭证的攻击的一部分的LSASS的阅读相关联;然而,它本身本质上不是恶意,特别是如果我们只是阅读内存的任意部分。ReadProcessMemory被标记为可疑内容的唯一情况是,您正在阅读不应该读取的内容(例如LSASS的内容)。EDR产品不应标记调用ReadProcessMemory的事实,因为此函数有合法的操作用途,并会导致许多误报。
我们可以更进一步,只阅读Ntdll.dll中存储所有系统调用的部分-它的.text部分,而不是读取整个DLL。
结合这些元素,我们可以通过编程方式获得Ntdll.dll的.text部分的副本,以在执行shellcode之前覆盖现有的hooked .text部分。
ETW修补
ETW利用内置的系统调用来生成该遥测。由于ETW也是Windows中内置的本机功能,因此安全产品不需要“挂钩”ETW系统调用来访问信息。因此,为了防止ETW,Freeze.rs修补了许多ETW syscall,清空寄存器并将执行流返回到下一条指令。修补ETW现在是所有加载器的默认设置。
外壳代码
由于只恢复Ntdll.dll,因此执行shellcode的所有后续调用都需要驻留在Ntdll.dll中。使用Rust的NTAPI Crate(注意,你可以在其他语言中做到这一点,但在Rust中,它很容易实现),我们可以定义和调用分配,写入和保护shellcode所需的NT系统调用,有效地跳过位于Kernel32.dll和Kernelbase.dll中的标准调用,因为这些仍然可能被钩住。

一个新的免杀payload工具包

使用Rust的NTAPI crate,您可以看到所有这些调用都不会显示在ntdll.dll下,但是它们仍然存在于进程中。

一个新的免杀payload工具包

结果:

一个新的免杀payload工具包

一个新的免杀payload工具包

项目地址

https://github.com/optiv/Freeze.rs

原文始发于微信公众号(菜鸟学信安):一个新的免杀payload工具包

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月19日11:38:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一个新的免杀payload工具包https://cn-sec.com/archives/1746314.html

发表评论

匿名网友 填写信息