电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 821 人浏览分享

观赏某大佬分析病毒后的一次复现分析

[复制链接]
821 0
一、样本简介及行为检测

样本伪装成了eset的升级程序

图标如下

1594624100.png

由于再分析之初对样本行为不太清楚 这里需要用到相应的行为检测工具 此类工具有火绒剑
systracer,Procmon,Sysmon等。这里我们采用火绒剑来看下 具体步骤

QQ截图20211124144445.png

然后双击运行样本即可开启对相应样本的监视 程序运行后界面如下

QQ截图20211124144532.png

我们看到该程序的这里火绒剑标记为了蓝色 这里完成了程序的释放 自拷贝 开机自启动这些操作。

QQ截图20211124144616.png

相关网络请求如下

QQ截图20211124144651.png

可以看到该样本与general-second.org-help.com/dl_ex1.png?m=701CE78EC02D
&NOTE=Ni4xIDogOS45fDV8djEuMAo= 进行了一系列交互

999.png

行为总结:

样本在C:\Users\用户\AppData\Roaming\ 执行释放自拷贝 自启动的行为
样本会与恶意域名general-second.org-help.com进行交互

二、Pe结构和ida分析

我们借用peid查看下pe信息如下

998.png

我们利用peid的Krypto ANAlyzer插件查看下文件的加密信息里面大概有两种加密

Base64和crc32加密

996.png

并且利用peid未发现该样本加壳信息 我们直接拖进ida进行分析程序会默认停留在winmain
函数处winmain函数内部有如下几个函数。

992.png

CreateMutexA(win32api)
GetLastError(win32api)
CloseHandle(win32api)
sub_4011E0(自定义函数)
sub_403600(自定义函数)
sub_401580(自定义函数)
sub_401770(自定义函数)
sub_402790(自定义函数)
CreateThread(win32api)

函数功能分析:

CreateMutexA、GetLastError分别为创建相关进程对象和探测本地用户组情况;
sub_4011E0为加载dll和相关字串解密获取相关api函数地址;
sub_403600为文件的自拷贝和自启动等操作;
sub_401580为获取当前环境变量设置;
sub_401770 为判断系统版本 内存拷贝;
sub_402790注册表操作;
CreateThread创建相关网络请求进程;
下面我们看下相关函数的具体实现,(除部分win32api)

sub_4011E0

该函数为加载dll和相关字串解密获取相关api函数地址 函数内部调用sub_401040对传入字串进
行解密处理具体操作为将加密字串-5即可,然后加载kenel32.dll利用getprocaddress函数来获
取api函数地址。相关功能部分截取如下。

991.png

总结:函数内部使用了特定解密函数sub_401040来处理加密字串,加载三个dll文件分别为
WININET.dll、urlmon.dll、kennel32.dll、通过getproaddress函数获取相关api地址

sub_403600

该函数内部功能为文件自拷贝 自启动设置 程序弹窗设置,
程序首先通过SHGetFolderPathA函数获取自启动文件夹C:/Documents and Settings/当前
用户/Application Data;

通过GetModuleFileNameA获取当前程序运行的直接路径
Strcmp判断当前执行文件夹是否等于C:/Documents and Settings/当前用户/Application Data;如果相
同通过copyfile将文件拷贝到C:/Documents and Settings/当前用户/Application Data下然后通过向注册
表SOFTWARE\Microsoft\Windows\CurrentVersion\Run加入eset_update值达到自启动的目的。

990.png

sub_401580

此部分主要功能为获取本机网卡信息和执行获取磁盘序列号 以及随机数的生成 通过GetAdaptersInfo
获取网卡配置和ip信息,后又通过GetVolumeInformationA来获取磁盘序列号,最后通过GetTick
Count来生成随机数,具体功能如下:

899.png

sub_401770

该函数主要为获取系统版本信息的获取和操作系统的位数 通过GetVersion函数获取相关系统版本
信息然后通过GetNativeSystemInfo,格式化一下,然后做数学运算 具体实现如下。

898.png

sub_402790

函数为注册表信息的修改,主要就是对XhwjjsWnggtsxItrfns和XTKY\\FWJaRnhwtxtkya\\nsit|xaHz
wwjsy[jwxntsaXhwjjsxf{jwx解密后做拼接,然后将存储在qword_41A620处的恶意url写入注册表内
该恶意url为general-second.org-help.com,内部功能如下

896.png

CreateThread

针对该样本的分析,在完成上述的一部分函数分析时已经有了一些初步的的认识我们到新进程
StartAddress内来继续分析下。StartAddress开头部分函数分析如下

893.png

我们跟下sub_932F30为网络请求设置

892.png

请求头为Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60
.0.3112.101 Safari/537.36,gzip(gfe),gzip(gfe)", 94A7A0:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Apple
WebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36,gzip(gfe),gzip(gfe)

891.png

这部分程序流程比较直接看下sub_931AA0这里 首先样本会对特定字串进行解密

890.png

这里程序加载了一个rundll32.exe文件,但缺失该文件的相关行为说明可能需要进行动
态调试进行查看,我们继续向下走 通过动态调试看到。

889.png

程序会获取C:\\Users\\用户\\AppData\\Local\\Temp\\相关文件下然后将
tmp.LOG与该文件夹进行拼接。向下走看到

888.png

这里会对文件名进行一个分割添加动物后缀,然后修改SOFTWARE\Microsoft\Windows\Curre
ntVersion\Run和SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\ScreenRi
bbonsDomain两个参数达到自启动和修改屏保属性的目的

886.png

这里会根据文件后缀的判断结果,如果为包含有tiger接受相应的命令参数然后通过cmd执行

229.png

样本行为总结

样本通过sub_4011E0调用解密函数解密一部分关键api,加载了dll、urlmon.dll

kennel32.dll,并通过GetProcAddress函数获取相应函数地址,函数如下InternetOpenAInternetCloseHandle
InternetConnectA、HttpOpenRequestAHttpSend、RequestAURLDownloadToFileA、DeleteUrlCacheEnt
ryAWinExec、CreateToolhelp32Snapshot、InternetReadFile、InternetQueryDataAvailable。

通过sub_403600函数实现文件自拷贝,自启动设置,程序弹窗设置。
通过sub_401580获取主机网卡和ip信息。
通过sub_401770获取系统版本信息的获取和操作系统的位数。
通过sub_402790修改注册表写入恶意url。
通过sub_931AA0实现相关的远程注入。
该样本代码中加入了一系列动物名称,例如tiger、wolf等,属于KimSuky家族系列。


个人体会

样本分析中动静态分析跑飞了好多次由于自己对一部分关键点把控不是很准确另外利用
这次分析巩固了x64dbg的调试技巧。收获还是不错的。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.