Arsenal Bypass EDR'sXDR's and make malware analysis harder
(直接系统调用,沙盒绕过,API 哈希,AES 加密)
介绍
在这篇博客中,我将解释多种绕过AV/EDR/XDR安全解决方案的技术。作为一名红队成员和安全专家,我总是尝试探索新的方法和途径来绕过安全控制。我的工作与进攻性安全有关,“进攻是最好的防御”。这篇博客肯定会对红队和蓝队都有帮助。
今天,我将制作一个使用直接系统调用、沙盒绕过技术、强加密和随机过程名称来绕过 AV/EDR 的防御规避工具库。我还将解释一种绕过Outflank知名工具 Dumpert 的方法。Dumpert使用直接系统调用来绕过安全控制,如 AV/EDR 的用户态挂钩并创建内存转储。由于 Dumpert 是一个知名的开源工具,大多数 AV/EDR 都更新了其签名。在我的作业中,当我编译 Dumpert 后触及磁盘时,微软 Defender 检测到了它。因此,我决定采用一种不同的方法来静态和动态绕过它,而不是更改 Dumpert 的签名。在解释这些技术之前,让我们先谈谈Windows API和Native API。我不会深入解释,因为我在之前的博客文章中已经解释了 API 的流程。
Windows 中的应用程序在用户模式下运行,为了执行操作,应用程序调用 Windows API。位于 (ntdll.dll) 中的 Native API 是 AV/EDR 安全解决方案可以监控的最后实例。让我们以一个使用 Windows API 调用(如VirtualAllocEx, WriteProcessMemory, CreateRemoteThread)进行进程注入的简单恶意软件为例。这些 API 进一步与位于 ntdll.dll 中的替代 API 调用交互。ntdll.dll 中的函数是一组汇编指令,用于调用内核中的系统级调用。大多数 AV/EDR 挂钩在 Native API 上,并在应用程序调用这些函数时重定向程序的流程,以查看程序的恶意行为。当新进程生成时,EDR 会将其 DLL 加载到进程内存中以检查程序的行为。
防御规避工具库
直接系统调用一直是红队成员的热门话题。在我的工具库中,我使用了直接系统调用来绕过 AV/EDR 的用户模式挂钩。我还使用了一些技术,使恶意软件分析更加困难。当我们用 IDA-pro 或二进制解析器静态打开二进制文件并使用字符串搜索时,我们可以判断这个二进制文件正在执行某些任务。为了使静态分析变得困难,我使用了不同的技术。
第一部分
我将我的工作分为两部分。第一部分将解释带有 Native API 函数名称的系统调用,第二部分我在我的植入物中使用随机名称,以使静态分析变得困难。让我们讨论一下我们为防御规避工具库所做的准备。
首先,我使用SysWhispers2创建了 ASM/H 对。SysWhispers2 每次使用随机函数名称并动态解析系统调用。在这张图片中,你可以看到创建的 syswhisper2 汇编文件。函数哈希由全局变量使用,并相应地解析系统调用。过程名称与Native API调用相同。尽管这种方法绕过了 AV/EDR 的用户态挂钩,但我意识到如果我在我的植入物中使用这些名称,Windows Defender 或其他安全控制可以在静态或启发式分析中捕获我的二进制文件。
你可以看到这解析了函数哈希到系统调用并进行调用。
我写了一段使用直接系统调用的 C++ 代码。在我的第一部分中,我在代码中使用了相同的名称,并使用IDA-PRO进行静态分析。
在IDA-PRO中静态分析我的植入物后,我可以清楚地看到本机调用,这表明了我的二进制文件的行为。恶意软件分析师可以很容易地理解这个二进制文件正在进行进程注入。因为这些组合是恶意软件开发人员用来执行进程注入的。
尽管我使用了直接系统调用,这种技术绕过了大多数 AV/EDR,但我仍然希望使我的植入物更加隐蔽和难以分析。我使用 AES 加密来绕过静态分析,我使用知名工具msfvenom创建高度被 AV/EDR 检测到的 shellcode。因此,我使用AES 加密加密了我的 shellcode。
除了加密,我还使用了三种沙盒绕过技术,一种是检查内存大小,另一种是检查处理速度和核心处理器。你可以根据需要更改核心数量和内存大小,我在代码中使用了 8GB 内存条件。如果内存大小小于 8,程序将在此退出。
第二部分
如上所述,在第一部分中,我使用了随机过程和函数名称,以使其更加隐蔽。这次,我更改了过程名称,并且还更改了原型名称。Native API 是未记录的,但你可以很容易地找到它们的原型。
你可以看到这次我在我的植入物中使用了随机函数名称。我这样做是为了使恶意软件分析师的静态分析更加困难,并且在未来 AV/EDR 可以根据这些函数名称和签名捕获我的二进制文件。
我在 Windows 11 上测试了这些技术,针对微软 Defender、MacAfee 和卡巴斯基,但没有一个能够检测到我的植入物。我能够绕过这些安全控制的静态和动态分析。
我将我的 payload 注入到explorer.exe中。你可以看到我的 payload 在 explorer.exe 中的内存地址是RWX。
我还在 antiscan.me 上检查了我的二进制文件,以检查这些技术的检测率。但我的二进制文件完全不可检测。
https://antiscan.me/scan/new/result?id=DpzbbuU1wnXV
通过使用直接系统调用、沙盒绕过技术、强加密和随机过程名称,我能够绕过 EDR/XDR 检测。现在在我的最后一部分中,我还想解释一种可以用来绕过 Outflank 创建的 Dumpert 工具的方法。
绕过 Dumpert 工具(Outflank)
Outflank创建了一个非常棒的工具,使用直接系统调用来创建内存转储,但由于开源,几乎所有的 AV/EDR 都更新了 Dumpert 的签名。与其更改签名,我使用了另一种简单的方法来绕过它。这种技术确实有效,你会看到惊人的结果。
首先,我使用**@TheWover创建的工具 Donut 将 Dumpert 的独立 shellcode 转换为原始形式。你只需要一个简单的命令就可以将Dumpert.exe**转换为原始 shellcode。
因此,为了绕过 Dumpert 的静态分析,我在内存中执行。我创建了一个加载器,它将 Dumpert shellcode 加载到远程进程中。这个加载器使用了我上面提到的相同技术。
这种技术也绕过了 AV/EDR,因为我在我的加载器中使用了直接系统调用来绕过 AV/EDR 的用户模式挂钩。
结论
直接系统调用主要被红队成员和攻击者用来绕过安全控制的用户态挂钩。但在这篇博客中,我还解释了其他可以用来使植入物更加隐蔽和不可检测的技术。我还解释了绕过知名工具 Dumpert 的方法。在我即将发布的博客中,我希望添加更多隐蔽的技术,使其更加隐蔽。
参考资料
-
https://github.com/xenoscr/SysWhispers2/ -
https://github.com/outflanknl/Dumpert/tree/master/Dumpert -
https://outflank.nl/blog/2019/06/19/red-team-tactics-combining-direct-system-calls-and-srdi-to-bypass-av-edr/ -
https://github.com/Offensive-Panda
原文始发于微信公众号(securitainment):Arsenal 绕过 EDR/XDR 并使恶意软件分析更困难
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论