0%

KimSuky样本分析

KimSuky组织样本分析

MD5:ae986dd436082fb9a7fec397c8b6e717

SHA1:31a0168eb814b0d0753f88f6a766c04512b6ef03

SHA256:3110f00c1c48bbba24931042657a21c55e9a07d2ef315c2eae0a422234623194

1. 行为分析

image-20210428092813810

图标伪装成ESET杀毒软件,样本名字为eset_update.exe,伪装成升级程序。

打开火绒剑进行进程过滤 (过滤->进程过滤->添加->开启监控),双击样本后程序运行如下

image-20210428093420835

可以看到火绒剑在这里高亮了蓝色,这个是把C:\Users\Administrator\AppData\Roaming\目录下的程序加到开机启动项,前面的几步就是把释放的程序放到这个目录下

image-20210428093654954

有一个网络连接,应该是要和远程的一个网站进行交互

image-20210428094217330

2.PE结构和IDA分析

#### 2.1PEiD与Keygener

首先用PEiD查壳,显示32位程序无壳。

image-20210428094601103

image-20210428100058824

在Keygener中发现有Base64和CRC32怀疑程序内有一定的加密措施,后续直接拖到IDA分析

2.2 IDA分析

2.2.1导入表分析

可以看到关于文件的操作以及网络连接,印证了火绒剑行为分析

image-20210428101855133

image-20210428101618564

2.2.2 WinMain函数分析

image-20210428102245344

winmain函数中可以看到首先是创建了一个互斥对象,应该是为了创建相关进程或者检测相关进程是否存在,getlasterror判断指定的本地组是否存在

image-20210428102523874

2.2.3 sub_4011E0函数分析

进入函数后有一堆加密过的字符串和一堆GetProcAddress函数调用,猜测该函数为加载dll和相关字串解密获取相关api函数地址

image-20210428103256337

用OD动态调试查看加密的DLL名字,打开OD发现基址是00480000,所以在4811E0处f2下断点,f9直接运行到函数处调试,可以看到导入的3个dll(WINNET.dll,urlmon.dll,kernel32.dll)image-20210429095022290

前两个dll是获取了与网络相关的函数,kernel32获取了CreateToolhelp32SnapshotWinExec

image-20210429095622308

2.2.4 sub_403600函数分析

image-20210429150725499

image-20210429151023968

image-20210429152301294

先在OD里面一步一步看看这个函数里面的各个函数要做什么,参数是什么,注释在下图,这个函数功能主要是将自身复制到特定目录,然后操作注册表实现自启动,最后弹窗欺骗用户ESET升级成功,电脑已被保护。

image-20210429161950264

2.2.5 401580函数分析

​ 主要功能为获取本机网卡信息和执行获取磁盘序列号,以及随机数的生成,通过GetAdaptersInfo获取网卡配置和ip信息,后又通过GetVolumeInformationA来获取磁盘序列号,最后通过GetTickCount来生成随机数

image-20210429165557251

2.2.6 401770函数分析

该函数主要为获取系统版本信息的获取和操作系统的位数,通过GetVersion函数获取相关系统版本信息,然后通过GetNativeSystemInfo,格式化一下,然后做数学运算应该是一些加密操作。

image-20210429170323853

2.2.7 402790函数分析

和前面一样,先OD动态调试查看解密后的值等

image-20210429170936573

image-20210429171202113

image-20210429172418964

函数功能为注册表信息修改,然后将存储在qword_41A620处的恶意url写入注册表(此处先猜测该域名为C2服务器域名

image-20210429172627346

2.2.8 CreateThread分析

进入线程函数中查看线程函数完成的功能,首先是sub_402F30,前半部分构造http请求包

image-20210429193038167

用OD调试发现后半部分是网络请求设置(头,方式,协议)

image-20210429194705684

后续就是从C2服务器接受数据,然后Base64解码传输的数据,在进行多字节到宽字节的转换,把传输过来的数据经过一系列的运算来到sub_401AA0函数,

image-20210429195608233

但是因为C2服务器现在无法连接了,所以动态调试没法接受传输过来的数据,下面分析sub_401AA0函数,由于无法动态调试,所以无法知道加密的字符串是什么,查找网上的博客知道是rundll32.exe.image-20210429203028478

下面对C2服务器收到的数据通过”|“分割,依靠动物名字下达指令(核心功能远程控制)

image-20210429203440338

比如tiger为cmd操作,mongkey为创建进程执行下载程序。

image-20210429203656736

3.总结

  • 样本通过sub_4011E0调用解密函数解密一部分关键api,加载了WININET.dll、urlmon.dll、
    kennel32.dll,并通过GetProcAddress函数获取相应函数地址,函数如下InternetOpenA、InternetCloseHandle、InternetConnectA、HttpOpenRequestAHttpSend、RequestAURLDownloadToFileA、DeleteUrlCacheEntryA、WinExec、CreateToolhelp32Snapshot、InternetReadFile、InternetQueryDataAvailable。

  • 通过sub_403600函数实现文件自拷贝,自启动设置,程序弹窗设置。

  • 通过sub_401580获取主机网卡和ip信息。

  • 通过sub_401770获取系统版本信息的获取和操作系统的位数。

  • 通过sub_402790修改注册表写入恶意url。

  • 通过sub_931AA0实现相关的远程注入。

  • 该样本代码中加入了一系列动物名称,例如tiger、wolf等,属于KimSuky家族系列。

个人体会

这次样本分析发现该样本其实用到的函数在项目中经常见到,所以分析起来比较顺手,知道各个API在用的时候企图达到什么样的目的。并且在这一次分析用到了OD,并且学会了OD动态调试查看dll调用情况以及加密的参数值。