目录导航
受影响的平台: Microsoft Windows
受影响的各方: Microsoft Windows 用户
影响:控制受害者的设备并收集敏感信息
严重级别:严重
Remcos RAT(Remote Access Trojan)最初是作为远程控制计算机的专业工具而设计的。Remcos RAT 自 2016 年 7 月 21 日发布第一个版本以来一直被黑客滥用以秘密控制受害者的设备,因此被认为是恶意软件系列。Remcos RAT 是在线销售的商业软件。

在这个网页上,它提供了两个版本:专业版(包含所有功能)和免费版(功能受限)。
该分析基于黑客使用 Remcos RAT 来控制网络钓鱼活动提供的受害者设备,该活动最近被 Fortinet 的 FortiGuard 实验室捕获。
在此分析中,您将了解到:
- 网络钓鱼活动如何将 Remcos RAT 传送到受害者的设备上
- Remcos 如何在设备上执行
- 它可以从受害者那里窃取哪些敏感信息
- Remcos 如何连接到其 C2 服务器
- 这个 Remcos 提供什么命令来控制受害者的设备
网络钓鱼电子邮件

从图 2 所示的电子邮件内容可以看出,黑客将钓鱼邮件伪装成来自受信任银行的付款通知,并要求收件人打开附有密码保护的 Excel 文件。
Excel 文件导致通过 VBS 和 PowerShell 下载 Remcos
在 Excel 程序中打开附加的 Excel 文档后,它会要求输入密码以查看文档,该密码已在电子邮件中提供。然后它在 Excel 程序中显示该文档,如图 3 所示。由于该文件包含宏代码,它显示一个黄色安全警告栏以警告受害者存在危险。

该文件消息诱使受害者单击“启用内容”按钮以绕过警告并执行恶意宏代码。
该宏有一个名为“Wookbook_Active()”的函数,当它打开时会自动调用。它的任务是将单元格中的 VBS 代码提取到文件“%AppData%\HobYQ.vbs”中,然后执行它。
为了保护 Remcos 有效负载文件,它使用了一种超级复杂的方式来下载它。通过这种方式,它同时执行 VBS 和 PowerShell 脚本代码。
“HobYQ.vbs”运行一段动态拼接的PowerShell代码,从攻击者的服务器下载另一个VBS文件(“flip.vbs”)并运行。接下来,“flip.vbs”继续从服务器下载一个文件(称为“mem.txt”),这是一段编码的VBS代码,稍后将在“flip.vbs”中执行以从服务器下载最终文件同一服务器,称为“faze.jpg”。在图 4 中,它显示了三个下载文件“flip.vbs”、“mem.txt”和“faze.jpg”的捕获流量。

图 4 底部显示了“faze.jpg”的部分响应包。当然,它不是图像文件,而是经过混淆的 PowerShell 代码文件。三个数组变量中定义了三段编码数据,在图 5 中用三个红框进行了简化。“faze.jpg”中携带的PowerShell代码由“flip.vbs”执行。

然后让我在这里解释一下 PowerShell 代码是如何工作的。
$MNB 和 $IRjR 这两个变量的值都是编码的 GZIP 压缩有效载荷(它们以“1F 8B…”开头)。解压后,$MNB 为 .Net Framework Dll 文件,$IRjR 为 Remcos 有效负载文件。
设置为变量“$qgRf”的二进制值是一种称为 tMCfkSD() 的动态解压缩方法。
它调用 tMCfkSD() 将 .Net Dll 从 $MNB 解压缩到 $byUsWxe。最后,它通过调用“Load”将.Net Dll加载到当前的PowerShell执行环境中,并使用“RegAsm.exe”和压缩的Remcos Payload($IRjR)调用“toooyou”类中的函数“Black()”。
.Net Framework Dll 文件执行进程空心化

