Cyril FrançoisSamir Bousseaden

剖析 REMCOS RAT:对 2024 年广泛传播的恶意软件的深入分析,第三部分

第三部分:配置和命令

阅读时长 12 分钟恶意软件分析
Dissecting REMCOS RAT: An in-depth analysis of a widespread 2024 malware, Part Three

在本系列多篇文章的前几篇文章中,Elastic 安全实验室团队的恶意软件研究人员分析了 REMCOS 的执行流程,详细介绍了其记录功能及其与 C2 的通信。在本文中,您将了解更多关于 REMCOS 配置结构及其 C2 命令的信息。

配置

在本节中,我们将全面概述恶意软件的配置字段。

配置表

研究人员成功恢复了大约 80% 的配置结构(56 个字段中的 45 个)。我们在下表中提供了详细的配置信息

索引名称描述
0x0c2_list包含“域:端口:启用_tls”的字符串,用“\x1e”字符分隔
0x1botnet僵尸网络名称
0x2connect_interval尝试连接到 C2 的间隔(以秒为单位)
0x3enable_install_flag在主机上安装 REMCOS
0x4enable_hkcu_run_persistence_flag启用注册表中的持久性设置
0x5enable_hklm_run_persistence_flag启用注册表中的持久性设置
0x7keylogger_maximum_file_size轮换前键盘记录数据的最大大小
0x8enable_hklm_policies_explorer_run_flag启用注册表中的持久性设置
0x9install_parent_directory安装文件夹的父目录。映射到硬编码路径的整数
0xAinstall_filename安装后的 REMCOS 二进制文件的名称
0xCenable_persistence_directory_and_binary_hidding_flag启用超级隐藏安装目录和二进制文件,并将它们设置为只读
0xDenable_process_injection_flag启用在另一个进程中注入运行恶意软件
0xEmutex用作恶意软件互斥锁和注册表项的字符串
0xFkeylogger_mode设置键盘记录功能。键盘记录模式,0 = 禁用,1 = 键盘记录所有内容,2 = 键盘记录特定窗口
0x10keylogger_parent_directory键盘记录文件夹的父目录。映射到硬编码路径的整数
0x11keylogger_filename键盘记录数据的文件名
0x12enable_keylogger_file_encryption_flag启用键盘记录数据文件的 RC4 加密
0x13enable_keylogger_file_hidding_flag启用键盘记录数据文件的超级隐藏
0x14enable_screenshot_flag启用屏幕录制功能
0x15screenshot_interval_in_minutes捕获每个屏幕截图的时间间隔(分钟)
0x16enable_screenshot_specific_window_names_flag为特定窗口名称启用屏幕录制
0x17screenshot_specific_window_names包含用“;”字符分隔的窗口名称的字符串
0x18screenshot_specific_window_names_interval_in_seconds当在当前前台窗口标题中找到特定窗口名称时,捕获每个屏幕截图的时间间隔(秒)
0x19screenshot_parent_directory屏幕截图文件夹的父目录。映射到硬编码路径的整数
0x1Ascreenshot_folder屏幕截图文件夹的名称
0x1Benable_screenshot_encryption_flag启用屏幕截图加密
0x23enable_audio_recording_flag启用音频录制功能
0x24audio_recording_duration_in_minutes每次音频录制的持续时间(秒)
0x25audio_record_parent_directory音频录制文件夹的父目录。映射到硬编码路径的整数
0x26audio_record_folder音频录制文件夹的名称
0x27disable_uac_flag在注册表中禁用 UAC
0x28logging_mode设置日志模式:0 = 禁用,1 = 在托盘中最小化,2 = 控制台日志记录
0x29connect_delay_in_second首次尝试连接到 C2 之前的延迟(以秒为单位)
0x2Akeylogger_specific_window_names包含用“;”字符分隔的窗口名称的字符串
0x2Benable_browser_cleaning_on_startup_flag在 REMCOS 启动时启用清除 Web 浏览器的 Cookie 和登录信息
0x2Cenable_browser_cleaning_only_for_the_first_run_flag仅在 Remcos 首次运行时启用 Web 浏览器清除
0x2Dbrowser_cleaning_sleep_time_in_minutes清除 Web 浏览器之前的休眠时间(分钟)
0x2Eenable_uac_bypass_flag启用 UAC 绕过功能
0x30install_directory安装目录的名称
0x31keylogger_root_directory键盘记录目录的名称
0x32enable_watchdog_flag启用看门狗功能
0x34license许可证序列号
0x35enable_screenshot_mouse_drawing_flag启用在每个屏幕截图上绘制鼠标
0x36tls_raw_certificate启用 tls 的 C2 通信时使用的原始格式证书
0x37tls_key证书的密钥
0x38tls_raw_peer_certificate原始格式的 C2 公共证书

