AIGC标识 【AI】DeepSeek-SEO投毒-KongRAT-研究

DeepSeek 主题 SEO 投毒活动与 Kong RAT 工具链研究报告

研究对象:Hybrid Analysis / Vlad Pasca,2026-10,《SEO Poisoning Campaign Targets DeepSeek》
原始链接:https://hybrid-analysis.blogspot.com/2026/10/seo-poisoning-campaign-targets-deepseek.html
交叉参考:eSentire TRU,2026-04,《Multi-Stage SEO Poisoning Campaign Targets Chinese-speaking Developers with Kong RAT》
编制日期:2026-10-29


摘要

2026 年 10 月,研究者披露了一起针对 DeepSeek 使用者的 SEO 投毒活动。攻击者注册近似域名并占据搜索结果首屏,诱导用户下载体积超过 100MB 的安装包,进而部署 Kong RAT。把这批样本与 2026 年 4 月 eSentire 披露的同类活动逐项比对后可以确认,两者共用同一套工具链与投放管线,差异集中在加载器、持久化位置与主机侧命名等暴露面,而不在框架层面。


1. 活动概览

1.1 时间线

时间 事件 来源
2025-05 xshell-cn[.]com、xshell-38m.pages[.]dev 上线,仿冒 Xshell eSentire
2025-07 finalshell-ssh[.]com、quickq-cn[.]com 上线 eSentire
2025-08 ***-cn[.]com 上线;共享统计标识 51LA-3JTC2JD0CXBQHRSX 串联全部站点 eSentire
2025-10 letsv-vpn[.]com 上线,题材为乐视 VPN eSentire
2026-03 eSentire TRU 在客户环境检出并命名 Kong RAT;样本编译时间 2026-03-12 与 2026-03-21 eSentire
2026-04-16 eSentire 发布分析报告与指标清单,并公开 YARA 规则 eSentire
2026-10 本轮 DeepSeek 题材投放;4 个仿冒域名加 callmysoft[.]com/deepseek 推广位;PDB 路径变为 ...\Desktop\420\bin\Release\net10.0\win-x64\native\Update.pdb Hybrid Analysis

时间上的衔接值得注意。4 月的报告公开了任务名前缀、Bvasted 目录、x.x-x.icu:5947 等强特征,10 月的样本则把落地目录改为按主机卷序列号生成、把侧加载宿主从 rc.exe 换成 CygLaunch.exe、并新增了 Userinit 持久化。披露与改特征之间的间隔很短。

1.2 分发与推广

本轮可见的分发入口包括 4 个仿冒域名与一个软件下载聚合站的推广位,早期样本还观察到技术社区内的推广链接。这说明分发并不单纯依赖搜索引擎自然排名,而是"仿冒官网 + 国内下载站与社区推广位"的组合。这类站点在中文搜索生态中权重较高、用户信任度也较高,仅封禁搜索结果的处置方式并不充分。

安装包体积超过 100MB 同样是有意为之。包内确实包含一个可正常安装的签名程序,用户安装后能获得预期的软件体验;同时大文件在网关侧更容易触发超时、跳过或仅做哈希校验的处理路径,降低了内容检查的覆盖比例。

1.3 攻击链总览

原始报告给出的多阶段执行链如下。

原报告执行链总览

执行链总览(来源:Hybrid Analysis)

链路可以归纳为六个可独立描述的环节,每一环的可观测面都不同,这也是后续逐段分析的组织方式:

环节 载体 执行者 主要痕迹
初始访问 仿冒站点与压缩包 用户 浏览器下载记录、代理日志
释放 MSI msiexec.exe 安装目录与注册表写入
第一跳 mao.mp4 Setupapp.exe 云存储 GET、VirtualAlloc
落地编排 三个下载文件 内存中的 DLL 新建目录、计划任务、遥测请求
侧加载 CygLaunch.exe 加 cygwin1.dll 宿主进程 映像加载路径、Userinit 变更
二跳与驻留 Uninstall.xml 宿主进程内 shellcode TCP 5947、MPK1 首包、键盘记录文件

