【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。

图 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 搬运过去,再转入其入口。

图 3 DLL 内嵌于 MP4 文件中(来源:Hybrid Analysis)
这个偏移没有对齐到任何节边界,说明文件是构建期把两份二进制首尾相接的产物,而不是手工排布的 PE 结构。由此可以推断:在同一家族内,该偏移会随 shellcode 版本浮动,固定 0x12E9 只能命中同一构建批次。
2.4 主机侧落地与计划任务
DLL 被载入后开始编排主机侧环境,动作依次为五步。
第一步枚举进程。程序通过 CreateToolhelp32Snapshot 遍历全部进程,寻找 TG.exe。

图 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。把该值纳入哈希的目的很明确——让提权前后的两个进程实例算出不同的互斥体名,避免自己把自己挡在门外。
约束建立后,程序阻止系统休眠。

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

图 13 查询 LastHash 判断是否已下载(来源:Hybrid Analysis)
程序读取 Software\Kong\Client\ClientVersion 下的 LastHash,判断模块是否已经下载过。这个本地缓存标记说明这套 RAT 曾在同一主机上长期、多次运行,运营者在意带宽与重复投递成本,而非一次性投递。
最后建立 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 地址作为参数传入。

图 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. 参考
- Hybrid Analysis / Vlad Pasca,2026-10:https://hybrid-analysis.blogspot.com/2026/10/seo-poisoning-campaign-targets-deepseek.html
- eSentire TRU,2026-04:https://www.esentire.com/blog/multi-stage-seo-poisoning-campaign-targets-chinese-speaking-developers-with-kong-rat
- eSentire 指标清单:https://github.com/eSentire/iocs/blob/main/KONG RAT/Kong-RAT-IoCs-04-16-2026.txt
- Antiy,假 FinalShell 攻击手法分析:https://www.antiy.net/p/analysis-of-the-attack-methods-of-the-fake-finalshell/
- Zscaler,KKRAT 技术分析:https://www.zscaler.com/blogs/security-research/technical-analysis-kkrat

浙公网安备 33010602011771号