你好,看了你这个帖子,而且我也在分析,但是可能相对于经验比较少吧,我想问的是,我这么顺着调试下来,发现程序根本不会进入,都是不满足条件,多次跳转后就执行到程序结束处了,所以您这个调试的话,是不是也是设置新的EIP地址,再执行,这样OD会崩呢,想问下您是如何处理这个问题的?
一 样本简介
Ursnif是一款著名的银行木马,也叫Gozi银行木马,最早出现于2007年,并一直活跃于金融行业,Ursnif功能强大,2010年其代码泄漏后,该木马开发了多种不同的功能,最近发现Ursnif非常活跃,从网上下载到了Ursnif银行木马的最新的一个变种样本,进行了详细分析。
二 详细分析
- 查壳分析,样本采用UPX加壳,如下所示:
- 脱壳之后,如下所示:
- 获取精确的文件时间信息,如下所示:
- 然后一堆跳转,进行内存解密操作,如下所示:
- 加载kernel32.dll和ntdll.dll动态链接库文件,如下所示:
- 通过GetModuleFileNameA获取文件路径,如下所示:
- 打开文件,读取文件内容到内存地址,读取的文件大小为0x5FA00,如下所示:
读取的数据块,如下所示:
再次读取文件后面的内容到内存块,如下所示:
读取到的文件内容,如下所示:
- 然后通过GetProcessAddress获取如下函数的地址,如下所示:
相应的函数如下:
ZwUnmapViewOfSection、VirtualAllocEx、GetCurrentProcess等函数 - 通过GetCurrentProcess和VirtualAllocEx分配相应的内存地址空间,如下所示:
- 加载数据到刚才分配的内存地址,如下所示:
然后再读取程序的数据到相应的内存地址,数据大小为0xF4240,如下所示:
读取的数据,如下所示:
- 通过CreateProcessA创建新的进程,挂起进程,如下所示:
如下所示:
然后通过GetThreadContext获取进程信息,如下所示:
- 将之前加载的内存数据写入到进程,如下所示:
通过SetThreadContext设置进程,如下所示:
- 通过ResumeThread执行进程,如下所示:
进程执行,如下所示:
- 将注入到进程中的数据Dump下来,如下所示:
- 分析Dump下来的Payload代码,如下所示:
- 打开进程,获取相应的进程句柄,如下所示:
- 循环判断,解密程序.bss段的数据,如下所示:
相应的反汇编代码如下:
解密的密钥为:Aug 16 2018 - 解密出相应的数据拷贝到指定的内存空间,如下所示:
- 判断操作系统是不是64位,如下所示:
- 在内存解密出文件头被修改的PE程序Payload2,如下所示:
通过Process Hollowing在内存中加载解密出来的Payload2,如下所示:
- 执行解密出来的Payload2里面的代码,如下所示:
然后跳转到相应的代码,如下所示:
进入Payload2代码段处执行,如下所示:
动态跟踪之后,就进入到了此款银行木马最核心的功能模块代码处,如下所示:
Payload2反汇编代码如下所示:
- 打开进程,如下所示:
解密出.bss段的相应的字符串数据,如下所示:
判断操作系统版本,如下所示:
相应的反汇编代码如下:
- 获取进程相关信息,如下所示:
相应的反汇编代码如下:
- 获取操作系统用户名,如下所示:
获取操作系统主机名,如下所示:
- 设置键盘钩子,获取键盘记录,如下所示:
卸载键盘钩子,如下所示:
- 获取剪切板的数据信息,如下所示:
- 进行截屏操作,如下所示:
- 创建命名通道,收集进程数据,如下所示:
- 解密出相应的C2地址http://195.123.237.123, 如下所示:
- 将获取到的相关信息,发送到远程恶意服务器,如下所示:
- 进程退出,卸载模块,如下所示:
三 总结
根据笔者近期的观察,银行木马家族最近一段时间都非常活跃,包括:Emotet、TrickBot、Ursnif、Osiris、Zeus等家族,可以预测在未来一段时间里,可能会有新一轮专门针对金融行业的恶意攻击,请金融行业的各大企业做好相应的防范准备工作。
四 相关IOC
MD5
D236F9AAD941974C2B44BF7DEBD2A19B
IP
195.123.237.123
附件样本解压密码:infected(包含母体样本,加载核心模块的Payload1,解密之后的银行木马核心模块Payload2)