整数到路径映射

REMCOS 为其某些“文件夹”字段使用自定义映射,而不是用户提供的字符串。

我们在下面提供了映射的详细信息

路径
0%Temp%
1当前恶意软件目录
2%SystemDrive%
3%WinDir%
4%WinDir%//SysWOW64
5%ProgramFiles%
6%AppData%
7%UserProfile%
8%ProgramData%

配置提取,内部视角

我们喜欢构建工具,并希望借此机会深入了解我们为帮助分析 REMCOS 等恶意软件系列而开发的工具类型。

我们开发了一个名为“conf-tool”的配置提取器,它不仅可以从特定样本中提取和解包配置,还可以通过修改重新打包配置。

首先,我们解包配置。

配置以 JSON 文档的形式保存到磁盘,每个字段都映射到其对应的类型。

我们将列表中的所有域替换为我们的 C2 模拟器的 IP 地址,以启动与样本的通信。

我们还启用控制台的日志记录模式 (2)

完成后,重新打包所有内容

瞧,我们有了控制台,样本尝试连接到我们的模拟器!

我们正在发布一个 REMCOS 恶意软件配置提取器,其中包括其中的一些功能。

C2 命令

在本节中,我们将列出我们已逆向的所有可由命令和控制 (C2) 执行的命令。此外,我们还提供精选命令子集的其他详细信息。

命令表

研究人员恢复了大约 95% 的命令(78 个中的 74 个)。我们在下表中提供了有关命令的信息

功能名称
0x1心跳
0x2禁用保持活动
0x3列出已安装的应用程序
0x6列出正在运行的进程
0x7终止进程
0x8列出进程窗口
0x9关闭窗口
0xA最大化显示窗口
0xB恢复显示窗口
0xC通过窗口句柄和列出进程窗口来终止进程
0xD执行 Shell 命令
0xE启动管道 Shell
0xF执行程序
0x10可能上传屏幕截图
0x11获取主机地理位置
0x12获取离线键盘记录器信息
0x13启动在线键盘记录器
0x14停止在线键盘记录器
0x15可能设置键盘记录器名称并上传数据
0x16上传键盘记录器数据
0x17删除键盘记录器数据,然后在两者之间有任何新内容时上传
0x18清除浏览器 Cookie 和登录信息
0x1B启动网络摄像头模块
0x1C停止网络摄像头模块
0x1D启用音频捕获
0x1E禁用音频捕获
0x1F窃取密码
0x20删除文件
0x21终止自身和看门狗
0x22卸载
0x23重启
0x24从 URL 更新
0x25从 C2 更新
0x26消息框
0x27关闭或休眠主机
0x28上传剪贴板数据
0x29将剪贴板设置为特定数据
0x2A清空剪贴板,然后在两者之间有任何内容时上传
0x2B从 C2 加载 DLL
0x2C从 URL 加载 DLL
0x2D启动 FunFunc 模块
0x2F编辑注册表
0x30启动聊天模块
0x31设置僵尸网络名称
0x32启动代理模块
0x34管理服务
0x8F搜索文件
0x92从 C2 设置壁纸
0x94设置窗口文本,然后列出进程窗口
0x97从 DXDiag 上传数据
0x98文件管理器
0x99列出上传的屏幕截图
0x9A使用 Nirsoft 转储浏览器历史记录
0x9E触发警报 Wav
0x9F启用 C2 断开连接时的警报
0xA0禁用 C2 断开连接时的警报
0xA2从 C2 下载警报 Wav 并选择播放
0xA3音频播放器
0xAB提升进程权限
0xAC启用日志控制台
0xAD显示窗口
0xAE隐藏窗口
0xB2从C2或URL执行Shell或注入PE
0xC5注册表设置高亮值
0xC6上传浏览器Cookie和密码
0xC8暂停进程
0xC9恢复进程
0xCA读取文件
0xCB写入文件
0xCC启动离线键盘记录器
0xCD停止离线键盘记录器
0xCE列出进程TCP和UDP表