2. 逐阶段技术分析

2.1 安装包与释放文件

属性 值
样本 DeepSeekV20.66-Setup.msi
SHA256 5b675a1387aff6a151da77224fbfe732fc1beb2e8e9c91e471213db005d9e149
释放物 DeepSeekV20.66.exe、Setupapp.exe

安装包释放两个可执行文件:DeepSeekV20.66.exe 带代码签名,是伪装用的正常程序;Setupapp.exe 是恶意主体,其 SHA256 为 566449fe632fc7687d7a7f4b436ba01c1e38756bcab77567798452d000254c5c。

MSI 释放的文件

图 1 MSI 释放的文件(来源:Hybrid Analysis)

恶意文件的 PDB 路径为 C:\Users\52pojie\Desktop\420\bin\Release\net10.0\win-x64\native\Update.pdb。其中 net10.0\win-x64\native\ 是 .NET NativeAOT 的固定输出目录,据此可以确认该文件以 NativeAOT 编译,常规的 IL 反编译工具对其无效。这条路径与本轮之前那批样本中的 APP3.pdb 结构一致,仅目录层级和文件名不同。

以 MSI 作为外层有三个实际效果:用户对安装器形态有天然信任;安装过程由系统签名进程承载,进程链上不会出现"用户直接双击陌生程序"的观感;安装期间对目录与注册表的写入本身也属正常行为。恶意文件具体由 MSI 的哪个环节拉起,公开报告未作说明,需要解包后检查 CustomAction 表才能确定。

2.2 第一跳:Setupapp.exe

Setupapp.exe 的作用是取出下一阶段载荷并就地执行。它从 yyuupkk789.oss-cn-hongkong.aliyuncs[.]com 请求伪装成视频的 mao.mp4,请求头使用 Mozilla/5.0 作为 User-Agent,取回后通过 VirtualAlloc 分配内存、CreateThread 启动线程,把执行流交给这段内容。

下一阶段载荷的下载

图 2 下一阶段载荷的下载与执行(来源:Hybrid Analysis)

这里的 .mp4 只是容器载体,整个环节没有调用任何媒体解码接口,也不依赖解析漏洞。选择该扩展名的目的在于降低网关的检查强度,同时与云存储上大量真实媒体流量混同。

本阶段采用的是最直白的 VirtualAlloc 加 CreateThread 组合,隐蔽性明显低于后续阶段。这符合一条常见的分工逻辑:第一跳追求可靠而非隐蔽,因为此时进程仍是安装器身份,受到的关注有限;真正的隐蔽投入放在侧加载之后。

2.3 内嵌 DLL 的容器

属性 值
文件 mao.mp4
SHA256 7e53218da42201e56a655c5ddb577ccd88cd9d92a291a02255841b2f1e910cec
结构 [shellcode][DLL @ 0x12E9]

文件并非视频。在偏移 0x12E9 处可以看到 4D 5A 起始的 PE 头,其前部是一段 x64 shellcode。shellcode 负责分配可执行空间,把内嵌 DLL 搬运过去,再转入其入口。

DLL 内嵌于 MP4 文件

图 3 DLL 内嵌于 MP4 文件中(来源:Hybrid Analysis)

这个偏移没有对齐到任何节边界,说明文件是构建期把两份二进制首尾相接的产物,而不是手工排布的 PE 结构。由此可以推断:在同一家族内,该偏移会随 shellcode 版本浮动,固定 0x12E9 只能命中同一构建批次。

2.4 主机侧落地与计划任务

DLL 被载入后开始编排主机侧环境,动作依次为五步。

第一步枚举进程。程序通过 CreateToolhelp32Snapshot 遍历全部进程,寻找 TG.exe。

查找 TG 进程

图 4 查找 TG 进程(来源:Hybrid Analysis)

