LoopDNS: 一起恶意钓鱼邮件调查

LoopDNS: 一起恶意钓鱼邮件调查

LoopDNS安全团队

2026 年 7 月 23 日,Loopdns 官方邮箱收到一封采购询价邮件。

邮件内容


发件人自称 Samantha Clarke,要求我们查看附件中的物料并报价。正文附有采购单号、南非地址、VAT 号和联系电话,附件名则像一张经过压缩的 WhatsApp 图片:

IMG-20260723-WA0007.JPG.BZ2

邮件通过了 SPF、DKIM 和 DMARC 验证,传输过程使用 TLS 1.3。单看认证结果,它与正常企业邮件并无明显区别。

附件实际既不是图片,也不是 BZip2 文件。

对邮件头、发件基础设施和附件逐层还原后,我们确认这是一条完整的多阶段 Remcos RAT 投递链:

RAR5 伪装附件
  → JScript
  → 用户环境变量
  → WMI 隐藏 PowerShell
  → 伪装图片中的 .NET Loader
  → 反射式内存加载
  → 第二张伪装图片
  → calc.exe 进程空洞
  → Remcos RAT
  → kesmn[.]com:2404

邮件并非通过任意服务器伪造 From 地址,而是由发件域授权的邮件服务器签名并投递。结合域名注册记录、历史公开资料及投递当天的基础设施变更,我们判断该域名很可能在过期后被重新注册,并被用于恶意邮件投递。


一、调查邮件伪装


邮件正文采用了典型的 RFQ(Request for Quote,询价)模板:

Good day loopdns-official,

Please see the attached items and provide quotation as listed.

Include the following details:

Order Number: PO79611 for this enquiry.

Kind regards / Vriendelike groete,
Samantha Clarke

正文没有列出具体商品,物料信息全部留在附件中,意在诱导收件人打开文件。


邮件还叠加了多种常见的商业邮件伪装:

  • 主题以 Re: 开头,试图伪装成已有往来;
  • 称呼直接使用 Loopdns 邮箱的本地部分;
  • 使用英语与 Afrikaans 双语落款;
  • 提供南非地址、+27 电话和 VAT 号;
  • 附件名模拟 WhatsApp 图片命名方式;
  • 使用采购单号 PO79611 增加业务真实感。

但是邮件头中没有 In-Reply-To 或 References。

邮件所给 VAT 号共有 11 位,而南非税务局 SARS 公布的 VAT 注册号格式为 10 位。


邮件头记录如下:

spf=pass
dkim=pass
dmarc=pass

具体关系如下:

RFC5321 Mail From / Return-Path 对应 trivantaholdings[.]com

RFC5322 From 对应 trivantaholdings[.]com

SPF Pass trivantaholdings[.]com

DKIM Pass ,2048 位 RSA d=trivantaholdings[.]com

DMARC Pass header.from=trivantaholdings[.]com

DMARC策略 p=quarantine _dmarc.trivantaholdings[.]com


发件域的 SPF 配置为:

v=spf1 mx -all

邮件来自该域自己的 MX:

box.trivantaholdings[.]com
23.254.142.153

DKIM 使用 mail selector。接收方验证了 2048 位 RSA 签名,且 d= 与 From 域一致。


我们通过查询历史变动以及注册记录发现邮件投递时,该域名当前注册记录仅存在约 21 天,且攻击当天的部署时间线如下:

05:58:31 UTC  域名 RDAP 状态发生变更
06:55:15 UTC  根域 Let's Encrypt 证书生效
06:55:31 UTC  box 邮件主机证书生效
07:36:45 UTC  Mail-in-a-Box 默认网页更新
09:45:28 UTC  恶意邮件生成并提交
09:45:30 UTC  DKIM 签名
11:17:21 UTC  收信人接收

DNS、MX、网站和权威名称服务器都集中在同一台 VPS:

