背景
PE 和 shellcode 加载器旨在通过动态地将恶意代码注入目标系统的内存来绕过传统的安全措施。这种方法不同于普通的恶意可执行文件,后者将恶意代码直接嵌入到程序的文件结构中。
为此,可以采用各种技术,包括进程挖空、DLL 注入和用户模式挂钩。进程挖空涉及将恶意代码嵌入现有进程的地址空间中,从而有效地将其伪装在合法进程中。DLL 注入涉及将恶意代码作为动态链接库 (DLL) 加载到正在运行的进程的地址空间中,使其在主机进程的上下文中执行。用户模式挂钩涉及通过将现有系统函数的执行重定向到恶意代码来修改其行为。
反病毒解决方案在对抗复杂的攻击媒介方面面临越来越大的挑战。2022年分享的一篇文章就证明了这一点,该文章 显示威胁行为者使用不流行的编程语言(如 Delphi)进行恶意软件开发。威胁行为者的方法变得更加适应性和创造性,利用编译器差异进一步复杂化检测。因此,编译后的可执行文件将具有唯一的签名,即使它具有与原始代码相同的整体功能。这可能是由于编译器引起的优化、指令排序或符号表更改等。这些因素都导致恶意软件签名在每次编译时都是唯一的。这使得传统的基于 AV 签名的检测方法在识别和阻止恶意软件方面效果较差。
Mortar Loader 用例
受这种使用不受欢迎的编程语言策略的启发,Mortar Loader 在 Lazarus IDE 中使用 Free Pascal 编译器 (FPC) 以 Free Pascal 编写,将多种突出的攻击媒介和技术组合成一个工具。加载程序利用Blowfish 算法 在加载程序内存流中进行即时解密。最新版本利用多种策略来实现其目标,有效地逃避一系列反恶意软件和 EDR 解决方案(包括 Cortex XDR)的检测。
Mortar Loader 是一个动态链接库 (DLL),可帮助测试人员模拟各种攻击媒介,从 PE 加密场景到 shellcode 注入技术。其功能包括 rundll32 执行、DLL 注入、进程劫持和侧载,是红队成员和安全研究人员的强大工具:
PE 加密场景 - Mortar Loader 可以执行加密的 PE 文件,从而隐藏恶意代码以避免被检测到。
Shellcode 注入 - Mortar Loader 集成了 Shellcode 注入技术,使测试人员能够将恶意代码注入正在运行的进程。此功能允许测试人员执行任意代码,而无需依赖传统的可执行文件。
DLL 注入、劫持和侧载 - Mortar Loader 充当有效载荷加载器,因此可用于协助 DLL 注入、劫持和侧载。它依靠攻击者将 Mortar Loader 注入目标进程或将其侧载到合法软件包中。一旦 Mortar Loader 到位,就可以利用 Mortar Loader 的逃避和执行功能谨慎地传递恶意代码。
Mortar Loader 从 v2 到 v3 的演变
Mortar Loader 在 GitHub 上获得了超过 1200 个星标,每月有稳定的独立访客,这证明它是一款强大的逃避检测工具。然而,这种关注不可避免地引起了杀毒产品的关注,导致 v2 版本的检测率上升。
为了解决这个问题,我们推出了 Mortar Loader v3,它包含一套旨在恢复其隐身能力的增强功能:
使用远程阶段加密二进制文件或 Shellcode 进行无文件执行
通过异步过程调用 (APC) 注入实现 Early Bird
进程伪装
命名管道支持
字符串和函数调用混淆。
迫击炮隐蔽装填子程序
延迟执行技术
这些特征详细描述如下:
1. 无文件执行
Mortar Loader v3 支持通过 HTTP/HTTPS 从远程源下载加密二进制文件或 shellcode,无需在本地存储有效负载。在无法使用远程源的情况下,仍然可以在本地加载有效负载。
2. Early Bird APC 注入
一旦 DLL 文件通过 DLL 注入、劫持或 DLL 侧载附加到远程进程,加载程序就会使用 Win32 API 函数QueueUserAPC 运行 shellcode。主要优点是大多数恶意行为发生在进程初始化的早期,从而提高了某些 AV 解决方案的隐蔽性。
3. 进程伪装
与 V2 相比,加载程序创建的进程看起来更合法,因此更难检测。例如,加载程序不使用 cmd.exe 进行进程挖空或早期注入,而是使用 dllhost.exe 进程并将进程命令行伪装成普通的 Windows 应用程序。
4. 命名管道
加载器会创建一个命名管道,用于在注入的 DLL 和主机系统之间传输变量值。这样攻击者就可以将有效载荷值传递到加载器中。
5. 字符串和函数调用混淆
加载器将 Win32 API 外部调用隐藏在导入地址表 (IAT) 中,并且函数名称和 pascal 字符串都经过编码,这使得静态分析工具更难以识别和阻止恶意代码。
6. Mortar 隐蔽重载子程序
Mortar Loader v3 引入了一种新颖的持久性技术,确保恶意负载即使提前终止也能保持活跃和运行。这种方法利用线程计时器持续监控负载执行状态。如果负载终止,攻击链将自动重新加载,有效地重新激活恶意代码而无需用户干预。只要父进程保持活跃,这种策略就可以使 Mortar Loader 保持持久执行,从而对系统构成持续威胁。
7. 延迟执行技术
为了进一步逃避沙盒或 AV 模拟器的检测,Mortar Loader v3 采用了延迟执行技术。
让我们开始吧
要运行 Mortar Loader,用户必须自行编译源代码。预编译的二进制文件故意不发布,以防止被公共扫描仪索引。使用Lazarus FPC IDE时,编译过程相对简单。项目结构设计易于使用,即使是经验有限的开发人员也可以使用它。
要使用 Mortar Loader,首先使用加密器 https://github.com/0xsp-SRD/mortar/releases/tag/v2 加密有效载荷(例如 PE、shellcode 或 Cobalt Strike 有效载荷)。下面的屏幕截图显示了加密过程。
加密有效载荷后,即可将其加载到目标系统上。应将有效载荷托管在远程主机或任何可由您打算部署加载程序的系统访问的 Web 服务器上。这种无文件方法使加载程序可以充当暂存器,从远程服务器下载有效载荷并在目标系统上执行。有效载荷资源的 URL 应使用 base64 编码以隐藏它并保护它免受初始检测。当加载程序部署到目标系统时,此编码 URL 将被传递到加载程序中。
为了评估迫击炮装载机的能力,我们设计了以下两种场景:
PE Hollowing/在内存中运行
如果有效载荷的 URL 值是 base64 编码的,并且该函数是在 rundll32.exe 进程的上下文中执行的,则 Mortar Loader V3 允许在 DLL 入口点之后传递远程有效载荷 URL 的值。
Early bird
Early bird 技术在 rundll32.exe 上下文中运行时会因未知原因而无法执行,因为在某个时刻 shellcode 会被截断,无法完全执行。使用 DLL 注入、劫持或侧载时(即 DLL_PROCESS_CONDITION 适用时),此功能受支持。
该技术涉及以下步骤:
将 DLL 注入远程进程(仅限 x64 位)
使用名称管道将有效载荷(base64 格式)传递到 DLL 中,例如“echo {BASE64 URL} > \.pipemoj_ML_ntsvcs”
注入的DLL将从命名管道接收payload值,然后进行内部调用,执行Early Bird APC注入函数
以下屏幕截图显示了测试 Cortex XDR 时的完整绕过过程。
Mortar Loader的未来发展
安全解决方案与威胁行为者之间的持续斗争需要不断改进 AV 规避技术。Mortar Loader 仍在积极开发中,并计划在第 4 版中引入新功能。这些功能包括:
汇编类运行时。
系统调用而不是 win32 API 调用。
自我删除,清除痕迹。
ETW 修补。
XOR函数的混淆。
要了解有关 Mortar Loader 开发的最新信息并随时了解未来版本,请关注该工具的GitHub 页面。https://github.com/0xsp-SRD/morta
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...