命中后它通过深链 tg://setlanguage/?lang=classic-zh-cn 把 TG 界面语言切换为简体中文。该动作不涉及技术利用,比较合理的解释有两种:为后续社会工程铺垫统一的中文界面,降低话术违和感;或把它作为判断受害者是否属于中文社群的旁证。eSentire 指出该行为的开关字节在其分析的样本中从未置位,即功能处于休眠状态。本轮该行为再次出现,说明能力被保留在框架内、按构建开启。

第二步创建落地目录。目录位于 %LOCALAPPDATA%\Programs\,名称由 C 盘卷序列号派生。

创建落地目录

图 5 按卷序列号创建落地目录(来源:Hybrid Analysis)

这一步是纯反检测动机。卷序列号在同机稳定、跨机唯一,因此目录名每台主机不同但重启后不变,既维持持久化稳定性,又让固定路径类指标失效。

第三步外传安装进度。程序以 URLOpenBlockingStreamA 访问同一云存储域名下的 /upload?log=PathInit:<目录名>,随后又发送 CreateAndExecuteTask 与 CreateAndExecuteTask Status 两类日志,分别携带任务 GUID 与创建结果码。对运营者而言这是投放进度看板;对分析者而言,这三类遥测是确定性较高的信号。

第四步取回三个文件。1.1x1、1.d11、mao.bin 被分别另存为 Defcyglaunch.exe.exe、cygwin1.dll、Uninstall.xml。

下载三个文件

图 6 下载三个文件并重命名(来源:Hybrid Analysis)

三个下载名都经过伪装:.1x1 与 .d11 不具备任何已注册的文件语义,mao.bin 则是最常见的中性扩展名。落盘名则刻意贴近正常软件:cygwin1.dll 是 Cygwin 运行库的真实名称,Uninstall.xml 听起来像卸载配置,Defcyglaunch.exe.exe 的双扩展名在现场极易被当作临时文件忽略。

第五步建立持久化。程序以 CoCreateGuid 生成 GUID,经 StringFromGUID2 转为可打印字符,拼成 SimpleActivityScheduleTimer_<GUID>,再通过 NdrClientCall3 直连 RPC 创建计划任务。

创建计划任务

图 7 经 NdrClientCall3 创建计划任务(来源:Hybrid Analysis)

NdrClientCall3 是本链上性价比最高的规避点。它绕过 ITaskService COM 接口,因此不会产生任务计划程序的 COM 调用栈,也不会出现 schtasks.exe 子进程;可观测的痕迹只剩任务文件本身以及服务端事件。任务名带随机 GUID 后缀,但前缀固定,前缀本身就是可靠的检测依据。

2.5 侧加载与持久化

属性 值
文件 cygwin1.dll
SHA256 40650b0b1260d19d9979886c3ada8eb6cfa297c7a7e0f4c3d8612dc7ca43f129
宿主 Defcyglaunch.exe.exe,合法的 CygLaunch,SHA256 2025f9ef...88ea1

计划任务启动宿主程序,Windows 按搜索顺序优先在程序所在目录解析依赖,于是同目录的恶意 cygwin1.dll 被加载。恶意代码进入后先判断权限。

校验进程权限

图 8 通过 GetTokenInformation 校验进程权限(来源:Hybrid Analysis)

它以 GetTokenInformation 查询 TokenElevation,确认当前进程是否具备管理员权限。这一步是后续所有高权限动作的前置条件。

随后篡改登录项实现持久化。

建立持久化

图 9 篡改 Winlogon Userinit 建立持久化(来源:Hybrid Analysis)

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下的 Userinit 值默认指向 userinit.exe,恶意写入通常采用"合法路径 + 逗号 + 恶意路径"的形式,外观上仍是正常配置。选择该位置有三重好处:触发时机是用户登录,此时系统正在建立会话,安全产品对进程创建的基线尚未完全生效;该值本身合法,肉眼难以分辨;该位置极少出现在终端基线或合规检查清单中,误报极低但覆盖率同样极低。由于需要 HKLM 写权限,该动作与前面的提权环节形成闭环。