列出已安装应用程序命令

要列出已安装的应用程序,REMCOS 会迭代 Software\Microsoft\Windows\CurrentVersion\Uninstall 注册表项。对于每个子项,它会查询以下值

  • 显示名称
  • 发布者
  • 显示版本
  • 安装位置
  • 安装日期
  • 卸载字符串

执行 Shell 命令

Shell 命令使用 ShellExecuteW API 执行,参数为 cmd.exe /C {命令}

获取主机地理位置命令

为了获取主机地理位置,REMCOS 使用 geoplugin.net API 并直接上传返回的 JSON 数据。

启动在线键盘记录器命令

在线键盘记录器采用与离线版本相同的键盘记录器结构。但是,数据不是写入磁盘,而是实时发送到 C2。

启动网络摄像头模块命令

REMCOS 使用外部模块进行网络摄像头录制。该模块是一个 DLL,必须从其 C2 接收并加载,作为命令参数的一部分。

加载模块后,您可以发送子命令来捕获和上传网络摄像头图片。

窃取密码命令

密码窃取很可能使用 3 个不同的 Nirsoft 二进制文件执行,由 "/sext" 参数标识。这些二进制文件从 C2 接收并注入到新创建的进程中。这两个元素都是命令参数的一部分。

/sext 参数指示软件将输出写入文件,每个输出文件名都是随机生成的并存储在恶意软件安装文件夹中。读取它们的内容并上传到 C2 后,它们将被删除。

还可以使用一个额外的 DLL,该 DLL 具有 FoxMailRecovery 导出。像其他二进制文件一样,该 DLL 作为命令参数的一部分从 C2 接收。顾名思义,该 DLL 很可能用于转储 FoxMail 数据

卸载命令

卸载命令将删除主机上所有与 Remcos 相关的文件和持久性注册表项。

首先,它会终止看门狗进程。

然后,它会删除所有录制文件(键盘记录、屏幕截图和音频录制)。

然后,它会删除其注册表持久性项。

最后,它通过在 %TEMP% 文件夹中创建并执行一个具有随机文件名的 Visual Basic 脚本来删除其安装文件,然后终止其进程。

以下是带有注释的生成脚本。

' Continue execution even if an error occurs
On Error Resume Next

' Create a FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")

' Loop while the specified file exists
while fso.FileExists("C:\Users\Cyril\Desktop\corpus\0af76f2897158bf752b5ee258053215a6de198e8910458c02282c2d4d284add5.exe")

' Delete the specified file
fso.DeleteFile "C:\Users\Cyril\Desktop\corpus\0af76f2897158bf752b5ee258053215a6de198e8910458c02282c2d4d284add5.exe"

' End of the loop
wend

' Delete the script itself
fso.DeleteFile(Wscript.ScriptFullName)

重启命令

重启命令会终止看门狗进程,并使用生成的 Visual Basic 脚本重启 REMCOS 二进制文件。

以下是带有注释的生成脚本。

' Create a WScript.Shell object and run a command in the command prompt
' The command runs the specified .exe file
' The "0" argument means the command prompt window will not be displayed
CreateObject("WScript.Shell").Run "cmd /c ""C:\Users\Cyril\Desktop\corpus\0af76f2897158bf752b5ee258053215a6de198e8910458c02282c2d4d284add5.exe""", 0

' Create a FileSystemObject and delete the script itself
CreateObject("Scripting.FileSystemObject").DeleteFile(Wscript.ScriptFullName)

使用 Nirsoft 转储浏览器历史记录命令

与窃取密码命令类似,使用 Nirsoft 转储浏览器历史记录命令可能会使用另一个从 C2 接收的 Nirsoft 二进制文件,作为命令参数的一部分来窃取浏览器历史记录。同样,我们通过 /stext 参数来识别该二进制文件属于 Nirsoft。

提升进程权限命令

如果该进程尚未以管理员权限运行,提升进程权限命令将设置 HKCU/SOFTWARE/{mutex}/elev 注册表项,并使用与重启命令相同的方法重启恶意软件。

重启后,REMCOS 会在其初始化阶段检查 elev 值。如果该值存在,它将删除该值并利用其 UAC 绕过功能来提升其权限。

这是第三篇文章的结尾。在最后一部分中,我们将介绍使用 Elastic 技术检测和捕获 REMCOS 的策略。