首页
社区
课程
招聘
[原创]APT组织KimSuky针对韩国近期攻击样本分析
发表于: 2020-3-11 09:44 6451

[原创]APT组织KimSuky针对韩国近期攻击样本分析

2020-3-11 09:44
6451

在日常app.any.run的样本"蹲点"中,看到了这样一个样本:
图片描述

可以看到样本是个exe,并且已经被打上了apt和kimsuky的标签。于是下载下来分析一下。

样本的hash为:35d60d2723c649c97b414b3cb701df1c
在VT上搜索该hash可以得到如下内容:
图片描述

由于样本创建时间和提交到VT的时间很相近,可以推测攻击者在制作好该样本之后就马上进行了投递,且该样本并非攻击流程中的首个样本,而是制作好之后直接投放到提前已经搭建好的攻击流程中。

样本投递时名称如下:
베트남 녹지원 상춘재 행사 견적서.hwp.exe
样本名称是双后缀名称,第一个后缀用于迷惑用户,第二个后缀是样本的真实类型。
其中hwp是在韩国地区常用的一款office办公软件,类似于wps,所以该文档命名具有一定的欺骗性,伪装成了hwp文件,是一起针对韩国地区用户的攻击。

样本的诱饵图标如下:
图片描述

如果用户计算机隐藏文件后缀,则会和普通的hwp文档显示完全相同。
图片描述

使用exeinfo查看一下文件的编译器等信息
图片描述

在IDA加载的时候我们可以的知该样本的pdb路径
E:\pc\makeHwp\Bin\makeHwp.pdb
图片描述

样本winMain如下:
图片描述

样本执行后,会在temp目录下创建bat文件
图片描述

bat文件写入的内容如下:
图片描述

可知bat的功能是删除原始的样本和自身。

释放同名的hwp文件
接着在当前目录创建并打开베트남 녹지원 상춘재 행사 견적서.hwp文件(中文系统导致乱码),起到迷惑用户的作用。
图片描述

然后会尝试在%appdata%目录下创建NewAct.dat文件
图片描述

图片描述

而该dat实际上是一个pe文件:
图片描述

如果创建成功,则会通过regsvr32.exe来执行,由此可知该dat文件应该是一个dll
图片描述

这里的参数功能如下:

所以我们可以得知原始的PE实际上是一个Dropper,功能如下

综上所述,原始样本的执行流程应该如下:
图片描述

释放的dll依旧由vc编译
图片描述

首先查看dllInstal函数如下:
图片描述

可以看到在dllInstall中,程序会尝试查找并删除当前目录下的.wsf文件。但是在本次的攻击中可以发现,并没有释放wsf文件,所以可以推测该文件应该是攻击者在测试代码时候用到的。
wsf文件删除了之后,会调用导出函数checkdrive。

checkdrive首先会检查后面会用到的API函数
图片描述

所有的API函数如下:
图片描述

接下来,程序会判断当前的操作系统,根据32位和64位执行不同的操作:
图片描述

如果当前运行环境为64位则会执行if之后的代码,根据代码可以得知,该段代码是从C2下载适用于64位操作系统的攻击组件。
通信的c2:antichrist[.]or[.]kr也硬编码到了代码中
图片描述

下载的组件应该是lyric64
图片描述

请求的路径为:
antichrist[.]or[.]kr/data/cheditor/dir1
图片描述

通过http向C2发起请求,如果请求成功的话则会下载文件
图片描述

下载成功之后程序会重新通过rundll32.exe来调用checkdrive函数
图片描述

如果当前运行的环境是32位操作系统,程序则会直接调用最下面的sub_10003163函数
图片描述

该函数的主要功能是将程序写入开机自启动,然后注入到指定的进程中
图片描述

设置开机自启动
图片描述

线程注入
图片描述

