首页
社区
课程
招聘
[原创]关于Kimsuky的一次恶意样本分析小记
发表于: 2020-8-6 16:23 4886

[原创]关于Kimsuky的一次恶意样本分析小记

2020-8-6 16:23
4886

最近才开始关注朝鲜半岛相关的攻击行为,在看ESTS的相关文章,因为刚刚开始关注朝鲜半岛,拉撒路我就不考虑了。浏览的重点着重于Kimsuky相关PE样本。看到最近的一篇和PE有关的样本分析文章为https://blog.alyac.co.kr/3091。观看该文章总结的攻击链应该为“WSF恶意脚本文件->释放恶意DLL文件和与COVID-19有关的迷惑性HWP文件”。依据文章样本链除了最后一环有通信行为,其他样本应该是以Base64编码后硬编码在脚本文件中的,拿到初始样本可以不依据通信就还原整个攻击链,因此希望能够拿到初始链的WSF脚本样本。依据确定IOC只有一条域名,于是拿着IOC去VT、微步、anyrun上找相关样本,但是最终只找到了最后所释放的dll。那就只好分析dll了。

首先静态用IDA观察dllmain函数,发现在该函数中就获取了一个当前模块路径就返回了,可以确定相关恶意行为不在dll加载的时候执行。
Dllmain

使用LoaderPe观察该DLL的导出函数,具有四个导出函数。

一一查看后发现恶意行为在DllRegisterServer()这个导出函数之中。直接上OD,然而在调试的时候发现,有一些库函数并没有出现在IAT中,在动态调试的时候发现有了调用,在IDA中存在一个函数指针数组。然后我开始怀疑是在初始化的时候有调用。

根据引用发现有对该指针数组赋值的行为。该赋值行为存在在函数10009410之中。

继续了解这个函数赋值行为从哪里来的。发现该函数也是存在于一个函数指针数组之中。查看引用,发现在Cinit函数中有调用,猜测到就是在初始化的时候循环调用了函数指针数组进行自定义一个类似IAT。

为了方便IDA浏览,我选择在运行到Winmain的时候直接dump出来,重建IAT。
可以有两种重建方式,一种方便快捷,ODdump的时候选择重建IAT即可。

还有一种是新建一个节表。将IAT整体移走。分模块重新构建IAT。这一种有个缺点,就是你还得去修改代码段中相关函数调用的地址都要变为你重建的IAT之中。

相关字符串基本上都是加密的,有一篇文章介绍了类似的加密;可以参考博文https://sfkino.tistory.com/77。

字符串可能都是以string这种类型进行保存的,和string字符串内存布局很像。但我记得string头四个字节应该保存的是指向自己的指针才对。

获取环境变量%PROGRAMDATA%\对应的目录。将解密的字符串进行拼接,构造patch.dll的保存路径C:\ProgramData\Software\Microsoft\Windows\AutoPatch\patch.dll

创建目录C:\ProgramData\Software\Microsoft\Windows\AutoPatch

继续拼接regsvr32.exe /s "C:\ProgramData\Software\Microsoft\Windows\AutoPatch\patch.dll"。该字符串一个是用作run键的值,键名WindowsDefender

另外一个是用作判断是否该模块在规定的目录下,如果不是的话将将dll拷贝纸规定的目录,然后会获取临时目录以及临时文件路径,尝试创建临时文件,在临时文件中添加如下代码,给临时文件加上.bat后缀然后执行该bat文件,可以看出该bat文件就是删除dll原本所在的路径和自身,最后以该字符串为创建进程参数进行进程创建。
bat文件代码:

之后创建一个名为chanel的互斥体。

UAC相关查询

获取当前Token

当获取不到Token或者UAC查询不都为0时,会重新创建进程,在管道中获取进程返回的信息。

获取调试权限。

之后就是创建了线程,然后在线程中创建了三个线程。

第一个线程,解密了C2,获取了MAC地址。最终的拼接为http://chanel-love.org-help.com///?m=c&p1=000c2907d070。p1为十六进制的MAC地址。

解密数据包头,对url发起访问。将返回的数据保存在临时目录中的临时文件。