如图 6 所示,.Net Dll 名为 GC.dll。两个传递的参数显示在“Locals”中。它的代码被混淆了。根据我的分析,它首先从名为lime.dll的资源部分中动态提取了另一个Dll。接下来,它解压缩 Remcos 有效负载,该有效负载将传递给一个名为“k78er0sdfffff.o70sdaf45gfg(System.String, Byte[])”的函数,该函数在调用该函数时来自lime.dll。实际上,此 Dll 用于执行将 Remcos 有效负载注入新创建的“RegAsm.exe”进程的进程空心化。调用函数 (k78er0sdfffff.o70sdaf45gfg()) 后,它会从受害者设备上的以下位置找到“RegAsm.exe”。如果找不到文件,它将退出 PowerShell 而不运行 Remcos。
硬编码的位置列表:
array[<Module>.C1790263187] = "C:\\WINDOWS\\syswow64\\";
array[<Module>.C2710025604] = "C:\\WINDOWS\\system32\\";
array[<Module>.C3326009313] = "C:\\WINDOWS\\";
array[<Module>.C931285936] = "C:\\WINDOWS\\syswow64\\WindowsPowerShell\\v1.0\\";
array[<Module>.const_4] = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\";
array[<Module>.C3873335087] = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\";
在我的测试环境中,它在“C:\Windows\\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe”中有这个文件。
您可能知道,它需要调用几个API来完成进程空心,它们是:带有CREATE_SUSPENDED标志的CreateProcess()、WriteProcessMemory()、GetThreadContext()、SetThreadContext()等。如图 7 所示,即将调用 API CreateProcessA() 从 Lime.dll 创建一个挂起的 RegAsm.exe 进程。

当 Remcos 有效负载被注入并部署到 RegAsm.exe 时,将调用 API ResumeThread() 以使 RegAsm.exe 恢复以在受害者的设备上运行 Remcos RAT。
深入了解 Remcos 有效负载
根据我的分析,Remcos 是用带有模板的 C++ 语言编写的。我们已经捕获的是 2022 年 2 月 10 日发布的最新版本 3.4.0 Pro。我从本节剖析了 Remcos 有效负载文件,以了解它如何控制受害者的设备。
从过去几年的版本分析来看,Remcos 使用 RC4 加密对本地数据和 Remcos 与 C2 服务器之间的流量数据进行加密或解密。从 3.0.0 Pro 版本开始,它已将加密算法更改为 AES-128 位,用于加密或解密流量数据。因此,它现在使用两种加密算法,RC4 用于本地数据,AES 用于此变体中的流量数据。

每个 Remcos 在其 PE 资源部分中都包含一个 RC4 加密配置块,名为“SETTINGS”,如图 8 所示,其中第一个字节“B1”是后面红色框中的 RC4 密钥的大小,其余数据为加密的 Remcos 配置块。
Remcos 做的第一件事是解密配置块,这将在整个 Remcos 生命周期中被引用。它包含但不限于 C2 的服务器信息、Remcos 为攻击者分配的名称以识别受害者、注册表中的 Remcos 子键名称、记录受害者键盘记录器和剪贴板数据的日志文件的名称、许多标志告诉 Remcos 如何启动它受害者设备中的功能,以及用于与 C2 服务器建立连接的身份验证数据。
Remcos 的工作流程非常清晰,它会根据配置块中定义的标志启动许多线程来执行自动启动工作。这包括:
- 将 Remcos 添加到系统注册表中的自动运行组
- 启动看门狗程序(Remcos 的守护程序)
- 从输入设备(麦克风)记录受害者的音频输入
- 在启动时捕获受害者的屏幕截图
- 在受害者的设备上禁用 UAC(用户帐户控制)
- 等等
Remcos 能够不时将受害者的敏感信息记录在日志文件中(文件名来自配置块),如键盘输入(键盘记录器)、系统剪贴板上的数据以及受害者的最顶层程序的标题为此,它需要通过调用 API SetWindowsHookExA() 设置键盘挂钩,并启动一个线程以每 500 微秒检查一次。图 9 显示了设置此类挂钩的 ASM 代码片段。

下面是 Remcos 从我的测试环境中获得的“logs.dat”示例,例如记录日期和时间、最上面的程序标题、受害者的空闲时间和剪贴板数据。

Remcos 工作流程的下一步是根据配置块中的信息连接到其 C2 服务器。
与 C2 服务器通信
Remcos 使用 TLS v1.3 协议与 C2 服务器通信,正如我之前提到的,它在 TLS 握手和身份验证上由它自己实现(不使用 Windows API)。
Remcos 然后从受害者的系统中收集基本信息,并在第一个数据包中将其提交给 C2 服务器。第一个包的包号是4BH。通过AES加密的数据包如下所示。