线程注入完成之后,程序将会运行DLLMain函数,阅读dllMain可以发现程序首先会通过sub_100011A9方法进行校验,判断当前的进程,第一个进程检查的值是byte_10019EB0,而我们可以看到,byte_10019EB0的值是在上面的dowhile循环中赋值的, 由byte_10016834决定。
byte_10016834是预定义好的,为fyqmpsfs/fyf,而根据循环很容易可以算出byte_10019EB0=explorer.exe。
所以我们可以得知,dllInstall注入的进程是explorer.exe,程序在这里进行判断,如果当前的进程是explorer.exe说明注入成功,则执行后面的代码,创建一个名为<Papua gloria>的互斥体,如果互斥体创建成则会调用sub_1000300B8函数。
此外,如果第一次检查的时候,当前进名不是explorer.exe,程序则会检查进程是否为rundll32.exe,如果不是rundll32.exe,程序则会重新调用rundll32.exe,直接运行checkdrive函数。
然后程序还会判断当前进程是否为notepad.exe,如果是则退出,这里不明白攻击者为什么会这样写。

图片描述

接着看注入成功的情况:
图片描述

首先还是会尝试获取一系列基本信息,如网卡,硬盘,当前系统时间等。
图片描述

图片描述

图片描述

然后在%appdata%\Microsoft\Office下存放指定的文件
图片描述

关键的功能在_beginthreadex的sub_10002BE9函数中,包括上传、下载等,至此用户计算机就完全落入了攻击者手中,里面的内容还很多,想要详细分析的可以跟着这里调一下。

该dll的执行流程大致如下:
图片描述

尝试对样本进行抓包
图片描述

可以看到虽然目前C2还存活,但是指定的路径已经404了。

接下来尝试提取样本的IOCs
根据国外大佬David Bianco提出的 Pyramid of Pain,描述了 IoC 之间的层级关系,如下图:
图片描述

该金字塔图很好的描述了在攻击事件分析中,各类IOCs的提取难度和价值。

也就是攻击中样本的hash值,这个hash包括原始样本的hash,释放文件的hash等。
比如在此次分析中
原始样本hash:35d60d2723c649c97b414b3cb701df1c
释放文件hash:e54b370d96ca0e2ecc083c2d42f05210
hash是一个样本最容易获取的值,但同时也可以看到,在金字塔中处于最下层,也就是最"没价值"的内容。
因为在这种定向攻击中,攻击者几乎不会同一个样本多次使用。且样本的hash非常容易更改,文件哪怕只更改了一个字节就会得到一个新的hash,所以攻击者也完全可以使用脚本在一个样本后面添加空字节,这样同一个样本,就很轻松的有了几十个,几百个hash值。

正常情况下,样本都会有通信ip,也就常说的C2,在本次分析的样本中,只有通信域名,没有ip,我们可以解析一下该域名,看看目前域名指向了哪个ip。
通过解析,我们可以知道该域名目前指向了一个韩国ip:114.207.244.99。
同样的,样本的通信ip也和好拿到,大多数情况下,通过沙箱就可以获取。
IP的价值比hash稍微大一些,但通常攻击者都会使用跳板、匿名网路等技术。样本通信的IP跟攻击者所在地也不一定有直接的联系。

此样本的通信域名是:antichrist[.]or[.]kr
域名和ip类似,但域名的申请相对来说要更复杂一些。
因为申请域名毕竟有成本在里面,还需要提供一些基本信息。且DNS解析的时间成本大多数时候攻击者也需要考虑进去,所以通常来讲,域名的价值比ip稍微高一些。
很多时候一些简单的样本里面只有通信ip,没有域名,这可能就是攻击者节约成本的一个方式。

就比如样本在与C2通信时候的一些请求格式、请求路径、服务器返回格式、服务器存放的文件名等。
比如在本次样本中,我们看到在与服务器通信的时候,请求路径为:antichrist[.]or[.]kr/data/cheditor/dir1
那么对于本次攻击来讲,[hostname/data/cheditor/dir1] 就可以看做一条网络特征。
之前也分析了,ip和域名都靠不住,是很容易更改的特征,因为换ip、换域名对于攻击者来说都是比较简单的事情,但是与本地样本通信的服务端程序就没有那么容易更改。或者说攻击者更不愿意去更改。
对于此次分析的这个样本来看,下载路径也是很容易改变的。不容易改变的主要是样本和C2通信时候的一些特征,比如样本会收集本地的基础信息,然后通过GET/POST的方式上传到服务器,服务器接收了之后存入数据库。

