网银木马TrickBot的分析调试笔记

Trickbot描述

Trickbot是2016年出现的一种网银木马,它以大银行的客户为目标,窃取他们的信息。自出现以来,新的变体不断出现,每次都有新的技巧和模块更新。
Trickbot是一种模块化恶意软件,包括针对其恶意活动的不同模块。主要功能包括从浏览器中窃取数据、从Microsoft Outlook窃取数据、锁定受害者的计算机、系统信息收集、网络信息收集和域凭据窃取等模块等.
由于此家族出现至今已四年,公开的报告众多,此处不多描述初始载荷,以调试分析Trickbot功能载荷(本次分析的是1000511版本)为主,偏向于定位ShellCode,绕过反调试,解密配置文件。

样本分析

功能模块化

Trickbot是一个多阶段的恶意软件,通常由一个外壳、一个加载器和一个主恶意软件模块组成。外壳使用多个不断变化的模板,旨在通过产生独特的样本来逃避检测,即使主要的恶意软件代码保持不变。
TrickBot运行后会复制自身文件到目录%APPDATA%(或其他路径),然后删除原始文件。接着会从C2服务器下载一些模块。这些模块也被加密存储,常见的功能模块及描述如下:

Systeminfo:用于收集有关主机的基本信息
importDll:从浏览器窃取数据
injectDll:进入银行网站盗取证件
Pwgrab:抓取密码
cookiesDll:窃取Cookie
mailsearcher:遍历要窃取的系统中所有驱动器中的所有文件
sharedll:用于传输到管理共享并通过服务创建持久性
networkDll:用于收集系统信息和网络/域拓扑
NewBCtestDll:Backconnect SOCK5模块
psfin:POS提取
vncDll:远程控制/ VNC模块
wormDll:蠕虫
tabDll:用永恒的浪漫和MS17-010来传播SMB
outlookDll:窃取由微软Outlook保存的数据
domainDll:用于域控制器配置的LDAP获取
mwormDll:用于通过LDAP和SMB开发的横向移动/枚举模块
mshareDll:通过LDAP和SMB开发横向移动/枚举;mshare和mworm模块协同工作
rdpScanDll:暴力破解远程桌面协议(RDP)的名单

样本详细分析

静态数据

本次分析的TrickBot变体查壳发现是由VB语言编写的32位可执行程序:
在这里插入图片描述
IDA导入表中,除了MSVBVM60动态库的函数之外,另有几个比较有意义的函数:
在这里插入图片描述
“VirtualAlloc”+“VirtualProtect”用来申请内存修改为可执行属性,一般用于后续写入ShellCode执行,并且在IDA中,有且仅有一个“VirtualProtect”调用:
在这里插入图片描述
并发现其操作的内存地址在后续代码中,由“RtlMoveMemory”调用写入数据“0xE9”,“E9”为汇编指令中的近跳转代码,在此处下断:
在这里插入图片描述
在后续跟踪中,发现是运行后的内存为“JMP+API地址”的代码,API地址来自RCData解密出的API名:
在这里插入图片描述
而有关资源的API函数“FindResourceW”和“LoadResource”可以推测为从资源段中加载资源:
在这里插入图片描述
从上述的API中,可以推测资源段中可能有加密(或未加密)的数据,使用“ResHacker”等资源查看软件,返现该PE文件的有一个包含大量数据的“RCData”资源:
在这里插入图片描述

动态监控

动态运行后,通过火绒剑等动态监测工具,可以发现原始TrickBot会新建目录“C:\Users\Administrator\AppData\Roaming\CommandLineEx”作为工作目录,将自身复制到该目录下后,退出当前的进程。并且会新建计划任务“WinInform”在开机时和15分钟间隔运行副本:
在这里插入图片描述
在后续时间顺序内,副本有大量的外联行为,通过查看该行为的调用栈,发现是通过“WinHTTPSendRequest”进行网络通信,由于导入表中并无该函数,故推测为通过ShellCode动态解密/释放了一些API函数:
在这里插入图片描述

调试分析

通过静态查看和动态监测之后,已经可以推测出TrickBot大致的行为流程和调用的API函数了。
由于有复制本身后退出原进程的行为,故以OD调试副本。
在运行到TrickBot的程序领空后开始下断,由于TrickBot本身的导入表并无WinHTTP系列的等API,此时只能下IDA导入表中显示的API断点,主要的有:
1.加载资源的“LoadResource”:用于查看RCData的资源如何被使用;
2.写内存数据的“RtlMoveMemory”:写入了那些数据,以及数据的用途;
3.修改属性的“VirtualProtect”:申请的内存有可能是别的数据,而ShellCode会被改为可执行属性。

LoadResource

对“LoadResource”下断后,发现RCData的数据存放在内存0x4279F0位置,下内存写入断点后F9运行,后续可以发现解密为函数名:
在这里插入图片描述

RtlMoveMemory

该函数用来写入申请的内存,写入后内存显示为“JMP+API地址”:
在这里插入图片描述
释放的函数比较少,并且其中的API包括“VirtualAlloc”+“VirtualProtect”(下断),推测这是一段ShellCode释放代码。

进程空间→ShellCode1

最后一次“RtlMoveMemory”,在0x422B20写入的是ShellCode1的地址。写入前为常规的存取堆栈操作“PUSH EBP”:
在这里插入图片描述
写入后为跳转至ShellCode1的“JMP [ShellCode1]”:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值