持久化落地后,程序读取并执行下一阶段。

加载并执行下一阶段

图 10 查找 XML 并转入执行(来源:Hybrid Analysis)

它用 FindFirstFileA 与 FindNextFileA 在当前目录查找 .xml 文件,命中后读入内存、memcpy 到新分配区域,最后把执行流交给缓冲区。这里有一个工程细节值得注意:加载器不依赖固定文件名,只看扩展名。同一份容器既可以叫 oob.xml,也可以叫 Uninstall.xml,也可以是任何 .xml。因此"应用私有目录中出现孤立 XML 且被 DLL 读取"比"查找某个具体文件名"更稳健。

计划任务与 Userinit 并存,构成冗余持久化:前者负责首次拉起与周期性触发,后者负责在任务被清理后仍然复活。这直接影响处置策略,仅删除计划任务不足以清除。

2.6 第二阶段容器与 C2 首包

属性 值
文件 Uninstall.xml
SHA256 72cae7dd93c6d0e72cd0af5510db25b7956c29e16eccd50da1ff6c7dacc39872
结构 [shellcode][PE @ 0x12E9]

该文件与 mao.mp4 的布局完全一致,可执行体同样位于偏移 0x12E9。执行后先建立单实例约束。

生成互斥体

图 11 由完整性级别生成互斥体(来源:Hybrid Analysis)

程序以 GetTokenInformation 取 TokenIntegrityLevel,再用 GetSidSubAuthority 取出该 SID 的末尾子权威值,得到 Local\ClientMutex_<DJB2(可执行路径 + 完整性级别)>。原文一处写作 SID、eSentire 写作 integrity level,两者实际一致:完整性级别本身就是一个 SID,例如中等完整性为 8192、高完整性为 12288。把该值纳入哈希的目的很明确——让提权前后的两个进程实例算出不同的互斥体名,避免自己把自己挡在门外。

约束建立后,程序阻止系统休眠。

调用 PowerSetRequest

图 12 调用 PowerSetRequest 阻止休眠(来源:Hybrid Analysis)

PowerSetRequest(PowerRequestDisplayRequired) 保证机器不进入睡眠、屏幕不关闭。这属于运营质量层面的细节,而非反检测手段:键盘记录需要机器持续运行才能采集。反过来说,恶意程序主动申请阻止睡眠是一个稀有行为,在电源相关遥测中具备较高信噪比。

接着查询历史下载标记。

查询注册表标记

图 13 查询 LastHash 判断是否已下载(来源:Hybrid Analysis)

程序读取 Software\Kong\Client\ClientVersion 下的 LastHash,判断模块是否已经下载过。这个本地缓存标记说明这套 RAT 曾在同一主机上长期、多次运行,运营者在意带宽与重复投递成本,而非一次性投递。

最后建立 C2 通道。

发送 C2 首包

图 14 发送自定义首包(来源:Hybrid Analysis)

程序以自定义协议连接 m.tysdt123[.]com:5947,首包含 MPK1 字符串、0x1B 与 0x154 两个数值。公开报告的描述是 0x1B 为数据长度、0x154 为命令类型;从协议布局看,两者的归属更可能是相反的。

字段 报告解释 本文理解 依据
0x154 命令类型 包或负载长度,即 340 字节 eSentire 记录的 MPK1 头为 4 字节小端长度前缀;340 字节与 208 字节的 LoginInfo 结构加元数据、再加压缩头的量级吻合
0x1B 数据长度 命令类型 T = 27,即心跳或注册 eSentire 公开的命令表中 T=27 正是心跳确认,携带 H、S、V 字段并调度下一次心跳
排列 未明确 长度前缀在前,MPK1 紧随,命令类型在头部之后 与"长度前缀 → 魔数 → 压缩标志与原始长度 → 负载"的常规布局一致

若该理解成立,首包就是一次心跳注册。验证方法是对该 C2 的流量做 tcp.payload 提取,按上述布局解析并核对长度字段与实际字节数是否一致。