23.254.142.153
AS54290
Hostwinds


Loopdns 在公开资料中发现,2019 年 7 月 26 日的《Zimbabwean Government Gazette Extraordinary》注册供应商名录曾列出:

Trivanta Holdings (Private) Limited
地点:Harare
电话:+263...
邮箱:...@trivantaholdings.com

该记录表明,trivantaholdings.com 在 2019 年曾作为一家津巴布韦企业的联系域名使用

综合现有证据,我们判断:

历史企业域名在过期或删除后,被新的控制者重新注册,并利用原有企业名称及可能残留的域名信誉进行恶意投递。


二、调查邮件附件

附件名称:

IMG-20260723-WA0007.JPG.BZ2

文件大小为 2,702 字节,文件头为:

52 61 72 21 1A 07 01
R  a  r  ! ...

这是 RAR5 的文件特征,真正的 BZip2 文件应以 BZh 开头,JPEG 则通常以 FF D8 FF 开头。

RAR 中只有一个文件:

IMG-20260723-WA0007.JPG.js

这形成了两层视觉欺骗:

外层:.JPG.BZ2
内层:.JPG.js

如果 Windows 隐藏已知文件扩展名,用户可能只看到:

IMG-20260723-WA0007.JPG

双击后实际运行的是 Windows Script Host。


我们对于解压出的 JScript 进行了分析

SHA-256 7e090830c8c84153d099f02048e0591366d8a3c1c027acae9db2fe38a30150d9

样本拼接一个特殊 Unicode 分隔符,且反复重复,但是这些重复代码不参与主要执行流程,作用包括:

  • 膨胀文件;
  • 改变哈希;
  • 干扰文本扫描;
  • 破坏简单字符串特征;
  • 增加人工审查成本;
  • 利用 Unicode 兼容性差异干扰工具。

我们在剔除重复文本后,执行逻辑集中在约 30 行内。


三、邮件附件逆向分析

JScript 的实际执行流程为:

1. 移除 Unicode 分隔符;
2. 恢复 PowerShell 脚本;
3. 将脚本写入用户环境变量 leafroll;
4. 通过 WMI 创建隐藏 PowerShell;
5. PowerShell 从环境变量读取并执行代码。

对应命令:

powershell.exe -NoProfile -Command "Invoke-Expression $env:leafroll"

JScript 使用:

WScript.Shell.Environment("User")

将代码写入用户级环境变量,通常会在注册表留下:

HKCU\Environment
Value name: leafroll

随后它连接:

winmgmts:\\.\root\cimv2

创建:

Win32_ProcessStartup
ShowWindow = 0
Win32_Process.Create

对应的进程关系通常表现为:

wscript.exe / cscript.exe
  → WMI
  → powershell.exe


PowerShell 解码出第一阶段地址:

hxxps://deliverymailreport[.]co[.]za/MSI_214135.png

调查时,该对象返回 HTTP 200:

Content-Type: image/png
Content-Length: 2147246
Last-Modified: 2026-07-23 04:41:00 UTC

文件实际是 JPEG,结构如下:

结构 偏移

JPEG EOI FF D9 1,385,381

起始标记 IN- 1,385,383

结束标记 -in1 2,147,242


在正常 JPEG 结束后,文件还附加了约 761 KB 数据。

PowerShell 的恢复算法为:

取出 IN- 与 -in1 之间的字符串
  → 将 # 替换为 A
  → 反转整个字符串
  → Base64 解码

最终得到 571,392 字节的 .NET DLL:

SHA-256:
e906fac133e0fb937737d8f1b1567e8930b1250b88991e0ab2e6a1ffb30510e8

PowerShell 随后调用:

AppDomain.CurrentDomain.Load(byte[])

将 DLL 直接载入当前 AppDomain。


解码出的 .NET 程序集宣称自己是:

Microsoft.Win32.TaskScheduler
Version 2.8.20.0

