约 9 分钟

RuntimeHost.exe 恶意软件深度逆向分析报告

伪装成微软系统组件的高危 .NET 木马:ConfuserEx 混淆对抗、RunPE 进程镂空、挖矿与多类凭据窃取,含 C2 基础设施还原与 IOC 处置建议。

威胁等级:高危 | 分析日期:2026-09-02 | 静态分析,未执行样本

一句话结论RuntimeHost.exe 伪装成微软系统组件,实为 ConfuserEx 高强度混淆的多功能 .NET 木马——集 RunPE 加载器 + 挖矿 + 多类凭据窃取 + 多重持久化 于一身。

算法
SHA2569d68677db4dcd4ea767b19ac65208c1adc63ca049d0fca3769d79672b93734f4
MD5b75726631336ab42feddb8b80b20bc15
文件大小1,197,112 字节

分析方式:静态侦查 + PE 元数据分析 + ILSpy 反编译 + 补丁真实类型构造器 + 真实 .NET 运行时受控模拟。所有结论均来自代码级证据与受控沙箱解密结果。

一、样本总览

样本是 PE32 可执行程序(纯 .NET 托管程序集,仅导入 mscoree.dll)。PE 头显示 GUI 子系统、时间戳被伪造指向未来、含数字签名目录但实际未签名。

程序集元数据完整伪装为微软产品,但内部文件名 SimpleRunPE.exe 直接暴露了它的 RunPE 加载器本质。

项目分析结论
文件名RuntimeHost.exe伪装系统缓存进程名
伪装身份Windows System Cache Manager社会工程伪装
伪冒公司Microsoft Corporation伪造微软元数据
程序集内部名SimpleRunPE.exe暴露 RunPE 加载器本质(关键)
文件类型PE32 / .NET 托管程序集仅导入 mscoree.dll
Subsystem / 时间戳GUI(2) / 0xC8883CB6(伪造)指向未来,反取证
数字签名含目录但实际未签名伪装签名
混淆框架ConfuserEx(ConfusedByAttribute 确认)高强度混淆
威胁分类加载器 + 挖矿 + 窃密 + 持久化高危

同家族变体已被威胁情报收录,安装路径 C:\ProgramData\Microsoft\Windows\Caches\*\RuntimeHost.exe,与本次样本驻留路径一致。

二、伪装与规避技术

2.1 社会工程伪装

  • 伪造微软产品元数据:Product =「Windows System Cache Manager」、Company =「Microsoft Corporation」
  • 运行时复制为 RuntimeHost.exe 并置于系统缓存目录,与合法进程 RuntimeBroker.exe 视觉混淆
  • 目的:让管理员和普通用户误判为合法系统组件