2.7 Kong RAT 主模块

C2 收到首包后下发一个 64 位 DLL,程序按 run 导出调用,并把 C2 地址作为参数传入。

按 run 导出调用

图 15 以 run 导出调用下发模块(来源:Hybrid Analysis)

run 是贯穿整条链的统一接口约定:第一跳的 mao.mp4、第二跳的 Uninstall.xml、后续热插拔的插件模块,全部以 run 作为入口。这种一致性使不同阶段可以互换载体而不改动加载器,也是判断这些样本同源的重要依据。

结合 eSentire 的完整分析,主模块具备以下能力:单一实例互斥体、阻止休眠、键盘记录、TCP 插件分发循环、以 run 导出加载远端模块。命令层面共确认 16 类,覆盖连接登记、写入 NOTE 与 GROUP 标签、插件热插拔、系统重启、静默退出、自毁、C2 迁移并持久化、会话续期、下载执行 EXE、命令行回显、临时目录写文件后执行、PE 校验后加载、清理过期会话以及心跳抖动。

上线包 LoginInfo 包含硬件标识、地理描述、安装时间、NOTE、GROUP、进程列表与前次连接标识,其中 GROUP 由内嵌 Lua 运行时填充。主模块还通过 WMI 查询 AntiVirusProduct 枚举安全产品,查询 Win32_OperatingSystem 获取系统版本。

一条容易被忽略的隐蔽信道是地理定位。程序以 LetvClient/1.0 作为 User-Agent 请求乐视 CDN 的 https://g3.letv.com/r?format=1,这是乐视用于视频分发优化的合法接口,会返回调用方公网 IP 与地理描述。程序用正则提取 host 与 desc 字段,直接写入上线包的地理描述字段。该设计有三个好处:出口流量是发往国内大厂 CDN 的正常 HTTPS;无需自建地理库;即使主 C2 被封禁,操作者仍能从上线包中获知位置。

插件落地位置同样值得记录。解密后的 DLL 被写入 C:\Windows\System32 再以 LoadLibraryExW 加载,从而获得"系统目录中的 DLL"这一强伪装。该路径本身受保护,但对已提权进程不构成阻碍。

内嵌 Lua 运行时说明运营侧存在配置化需求,用于按活动或客户打标,而非硬编码团伙标记。这类半商业化的 C2 框架通常意味着同一框架会被多个操作者或多次活动复用,也解释了诱饵题材为何能快速切换。

2.8 键盘记录

键盘记录模块从剪贴板开始采集。

读取剪贴板

图 16 通过 OpenClipboard 读取剪贴板(来源:Hybrid Analysis)

它调用 OpenClipboard 与 GetClipboardData 取走剪贴板文本,作为按键记录的补充。

写入记录文件

图 17 按键与剪贴板内容写入日期文件(来源:Hybrid Analysis)

采集结果写入 C:\ProgramData\Kong\Keylogger\<当前日期>.txt,目录不存在时递归创建,文件以追加方式写入,每天自动新建一份。该日志在重启后仍会持续累积,因为恶意进程会经计划任务重新启动。

获取前台窗口信息

图 18 获取前台窗口信息(来源:Hybrid Analysis)

每轮轮询都会用 GetForegroundWindow 与 GetWindowTextW 取得当前窗口标题,窗口切换时写入带时间戳的分隔行,形如 [ YYYY-MM-DD HH:MM:SS ] 窗口标题 ###,以此把按键序列归因到具体应用。

虚拟键码转字符

图 19 虚拟键码转换为字符(来源:Hybrid Analysis)

程序以 GetAsyncKeyState 轮询 8 至 255 全部虚拟键,间隔 10 毫秒,并维护按键状态以避免重复记录;同时显式区分左右 Shift、Control 与 Alt,再结合键盘状态把虚拟键码翻译为字符。10 毫秒轮询配合状态去重,说明作者在意"不漏键、不重复"这两类质量问题,属于长驻采集而非一次性窃密。

