Kimsuky APT组织对韩国国防安全相关部门的定向攻击活动分析
Contents
一、概述
Kimsuky组织为境外APT组织,该组织长期针对韩国政府、新闻、医疗、金融等机构进行攻击活动,经常以政府相关热点事件为诱饵进行定向攻击,窃取高价值情报是其主要攻击目的之一。
微步情报局近期通过威胁狩猎系统监测到Kimsuky APT组织针对韩国国防安全相关部门的定向攻击活动,分析有如下发现:
攻击者以“韩美峰会参考资料”、“韩国国防部招标文件”、“韩国互联网安全局APP”相关主题为诱饵进行定向攻击,其中所投递的诱饵文档为HWP格式,具有明显的针对性;
所使用木马包括Windows版本和Android版本;
使用的间谍类型RAT组件在旧版本的基础上丰富了间谍功能,包括键盘监控、屏幕监控、文件监控、USB监控等;
针对特定类型文档、文件进行窃取,具有明显的间谍属性;
攻击者在近半年时间持续对韩国国防安全相关部门进行定向攻击活动;
据韩国媒体《朝鲜日报》报道,近期韩国原子能研究院遭到Kimsuky攻击,攻击者利用原子能研究院V*P*N设备漏洞成功入侵其内网;
微步情报局近期监测到具有相同背景的Lazarus APT组织同样在针对军工企业进行定向攻击活动,与Kimsuky的攻击目标产生了一定的重叠,二者疑似是被统一策划进行定向攻击活动;
微步情报局通过对相关样本、IP和域名的溯源分析,提取了多条相关IOC,用于威胁情报检测。微步在线威胁感知平台TDP、本地威胁情报管理平台TIP、威胁情报云API、互联网安全接入服务OneDNS、主机威胁检测与响应平台OneEDR等均已支持对此次攻击事件和团伙的检测。
二、详情
攻击者将木马伪装为HWP文档、微软相关组件图标,捆绑诱饵文档向目标投递。诱饵文档为韩国HWP文档格式,具有明显的针对性。
图[1]. 诱饵文档截图
在木马模块中,会从C2服务器下载下阶段脚本执行,分析时C2服务器已无法正常响应,但根据关联信息显示,其最终加载该组织惯用的 RAT 间谍类型模块。
图[2].样本执行流程图
Android版本木马伪装成KISA(韩国互联网安全局)相关APP进行间谍活动。
图[3].伪装“KISA Mobile Security”APP的启动界面
三、样本分析
3.1 “韩国国防部招标文件”
文件名称
1. 2021년 사업 계획 (시설본부 자료 참고 보완) - 210316-1
(1. 2021年经营计划(参考设施总部补充)- 210316-1)
SHA256
6184acd90c735783aafd32c3346c94332fa8c0212ec128a61f2764bd224c2535
编译时间
2021/03/16 23:51:07
样本所使用字符串均以加密形式存储,执行后,首先创建互斥体防止重复运行,互斥体名称"windows update {2021-1020-02-03-A}"。
图[4].在Dropper中创建互斥体
接着在当前执行目录释放并执行诱饵文档并模拟打开,文档截图如图[1]所示,其大致内容为韩国军方相关部门工程、材料等招标文件。
同时还会通过系统组件mshta.exe 加载执行远程脚本。
URL:http://v*p*n.atooi.ga/?query=5
图[5].使用mshta从服务器下载远程脚本
最后释放bat文件到temp目录并执行该文件进行自删除。
图[6].用于自删除的bat文件
3.2 “韩美峰会参考资料”
文件名称
한미 정상회담(5.21) 참고 자료 (수정본)
(韩美峰会参考资料(5月21日)(修订版))
SHA256
679a17688cde5d57c4662df12ab134f64931497b87dfffd1cd87fd38ca2feeff
编译时间
2021/05/21 00:12:04
在捆绑“韩美峰会参考资料”相关诱饵文档的木马中,攻击者使用了类似的组件,但使用VMP加壳保护。
图[7].木马PE区段中的vmp节表
诱饵文档如图[1]所示,引用了近期“韩美首脑会谈”的热点话题,木马执行流程与上面样本基本一致,调用mshta.exe从服务器拉取下阶段脚本执行,二者IP解析均指向同一服务器:104.128.239.70。
URL:http://mail.kumb.cf/?query=5
图[8].利用mshta从服务器下载脚本
3.3 间谍模块-Windows
研究人员分析发现,其用于存放脚本的C2服务器已无法正常响应,但根据关联到的同源RAT样本发现,该样本使用的C2服务器与上述服务器被解析为同一个IP 地址(104.128.239.70)。
MD5
c861f25bb943f77a909b33d62bb71926
SHA1
576b953cb4fe71adb71a338a42524b0e424824c1
SHA256
fd59597169668b90c47d0ad6db1bcd7d778c6d54ee3c42bdd2d86b2d2d34c885
文件大小
485888 字节 (474.50 KB)
文件格式
PE64 DLL
编译时间
2021/05/07 05:06:47
C&C
anto.shore.ml
通过regsvr*32.exe启动该RAT,并调用恶意流程入口点DllRegisterServer。
图[9].RAT模块的导出表
执行后首先进行安装流程,自我复制到以下目录:
C:\\ProgramData\\Software\\Microsoft\\Windows\\MDF\\WDFSync\\WDFSync.dll
图[10].RAT模块的自我复制
通过设置注册表名为 “WDFSync” 的开机启动项,实现持久化机制。
图[11].RAT模块中设置注册表开机启动项
接着以“SpyRegsvr*32-20210507140631”为名创建互斥体,此种类型互斥体在Kimsuky之前的攻击活动中多次出现,其中有“Spy”关键字和编译时间信息“20210507”。
图[12].RAT模块中创建互斥体
通过检查UAC注册表项ConsentPromptBehaviorAdmin和PromptOnSecureDesktop来确定UAC是否关闭,以及是否为管理员模式,如果否的话将会调用powershell提权运行。
powershell.exe start-process regsvr*32.exe -argumentlist '/s [木马路径]' -verb runas
木马使用两层命令结构与C2服务器通信,使用的C2服务器为:anto.shore.ml。
?m={指令1}&p1={硬盘序列号}&p2={指令2}
该模块可支持多种间谍类型的远控功能,包括远程Shell、文件上传/下载/执行、键盘记录、屏幕截图、硬盘/USB监控等功能,具体远程指令代码如下:
指令1格式:
a
收集主机信息
b
上传数据模式
c
命令执行
d
删除命令
e
上传命令模式
f
文件列表模式
g
删除文件模式
h
检查文件模式
指令2格式:
b
上传文件和USB数据
c
上传截图
d
上传文件
e
上传键盘记录、屏幕截图、文件监控、USB监控数据
f
下载文件
0
CmdShell
1
下载Dll模块使用regsvr*32加载执行
2
内存加载执行PE模块
3
下载文件并执行
其中键盘记录、屏幕截图、文件监控、USB监控被放到单独线程中执行,除键盘记录为即时监控外,文件监控频率为60秒,屏幕监控频率为300秒。而在文件监控中,木马针对txt、hwp、pdf、doc、xls、ppt文档类型文件进行窃取,表明攻击者对此类文件非常感兴趣。
图[13].窃取文件流程中特定的文档类型
3.4 间谍模块-Android
文件名称
Kisa Vaccine.apk
SHA256
fe1a734019f0dc714bd3360e2369853ea97c02f108afe963769318934470967b
SHA1
16b3487022b674040227afc8979ffedd2f70b67e
MD5
e7caf25de7ce463a6f22ecb8689389ad
文件大小
1.28 MB (1337147 bytes)
文件格式
Android
C&C
app.at-me.ml
Android平台样本伪装成名为“KISA Mobile Security”的APP,KISA即为“韩国互联网安全局”,是韩国重要的网络安全保障部门。
图[14].伪装为“KISA Mobile Security”的APP图标
在Androidmanifest.xml中,可以看到该APP申请读取存储卡、手机状态、短信、开机启动等敏感权限。
图[15].APP中的 Androidmanifest.xml
在MainActivity中启动MainService用于执行木马功能。
图[16]. 启动MainService
核心函数onStartCommand中具体参数都是被加密过的,需要首先调用c.c.a.g.c.b(string)对参数进行解密。
图[17]. onStartCommand调用c.c.a.g.c.b
分析参数解密函数,为非标准加密方法。
public static String b(String str) { try { int length = str.length(); int i = length / 2; byte[] bArr = new byte[i]; int i2 = 0; for (int i3 = 0; i3 < length; i3 += 2) { bArr[i3 / 2] = (byte) ((Character.digit(str.charAt(i3), 16) << 4) + Character.digit(str.charAt(i3 + 1), 16)); } int i4 = i - 16; byte[] bArr2 = new byte[i4]; byte[] bArr3 = new byte[16]; System.arraycopy(bArr, 0, bArr3, 0, 16); int i5 = 0; byte b2 = 0; while (i2 < i4) { if (i5 >= 16) { …
Kimsuky组织为境外APT组织,该组织长期针对韩国政府、新闻、医疗、金融等机构进行攻击活动,经常以政府相关热点事件为诱饵进行定向攻击,窃取高价值情报是其主要攻击目的之一。
微步情报局近期通过威胁狩猎系统监测到Kimsuky APT组织针对韩国国防安全相关部门的定向攻击活动,分析有如下发现:
攻击者以“韩美峰会参考资料”、“韩国国防部招标文件”、“韩国互联网安全局APP”相关主题为诱饵进行定向攻击,其中所投递的诱饵文档为HWP格式,具有明显的针对性;
所使用木马包括Windows版本和Android版本;
使用的间谍类型RAT组件在旧版本的基础上丰富了间谍功能,包括键盘监控、屏幕监控、文件监控、USB监控等;
针对特定类型文档、文件进行窃取,具有明显的间谍属性;
攻击者在近半年时间持续对韩国国防安全相关部门进行定向攻击活动;
据韩国媒体《朝鲜日报》报道,近期韩国原子能研究院遭到Kimsuky攻击,攻击者利用原子能研究院V*P*N设备漏洞成功入侵其内网;
微步情报局近期监测到具有相同背景的Lazarus APT组织同样在针对军工企业进行定向攻击活动,与Kimsuky的攻击目标产生了一定的重叠,二者疑似是被统一策划进行定向攻击活动;
微步情报局通过对相关样本、IP和域名的溯源分析,提取了多条相关IOC,用于威胁情报检测。微步在线威胁感知平台TDP、本地威胁情报管理平台TIP、威胁情报云API、互联网安全接入服务OneDNS、主机威胁检测与响应平台OneEDR等均已支持对此次攻击事件和团伙的检测。
二、详情
攻击者将木马伪装为HWP文档、微软相关组件图标,捆绑诱饵文档向目标投递。诱饵文档为韩国HWP文档格式,具有明显的针对性。
图[1]. 诱饵文档截图
在木马模块中,会从C2服务器下载下阶段脚本执行,分析时C2服务器已无法正常响应,但根据关联信息显示,其最终加载该组织惯用的 RAT 间谍类型模块。
图[2].样本执行流程图
Android版本木马伪装成KISA(韩国互联网安全局)相关APP进行间谍活动。
图[3].伪装“KISA Mobile Security”APP的启动界面
三、样本分析
3.1 “韩国国防部招标文件”
文件名称
1. 2021년 사업 계획 (시설본부 자료 참고 보완) - 210316-1
(1. 2021年经营计划(参考设施总部补充)- 210316-1)
SHA256
6184acd90c735783aafd32c3346c94332fa8c0212ec128a61f2764bd224c2535
编译时间
2021/03/16 23:51:07
样本所使用字符串均以加密形式存储,执行后,首先创建互斥体防止重复运行,互斥体名称"windows update {2021-1020-02-03-A}"。
图[4].在Dropper中创建互斥体
接着在当前执行目录释放并执行诱饵文档并模拟打开,文档截图如图[1]所示,其大致内容为韩国军方相关部门工程、材料等招标文件。
同时还会通过系统组件mshta.exe 加载执行远程脚本。
URL:http://v*p*n.atooi.ga/?query=5
图[5].使用mshta从服务器下载远程脚本
最后释放bat文件到temp目录并执行该文件进行自删除。
图[6].用于自删除的bat文件
3.2 “韩美峰会参考资料”
文件名称
한미 정상회담(5.21) 참고 자료 (수정본)
(韩美峰会参考资料(5月21日)(修订版))
SHA256
679a17688cde5d57c4662df12ab134f64931497b87dfffd1cd87fd38ca2feeff
编译时间
2021/05/21 00:12:04
在捆绑“韩美峰会参考资料”相关诱饵文档的木马中,攻击者使用了类似的组件,但使用VMP加壳保护。
图[7].木马PE区段中的vmp节表
诱饵文档如图[1]所示,引用了近期“韩美首脑会谈”的热点话题,木马执行流程与上面样本基本一致,调用mshta.exe从服务器拉取下阶段脚本执行,二者IP解析均指向同一服务器:104.128.239.70。
URL:http://mail.kumb.cf/?query=5
图[8].利用mshta从服务器下载脚本
3.3 间谍模块-Windows
研究人员分析发现,其用于存放脚本的C2服务器已无法正常响应,但根据关联到的同源RAT样本发现,该样本使用的C2服务器与上述服务器被解析为同一个IP 地址(104.128.239.70)。
MD5
c861f25bb943f77a909b33d62bb71926
SHA1
576b953cb4fe71adb71a338a42524b0e424824c1
SHA256
fd59597169668b90c47d0ad6db1bcd7d778c6d54ee3c42bdd2d86b2d2d34c885
文件大小
485888 字节 (474.50 KB)
文件格式
PE64 DLL
编译时间
2021/05/07 05:06:47
C&C
anto.shore.ml
通过regsvr*32.exe启动该RAT,并调用恶意流程入口点DllRegisterServer。
图[9].RAT模块的导出表
执行后首先进行安装流程,自我复制到以下目录:
C:\\ProgramData\\Software\\Microsoft\\Windows\\MDF\\WDFSync\\WDFSync.dll
图[10].RAT模块的自我复制
通过设置注册表名为 “WDFSync” 的开机启动项,实现持久化机制。
图[11].RAT模块中设置注册表开机启动项
接着以“SpyRegsvr*32-20210507140631”为名创建互斥体,此种类型互斥体在Kimsuky之前的攻击活动中多次出现,其中有“Spy”关键字和编译时间信息“20210507”。
图[12].RAT模块中创建互斥体
通过检查UAC注册表项ConsentPromptBehaviorAdmin和PromptOnSecureDesktop来确定UAC是否关闭,以及是否为管理员模式,如果否的话将会调用powershell提权运行。
powershell.exe start-process regsvr*32.exe -argumentlist '/s [木马路径]' -verb runas
木马使用两层命令结构与C2服务器通信,使用的C2服务器为:anto.shore.ml。
?m={指令1}&p1={硬盘序列号}&p2={指令2}
该模块可支持多种间谍类型的远控功能,包括远程Shell、文件上传/下载/执行、键盘记录、屏幕截图、硬盘/USB监控等功能,具体远程指令代码如下:
指令1格式:
a
收集主机信息
b
上传数据模式
c
命令执行
d
删除命令
e
上传命令模式
f
文件列表模式
g
删除文件模式
h
检查文件模式
指令2格式:
b
上传文件和USB数据
c
上传截图
d
上传文件
e
上传键盘记录、屏幕截图、文件监控、USB监控数据
f
下载文件
0
CmdShell
1
下载Dll模块使用regsvr*32加载执行
2
内存加载执行PE模块
3
下载文件并执行
其中键盘记录、屏幕截图、文件监控、USB监控被放到单独线程中执行,除键盘记录为即时监控外,文件监控频率为60秒,屏幕监控频率为300秒。而在文件监控中,木马针对txt、hwp、pdf、doc、xls、ppt文档类型文件进行窃取,表明攻击者对此类文件非常感兴趣。
图[13].窃取文件流程中特定的文档类型
3.4 间谍模块-Android
文件名称
Kisa Vaccine.apk
SHA256
fe1a734019f0dc714bd3360e2369853ea97c02f108afe963769318934470967b
SHA1
16b3487022b674040227afc8979ffedd2f70b67e
MD5
e7caf25de7ce463a6f22ecb8689389ad
文件大小
1.28 MB (1337147 bytes)
文件格式
Android
C&C
app.at-me.ml
Android平台样本伪装成名为“KISA Mobile Security”的APP,KISA即为“韩国互联网安全局”,是韩国重要的网络安全保障部门。
图[14].伪装为“KISA Mobile Security”的APP图标
在Androidmanifest.xml中,可以看到该APP申请读取存储卡、手机状态、短信、开机启动等敏感权限。
图[15].APP中的 Androidmanifest.xml
在MainActivity中启动MainService用于执行木马功能。
图[16]. 启动MainService
核心函数onStartCommand中具体参数都是被加密过的,需要首先调用c.c.a.g.c.b(string)对参数进行解密。
图[17]. onStartCommand调用c.c.a.g.c.b
分析参数解密函数,为非标准加密方法。
public static String b(String str) { try { int length = str.length(); int i = length / 2; byte[] bArr = new byte[i]; int i2 = 0; for (int i3 = 0; i3 < length; i3 += 2) { bArr[i3 / 2] = (byte) ((Character.digit(str.charAt(i3), 16) << 4) + Character.digit(str.charAt(i3 + 1), 16)); } int i4 = i - 16; byte[] bArr2 = new byte[i4]; byte[] bArr3 = new byte[16]; System.arraycopy(bArr, 0, bArr3, 0, 16); int i5 = 0; byte b2 = 0; while (i2 < i4) { if (i5 >= 16) { …
IoC
104.128.239.70
1302ef3a4b3ebd2127b21ec56e140cfd74aebd93
16b3487022b674040227afc8979ffedd2f70b67e
2dccc8eb48bc7bdbde42cc4450086acac2c6ceeb
576b953cb4fe71adb71a338a42524b0e424824c1
6184acd90c735783aafd32c3346c94332fa8c0212ec128a61f2764bd224c2535
679a17688cde5d57c4662df12ab134f64931497b87dfffd1cd87fd38ca2feeff
742e04ae5f2cd42cf514abbd1956c5993a3a3b268f4abe6e107f81097a75d509
7e041b101e1e574fb81f3f0cdf1c72b8
97e2f035a2fac5ee8d07a204fcf36edc6417fd8099c66d95f314c05b45a9d34f
[email protected]
c861f25bb943f77a909b33d62bb71926
e7caf25de7ce463a6f22ecb8689389ad
f0255dfcb932c3072c2489124b25b373
fd59597169668b90c47d0ad6db1bcd7d778c6d54ee3c42bdd2d86b2d2d34c885
fe1a734019f0dc714bd3360e2369853ea97c02f108afe963769318934470967b
http://app.at-me.ml/index.php
http://app.at-me.ml/index.php?m=b&p1="android_id
http://mail.kumb.cf/?query=5
1302ef3a4b3ebd2127b21ec56e140cfd74aebd93
16b3487022b674040227afc8979ffedd2f70b67e
2dccc8eb48bc7bdbde42cc4450086acac2c6ceeb
576b953cb4fe71adb71a338a42524b0e424824c1
6184acd90c735783aafd32c3346c94332fa8c0212ec128a61f2764bd224c2535
679a17688cde5d57c4662df12ab134f64931497b87dfffd1cd87fd38ca2feeff
742e04ae5f2cd42cf514abbd1956c5993a3a3b268f4abe6e107f81097a75d509
7e041b101e1e574fb81f3f0cdf1c72b8
97e2f035a2fac5ee8d07a204fcf36edc6417fd8099c66d95f314c05b45a9d34f
[email protected]
c861f25bb943f77a909b33d62bb71926
e7caf25de7ce463a6f22ecb8689389ad
f0255dfcb932c3072c2489124b25b373
fd59597169668b90c47d0ad6db1bcd7d778c6d54ee3c42bdd2d86b2d2d34c885
fe1a734019f0dc714bd3360e2369853ea97c02f108afe963769318934470967b
http://app.at-me.ml/index.php
http://app.at-me.ml/index.php?m=b&p1="android_id
http://mail.kumb.cf/?query=5