APT-C-55(Kimsuky)组织多路径投递攻击活动分析

· 2026-10-15 17:30 · 28 阅读

高级威胁研究院 2026-10-15 17:30 北京

监测发现Kimsuky组织攻击:攻击者利用钓鱼邮件投递伪装保险金融文档的恶意文件,并污染开源代码仓库实施供应链攻击,目标覆盖韩日越德等国,涉及保险金融、科研等领域。

APT-C-55

  Kimsuky

APT-C-55(Kimsuky)组织,也被称为MysteryBaby、BabyCoin、SmokeScreen、BabyShark、CobraVenom等多个别名,最早由Kaspersky在2013年公开披露。长期以来,该组织专注于对韩国的智囊团、政府外交部门、新闻媒体和教育学术机构等进行网络攻击。在过去几年中,Kimsuky的攻击范围已经扩大,目标包括多个国家和地区。其主要目的是进行情报窃取活动,以获取关键的政治和军事情报。

在日常监测与分析过程中,我们捕获到Kimsuky组织近期发起的多起攻击活动。攻击者通过钓鱼邮件投递伪装成保险、金融文档的恶意文件,同时污染开源代码仓库实施供应链攻击,目标覆盖韩国,并疑似涉及到多个国家,涉及保险金融、科研开发等领域。一旦入侵成功,攻击者可在受害者毫不知情的情况下长期控制主机,持续窃取系统配置、账户信息、业务文档等敏感数据,对目标机构的信息安全构成严重威胁。

一、目标

本次活动中提取到的诱饵文档呈现明显的多语种、多区域投放特征。数量上以韩文诱饵为主体,主题高度集中于保险与金融业务线,包括보험서류(保险文件)、자금집행첨부자료(资金执行附件资料)、채권양도계약서(债权转让合同)、소득월액보험료_동의서_개정(안)(月收入保费同意书·修订案)等。

在韩文之外,同时发现日文、越南文、德文和英文诱饵:日文如契約書_DS4092452_974520274(契约书),越南文如Hợpđồngmuabán_2745011321(买卖合同),德文如Kaufvertrag_CS520423048_828429484/Kaufvertrag_MS560482056_928030948(买卖合同),英文如ContractAgreementDS9092452_294635744、InsuranceDocumentsFS805238_3084618338。整体上以韩国为主要目标,并疑似涉及到其他国家或地区。

图 1 诱饵文件图示

二、攻击活动分析

1.攻击流程分析

本次攻击活动呈现出多路径、分阶段的复杂攻击特征,攻击者采用三种不同的初始投递方式,但最终均指向长期驻留与信息窃取。三种攻击方式在技术手法上存在显著差异,但在持久化机制、工具链复用和数据窃取逻辑上高度一致。第一种通过钓鱼邮件发送恶意的快捷方式,受害者打开后恶意程序在后台运行,自动下载后续攻击组件并定时向攻击者服务器回传系统信息和个人数据。第二种同样使用伪装快捷方式,通过PowerShell脚本从远程下载恶意载荷,回传用户信息并持久化驻留。第三种通过污染开源代码库,开发者在不知情下安装被篡改的Python库,运行测试时触发隐藏后门。三种方式均能在受害者毫无察觉的情况下长期控制主机、持续窃取敏感数据。

图 2 攻击流程图

2.攻击组件分析

钓鱼邮件

攻击者通过钓鱼邮件释放恶意LNK文件,该文件将base64编码的恶意脚本写入临时文件,利用复制的certutil.exe将其解码为批处理脚本并执行,通过合法系统工具和随机文件名规避检测。

图 3 第一阶段脚本代码示例

释放的第二阶段BAT脚本先进行反调试检查,若检测到调试进程则立即退出。

图 4 第二阶段反调试代码示例

随后在C:\Users\Public\Videos\Samples\目录下部署恶意文件,写入三份配置文件,包括攻击者掌握的仓库路径、后续载荷名init.dat以及令牌。

图 5 写入配置文件

把certutil.exe复制到%temp%下改名为ce<随机数>.exe,后续下载、解码全走这个副本。并从仓库下载后续诱饵文档,另存为LNK同名诱饵文档并自动打开,若下载失败,则写入“Can not open document”伪装成文档打不开的提示,避免受害者起疑。若该PDF已存在,说明主机此前已被感染,直接打开文档、自删除退出,不重复感染。

