首页
社区
课程
招聘
[原创]#30天写作挑战#一个KimsukyAPT样本分析
发表于: 2020-9-8 08:32 13698

[原创]#30天写作挑战#一个KimsukyAPT样本分析

2020-9-8 08:32
13698

这个是我看到(并未阅读)知道创宇发的一篇样本分析文章之后自己分析的这篇文章中提到的相关样本,算是我第一次独立完整的分析。

不好意思,MD5值复制错了

md5: 28833e121bb77c8262996af1f2aeef55

附件的密码infected

从包含的字符串中可以看到一些命令行参数、URL路径、文件名、请求头部的内容,作为进一步分析的参考,除此之外,最后的JUYFON实际上是文件资源段中包含的一部分内容:

peview

reshack

可以看到里面有大段的7F,所以合理判断这段内容使用了异或编码,将其导出并使用7F解码后:

juyfon

PK开头,应该是一个zip文件。修改扩展名后打开,发现里面是这样的:

juyfonzip

在网上查了一下,应该要把扩展名修改为docx,打开之后是一个韩文的文档,以下是翻译结果:

juyfondocx

使用ApateDNSInetsimnc搭建好一个虚拟的网络环境,Wireshark抓包,火绒剑进行监控。样本执行后,打开的内容与上节中资源段发现的文档相同,样本伪装成了一个word文档,只不过电脑设置显示扩展名,所以可以看出它是一个exe文件。

huorong1

可以看到样本执行后在临时文件夹新建了一个文档(由于虚拟机语言是英文的,所以文档名显示不出来,资源管理器里面显示的是4.[酒怕楷备]稠巩捧绊痹沥.docx),经过计算,该文档的MD5值为dc2f8205b8dcfcfc8f2800d10a7c1499,与上节中资源段中提取出来的文档MD5值相同。

huorong2

之后创建了进程WORDPAD.EXE(因为我的虚拟机没装WORD,所以它打开的是写字板),可以看到样本对进程内存进行了一些修改,查看行为详情,发现它最终执行的是cmdline:'"C:/Program Files/Windows NT/Accessories/WORDPAD.EXE" "C:/Users/zoem/AppData/Local/Temp/4.[????]??????.docx"',也就是说这里实现了样本伪装word文档的目的。

接下来是一系列的cmd.exe进程创建行为,并创建、修改了一个叫做wct.docx的文档,从行为详情中发现,命令行最终执行的是一系列cmdline:'"C:/Windows/system32/cmd.exe" 【参数】 >> C:/Users/zoem/AppData/Roaming/MICROS~1/HNC/wct.docx'的命令,具体的参数信息有:

也就是说样本收集了所在主机中的部分文件信息以及硬件和系统配置信息,然后保存到了wct.docx文件中

huorong3

huorong4

最后样本连接了portable.epizy.com的80和8080端口,POST出去了一些数据,然后删除了wct.docx。所以合理怀疑这里就是把wct.docx中的内容发送出去了。

wireshark

数据内容:

可以看到样本发送出去了一个images01文件,文件的内容:

senddata

看来是被加密了。

在IDA中打开,start函数中定位到一个3个push+1个call的指令组合,而且还有400000h这个立即数,比较可疑,双击进入后可以看到一些库文件的加载以及资源段的处理,看来应该就是主程序了,将该函数重命名为main

ida1

main函数的开头分别加载了库文件kernel32.dllWininet.dlladvapi32.dll中的一些函数,然后加载了JUYFON资源段,同时在堆上分配了一个空间。

ida2

之后是对资源段的一些处理,这部分内容从代码看有些复杂,但是应该就是在做7F的异或,可以在Ollydbg中打开该样本进行动态分析,定位到资源段处理的这部分代码:

注:为了便于定位代码位置,可以在IDA中使用Edit->Segments->Rebase program修改基地址。

od1

memory dump应该定位到堆分配的空间处。可以看到在两段循环结束后,堆分配空间中的内容是一段以PK开头的数据。第一段循环是以32字节为单位进行异或,第二段循环对剩下的23字节逐字节进行异或。

ida3

之后的流程就很明显了,样本先删除了临时文件夹中可能存在的docx文档(4.[酒怕楷备]稠巩捧绊痹沥.docx),然后重新创建该文档,并将资源段解码后的内容写入,然后释放分配的堆空间,打开该docx文档,然后创建了一个新线程,最后进入了一个无线循环。

接下来看一下线程都干了些什么:

注:CreateDirectoryAGetShortPathName是根据动态调试的结果自己修改的。

ida4

可以看到它创建了两个路径字符串,根据动态调试结果:

之后主要由三个函数组成。

接下来调用了函数sub_11B4250

ida5

可以看到它执行了一系列的参数为/c dir命令,和2.1 火绒剑的输出中获得的信息一致,样本将一些系统信息写入到了wct.docx文件中。

在调试器中执行到该函数末尾,然后可以查看wct.docx文件内容:

wctdocx

然后看第二个函数sub_11B49E0:

ida6

可以看到函数主体中包含了很多之前wireshark抓包中数据包的内容,所以这个函数应该就是在构建这个数据包进行发送。

函数一开始获取了wct.docx文件中的内容:

od2

在动态调试这个函数的时候遇到一个问题,OD在分析下面这段指令的时候:

ida7

这两句指令无法正确识别,所以我临时换成了x32dbg继续进行分析。

当函数完成数据包的构造之后,执行到接近函数末尾的call xeyo.3E4DD0时,可以查看ebx指向的memory dump,其内容就是要发送的数据包的内容。

注:因为多次重新调试,基地址发生的变化,但是后四位的偏移是没变的。

od3

函数xeyo.3E4DD0的内容在IDA中为:

ida8

看起来这几个dword_开头的函数应该就是一些网络相关函数,在x32dbg中查看:

od4

所以这个函数就是在把构造好的数据发送出去。

综上,函数sub_11B49E0先构造要发送的数据,然后通过网络发送出去。

ida9

可以看到这个函数向portable.epizy.com发送了一个GET请求,请求路径为img/png/download.php?filename=images01。收到请求之后,函数会检查文件开头两个字节是否为B2 A5:

ida10

注意到B2 A5的二进制为1011 0010 1010 0101,逐位取反结果为0100 1101 0101 1010,即4D 5A,转换成ascii就是MZ

如果检查通过,函数会创建tcf.bin文件并将内容写入,然后会执行LoadLibraryA将该文件导入,也就是说这个文件是一个DLL文件。

od5

导入该DLL文件之后就没有其他重要操作了,函数会执行删除tcf.bin文件,释放DLL文件等清理工作。

该样本伪装成一个docx文件,会自动收集桌面、最近使用文件、ProgramFiles文件夹下内容以及系统的配置信息,发送到portable.epizy.com/img/png/post.php;同时,它会从portable.epizy.com/img/png/download.php?filename=images01下载一个DLL文件进行加载。

附件的密码infected

 
 

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

最后于 2020-9-8 10:22 被LarryS编辑 ,原因: 添加目录,修改错别字
上传的附件:
收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 205
活跃值: (34)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
样本呢
2020-9-8 10:25
0
雪    币: 12125
活跃值: (10424)
能力值: ( LV13,RANK:660 )
在线值:
发帖
回帖
粉丝
3
GgGJ 样本呢[em_47]
已上传附件
2020-9-8 10:32
0
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
4

感谢分享!

欢迎更多的小伙伴参与到 #30天写作挑战#中来!活动详情:https://bbs.pediy.com/thread-261705.htm


2020-9-9 10:20
0
游客
登录 | 注册 方可回帖
返回
//