​ 读取临时文件对应字段,判断类型,然后执行对应操作,因为C2无响应,没有返回文件,我只能通过Kimsuky往常的行为和IDA静态观察来猜测行为了,如果猜错了,望大手子轻喷萌新分析。

第二个线程为获取系统信息,拼接参数构造url,以Get的方式进行http请求。

参数为:

p1= MAC地址
p2 = 系统信息 -Dropper-v3382363,后面这个v怀疑是版本。

下面是数据包头(三个线程都是用的这个数据包头)。

第三个线程也是获取一些信息进行拼接。

p1 = mac
p2 = a
p3 = dll一段内容的摘要

通信下载了一个临时文件(无响应)并执行。

后续线程中很多行为需要基于响应的C2才能够完整分析,然而C2已经无响应了,我只能去各个Hunter平台,查看之前Kimsuky类似行为链的样本的pcap包,通过查看之前的pcap包以及各个线程所使用的API来推测相应的恶意行为。新手分析,还有很多分析不到位的地方,望大家多多包涵。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-8-6 16:26 被不懂就不懂编辑 ,原因: 少图了
收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 968
活跃值: (6818)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
3

感谢分享  分析的不错  优秀支持一下~
建议之后的分析文章,带上对应的文件HASH以及提供一个app.any.run的下载链接。这样其他坛友在阅读文章复现的时候也会有对应的样本进行练习。
帮你找了一下并将对应的文件上传到app.any.run了~
原始wsf文件(应该是这个 哈哈)
586e15ba298ebf5905895c08dea66224
https://app.any.run/tasks/8abdca68-b264-4077-8dfa-37a4679a801c

本次分析的样本:
脚本文件:583acde1961cc81f257db91ae9acbc0f        https://app.any.run/tasks/1afdd06a-f66a-459e-bdb2-2592f618e7e7/
此次分析dll:3600db06b23f3ded0148b5965d33a928         https://app.any.run/tasks/5780d2ea-e4c3-4cfd-831d-36a7c56404d8/

相关域名、ip:
user.mai1-help[.]com
213.190.6[.]57
92.249.44[.]201

同源样本:ae986dd436082fb9a7fec397c8b6e717
https://app.any.run/tasks/c5066e3d-974b-499a-971f-954dbf2d5c5d/

58a004bda71f023273c058718bf661a3
https://app.any.run/tasks/c5066e3d-974b-499a-971f-954dbf2d5c5d/

最后于 2020-8-6 17:26 被jux1a编辑 ,原因:
2020-8-6 17:25
1
雪    币: 73
活跃值: (3090)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
顾何 感谢分享  分析的不错  优秀支持一下~建议之后的分析文章,带上对应的文件HASH以及提供一个app.any.run的下载链接。这样其他坛友在阅读文章复现的时候也会 ...
谢谢版主大大,下次再发的时候会注意格式的。
2020-8-6 17:44
0
雪    币: 968
活跃值: (6818)
能力值: (RANK:462 )
在线值:
发帖
回帖
粉丝
5
不懂就不懂 谢谢版主大大,下次再发的时候会注意格式的。[em_13]
倒不是格式的问题   如果可以的话,在文章中加上背景介绍、IOC 、流量、溯源等相关分析,可以让文章结构更加的完整,也可以很好的锻炼写文的能力。 期待你的下次发帖
2020-8-6 17:49
0
雪    币: 73
活跃值: (3090)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
顾何 倒不是格式的问题[em_13][em_13] 如果可以的话,在文章中加上背景介绍、IOC 、流量、溯源等相关分析,可以让文章结构更加的完整,也可以很好的锻炼写文的能力。 期待你的下次发帖[em_4 ...
嗯嗯 好滴,下次写文的时候会注意这些的。 这一次是一个随手记,就没想着思考这么多。我看了版主大大好像之前发了这个组织的样本的分析报告,下次参考一下相关内容进行改进。
2020-8-6 17:52
0
雪    币: 214
活跃值: (147)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
7
顾何 倒不是格式的问题[em_13][em_13] 如果可以的话,在文章中加上背景介绍、IOC 、流量、溯源等相关分析,可以让文章结构更加的完整,也可以很好的锻炼写文的能力。 期待你的下次发帖[em_4 ...
同意版主意见
2020-8-6 21:20
0
游客
登录 | 注册 方可回帖
返回
//