图 6 下载诱饵文档

图 7 诱饵文档示例

脚本正文中内嵌一大段base64编码的批处理,写入.tmp后用certutil副本解码为Samples\ini<随机数>.bat。目录下的mark.ini(内容jap)作为感染标记:解码前先检查它是否存在,存在即说明已释放过,直接跳过,保证整个流程只执行一次。

图 8 嵌入base64编码代码示例

从同一仓库下载token.dat,实际为nircmd程序(小型命令行实用工具),保存为Samples\ntoskrnl.exe。下载后先读文件开头,检查是否以<html开头的GitHub 404报错页,确认下载成功才继续,否则转入备用方案。

图 9 下载命令行工具

为了实现任务持久化,先删除同名旧任务,再用schtasks创建名为MicrosoftUpdate_<随机数>的计划任务,每9分钟执行一次下载的组件ntoskrnl.exe,并把上文释放脚本的路径作为参数(exec hide)传给它,实现长期驻留。

图 10 建立计划任务

若组件下载失败,则使用备用方案,生成VBS。其中CreateObject("WScript.Shell")先用字符5打散混淆、再统一剥掉还原。VBS以无窗口方式运行释放的脚本,同样注册成9分钟一次的计划任务,改用wscript.exe执行。

图 11 备用方案代码示例

收尾时删除certutil副本、base64临时文件,以及第一阶段的落地文件,最后删除脚本自身。

图 12 清理痕迹代码示例

第三阶段BAT脚本,由计划任务每9分钟拉起一次。从第二阶段落盘的三份配置文件中取回C2信息。

图 13 第三阶段读取配置文件代码示例

从注册表读取Windows安装时生成的全局唯一标识MachineGuid(位于HKLM\SOFTWARE\Microsoft\Cryptography),拼上.dat后缀作为文件名。

图 14 从注册表读取信息

第三阶段延续前两阶段的手法,把certutil.exe复制到%temp%改名为con<随机数>.exe,把curl.exe复制到Samples目录改名为task<随机数>.exe。构造github下载地址,优先用curl副本下载init.dat,失败则用certutil的urlcache兜底。通过校验后用certutil解码为批处理,再检查内容是否以jap开头,最后以call方式执行并把token作为参数传入。

图 15 下载后续载荷

紧接着以同样的流程下载第二路载荷<MachineGuid>.dat。

图 16 下载第二路载荷

执行完毕后,删除certutil副本、curl副本、两路载荷的下载临时文件和解码出的批处理。该脚本每9分钟都会重新走一遍完整流程。

图 17 清理痕迹代码示例

另一份第二阶段BAT脚本的变种则从仓库下载WinRAR程序,随后用来解压check.dat,该脚本的主要功能仍是下载init.dat脚本。

图 18 第二阶段变种脚本示例

init.dat主要是通过系统命令采集主机名、账户列表、进程表、系统信息、网络配置及用户/程序目录的目录树,汇总写入临时文件。样本滥用certutil.exe与curl.exe的副本下载并外传数据,将采集结果以受害者ID命名,经HTTP POST上传至攻击者掌握的远端服务器,完毕即自删全部临时文件清除痕迹。

图 19 收集信息代码示例

恶意LNK

攻击者同样使用伪装成韩文保险文件PDF的恶意LNK快捷方式文件,实际会调用PowerShell执行载荷。PowerShell载荷经过双重十六进制编码嵌套。

图 20 powershell载荷代码示例

解码后的功能写入本地脚本C:\Users\Public\e7wSF5W3omy51To.ps1,创建计划任务持久化,并从远程加载并打开诱饵PDF。

图 21 解码后代码示例

图 22 诱饵文档图示

写入的脚本从C2服务器mf3goke.getenjoyment[.]net下载远程载荷,回传用户域和用户名,写入%APPDATA%\Microsoft\gertg4wf.ps1并执行,5秒后自删除。

图 23 回传信息

供应链投毒

攻击者克隆了真实存在的开源量化回测库pybroker,把恶意代码伪装成正常开发文件。用户从GitHub克隆恶意库后,一旦运行测试,因为pytest会自动加载被篡改的tests/conftest.py,而它在导入的瞬间就读取同目录下那个恶意的环境变量.env文件,使用0x5A作为密钥XOR解密并执行其中的函数。

图 24 xor解密.env的代码示例