受害者的基本信息包含在此数据包中。让我们看一下数据包结构。
第一个“24 04 FF 00”是来自解密配置块的数据包魔术ID,随后的dword“A1 02 00 00”(21AH)是后面数据的大小,下一个dword“4B 00 00 00”( 4BH) 是数据包编号。全部剩余数据是收集到的受害者设备的基本信息,包括但不限于:
- Remcos 指定名称“Shiesty”(来自配置块)
- 受害者的用户名和计算机名
- Windows 版本信息,总 RAM (3757629400)(以字节为单位)
- Remcos 版本 (3.4.0 Pro)
- 当前 RegAsm.exe 的完整路径,当前活动程序的标题(受害者正在使用)
- 受害者的空闲时间
- 系统正常运行时间
- 中央处理器信息
- C2服务器主机
- Remcos 有效负载类型(EXE 或 DLL)
所有上述值字段都由分隔符分割 – “7C 1E 1E 1F 7C”(在字符串中显示为“|…|”)。
只要 C2 服务器接收到这个 4BH 数据包,它就会在“连接”子选项卡中显示受害者,如图 12 所示。此后,攻击者只需右键单击该项目(红色框)并选择他们想要的命令。

同时,Remcos 注册了一个回调函数,该函数解析 C2 的命令并进入一个无限循环以等待来自攻击者的 C2 服务器的即将到来的控制命令。
控制命令
从注册的回调函数中,我们了解到这个 Remcos 变种提供了 87 个控制命令,这些命令分为以下几组:
- 系统:屏幕截图、文件管理器、文件搜索、进程管理器等。
- 监控:网络摄像头、麦克风、键盘记录器、屏幕记录器等。
- 网络:代理、下载器、打开网页等。
- 额外:Dll Loader、Logins Cleaner、Audio Player 等。
- Remcos:重新连接、重新启动、显示、更新、关闭、卸载等。
- 心跳包
C2 服务器每 40 秒向 Remcos 发送一个心跳包。一旦 Remcos 连接到 C2 服务器,心跳会确保这个 Remcos 处于活动状态。C2 的命令包格式相同。我以心跳包为例进行说明,如下图:
24 04 FF 00 0C 00 00 00 01 00 00 00 30 7C 1E 1E 1F 7C 32 30
在数据包魔术ID(“24 04 FF 00”)和数据包大小(0x0C)之后,“01 00 00 00”是心跳命令号(0x01),其余是命令数据被“7C 1E 1E 1F 7C”分割是 30(ASCII “0”)和 32 30(ASCII “20”)。Remcos 然后获取当前活动窗口的标题以及时间值,并将它们发送到包号 4CH 中的 C2 服务器。
以下是控制命令列表:
Name | C&C 编号 | 描述 |
心跳 | 01H | 心跳包。 |
屏幕截图 | 10H | 在远程桌面上控制受害者的设备。 |
文件管理器 | 98H | 受害者设备上的管理器文件系统。 |
文件搜索 | 8FH | 在受害者的设备上搜索文件。 |
流程管理器 | 06H | 管理器运行过程。 |
服务管理 | 34H | 管理受害者的系统服务。 |
注册表编辑器 | 2FH | 查看、编辑受害者的系统注册表。 |
已安装程序 | 03H | 列出所有已安装的软件。 |
窗口管理器 | 08H | 打开一个任务管理器类似的界面。 |
剪贴板管理器 | 28H | 查看、设置和清空受害者的系统剪贴板。 |
命令行 | 0EH | 使用命令启动 shell (cmd.exe)。 |
执行命令 | 0DH | 在受害者的设备中执行命令,例如记事本。 |
远程脚本 | 2EH | 在受害者的设备上执行 JS、VBS 和 Batch。 |
设置壁纸 | 92H | 用图片设置受害者的桌面壁纸。 |
电源管理器 | 27H | 注销、睡眠、休眠、关机和重新启动。 |
摄像头 | 1BH | 控制受害者的摄像头工作 |
麦克风 | 1DH | 打开受害者的音频输入设备,例如麦克风。 |
键盘记录器 | 13H | 启动键盘记录器。 |
屏幕记录器 | 10H | 启动屏幕记录器。 |
浏览器历史 | 18H | 清除浏览器的历史记录。 |
代理 | 32H | 将代理设置为受害者的设备。 |
打开网页 | 0FH | 使用受害者的默认浏览器打开一个 URL。 |
聊天 | 30H | 弹出聊天框与受害者聊天。 |
消息框 | 26H | 向受害者弹出消息。 |
下载器 | B2H | 在受害者的设备上下载并执行文件。 |
DLL加载器 | 2CH | 在受害者的设备上执行一个 Dll 模块。 |
音频播放器 | A3H | 向受害者播放音频声音。 |
登录清理器 | 18H | 清除浏览器的登录名和 cookie。 |
更新 | 24H | 更新 Remcos。 |
卸载 | 22H | 从受害者的设备上卸载 Remcos。 |
关闭 | 21H | 杀死当前正在运行的 Remcos。 |
重新开始 | 23H | 重新启动 Remcos。 |
提权 | 27H | 提升 Remcos 的权限。 |
除了列出的控制命令外,Remcos 还有很多子命令来支持子连接中的一些控制命令,例如服务管理器命令 34H 带有子命令:03H 停止服务,04H 暂停服务,01H 重新启动一项服务。
结论
在这篇分析博客中,我解释了网络钓鱼电子邮件如何将带有恶意宏的 Excel 文档传送到受害者的设备中。
接下来,我们介绍了它如何执行多个 VBS 和 Powershell 脚本来下载 Remcos 有效负载,以及 Remcos 有效负载如何由 .Net Dll 通过 Process Hollowing 部署到“RegAsm.exe”进程中。
然后,我根据其代码剖析了Remcos的工作流程,以及如何从PE资源部分解密配置块。我还解释了 Remcos 如何建立与其 C2 服务器的连接。
最后,通过几个例子,我详细阐述了明文控制和命令包的结构,以及Remcos能够使用哪些命令来控制受害者的设备和控制命令列表。
Fortinet 保护
Fortinet 客户已经通过 FortiGuard 的 Web 过滤、防病毒、FortiMail、FortiClient、FortiEDR 服务、IPS 服务和 CDR(内容解除和重建)服务免受这种恶意软件的侵害,如下所示:
所有相关的 URL 都被FortiGuard Web Filtering 服务评为“恶意网站”。
捕获的 Excel 样本和下载的 Remcos 有效负载文件被检测为“ VBA/Remcos.REM!tr ”和“ W32/Rescoms.M!tr ”,并被 FortiGuard 防病毒服务阻止。
FortiEDR 根据其行为将 Excel 文件和 Remcos 有效负载文件检测为恶意文件。
Fortinet 还发布了 IPS 签名“Remcos.Botnet”来检测和阻止 Remcos 的 C&C 流量,以保护我们的客户。
FortiGuard 内容、解除和重建 (CDR) 可以通过启用以下选项来保护用户免受这种攻击:
- 启用/禁用 Microsoft Office 文档中链接对象的剥离。
除了这些保护之外,Fortinet 还提供多种解决方案,旨在帮助培训用户了解和检测网络钓鱼威胁:
FortiPhish网络钓鱼模拟服务使用真实世界的模拟来帮助组织测试用户对网络钓鱼威胁的意识和警惕性,并在用户遇到有针对性的网络钓鱼攻击时培训和加强适当的做法。
除了这些保护措施,我们建议组织也让他们的最终用户接受我们的免费 NSE 培训:NSE 1 – 信息安全意识。它包括一个有关 Internet 威胁的模块,旨在帮助最终用户了解如何识别和保护自己免受各种类型的网络钓鱼攻击。
侵害指标(IOCs)
网址:
hxxp://209[.]127[.]19[.]101/flip.vbs
hxxp://209[.]127[.]19[.]101/mem.txt
hxxp://209[.]127[.]19[.]101/faze.jpg
shiestynerd[.]dvrlists[.]com:10174
mimi44[.]ddns[.]net:2405
harveyautos110[.]ddns[.]net:2404
harveyautos111[.]hopto[.]org:2404
harveyautos112[.]ddns[.]net:2404
harvey205[.]camdvr[.]org:2404
harvey206[.]casacam[.]net:2404
harvey207[.]accesscam[.]org:2404
23[.]226[.]128[.]197:2404
achimumuazi[.]hopto[.]org:2311
xhangzhi[.]duckdns[.]org:2404
参与活动的样本sha256
[excel文档样本]
FBB0575DFD7C1CFE48FB3AA895FBE6C8A554F06899A7152D04CFC39D1D4744AD
[捕获的 Remcos 样本]
8F6DD0DB9E799393A61D6C9CF6495C164E1B13CB8E6B153B32359D5F07E793D2
DA609D3211D60D5B11FEAEAA717834CBE86E18103A1ED4FC09C2EE3E1CFF9442
737E11913EFB64ACCF1B88532C7CE8606676684D8364DDD027926F9FFC6ECFFB
B263876EBC01B310A8BFC58477523981184EB7E8F2DC955F0CF8E62124EB679A
2C8B78FC6C4FE463DAC9D39FDE2871F1BB2605453BC0F2D57C7549CF5D07AA86
A1A1395D0602A473FCC81BA7D1D90C3FB154321D1721E0069722B902B1057CB0
6B816D84ACCC3E1EBCE3EF55B64B0C5E0485228790DF903E68466690E58B5009
转载请注明出处及链接