lazarusholic

Everyday is lazarus.dayβ

朝鲜组织Kimsuky投放xml恶意软件

2024-09-27, Aliyun
https://xz.aliyun.com/t/15714
#Kimsuky #XML

Contents

前言
样本信息IOC
一个XML恶意样本。



IOC:

XML样本下载地址:https://www.filescan.io/uploads/66d9c2130c6cfa135b3cbcb4/reports/2c3bda58-f4da-424e-8d56-22e82ad24d83/details

行为分析
从外部下载脚本


该xml恶意代码使用powershell从外部下载脚本,这里调用iex指令执行括号内的字符串。括号内是iwr对后面的url发起网络请求,从远程服务器下载脚本。-WindowStyle Hidden 用于隐藏窗口。

直接访问该URL:



前俩个字节4d5a是PE文件头标识 MZ 。



最下方,有部分代码,这里将上面的十六进制数据还原为二进制格式,解码后保存为xBqz.mp3,之后再重命名为exe文件并启动一个新进程执行。这里-NoNewWindow避免弹出新窗口,以确保不被发现。

使用cyberchef:



保存为exe文件。

exe文件分析
样本信息


64位GUI,用了UPX打包。



行为分析
1.创建堆和进行初始化




0x100000即为16MB,这里先是用HeapCreate创建了一个堆,拷贝了一些数据给Src。

2.分配内存


使用 HeapAlloc 从刚刚创建的堆中分配了 80 字节内存用于存储一些数据,并且再次分配了 256KB 的内存用于进一步的数据处理。

3.创建事件并初始化


这里创建了一个事件。随后调用函数sub_140055A20。如下。

4.检查当前执行的模块名称


该函数使用GetModuleFileNameW获取当前正在执行的模块名。后面的验证确保了名称的长度为偶数,文件名只能包含特定的字符('0'-'9', 'A'-'Z', 'a'-'z')。

5.填充内容并解密


HeapAlloc再次分配了内存,memmove将加密密钥Src复制给v49。v12指向数据块。

之后用一个while循环 XOR 逐字节进行解密,密钥长度16字节。

6.解析数据


这里检查解密后的 *v11 是否等于21336。之后做了根据不同情况解析。

7.执行


通过 WaitForSingleObject 等待事件信号完成。然后根据v58、v5和v6判断执行函数指针。最后清理内存。



下个断点,进入到该函数中。

第三阶段


sub_7FF72F8F14D4


这里通过遍历PEB的Ldr链表获取模块地址。



该函数解析一个PE结构的文件,即刚刚得到模块地址。通过对遍历该模块并对该模块的条目进行哈希计算,将计算的哈希与给定的哈希表进行匹配。

后面还有俩个函数也是解密和内存操作的。这里分析完不知道具体干啥,解析一些数据最终返回了一个结构体指针。

result


进入return 这的函数。





这里依旧是处理内存模块和各种加密。

总结
算是一次不成功的分析,xml恶意样本下载外部脚本,这个xml被判定为高危,它是由Kimsuky组织投放的恶意软件。但是它下载的外部脚本exe文件,跑了几个沙箱都是安全。vt跑的出来恶意行为,没有分析出来...菜

IoC

cea22277e0d7fe38a3755bdb8baa9fe203bd54ad4d79c7068116f15a50711b09