在本次攻击中并没有发现攻击者使用开源的黑客工具。
只下载了名为Lyric的组件,但是在网上并没有找到相关的信息,所以也可以猜测是攻击者自己写的工具。
但是我们并没有大量的样本验证说KimSuky的很多样本都会使用Lyric组件,只能说以后遇到使用了Lyric组件的样本,有可能是属于KimSuky的。
之前网上曝光了APT34所使用的一系列工具,比如PoisonFrog和Glimpse,这种才属于Tools特征。

ttps的全称是Tactics, Techniques, and Procedures (战术、技术、过程),是对攻击者攻击战术、攻击技术、攻击过程的描述,有时候也叫做行为库。
ttps的提取非常复杂,需要大量的样本、经验和长时间的积累才能完成。
由于篇幅和本人功能有限,不能很好地把TTPS的概念及提取讲清楚,有兴趣的伙伴可以看看之前大佬发的关于TTPs的文章

根据金字塔以及分析到的内容,可以提取如下信息:

根据提取到的内容我们分别尝试进行关联。
在VT上搜索相关的C2可以看到与该C2相关的文件一共有三个,其中前两个是本次样本中已经分析到的,还有最后一个是暂时未见的。
图片描述

查看dc48.tmp,相关联的文件也如下:
图片描述

这里已经形成闭环了,看起来没有更多有效的信息,可以尝试使用搜索引擎试试。
图片描述

这里可以看到,根据Google反馈的结果,该域名应该是跟APT组织kimsuky相关。我们继续往下找
在Twitter看到如下信息,基本可以确定是kimsuky
图片描述

这里还拿到了一个新的hash:2e5a70a1b4d7bd8b9a17e513efbe167d
继续检索,最后可以发现在ests的博客上将其定义为了KimSuky的Operation Blue Estimate。
在该次攻击中所使用的诱饵如下:
图片描述

可以看到,样本全是双后缀以迷惑用户。集合之前伪装为韩国KakaoTalk apk以及新闻app的攻击,这种伪装也算是KimSuky的一个常用手法。

本次拿到的一系列样本中有两个样本的pdb都是:
E:\pc\makeHwp\Bin\makeHwp.pdb


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (9)
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
只想知道怎么免杀。。哈
2020-3-11 16:04
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
感谢
2020-3-11 21:43
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2020-3-13 18:05
1
雪    币: 182
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
咨询您一个问题:
在“判断当前的操作系统”、“线程注入” 两张图中都调用了WaitForSingleObject函数,我在调试遇到这个函数后,OD就陷入无限的等待状态,无论我修改WaitForSingleObject的TimeWait参数为有限值,还是在CreatEvent创建事件对象时就把对象活动状态设为“真”,都解决不了这个问题。你是怎么跳过去的?
最后于 2020-3-13 21:28 被shenluo编辑 ,原因:
2020-3-13 21:27
0
雪    币: 968
活跃值: (6818)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
6
shenluo 咨询您一个问题:在“判断当前的操作系统”、“线程注入”&nbsp;两张图中都调用了WaitForSingleObject函数,我在调试遇到这个函数后,OD就陷入无限的等待状态,无论我修改Wai ...
你用的哪个od版本,我用的吾爱那个,直接就可以过去呢,还有就是建议用x64dbg    现在64位的程序比较多   od调不了64位的是硬伤。
然后第二个问题,我用的xdbg  没有用额外的插件,在od中也可以直接开五个内存窗口,就在最左下角,  有个M1 M2 M3 M4 M5  
2020-3-16 09:38
0
雪    币: 581
活跃值: (1192)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
很强,能够找到这么多资料。
2020-5-19 17:29
0
雪    币: 581
活跃值: (1192)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
VT上最后一个6c48.tmp实际上是Lyric64.dat。简单看了一下,实现的功能和NewACt.dat文件是一样的。
在sub_1000346中,有四条指令可以分析分析。里面会下载Swayt文件。
64位版本的Sway文件可以在推特上找到md5。VT上也有人上传。可以继续分析分析。
2020-5-25 18:07
0
雪    币: 73
活跃值: (3095)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
谢谢楼主分享,帮助很大。
2020-8-3 11:51
0
雪    币: 142
活跃值: (310)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
大部分搞逆向的测试都会拿notepad 开刀。
所以有notepad 判断没什么好奇怪的。
2021-1-14 15:58
0
游客
登录 | 注册 方可回帖
返回
//