2.2 混淆层(ConfuserEx)

  • 标识符混淆:全部类型/方法名替换为零宽 Unicode 字符(\u200B~\u206F),阻断静态字符串与符号识别
  • 控制流扁平化.cctor 改写成 2492 条指令的 switch 状态机(211 个分支)
  • 字符串加密:URL、C2、文件名等全部经泛型解密器 <Module>::<string>(int) 加密,反编译只看到整数键
  • 元数据流名随机化:CLI 元数据流名(如 #US)被改写为随机字节
  • 反篡改Environment.FailFast 完整性校验,程序集被篡改立即终止进程

三、恶意行为(反编译代码级证据)

图 1:RuntimeHost.exe 恶意行为总览

3.1 RunPE 进程镂空加载器(核心)

调用链:CreateProcess(挂起)WriteProcessMemory(写入载荷)SetThreadContextResumeThread,并包含 CreateRemoteThread 远程线程注入。

程序主动开启 SeDebugPrivilege 提权以获得跨进程写入能力。这正是内部名 SimpleRunPE 的直接印证——样本可作为内存加载器,投放并执行任意下一阶段载荷。

3.2 加密货币挖矿

通过一整套状态文件管理挖矿程序生命周期:

  • 状态文件:connection_type.txtlast_stop_reason.txtlast_start_result.txtlast_start_message.txtlast_miner_error.txtlaunched_plugin.txtsp.datlastgood_miner.txt
  • 输出重定向:挖矿输出写入 .mout 文件
  • 隐藏属性:Hidden|System|NotContentIndexed
  • 日志轮转:按大小阈值自动轮转(2097152 / 1048576 / 256000 / 122880 字节)
  • 守护逻辑:具备矿工程序启动/停止/失败处理,说明会下载并长期驻留第三方挖矿载荷

3.3 Cursor AI 编辑器凭据窃取

使用 winsqlite3 读取 Cursor 本地 SQLite 数据库(state.vscdb),明文查询:

SELECT key, value FROM ItemTable WHERE key LIKE 'cursorAuth/%' LIMIT 32

一次最多窃取 32 条 cursorAuth 会话凭据,可用于劫持账号会话。

3.4 网络侦察与空闲躲避

  • 网络侦察:通过 iphlpapi 监控连接并统计 RTT,判断连通状态(挖矿/回连的前提)
  • 空闲躲避:调用 user32 检测系统空闲,用户活跃时暂停挖矿,降低暴露与触发杀软告警的概率

四、恶意软件杀伤链

图 2:恶意软件杀伤链

阶段动作关键证据
① 投递/伪装伪装系统缓存管理器、伪造微软签名元数据Product/Company/内部名
② 落地驻留缓存目录、HKCU Run、启动文件夹、计划任务WinSysCacheUpdate
③ 权限提升SeDebugPrivilege + 反篡改 FailFastOpenProcessToken/AdjustTokenPrivileges
④ 加载器执行RunPE 进程镂空、注入下一阶段载荷CreateRemoteThread
⑤ 窃密/挖矿窃取 Cursor 令牌、守护挖矿程序cursorAuth SQL / 状态文件
⑥ 持续回连RTT 网络检测、C2 回连、载荷更新iphlpapi + 空闲躲避

五、混淆体系与逆向对抗

图 3:ConfuserEx 混淆体系 vs 逆向对抗路径

关键突破点

  1. 直接反射解密失败:cctor 反篡改在 Linux/.NET 8 下抛 TypeInitializationException,常量字段无法初始化
  2. 自研 dnlib IL 解释器:支持扁平化所需全部操作码、模拟内存指针,绕过 VirtualProtect 包装器与 FailFast,约 180 万步模拟执行 cctor
  3. 提取加密常量块 array7(34,688 字节)并验证提取正确性
  4. 补全 RuntimeHelpers.InitializeArray 语义后,还原出 LZMA 属性头 5D 00 00 80 00 与解压后大小 2,596,012 字节
  5. 确定解压链为自定义 LZMA:格式 = [5字节 LZMA 属性][4字节解压后大小][LZMA 压缩流]
  6. 补丁程序集 + 真实运行时:把反篡改校验改为恒真、解压器改为「落盘 + 原样返回」,交由真实 .NET 运行时执行 cctor —— 成功落盘 34,688 字节常量块,解码还原 2,596,012 字节完整常量表,全部加密字符串明文取得

六、持久化与处置

图 4:持久化机制与检测处置

6.1 持久化驻留(多重机制)

  • 注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run(及 RunOnce)写入随机命名自启动项
  • 启动文件夹:向用户启动目录投放副本
  • 计划任务:创建名为 WinSysCacheUpdate 的计划任务(伪装系统更新)
  • 驻留目录C:\ProgramData\Microsoft\Windows\Caches\(变体路径含 6230B266),属性 Hidden|System|NotContentIndexed

6.2 主机侧 IOC

类别指标
样本哈希SHA256 9d68677db4dcd4ea767b19ac65208c1adc63ca049d0fca3769d79672b93734f4
样本哈希MD5 b75726631336ab42feddb8b80b20bc15
文件RuntimeHost.exe;内部名 SimpleRunPE.exe;伪装微软元数据
路径C:\ProgramData\Microsoft\Windows\Caches\DC068D27\RuntimeHost.exe(变体 6230B266
计划任务WinSysCacheUpdate
注册表HKCU...\CurrentVersion\Run(及 RunOnce)下随机命名项
挖矿文件connection_type.txtlastgood_miner.txtsp.dat*.mout
行为特征CPU 异常偏高;state.vscdb 被读取;出现进程注入调用链

网络侧 IOC(C2 域名、API、矿池)见下一节。

6.3 处置建议

  1. 排查上述路径 / 计划任务 / 注册表项,确认后清除
  2. 终止 CPU 异常且名为 RuntimeHost.exe 的进程,全盘查杀 RunPE 注入载荷与挖矿程序
  3. 撤销 Cursor / Claude 会话令牌使其失效,避免账号被冒用
  4. 断网隔离后取证,防止 C2 回连与载荷更新;必要时恢复系统或重装

七、C2 基础设施(解密还原)

图 5:C2 基础设施与加密常量解密全景

通过「补丁类型构造器 + 真实 .NET 运行时」执行,还原出 34,688 字节加密常量块并解码为 2,596,012 字节常量表,C2 域名、面板 API、窃取端点、矿池与矿工配置等加密字符串全部取得明文。

7.1 C2 引导域名(8 个降级子域)

按顺序前缀 1~8 轮换,用于拉取 /data.txt 配置(含真实 C2/矿池/钱包下发数据),提高抗封禁与存活能力:

https://1-xx123998xx.gleeze.com/data.txthttps://8-xx123998xx.gleeze.com/data.txt

1-8- 前缀,域名主体均为 xx123998xx.gleeze.com,路径均为 /data.txt

7.2 控制面板 API 端点

相对路径,拼接在 C2 基础 URL 上:

功能API 端点
启动回信/api/boot/event
自更新/api/tasks/update-exe
远程执行文件/api/tasks/run-file
挖矿载荷下发/api/tasks/payload?minerType=
代理下载 EXE/api/proxy/exe/api/proxy/exe?local=1/api/proxy/exe-status
状态回传/api/v1/status
Claude 凭据上传/api/claude/upload
Cursor 凭据上传/api/cursor/upload
Discord 令牌上传/api/discord/upload?device=
Telegram 会话上传/api/telegram/upload?device=
浏览器 Cookie 上传/api/cookies/upload?device=/api/cookies/status?device=/api/cookies/tools/

7.3 地理位置检测与挖矿基础设施

调用 ip-api.comapi.country.isifconfig.co 识别国家/地区(countryCode),用于按国家过滤挖矿,规避监管与检测。

  • 矿池herominers.com(stratum+tcp / stratum+ssl)
  • 矿工:7 款客户端,内置各自下载 URL —— lolMiner、SRBMiner-Multi、peakminer、bzminer、krig-miner、miniZ、gminer
  • 币种:ETH / ETHW、RAVENCOIN、MEOWCOIN、WOODCOIN、RETHERIUM、KYLACOIN、DINARTETHER

7.4 钱包地址结论(重要)

经对完整常量表逐条正则与人工核验:样本二进制内不包含任何硬编码的加密货币钱包地址。唯一的 0x 长串是占位零地址 0x0000000000000000000000000000000000000001,并非真实钱包。

钱包由 C2 控制面板动态下发,并且刻意隐藏:

  • 代码用正则 wallet=\S+ 解析面板下发的 MINER_START coin=ETH pool=... wallet=... 消息
  • 经内置 StratumProxy(本地 127.0.0.1 代理)注入矿工连接
  • 目的是把钱包从矿工命令行与配置文件中抹去,规避任务管理器等直接可见的暴露风险

因此钱包取证需在 C2 侧完成,而非靠二进制静态分析。

八、结论

RuntimeHost.exe 是一个高度混淆(ConfuserEx)的多功能 .NET 恶意木马,具备 RunPE 进程注入加载、加密货币挖矿、Cursor/Claude/Discord/Telegram/Cookie 多类凭据窃取、网络侦察、空闲躲避与多重持久化能力。

它集加载器与挖矿窃密于一身,且具备反分析、反篡改对抗能力,危害面广、隐蔽性强——威胁等级高危

本次分析全程采用静态与受控模拟手段,未在本机执行样本本体;所有行为结论来自反编译代码的行级证据。


安全提醒:本文所列 gleeze.com 域名为恶意 C2 基础设施,请勿直接访问;建议在隔离环境或威胁情报平台(VirusTotal、urlscan 等)中提交核验。本文仅供防御性安全研究与应急处置参考。