Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

admin 2024年11月17日12:18:39评论15 views字数 4213阅读14分2秒阅读模式

Arsenal 2.0 Elevating Malware Stealth Tactics to bypass static detection

注意: 本博客是我之前文章“Arsenal: 绕过 EDR/XDR 并使恶意软件分析更困难”的扩展。在这篇后续文章中,我探讨了额外的静态检测绕过技术,提供了高级策略来增强你的工具包

介绍

在这篇博客中,我将解释多种绕过AV/EDR/XDR安全解决方案的技术。作为一名红队成员和安全专家,我总是尝试探索新的方法和途径来绕过安全控制,并提供可操作的缓解措施来检测这些技术。我的工作与进攻性安全有关,“进攻是最好的防御”。我相信这篇文章将对红队和蓝队都有帮助。

我将制作一个防御规避武器库,使用直接系统调用、沙盒绕过技术、强加密和随机过程名称、API 哈希、Egg-Hunting 和其他许多技术来绕过 AV/EDR。在解释这些技术之前,让我们先谈谈Windows APINative API。我不会在这篇文章中深入解释它们,因为我已经在之前的博客文章中解释了 API 调用的工作原理和流程。

Windows 系统中的应用程序通常在用户模式下运行,并使用已记录的 Windows API 来执行操作。这些 API 调用位于 ntdll.dll 中的本机 API。位于 (ntdll.dll) 中的本机 API 是 AV/EDR 安全解决方案可以监控的最后实例。让我们以一个使用 Windows API 调用(如VirtualAllocEx, WriteProcessMemory, CreateRemoteThread)进行进程注入的简单恶意软件为例。这些 API 进一步与 ntdll.dll 中的替代 API 调用交互。ntdll.dll 中的函数是一组汇编指令,用于调用内核中的系统级调用。大多数 AV/EDR 挂钩在本机 API 上,并在应用程序调用此函数时重定向程序流,以查看程序的恶意行为。当新进程生成时,EDR 会将其 DLL 加载到进程内存中以检查程序的行为。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**防御规避武器库**

直接系统调用始终是红队成员的热门话题。在我的武器库中,我使用了直接系统调用来绕过 AV/EDR 的用户态挂钩。我还使用了一些技术,使恶意软件分析更加困难。当我们使用 IDA-pro 或二进制解析器静态打开二进制文件并使用字符串搜索时,我们可以判断这个二进制文件正在执行某些任务。为了使静态分析变得困难,我使用了不同的技术。

第一部分

我将我的工作分为两部分。第一部分将解释系统调用存根和我的植入程序代码,使用与ntdll.dll中定义的本机 API 函数相同的名称。这部分主要集中在开发一个使用直接系统调用进行进程注入的漏洞利用,该漏洞可以绕过 EDR 解决方案的用户模式挂钩,但由于多种原因可以在 EDR 的静态分析中被检测到。在第二部分中,我将主要关注规避,克服挑战并降低二进制文件的磁盘检测风险。我将在代码中使用随机名称、系统调用存根和所有必需的结构和定义,以使静态分析更加困难。在第二部分中,我将解释的一个额外步骤是 Egg-hunt 技术和随机指令,以绕过 EDR 解决方案的磁盘或静态分析。让我们讨论一下我们为防御规避武器库所做的准备。

首先,我使用SysWhispers2创建了 ASM/H 对。SysWhispers2 每次使用随机函数名称并动态解析系统调用。在这张图片中,你可以看到 syswhisper2 创建的汇编文件。函数哈希由全局变量使用,并相应地解析系统调用。过程名称与本机 API调用相同。尽管这种方法绕过了 AV/EDR 的用户模式挂钩,但我意识到如果在我的植入程序中使用这些名称,Windows Defender 或其他安全解决方案可以在基于签名的分析和静态启发式分析中检测到我的二进制文件。这是因为安全解决方案在静态分析中寻找模式、签名、字符串和导入。因此,我注意到我的漏洞利用在静态分析中被 Windows Defender 检测到,因为存根中定义的系统调用指令负责进行内核转换,并且我的植入程序清楚地显示了用于进程注入的 API 名称和众所周知的序列,这也可能是任何安全解决方案的一个重要指示器。因此,我在本文的第二部分中绕过了这些类型的检测。现在,让我们使用相同的定义创建我们的武器库。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**定义的过程**

你可以看到 WhisperMain 函数负责将函数哈希解析为系统调用并进行调用。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**解析直接系统调用号的函数**

我写了一段使用直接系统调用的 C++ 代码。在我的第一部分中,我在代码中使用了相同的名称,并使用IDA-PRO进行了静态分析。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**调用与 ntdll.dll 定义相同的名称**

IDA-PRO中静态分析我的植入程序后,我可以清楚地看到本机 API 调用,这表明了我的二进制文件的行为。恶意软件分析师可以很容易地理解这个二进制文件正在进行进程注入。因为这种组合是非常著名的用于进行进程注入。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

None

第二部分

