KimSuky组织一样本分析
如果图片看不见可以先移步看雪论坛的帖子 https://bbs.pediy.com/thread-264660.htm
样本基本信息
MD5:ae986dd436082fb9a7fec397c8b6e717
SHA1:31a0168eb814b0d0753f88f6a766c04512b6ef03
SHA256:3110f00c1c48bbba24931042657a21c55e9a07d2ef315c2eae0a422234623194
思维导图
行为分析
图标和名字伪装成ESET的升级程序,打开火绒剑设置过滤信息后,双击后弹窗提示升级成功,查看火绒剑捕获的动作信息
火绒剑自动高亮了一个行为,这个是把C:\Users\Administrator\AppData\Roaming\目录下的程序加到开机启动项,前面的几步就是把释放的程序放到这个目录下
详细分析
查壳
32位程序无壳,在Keygener中发现有Base64和CRC32怀疑程序内有一定的加密措施,拖到IDA中接着分析
导入表分析
通过分析导入表发现有网络连接和文件操作的相关函数,印证了前面火绒剑行为分析的结构,不过很奇怪为什么火绒剑没有监测到网络连接行为
函数分析
WinMain
sub_4011E0(LoadFunc)
进入函数后有一堆加密过的字符串和一堆GetProcAddress函数调用,猜测是动态加载某些函数,具体加载什么函数需要配合动态调试查看
通过在OD中的动态调试发现这个函数就是导入了三个DLL(WININET.dll, urlmon.dll, kernel32.dll)
前两个DLL 获取了网络相关函数
kernel32获取了CreateToolhelp32Snapshot和WinExec
sub_403600(CopyMyselfAndBox)
这个函数简单来说就是把自身复制到特定目录,然后设置注册表实现自启动,最后弹窗欺骗用户升级成功已被保护
sub_401580(GetNeInfo)
通过GetAdaptersInfo获取网卡相关信息
GetVolumeInformation获取c盘序列号
如果序列号获取失败就根据时间设置随机数
sub_401770(GetSysInfo)
获取操作系统的相关信息,然后标准Base64编码一下
sub_402790(SetDomain)
把C2服务器的域名信息放置到注册表项SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\ScreenRibbonsDomain中
子线程分析
sub_402F30(HTTPRequest)
前半部分先构造HTTP请求包
后面利用先前动态加载的网络链接函数进行HTTP请求
因为C2服务器现在无法链接了我就手动修改执行流程让程序以为自己收到了返回包接着执行
后续就是从C2服务器接受数据,然后Base64解码传输的数据,在进行多字节到宽字节的转换
把传输过来的数据经过一系列的运算来到sub_401AA0函数
sub_401AA0
生成一个临时文件名
下面对此前从C2服务器接收到的数据通过“|”分割,依靠动物名字来下达指令,这里就到了样本的核心功能了远程控制
比如:指令名为tiger时执行cmd指令
指令名为monkey时,创建进程执行下载的程序
指令名为fox和cat时会比monkey多一些注册表操作
由于现在C2服务器已经连接不上了,其他一些的指令操作就不在详细分析,功能和我们一般见到的远控都差不多。
总结
这次样本分析总体来说比较常规,难度不算很大只要抓住主要执行脉络都能比较清晰的理解整个程序