环境变量 KONG_SKIP_KEYLOGGER=1 可关闭该功能。这类带家族名前缀的开关是开发期遗留的调试入口,同时也是一处稳定的检测特征,比中文错误提示更难被误报。


3. 与上一轮活动的对比

维度 2026-04(开发者工具题材) 2026-10(DeepSeek 题材) 变化含义
侧加载宿主 rc.exe,微软签名的资源编译器 CygLaunch.exe,Cygwin 启动器 更换可信进程画像;两者都以"签名或低怀疑度 + 同目录 DLL 依赖"为选型标准
被侧加载 DLL rcdll.dll cygwin1.dll 均选取宿主必然加载的依赖名,成功率高于随机劫持
落地目录 %LOCALAPPDATA%\Programs\Bvasted\,固定名称 按卷序列号派生,动态生成 去除已公开的固定字符串,改为按主机指纹生成
持久化 计划任务,经 NdrClientCall3 直连 RPC 计划任务加 Winlogon\Userinit 双持久化,一明一暗,后者极少被监控
载荷容器命名 zj.mp4、zj.bin、oob.xml mao.mp4、mao.bin、Uninstall.xml 命名同样业务化,本轮伪装性更强
扩展名混淆 .1x1、.d11 .1x1、.d11 该技巧未作调整
容器结构 [shellcode][PE @ 0x12E9] [shellcode][PE @ 0x12E9] 同一容器格式,指向共用 loader 框架
侧加载后执行 QueueUserAPC 后由 EnumWindows 回调执行 FindFirstFileA 后 memcpy 并跳转 执行入口改写,规避已公开的检测点
提权 ShellExecute runas,叠加 PEB 伪装与 CMSTPLUA COM 提权 报告中仅描述权限检查,未展开完整路径 疑似保留原有链路但未披露
C2 x.x-x[.]icu:5947,解析至 45.192.208.126 m.tysdt123[.]com:5947,另有若干备线域名 端口与协议不变,仅更换域名
对象存储桶 kkwinapp yyuupkk789、tyjssss777、qucisg666、steyyy888 桶名改为"字母串加三位数字"的统一生成模式

相同点集中在框架层,包括容器布局、run 导出约定、MPK1 协议、5947 端口、对象存储"分发加遥测"双用途以及 Kong 注册表命名空间;差异点集中在暴露层,包括宿主 DLL、目录命名、持久化位置与执行入口。这一分布说明本轮是同一框架的特征轮换,而非另起炉灶。


4. 规避手法与实现要点

4.1 侧加载成立的条件

侧加载要稳定成立,需要三个条件同时满足:宿主程序必须加载同目录下的某个 DLL;该 DLL 不在 KnownDLLs 名单中;该 DLL 不受清单或并行程序集机制重定向。CygLaunch 作为 Cygwin 启动器必然加载同目录的 cygwin1.dll,而后者不满足前两项排除条件,因此只要把恶意 DLL 放在旁边,加载就是确定性的。这也是侧加载与随机 DLL 劫持的关键差别:前者的命中率接近百分之百,后者依赖运气。

由此可以推出一个更有用的判断:签名程序从用户可写目录运行并加载同目录 DLL,这一组合比签名本身更能说明问题。只按哈希或签名做拦截,在这一环节注定失效。

4.2 三类替代原语

公开报告多处提到"避免被监控的 API"。把它们并列观察,可以看到一条统一思路:不使用显眼的执行原语,转而借助系统自身会调用的回调。

目的 常规做法 本案做法 造成的观测盲区
创建线程 CreateThread、CreateRemoteThread EnumWindows(shellcode, 0),由系统回调 调用栈来自用户界面模块,不产生线程创建事件
DLL 初始化期执行 在 DllMain 中直接执行 QueueUserAPC 推迟到线程进入可警报等待 与 DLL 加载事件解耦
创建计划任务 ITaskService COM 或 schtasks.exe NdrClientCall3 直连 RPC 无 COM 调用栈,无子进程