如上所述,在第一部分中,我将在第二部分中使用随机过程和函数名称,使我的植入程序更加隐蔽。因此,这次,我更改了过程名称,更改了原型名称,并使用了 egg-hunting 和随机指令技术来绕过静态分析。因为我使用的是 Msfvenom 生成的 shellcode,所以我将在我的植入程序中使用 AES 加密来绕过 EDR 的签名检测。此外,我在代码中使用了反 AV 和反沙盒技术。现在,这部分主要集中在使用不同技术的组合来绕过静态和动态分析的防御规避绕过。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**随机过程名称**

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**原型中的随机名称**

你可以看到这次我在我的植入程序中使用了随机函数名称。我这样做是为了使恶意软件分析师的静态分析更加困难,并绕过 AV/EDR 解决方案的静态分析。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**随机函数名称**

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**静态分析中难以理解**

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**没有导入和字符串搜索**

遗留指令

我使用 syswhispers2 生成了用于直接系统调用的 ASM/H 对。首先,我想展示系统调用存根的一般结构。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**系统调用指令的一般模式**

这是在 ntdll.dll 中定义的 64 位操作系统中的内核转换模式。存根中的系统调用指令可能对 AV/EDR 检测很有趣。因此,我使用“int 2Eh”遗留指令来调用系统调用,而不是使用“syscalls”指令,以避免我的二进制文件的磁盘检测。

注意:int 2Eh 用于 32 位操作系统进入内核模式。在 64 位操作系统中,通过使用 syscalls 获得相同的效果

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**int 2Eh 而不是 syscalls**

这种技术对于绕过使用系统调用的二进制文件的磁盘检测非常有用。也许在某些情况下,AV/EDR 不会检测到“syscalls”指令,但为了使其更加隐蔽,你仍然可以使用“int 2Eh”。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**二进制文件中的 int 2Eh**

指令序列

检测可以通过查找“mov r10,rcx”指令并检查下一条指令是否为系统调用来完成,因为这允许检查系统调用号。在我的作业或恶意软件开发过程中,我没有遇到这种情况,但我仍然要解释这种技术以绕过磁盘检测。

我在 syswhispers2 创建的 asm 文件中添加了一系列指令。为了绕过这种检测,我使用了一系列指令。我没有直接移动“r10,rcx”,而是首先移动“r15,rcx”,然后是“r14,r15”,依此类推,以绕过使用系统调用指令模式进行的检测。只要在转换到内核时 eax 中有一个系统调用号,操作系统并不在意。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**指令序列**

随机指令(nop)

另一种绕过磁盘检测的技术。我在 asm 文件中添加了“nop”指令。这些技术也有助于避免系统调用的模式或正则表达式检测。你可以在调用系统调用之前添加多个 nop 指令。这些 nop 指令不会影响你的代码,但它们有助于绕过可能基于模式或正则表达式的系统调用指令的检测。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**asm 文件中的 nop 指令**

Egg-Hunt

Egg hunt 将在系统调用存根中使用DB指令放置随机字节,并在运行时再次用系统调用指令修补这些字节以转换到内核。这种技术也有助于绕过 AV/EDR 解决方案的静态分析和基于正则表达式的分析。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**Egg-Hunting 技术**

AES 加密

尽管我使用了直接系统调用,这种技术绕过了大多数 AV/EDR,但我仍然使用了著名的工具msfvenom来创建高度被 AV/EDR 检测到的 shellcode。因此,我使用AES 加密对我的 shellcode 进行了加密。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**C++ 中的 AES 解密**

反虚拟机技术

除了加密,我还使用了三种反虚拟机技术,一种是检查内存大小,其他是检查处理速度和核心处理器。你可以根据需要更改核心数量和内存大小,我在代码中使用了 8GB 内存条件。如果内存大小小于 8,程序将在此退出。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**沙盒绕过技术**

执行

我在 Windows 11 上对这些技术进行了测试,针对 Microsoft Defender、MacAfee 和 Kaspersky,但没有一个能够检测到我的植入程序。我能够绕过这些安全解决方案的静态和动态分析。

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**绕过 Windows Defender**

我将我的有效载荷注入到explorer.exe中。你可以在 explorer.exe 的内存地址中看到我的有效载荷,它是RWX

Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

**在 explorer.exe 中注入的 shellcode**

我还在 antiscan.me 上检查了我的二进制文件,以检查这些技术的检测率。但我的二进制文件完全不可检测。

https://antiscan.me/scan/new/result?id=DpzbbuU1wnXV

结论

直接系统调用通常由恶意软件开发人员、红队成员和攻击者使用,以绕过安全控制的用户模式挂钩。但在这篇博客中,我还解释了其他技术,这些技术可以用来使植入程序更加隐蔽,并在静态分析中更加不可检测。

参考资料

https://github.com/xenoscr/SysWhispers2/

https://github.com/outflanknl/Dumpert/tree/master/Dumpert

https://www.outflank.nl/blog/2019/06/19/red-team-tactics-combining-direct-system-calls-and-srdi-to-bypass-av-edr/

https://github.com/Offensive-Panda

https://offensive-panda.github.io/DefenseEvasionTechniques/

原文始发于微信公众号(securitainment):Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月17日12:18:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Arsenal 2.0 提升恶意软件隐蔽战术以绕过静态检测http://cn-sec.com/archives/3401256.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息