解密的python脚本从github仓库下载key.enc,用文件里硬编码的AES-GCM密钥解密后保存为C:\Users\Public\1.bat,再以cmd.exe/c无窗口方式运行,从而在开发者机器上植入后门并执行后续载荷;整个过程在非Windows上不触发、返回值也伪装成正常的随机数种子,是一次借"跑测试"触发的针对开发者的供应链投毒。

图 25 解密后的恶意python代码

由 Python 下载、解密并执行的脚本通过字符串拼接构造攻击者的 GitHub 下载地址作为 C2,滥用系统自带的certutil.exe/curl.exe副本下载三份文件,包括工具WinRAR(r.dat)、定向载荷real.dat(nircmd程序)、加密包check.dat;并用RAR程序解压得到后续脚本,再创建计划任务实现持久驻留。check.dat 解压出的脚本同上文一样下载后续系统信息收集脚本。

图 26 下载后续载荷代码示例

系统信息收集脚本的两个C2地址均通过多次字符串拼接构造,伪装成Python社区相关站点,意图混入正常流量规避对完整URL的静态检测。还原后为:

http://pythons.mywebcommunity[.]org签到、回连

https://pythoncomunity.wasmer[.]app/wp-content/uploads/

数据回传

通过reg query读取注册表MachineGuid,拼接用户名_token并去空格,构成受害者唯一指纹,注入两个URL的userid/sessid参数。这一设计使攻击者服务端能精确关联每一次回传与具体机器、具体用户、具体投放活动。

图 27 设置用户标识

将多项信息写入%TEMP%下的暂存文件:受害者指纹、计算机名、系统版本(ver/systeminfo)、本地账户(net user)、进程清单(tasklist)、网络配置(ipconfig)、最近文档、用户目录及已装软件,形成完整主机画像供攻击者甄别目标价值。

最后用改名curl向https://pythoncomunity.wasmer[.]app/wp-content/uploads/?sessid=<指纹>发起multipart POST请求,将信息文件上传。

图 28 收集用户信息

三、归属研判

综合攻击目标、技术手法、工具特征等关联分析,我们认为此次攻击活动归属于APT-C-55(Kimsuky)组织。本次攻击投放的诱饵文档以韩文保险金融材料为主体,涉及金融、科研等领域,窃取内容包括系统配置、账户信息等敏感数据,具有典型的情报收集特征,与Kimsuky组织长期针对韩国及周边国家实施窃密活动的战略目标高度一致。攻击者广泛滥用certutil.exe、curl.exe等系统工具副本,采用计划任务持久化,使用公共目录驻留,这些技术手法已成为该组织的标志性特征,与历史攻击活动中的TTP高度吻合。我们综合判定,本次活动归属Kimsuky组织。

附录IOC

c670159a21ee9757f3aa0e94359904d8

bb70e1370ea92d37c7a9924f30b75cab

447818716f682661ed389b45abbcf5dd

7ac672d5bec2b1992f8275a72975e8cd

0dfa4f7ad24afa76b1a217bb28932a1a

d716d26e5b95b201b96c2d81baabf4e9

mf3goke.getenjoyment[.]net

pythons.mywebcommunity[.]org

pythoncomunity.wasmer[.]app

babiest26@outlook[.]com

davidmaximy@proton[.]me

dustinharrise91@outlook[.]com

hazama09093@outlook[.]com

jamestony88@proton[.]me

jfepgd@ejovan3439fjkls94[.]online

leomsoite@gmail[.]com

murayamasi26@outlook[.]com

payuser2026@outlook[.]com

tilang4220@fearest5240[.]online

xufeng.wangsui@hotmail[.]com

yaosiyaosi26@hotmail[.]com

youth3920@outlook[.]com

zhejiong.hangjou@hotmail[.]com

360高级威胁研究院

360 高级威胁研究院隶属于360安全能力中心,负责高级威胁高位能力研究。集结顶尖 APT 威胁狩猎专家,专注于高级威胁的发现、防御、处置和研究,曾在全球范围内率先捕获双杀、双星、噩梦公式等多起业界知名的 0day 在野攻击,独家披露多个国家级 APT 组织的高级行动,赢得业内外的广泛认可,为 360 保障国家网络安全提供有力支撑。

跳转微信打开

本文转载自微信公众号「360威胁情报中心」,查看原文。版权归原作者所有,如有侵权请联系删除。