三者的共同点是不产生恶意感强的原语事件,只在结果上留下痕迹:任务文件、被读取的 XML、异常的可执行内存页。这意味着有效的分析路径是验证结果,而不是追逐原语。

4.3 容器的构造与壳的实现

两轮样本共用同一布局,可提炼出比哈希更稳定的容器级特征:

偏移 0x0000 .. 0x12E8 : x64 shellcode,位置无关,PEB 遍历加栈字符串
偏移 0x12E9           : 4D 5A 90 00 03 00,内嵌 PE 的 DOS 头

壳内有两处可作为指纹的实现细节。其一是 Caesar 位移 −0x10 的栈字符串,公开报告给出的字节可直接手工复核:

57 75 84 60 82 7F 73 51 74 74 82 75 83 83  减 0x10 → 47 65 74 50 72 6F 63 41 64 64 72 65 73 73  "GetProcAddress"
5C 7F 71 74 5C 79 72 82 71 82 89 51        减 0x10 → 4C 6F 61 64 4C 69 62 72 61 72 79 41        "LoadLibraryA"
66 79 82 84 85 71 7C 51 7C 7C 7F 73        减 0x10 → 56 69 72 74 75 61 6C 41 6C 6C 6F 63        "VirtualAlloc"

复核结果为完全吻合。这是逐字节写入栈、再原地减 0x10 的最简混淆,实现成本极低,却足以绕过静态字符串扫描。

其二是 call $+5 / pop rax / push rax / ret 自定位桩。公开报告指出该实现效率不高,前一个 call/pop 属冗余,这一判断成立;更关键的意图在于,壳需要在不依赖任何绝对地址的前提下获知自身被加载的位置,才能向后扫描定位 PE。扫描上限为 0x9C4000,约 10MB,正常 PE 加载器不会这样处理,该上限本身也是一条可用特征。扫描时匹配的是 6 字节模式 4D 5A 90 00 03 00,即 DOS 头的固定起始部分,比仅匹配 4D 5A 更难被随机数据命中。

4.4 参数化激活

eSentire 明确指出,远端模块的 run 导出必须携带合法 C2 配置参数才会正常工作,否则回落到 127.0.0.1,表现为无任何恶意行为。

这一设计针对的正是自动化沙箱:沙箱通常把样本当作独立文件执行,不会模拟"由上游加载器传入参数"的完整上下文,于是样本在公开平台上显示为干净,只有在真实链路中才被激活。对分析者而言,遇到跑不出行为的可疑 DLL 不应直接判定为良性,而应主动构造参数调用,或静态定位 run 导出与配置结构偏移,例如配置块中 +152 处的过期时间与 208 字节的 LoginInfo 结构。

4.5 一处常量归属上的疑点

eSentire 把心跳抖动归因于 MT19937,并在 YARA 中使用常量 0x6C25D269。但 MT19937 的四个标准常量为 0x6C078965(初始化乘子)、0x9908B0DF(矩阵)、0x9D2C5680 与 0xEFC60000(掩码),0x6C25D269 并不在其中,更可能是编译器内联的乘数,或原始分析中的字节序读法差异。

这不影响"存在伪随机抖动"的结论,但会影响规则效果:若该四字节只是普通算术常量,把它当作家族特征既带来误报,也会漏掉其他构建。建议将其降级为辅助证据,或改为匹配 3475 至 4999 毫秒抖动区间对应的除法与取模结构,并在真实样本上回归验证。


5. 入侵指标

5.1 网络

类型 值 说明
分发域名 deepseekcn[.]cyou 主仿冒站
分发域名 deepseekk[.]icu
分发域名 deepsecek[.]com
分发域名 deepseekem[.]com
推广页 callmysoft[.]com/deepseek 软件下载聚合站
载荷托管 yyuupkk789.oss-cn-hongkong.aliyuncs[.]com 承载 mao.mp4
载荷托管 tyjssss777.oss-cn-hongkong.aliyuncs[.]com
载荷托管 qucisg666.oss-cn-hongkong.aliyuncs[.]com
载荷托管 steyyy888.oss-cn-hongkong.aliyuncs[.]com
C2 m.tysdt123[.]com:5947 主通道,MPK1
C2 zh.tysdt123[.]com
C2 zh.szeom[.]com
C2 cc.kmsccadn[.]com