程序集保留了大量 TaskScheduler 库代码和相关元数据,同时存在以下异常:

  • 没有 Authenticode 签名;
  • 没有强名称公钥;
  • 包含混淆恶意命名空间;
  • 内置下载和进程空洞代码;
  • 包含 AES 加密的下一阶段配置。

恶意入口位于混淆命名空间:

OtnmpxnddVnptbN.mpxnddVn

样本还使用了类似 Babel/BabelVM 的保护方式,包括动态字符串表、代理委托和运行时解析器。

反分析字符串包括:

AssemblyServer
SimpleAssemblyExplorer
babelvm
smoketest


.NET Loader 中存在字段:

ChaveSecretaGlobal

ChaveSecretaGlobal 在葡萄牙语中意为“全局秘密密钥”。

其值为:

tQaCQYKIo1FdSsme

Loader 将该 16 字节字符串与 00 到 0F 的 16 个连续字节拼接,形成 32 字节 AES-256 密钥。

配置加密格式:

Base64Decode
  → 前 16 字节作为 IV
  → AES-256-CBC
  → PKCS#7
  → UTF-8 明文

19 个参数全部恢复后,最关键的部分为:

hxxps://deliverymailreport[.]co[.]za/img_214229.png
C:\Users\Public\Downloads\
calc
t5udkgosPX
7YR666ojms

calc 是后续进程空洞的宿主进程配置。


第二阶段地址:

hxxps://deliverymailreport[.]co[.]za/img_214229.png

调查时,该地址同样返回 HTTP 200,响应头标注:

Content-Type: image/png
Content-Length: 2984538

文件实际仍是 JPEG。

JPEG 的 EXIF 中带有:

Adobe Photoshop CC 2019
2022:05:05 11:01:46

关键偏移如下:

结构 偏移

最终 JPEG EOI 2,069,307

INICIO 2,069,309

最终 FIM 2,984,535


Loader 使用 LastIndexOf("FIM"),避免 Base64 中间自然出现相同字母组合时提前截断。

恢复算法:

取出 INICIO 与最后一个 FIM 之间的字符串
  → 将 ### 替换为 A
  → 反转字符串
  → Base64 解码

最终得到一个 525,312 字节、未签名的 32 位原生 Windows PE:

SHA-256:
4ccd1c3bf61ba55502624f95924672ca448b829e17e4ac7ad2a46d442bb716dd


.NET Loader 同时包含 x86 和 x64 PE 加载路径。

它读取 Optional Header Magic:

0x10B → PE32 / x86
0x20B → PE32+ / x64

最终载荷是 0x10B,因此进入 x86 路径。

静态还原出的空洞注入过程包括:

CreateProcess 创建 suspended 宿主进程
  → 读取目标 PEB 和原映像信息
  → 在远程进程中分配内存
  → WriteProcessMemory 写入 PE 头
  → 写入各节区
  → GetThreadContext
  → 修改入口点
  → SetThreadContext
  → ResumeThread

宿主参数是:

calc

最终木马被写入并运行在空洞化的 calc.exe 中。


四、最终载荷确定为 Remcos


最终 PE 的导入表包含完整的远控和监控能力。

键盘与窗口:

SetWindowsHookExA
GetKeyboardState
ToUnicodeEx
GetForegroundWindow
GetWindowTextW

剪贴板:

OpenClipboard
GetClipboardData
SetClipboardData

屏幕:

BitBlt
CreateCompatibleBitmap
GetDIBits
GdipSaveImageToStream

音频:

waveInOpen
waveInStart
waveInAddBuffer
mciSendString

进程注入:

OpenProcess
ReadProcessMemory
WriteProcessMemory
GetThreadContext
SetThreadContext
ResumeThread

网络:

socket
connect
send
recv
getaddrinfo
InternetOpenUrlW
URLDownloadToFileW

最终载荷包含名为 SETTINGS 的 RT_RCDATA 资源。其结构为:

