Kimsuky(APT-Q-2)组织近期 Endoor 恶意软件分析
Contents
团伙背景
Kimsuky,别名 Mystery Baby、Baby Coin、Smoke Screen、Black Banshe 等,奇安信内部跟踪编号为 APT-Q-2。该 APT 组织于 2013 年公开披露,攻击活动最早可追溯至 2012 年。Kimsuky 主要攻击目标为韩国,涉及国防、教育、能源、政府、医疗以及智囊团等领域,以机密信息窃取为主。该组织通常使用社会工程学、鱼叉邮件、水坑攻击等手段投递恶意软件,攻击手法多样,拥有针对 Windows 和 Android 平台的攻击武器。
事件概述
近期奇安信威胁情报中心发现一批 Kimsuky 组织使用的 Endoor 样本,该后门软件使用 Go 语言编写,曾在我们于 2024 年初发布的报告《软件安装包伪装下的 Kimsuky(APT-Q-2)窃密行动》[1]中提及,韩国安全厂商 Ahnlab 将其命名为 Endoor,名字取自样本中 Go 函数路径带有的 "/En/En/" 字符串[2]。
详细分析
相关样本信息如下:
MD5 | VT 上传时间 | 文件名 | 文件类型 |
e5c4f8ad27df5aa60ceb36972e29a5fb | 2025-06-04 00:10:15 UTC | ex.pdf_ | EXE |
b15cadf2a4e6670c075f80d618b26093 | 2025-06-06 07:03:07 UTC | icon.db | DLL |
DLL 样本本身为 Endoor,而 EXE 样本是从自身数据解密出 Endoor 并在内存加载,不过两者使用的 Endoor 核心代码几乎一致,因此先以 DLL 样本为例进行分析,再介绍 EXE 样本作为加载器额外添加的操作。
Endoor
DLL 样本(MD5: b15cadf2a4e6670c075f80d618b26093)的恶意功能通过导出函数 XX 进入,最终调用 Go 编写的函数 main_XX。
Endoor 核心代码带有 "local.github.com" 字符串,疑似伪装为开源代码掩盖其恶意行为。
初始化操作
首先生成标记受害者的 UID。获取 Endoor 感染设备的的主机名和用户名,字符串拼接后计算 MD5 hash,提取 hash 值前 5 字节并转换为十六进制字符串格式,再带上 "XX-" 前缀和表示是否具有管理员权限的后缀("N" 或 "Y")。完整的 UID 格式如下:
"XX-[MD5 hash 部分值]N"或者"XX-[MD5 hash 部分值]Y" |
切换工作目录,并创建 lock 文件保证恶意程序单例运行,lock 文件以生成的 UID 命名。执行完这些初始化操作后,Endoor 进入 LoopSession 的循环。
C&C 通信
Endoor 连接的 C&C 服务器 URL 为 "hxxp://june.drydate.p-e.kr:53/",通过 POST 请求传递数据,与 C&C 服务器的交互主要有获取下发指令(DownloadCommand)和回传结果(UploadResult)两部分。
(1) 获取下发指令
获取指令的请求数据格式如下,参数 1 的值为 "2",参数 2 的值在 UID 后添加了字符 "1"。
a[9 字节随机字符串]=2&b[9 字节随机字符串]=[UID]1&c[9 字节随机字符串]= |
接收到服务器响应后,Endoor 判断首字母是否为 "S"(表示 Success),如果是则尝试对首字母之外的其他数据进行 base64 解码。解码数据由 4 字节的加密 key 和加密数据组成,然后进一步执行解密操作。
(2) 回传结果
回传结果的请求数据格式如下,参数 1 的值为 "1",参数 2 的值在 …
Kimsuky,别名 Mystery Baby、Baby Coin、Smoke Screen、Black Banshe 等,奇安信内部跟踪编号为 APT-Q-2。该 APT 组织于 2013 年公开披露,攻击活动最早可追溯至 2012 年。Kimsuky 主要攻击目标为韩国,涉及国防、教育、能源、政府、医疗以及智囊团等领域,以机密信息窃取为主。该组织通常使用社会工程学、鱼叉邮件、水坑攻击等手段投递恶意软件,攻击手法多样,拥有针对 Windows 和 Android 平台的攻击武器。
事件概述
近期奇安信威胁情报中心发现一批 Kimsuky 组织使用的 Endoor 样本,该后门软件使用 Go 语言编写,曾在我们于 2024 年初发布的报告《软件安装包伪装下的 Kimsuky(APT-Q-2)窃密行动》[1]中提及,韩国安全厂商 Ahnlab 将其命名为 Endoor,名字取自样本中 Go 函数路径带有的 "/En/En/" 字符串[2]。
详细分析
相关样本信息如下:
MD5 | VT 上传时间 | 文件名 | 文件类型 |
e5c4f8ad27df5aa60ceb36972e29a5fb | 2025-06-04 00:10:15 UTC | ex.pdf_ | EXE |
b15cadf2a4e6670c075f80d618b26093 | 2025-06-06 07:03:07 UTC | icon.db | DLL |
DLL 样本本身为 Endoor,而 EXE 样本是从自身数据解密出 Endoor 并在内存加载,不过两者使用的 Endoor 核心代码几乎一致,因此先以 DLL 样本为例进行分析,再介绍 EXE 样本作为加载器额外添加的操作。
Endoor
DLL 样本(MD5: b15cadf2a4e6670c075f80d618b26093)的恶意功能通过导出函数 XX 进入,最终调用 Go 编写的函数 main_XX。
Endoor 核心代码带有 "local.github.com" 字符串,疑似伪装为开源代码掩盖其恶意行为。
初始化操作
首先生成标记受害者的 UID。获取 Endoor 感染设备的的主机名和用户名,字符串拼接后计算 MD5 hash,提取 hash 值前 5 字节并转换为十六进制字符串格式,再带上 "XX-" 前缀和表示是否具有管理员权限的后缀("N" 或 "Y")。完整的 UID 格式如下:
"XX-[MD5 hash 部分值]N"或者"XX-[MD5 hash 部分值]Y" |
切换工作目录,并创建 lock 文件保证恶意程序单例运行,lock 文件以生成的 UID 命名。执行完这些初始化操作后,Endoor 进入 LoopSession 的循环。
C&C 通信
Endoor 连接的 C&C 服务器 URL 为 "hxxp://june.drydate.p-e.kr:53/",通过 POST 请求传递数据,与 C&C 服务器的交互主要有获取下发指令(DownloadCommand)和回传结果(UploadResult)两部分。
(1) 获取下发指令
获取指令的请求数据格式如下,参数 1 的值为 "2",参数 2 的值在 UID 后添加了字符 "1"。
a[9 字节随机字符串]=2&b[9 字节随机字符串]=[UID]1&c[9 字节随机字符串]= |
接收到服务器响应后,Endoor 判断首字母是否为 "S"(表示 Success),如果是则尝试对首字母之外的其他数据进行 base64 解码。解码数据由 4 字节的加密 key 和加密数据组成,然后进一步执行解密操作。
(2) 回传结果
回传结果的请求数据格式如下,参数 1 的值为 "1",参数 2 的值在 …
IoC
http://june.drydate.p-e.kr:53/
162.216.114.133
b15cadf2a4e6670c075f80d618b26093
d4db59139f2ae0b5c5da192d8c6c5fa0
e5c4f8ad27df5aa60ceb36972e29a5fb
162.216.114.133
b15cadf2a4e6670c075f80d618b26093
d4db59139f2ae0b5c5da192d8c6c5fa0
e5c4f8ad27df5aa60ceb36972e29a5fb