上一轮活动沿用的基础设施包括 x.x-x[.]icu:5947(解析至 45.192.208.126,Antbox Networks Limited,香港)与 kkwinapp.oss-cn-hongkong.aliyuncs[.]com。

5.2 主机

类型 值
目录 %LOCALAPPDATA%\Programs\<C 盘卷序列号派生名>\
文件 Defcyglaunch.exe.exe、cygwin1.dll、Uninstall.xml,同目录三件套
计划任务 SimpleActivityScheduleTimer_<GUID>
注册表 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit 被追加
注册表 HKCU\Software\Kong\Client\ClientVersion 的 LastHash
互斥体 Local\ClientMutex_<DJB2(可执行路径 + 完整性级别)>
日志目录 C:\ProgramData\Kong\Keylogger\<YYYY-MM-DD>.txt
环境变量开关 KONG_SKIP_KEYLOGGER=1

5.3 样本

阶段 文件 SHA256
入口 DeepSeekV20.66-Setup.msi 5b675a1387aff6a151da77224fbfe732fc1beb2e8e9c91e471213db005d9e149
幌子程序 DeepSeekV20.66.exe f35c08fae77bcc13fdaa940fea21446fb78444fc2c6232abf4a2dd2d8890971a
下载器 Setupapp.exe 566449fe632fc7687d7a7f4b436ba01c1e38756bcab77567798452d000254c5c
容器 mao.mp4 7e53218da42201e56a655c5ddb577ccd88cd9d92a291a02255841b2f1e910cec
侧加载 DLL cygwin1.dll 40650b0b1260d19d9979886c3ada8eb6cfa297c7a7e0f4c3d8612dc7ca43f129
容器 Uninstall.xml 72cae7dd93c6d0e72cd0af5510db25b7956c29e16eccd50da1ff6c7dacc39872
合法宿主 CygLaunch.exe 2025f9efd6e3166d7b69dd166a472f7fde21bc92dbef39c1f0e324ecd5088ea1

CygLaunch.exe 本身非恶意,此处列出仅用于在白名单中先行排除。公开报告的指标段另收录约 40 条哈希,含多个 MSI 变体与中间产物,完整清单以原始报告为准;上表只保留主路径,便于在告警中定位阶段。


6. 应急处置要点

处置顺序比处置动作本身更重要。

第一步是切断复活路径,而不是清理文件。只删除 %LOCALAPPDATA%\Programs\ 下的内容而不清除 Userinit 与计划任务,重启或重新登录后仍会复活。正确顺序为:禁用计划任务,恢复 Userinit 默认值,隔离主机,最后清理文件与 C:\ProgramData\Kong。

第二步是凭据重置。键盘记录器常年把输入明文落盘,受害者又持有 SSH、VPN 与云平台访问密钥。必须重置本机与跳板机口令、VPN 账号、代码平台令牌、云厂商访问密钥,并回溯这些凭据在攻击窗口内是否被使用,检查登录日志与 API 审计记录。

第三步按已失陷标准排查横向移动。Kong RAT 具备远程命令执行、下载执行、插件热插拔与 C2 迁移能力,应假定操作者可能已经建立第二个落脚点。

第四步是先取证后清除。C:\ProgramData\Kong\Keylogger\ 既是受害者的损失证据,也是操作者的活动时间线,应先行镜像再删除。

第五步是排查不可见模块。检查 HKCU\Software\Kong\Client\Plugins 是否存在 REG_BINARY 值,说明曾推送插件;并核对 C:\Windows\System32 中近期新增且无签名的 DLL。


7. 参考

posted @ 2026-10-29 10:03  DirWangK  阅读(34)  评论(0)    收藏  举报