第 1 字节:RC4 密钥长度,49
接下来 49 字节:RC4 密钥
剩余内容:RC4 加密的 Remcos 配置

解密后的关键配置如下:

  • C2:kesmn[.]com:2404
  • C2 配置口令:1
  • 客户端名称:RemoteHost
  • 互斥体:Rmc-JX5IHY
  • 复制文件名:remcos.exe
  • 键盘日志文件:logs.dat
  • 截图目录:Screenshots
  • 录音目录:MicRecords


配置中:

  • 全局 Install flag 为关闭;
  • HKCU Run 配置位为开启;
  • HKLM Run 配置位为开启;
  • 默认自动键盘记录为关闭;
  • 默认自动截图为关闭。

该样本配置了 HKCU、HKLM Run 相关参数,但全局 Install flag 关闭。


五、公开安全信息验证

Triage 在 2026 年 7 月 10 日已经收录完全相同的 SHA-256,并给出 10/10 评分以及:

Remcos
RAT
Spyware
Stealer
Collection
Discovery

等标签。


同一载荷至少在 Loopdns 收到邮件前约两周已经出现。


此外,Joe Sandbox 对另一条恶意脚本链的动态分析也确认使用:

kesmn[.]com:2404
RemoteHost
remcos.exe
logs.dat
Screenshots
MicRecords

并识别出 Remcos 特征通信。


六、攻击基础设施

载荷托管

deliverymailreport[.]co[.]za
调查时 IP:169.239.181.174

路径:

hxxps://deliverymailreport[.]co[.]za/MSI_214135.png
hxxps://deliverymailreport[.]co[.]za/img_214229.png

调查时,两个文件仍可访问。

urlscan 的历史记录也将该域映射到 169.239.181.174,并显示该域在 2026 年 5 月扫描时仍非常新。

Remcos C2

kesmn[.]com
TCP/2404
调查时 IP:46.151.182.181

邮件投递

trivantaholdings[.]com
box.trivantaholdings[.]com
23.254.142.153
AS54290 / Hostwinds

IOC如下:

文件哈希

  • 原始附件:cf211b8f7ce335b7e33ffc50feb40e6bc01516215d0688e2dd7afca09c8c3ca9
  • JScript:7e090830c8c84153d099f02048e0591366d8a3c1c027acae9db2fe38a30150d9
  • 第一伪装图片:b9af942a465894f6cc114e6bb9c6c6b6bd460322f8e05b4d19a7bf304bfaceb7
  • .NET Loader:e906fac133e0fb937737d8f1b1567e8930b1250b88991e0ab2e6a1ffb30510e8
  • 第二伪装图片:eb7ca505308302d124c619092349b64ee1f85f78ee9e9c16c7a0b18ff6830d64
  • 最终 Remcos:4ccd1c3bf61ba55502624f95924672ca448b829e17e4ac7ad2a46d442bb716dd

域名、IP 与端口

  • 载荷托管域名:deliverymailreport[.]co[.]za
  • 载荷托管 IP:169.239.181.174
  • C2 域名:kesmn[.]com
  • C2 IP:46.151.182.181
  • C2 端口:TCP/2404
  • 发件域名:trivantaholdings[.]com
  • 邮件主机:box.trivantaholdings[.]com
  • 邮件服务器 IP:23.254.142.153

URL

  • hxxps://deliverymailreport[.]co[.]za/MSI_214135.png
  • hxxps://deliverymailreport[.]co[.]za/img_214229.png

主机痕迹

  • 用户环境变量:HKCU\Environment\leafroll
  • 互斥体:Rmc-JX5IHY
  • 复制文件名:remcos.exe
  • 键盘日志文件:logs.dat
  • 截图目录:Screenshots
  • 录音目录:MicRecords
  • 配置标识:0FB37E842E838B6DF10173B588109A29


Report Page