软件安装包伪装下的Kimsuky(APT-Q-2)窃密行动
团伙背景
事件概述
根据窃密软件样本携带的数字签名我们关联到另一种用作后门的恶意软件,同样为Go编写,并带有VMProtect保护壳。此后门软件与Kimsuky组织历史攻击样本存在多处特征重叠,因此我们认为这两种恶意软件均和Kimsuky组织存在关联。
详细分析
窃密软件
以软件安装包为伪装的攻击样本基本信息如下。
MD5 | 文件类型 | 数字签名时间 |
27ef6917fe32685fdf9b755eb8e97565 | EXE | 2023-12-13 08:25:21 UTC |
7457dc037c4a5f3713d9243a0dfb1a2c | DLL | 2023-12-13 08:10:34 UTC |
7b6d02a459fdaa4caa1a5bf741c4bd42 | EXE | 2024-01-05 08:04:01 UTC |
88f183304b99c897aacfa321d58e1840 | DLL | 2023-12-18 01:57:13 UTC |
19c2decfa7271fa30e48d4750c1d18c1 | EXE | 2024-01-08 13:58:33 UTC |
c8e7b0d3b6afa22e801cacaf16b37355 | DLL | 2023-12-18 01:57:34 UTC |
上面攻击样本可以分为3组:EXE为初始样本,起到dropper的功能,DLL为释放的窃密软件。3组样本对应的正常安装程序去重后共有如下两个。
MD5 | 安装程序名称 |
eb8d073840e95cf24c9c3f5a2b6470e0 | NXTPKIENT.exe |
d259ef7500e7e667afc42e9570f9707a | NX_PRNMAN.exe |
Dropper
初始EXE样本首先在同目录释放正常安装程序NXTPKIENTS.exe,然后在"%Temp%"目录释放bat脚本。Bat脚本的文件名格式为"%Temp%\[4字节随机字符串].tmp.bat",该脚本负责删除初始EXE样本和自身。接着在"%AppData%\Media"目录释放恶意DLL,文件名格式为"%AppData%\Media\win-[随机字符串].db"。
启动释放的bat脚本和安装包程序NXTPKIENTS.exe。Bat脚本由于此时的初始EXE样本还处于运行状态,因此会进入循环。
释放用于DLL运行的标志文件"C:\programdata\hai.a",调用rundll32.exe启动恶意DLL中名为"hai"的导出函数。初始EXE样本至此完成主要工作。
窃密DLL
恶意DLL由Go语言实现,根据样本中的Go元数据信息,该窃密软件的代号似乎为TrollAgent。恶意DLL首先调用schtasks.exe命令删除名为"ChromeUpdateTaskMachineUAC"的计划任务。随后检查标志文件"C:\programdata\hai.a"是否存在,如果不存在则表明DLL不是由初始EXE样本启动,直接进入自删除过程:再次删除计划任务"ChromeUpdateTaskMachineUAC",释放并执行用于自删除的powershell脚本。
如果标志文件hai.a存在,则将其删除,然后执行窃密软件的主要功能。
在配置初始化过程中,窃密软件将版本设为"gt@2.0",获取感染设备网络接口的MAC地址,并以此生成标记受害者的UID,设置用于C&C通信的URL列表。
http://ar.kostin.p-e.kr/index.php |
http://ai.kostin.p-e.kr/index.php |
用于组织窃密软件与C&C服务器通信数据的结构体名为NpwwMsg。窃密软件将其转换为字节序列后,使用XorCBC的方式进行加密,密钥为[0xDD, 0x33, 0x99, 0xCC],再对加密数据进行Base64编码。
SendPing函数向C&C发送的请求内容如下。
窃密软件通过SendPing函数获取到C&C的"ok"响应后,开始收集感染设备的各类信息,将其保存到文件中,加密后回传给C&C服务器。收集的信息包括以下几类。
(1) 窃密软件的配置数据
配置数据转换为JSON字符串后,保存在".org"后缀的临时文件中,加密回传给C&C后删除该临时文件。(2) 指定目录的数据
目录 | 说明 |
"%USERPROFILE%\.ssh\" | SSH数据 |
"%USERPROFILE%\appdata\roaming\filezilla\" | FileZilla数据 |
"%USERPROFILE%\appdata\local\packages\microsoft.microsoftstickynotes_8wekyb3d8bbwe\localstate\" | Microsoft Sticky Notes数据 |
C盘下某未知目录或文件 | - |
17ccb0832c3382b5f9e86236e035d899a351c98f3871080c138d4494218cbbc2b6f9dc43705ed97e8b0b09f25752302094e0d297151f67b22328af95610f72f1 |
(3) 浏览器数据
窃密软件中配置的浏览器数据目录如下,多了一款由韩国Naver公司开发的Naver Whale浏览器。
(4) Cmd命令收集的信息
窃密软件还执行下列cmd命令收集信息。命令 | 收集信息说明 |
systeminfo | Windows系统软硬件 |
net user | 系统的用户 |
query user | 系统的用户会话 |
powershell Get-CimInstance -Namespace root/SecurityCenter2 -Classname AntivirusProduct | 安装的杀毒软件 |
wmic qfe | 安装的Windows系统和软件更新 |
wmic startup get | 启动项 |
wmic logicaldisk get | 磁盘 |
ipconfig /all | 网络配置 |
arp -a | ARP缓存 |
route print | 路由表 |
tasklist | 进程列表 |
wmic process get Caption, Commandline | 进程命令行 |
dir "%programfiles%" | %programfiles%目录 |
dir "%programfiles% (x86)" | %programfiles% (x86)目录 |
dir "%programdata%\Microsoft\Windows\Start Menu\Programs" | 系统开始菜单的程序目录(包含一些安装软件的信息) |
dir "%appdata%\Microsoft\Windows\Recent" | 当前用户最近访问的文件或文件夹 |
dir /s "%userprofile%\desktop" | 当前用户桌面 |
dir /s "%userprofile%\downloads" | 当前用户下载目录 |
dir /s "%userprofile%\documents" | 当前用户文档目录 |
以上5类信息的加密文件保存在窃密软件配置数据的LocalPath目录中,回传C&C后立即删除。使用的加密文件名称以及存放的对应信息分别如下。
加密文件名称 | 保存信息 |
gcfg@[时间戳].gte1 | 窃密软件配置数据 |
tcd@[时间戳].gte1 | C盘下某未知目录或文件的数据 |
tfd@[时间戳].gte1 | FileZilla目录数据 |
tsd@[时间戳].gte1 | SSH目录数据 |
tnd@[时间戳].gte1 | Sticky Notes目录数据 |
tbd@[时间戳].gte1 | 浏览器数据 |
ccmd@[时间戳].gte1 | Cmd命令收集的信息 |
ssht@[时间戳].gte1 | 截屏数据 |
这种单次运行的方式可以增加攻击行动的隐蔽性,窃密软件从感染设备上收集的丰富数据,有助于攻击者从中挑选出高价值目标采取进一步行动。
后门
与窃密软件带有相同数字签名的后门程序基本信息如下,Go代码使用的项目名称为"mirror"。
MD5 | 87429e9223d45e0359cd1c41c0301836 |
文件名 | svchost.exe |
文件大小 | 7.67 MB (8043416 bytes) |
数字签名时间 | 2024-01-05 06:12:29 UTC |
后门运行后首先检查运行环境,如果检查不通过,则立即删除对应的磁盘文件并退出程序。检查操作包括:(1) 获取注册表"HKEY_CURRENT_USER\SOFTWARE\Microsoft"下"LastUpdateName"的值;(2) 启动时的命令行参数数量是否等于2。以上两点表明该后门是由其他恶意软件启动。
后门通过当前用户HOME目录下是否存在锁文件"update.lock"保证单例运行。命令行的第2个参数支持两种选项:"UpdateAll"和"UpdateNormal"。
参数UpdateAll
"UpdateAll"参数负责建立持久化。首先设置注册表"HKEY_CURRENT_USER\SOFTWARE\Microsoft"下"LastUpdateTime"的值,作为与C&C建立连接的时间。然后将后门文件复制为当前用户HOME目录下的"svchost.exe"文件。创建名为"WindowsUpdate"的计划任务,以参数"UpdateNormal"运行复制的svchost.exe文件。最后删除当前程序的磁盘文件并退出运行。
参数UpdateNormal
"UpdateNormal"参数负责与C&C服务器通信。首先根据感染设备的计算机名和用户名生成标记受害者的UID。获取注册表"HKEY_CURRENT_USER\SOFTWARE\Microsoft"下"LastUpdateTime"的值,判断是否到达与C&C建立连接的时间。未到时间则休眠20s后再次检查,反之则调用LoopSession函数进入与C&C服务器交互的过程。C&C通信
C&C服务器使用的域名coolsystem[.]co.kr很可能来自被攻陷的网站。后门获取指令和回传结果均是向URL "hxxp://coolsystem.co.kr/admin/mail/index.php"发送POST请求。
获取指令的请求数据格式如下,参数1的值为"2",参数2的值在UID后添加了字符"1"。
a[9字节随机字符串]=2&b[9字节随机字符串]=[UID]1&c[9字节随机字符串]= |
回传结果的请求数据格式如下,参数1的值为"1",参数2的值在UID后加了字符"2"。
x[9字节随机字符串]=1&y[9字节随机字符串]=[UID]2&z[9字节随机字符串]=[加密数据] |
获取指令后,后门根据响应数据的前两字节进行指令分发,之后的数据作为指令参数。
后门支持的指令如下:
C&C指令 | 函数名 | 功能 |
"01" (0x3130) | Process_Sleep | 休眠指定时间,设置注册表LastUpdateTime值,结束当前C&C通信会话 |
"02" (0x3230) | Process_Cmd | 执行shell命令 |
"03" (0x3330) | Process_Pwd | 获取当前工作目录 |
"04" (0x3430) | Process_Cd | 切换工作目录 |
"05" (0x3530) | Process_Conn | 向指定服务器建立TCP连接 |
"06" (0x3630) | Process_Exit | 退出程序 |
"07" (0x3730) | Process_Where | 获取程序的文件路径 |
"08" (0x3830) | Process_Dirsize | 获取指定目录的统计信息(子目录和文件数量,目录中文件总大小) |
"09" (0x3930) | Process_GetInfo | 获取设备信息,包括主机名、用户名、CPU信息、内存信息、网卡信息 |
"10" (0x3031) | Process_CmdPath | 设置执行shell命令的文件路径(默认为cmd.exe) |
"11" (0x3131) | Process_Codepage | 设置代码页,默认为euc-kr(韩语) |
"12" (0x3231) | Process_Hibernate | 设置下次连接的具体日期时间(解析时区为韩国时区Asia/Seoul),设置注册表LastUpdateTime值,结束当前C&C通信会话 |
"13" (0x3331) | Process_Die | 删除持久化对应的计划任务,删除程序文件并退出程序 |
"14" (0x3431) | Process_SocksAdd | 添加Socks5代理 |
"15" (0x3531) | Process_SocksList | 列出Socks5代理 |
"30" (0x3033) | Process_Upload | 向感染设备上传文件 |
"31" (0x3133) | Process_Download | 从感染设备下载文件 |
溯源关联
另一方面,后门与几个月前披露的Kimsuky攻击活动[1]使用的攻击样本(MD5: d6abeeb469e2417bbcd3c122c06ba099)存在下面多处特征重叠。
(1) 生成受害者UID方式相似
后门生成的UID在hash值前拼接了"g-"字符串,而之前的攻击样本生成的UID是在系统盘序列号后拼接"0-2.3"字符串。(2) 部分远控指令相同
均有getinfo, where, die, pwd, cd, sleep等攻击指令。(3) C&C通信格式相似
都借助POST请求获取指令和回传结果,并且请求数据中参数的名称为随机生成的字符串,而参数值的构造方式相同。之前的攻击样本获取攻击指令的数据格式如下,参数1的值为"2",参数2的值在UID后添加字符"1"。[10字节随机字符串]=2&[10字节随机字符串]=[UID]1&[10字节随机字符串]= |
攻击样本回传结果的数据格式如下,参数1的值为"1",参数2的值在UID后添加字符"2"。
[10字节随机字符串]=1&[10字节随机字符串]=[UID]2&[10字节随机字符串]=[加密数据] |
综上,我们认为此次发现的窃密软件和后门与Kimsuky近期的攻击活动有关。
总结
防护建议
若需运行,安装来历不明的应用,可先通过奇安信威胁情报文件深度分析平台(https://sandbox.ti.qianxin.com/sandbox/page)进行判别。目前已支持包括Windows、安卓平台在内的多种格式文件深度分析。
目前,基于奇安信威胁情报中心的威胁情报数据的全线产品,包括奇安信威胁情报平台(TIP)、天擎、天眼高级威胁检测系统、奇安信NGSOC、奇安信态势感知等,都已经支持对此类攻击的精确检测。
IOC
27ef6917fe32685fdf9b755eb8e97565
7457dc037c4a5f3713d9243a0dfb1a2c
7b6d02a459fdaa4caa1a5bf741c4bd42
88f183304b99c897aacfa321d58e1840
19c2decfa7271fa30e48d4750c1d18c1
c8e7b0d3b6afa22e801cacaf16b37355
87429e9223d45e0359cd1c41c0301836
C&C
ar.kostin.p-e.kr
ai.kostin.p-e.kr
qi.limsjo.p-e.kr
ai.limsjo.p-e.kr
ol.negapa.p-e.kr
ai.negapa.p-e.kr
URL
hxxp://ar.kostin.p-e.kr/index.php
hxxp://ai.kostin.p-e.kr/index.php
hxxp://qi.limsjo.p-e.kr/index.php
hxxp://ai.limsjo.p-e.kr/index.php
hxxp://ol.negapa.p-e.kr/index.php
hxxp://ai.negapa.p-e.kr/index.php
hxxp://coolsystem.co.kr/admin/mail/index.php
参考链接
点击阅读原文至ALPHA 7.0
即刻助力威胁研判