KimSuky样本分析思路分享

阅读量    414979 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

概述

KimSuky是总部位于朝鲜的APT组织,根据卡巴的情报来看,至少2013年就开始活跃至今。该组织专注于针对韩国智囊团以及朝鲜核相关的目标。KimSuky有不少别名,包括Velvet Chollima, Black Banshee, Thallium, Operation Stolen Pencil等。malpedia上有关于KimSuky的详细介绍。

关于KimSuky,笔者之前写过一篇文章对该组织的常见攻击手法进行了浅析。近期在对该组织的样本收集分析时也发现了不少以前没见过的样本,在本文中,将对一例以新冠疫情为诱饵的恶意样本进行详细分析。

 

样本信息

样本最开始来源于bazaar.abuse.ch,在bazaar上该样本已经被打上了Amadey、APT、Thallium三个标签。上面已经说过,Thallium是KimSuky的别名,背后的运营人员疑似为KimSuky的成员,国内很少有厂商将Thallium单独拿出来分析,笔者为了命名统一,还是将该样本归类到了KimSuky。

原始样本md5:90a59c16d670fd77d710516299533834
样本类型:doc
样本利用方式:宏代码利用
样本文件名:Pyongyang stores low on foreign goods amid North Korean COVID-19 paranoia.doc

原始样本以朝鲜平壤地区的疫情为诱饵,向对此话题感兴趣的人士发起攻击,暂未定位到具体的受害目标,原始样本通过设置颜色在正文上面加上一层遮挡物以诱导用户启用宏:

宏代码启用之后,遮挡物消失,文档正文正常显示以掩护恶意代码执行。

宏代码运行之后主要是执行两个功能

  1. 去掉遮挡物让用户以为打开的是正常文档
  2. 从C2:hxxps://www[.]rabadaun.com/wordpress/wp-content/themes/TEMP.so 下载TEMP.so到本地加载执行。

下载的TEMP.so为exe文件,md5为:f160c057fded2c01bfdb65bb7aa9dfcc

加载的后续payload主要有两个可疑行为

  1. 创建C:\ProgramData\a7963\目录并将自身拷贝过去
  2. 循环对C2服务器186[.]122.150.170:80 发起网络请求

此样本由MFC编写,样本运行后会通过一个超大循环以延迟关键代码执行,起到一定的反检测作用,这里是个for循环,循环变量每次自增1,循环条件是变量小于0x0BAADBEEF,循环体是给ebp+var_18变量自增1。循环一共会执行3131948783次,所以程序加载后,在恶意代码执行起来之前会有一个明显的停顿。

循环执行完毕,程序通过VirtualProtect更改0x422548到0x42A548的内存属性为0x40(可读可写可执行)

更改完成之后,程序会在00401070函数中对这片内存进行解密。
解密算法如下,程序首先将刚才更改了内存属性的数据的起始地址0x422548赋值给eax

赋值给eax之后,程序首先会清空esi,然后通过自增esi和eax+esi的方式对这片内存中的每个字节进行操作,第一次执行时,程序会将eax+esi的值赋给bl并且将bl与4330c0处的值进行异或计算,计算的值存储到bl中。

异或之后,程序会将bl的值进行not运算,运算之后的值依旧在bl寄存器中,此时,程序再将bl与4330c1的值进行异或,异或的值放入bl寄存器。

第二次异或之后,程序会将bl的值放回原位以替代原数据,同时自增esi,计算下一个字节的值。这里程序一共会将0x77E6大小的值以同样的方法进行计算解密出后面的shellcode。

解密完成之后,EnumChildWindows的回调函数EnumFunc已经被替换为了解密后的代码

直接在00427068处设置断点过来

解密出来的这段shellcode主要是一个loader,用于解密后续的payload继续执行,程序会用如下的字符串和程序的数据解密出一个PE

动态解密API地址

4255C8函数再次通过和之前一样的手法,执行一个大循环以延迟程序执行

程序在00423827处重新创建自身进程

接着程序通过ZwResumeThread、ZwSetContexThread这一套进行傀儡进程注入

最后通过ZwResumeThread恢复目标进程执行

 

傀儡进程注入

注入的进程为Amadey恶意软件,程序中的字符串均已加密,程序定义了一个字符串a7963b909152f8ebc3ec69b1dee2b255a9678a5用于动态解密其他字符串

程序会调用这个解密函数解密出一系列杀软文件名并判断是否存在这些杀软文件名

这里程序主要是检测是否存在0A和0B所对应的杀软,也就是Norton和Sophos,如果检测到这两款杀软程序就跳转到函数最后,不继续执行此函数功能。

当前函数继续执行,则会解密拼接出C:\ProgramData\a7963\tlworker.exe路径并创建文件句柄

创建目标文件夹

创建文件,然后在004016f2函数将自身写入到C:\ProgramData\a7963\tlworker.exe文件中

接下来,程序创建进程,通过cmd指令将上面的路径写入到启动项中以实现本地持久化

网络请求模块

程序解密出请求C2:196.122.150.107

接着程序开始解密请求路径和参数,首先是解密出请求路径cc/index.php

接着解密出id参数并且通过获取系统目录和磁盘信息以计算出id

同样的,指定当前的样本版本

程序会通过类似的方法拼接一系列参数,包括是否为管理员权限、操作系统版本信息、计算机名和杀软信息等,最后拼接出的请求信息如下

一切准备就绪之后,获取目标主机地址准备请求:

通过post的方式将数据send到C2

数据发送之后,程序会根据服务器返回执行对应的操作,并且休眠1分钟重复进行请求,也就是最开始在行为分析中看到的循环请求。由于末尾的跳转是jmp,并且中间并没有跳转可以跳出循环,说明这里是永真循环,程序执行到这里,功能已经执行完毕,后续则需要服务器返回执行。

由于目前服务器已经没有返回,无法对后续操作进行深入分析。但是根据攻击者所使用的Amadey恶意软件和钓鱼的内容,基本可以确定这是东亚APT组织KimSuky针对韩国用户的攻击活动。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多