0%

简单的间谍木马分析

简单的间谍木马分析

0.前言

此篇笔记记录一下分析实战样本11_1的样本,技术已经过时,只是为了了解一下间谍木马的特征和行为。

1.静态分析

  • 由下图可知程序没有加壳是一个控制台程序。

image-20210416161119304

  • 查看导入表,可以看到对资源节操作的API,还有一些注册表相关的API

image-20210416162024328

image-20210416162311061

  • 使用ResHack查看资源数据, 可以发现一段未经加密的PE数据, 后续会分析这段PE

image-20210416163141671

  • IDA查看字符串,可以看到GinaDll,Windows的开机密码认证模块一般是由Gina DLL完成的。

    image-20210419092154616

    2.火绒剑行为检测

    查看行为,发现样本在同目录下释放了一个dll,经过对比发现,释放的dll就是资源中的PE数据(为什么),然后对注册表写入dll的路径,并且最后摧毁了自己的进程。

    image-20210419103650288

    image-20210419094915222

    3.IDA分析

    3.1 main分析

    ​ 观察main函数代码, 可以发现程序首先通过GetModuleFileNameA获取自身程序的全路径, 在调用401080后, 然后通过_strrchr截取\之前的内容, 与\\msgina32.dll进行字符串拼接 然后将拼接后的字符串作为参数传入堆栈调用401000

    image-20210419095821170

    ​ 接下来分析401080与401000

    3.2 401080分析

    ​ 可以明显看到资源节数据的操作,然后通过 VirtualAlloc 申请一段内存空间用于存放资源中的PE数据, 在将资源中的数据取出后, 通过一系列文件操作将PE数据保存到xx\msgina32.dll文件中, xx的路径就是main函数中通过GetModuleFileNameA取出的当前程序的运行路径。这里有个函数为401299, 这个函数就是类似printf的打印输出函数,这里我们将这个函数重命名, 防止后面的分析中再次出现 , 可以节省时间。

    image-20210420110324830

    ​ 到这里401080这个函数功能已经确定了, 取资源节数据并写入文件 , 文件名为msgina32.dll, 路径为程序同路径。

    3.3 401000分析

    ​ 该函数的参数是释放出的dll文件的全路径,可以看到一系列注册表操作, 函数功能是将dll全路径写入注册表路径为SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, 名为GinaDLL的注册表项。

    image-20210421092749755

    image-20210421092844415

    3.4 exe总结

    ​ 整个exe的功能就是为了持久化安装dll文件:将自身资源中的PE数据写入与自身路径相同, 文件名为msgina32.dll的dll文件;将dll文件写入注册表;程序结束。

    ​ 所以说重要功能应该在dll里面,exe文件只是为了dll文件服务。

    4.IDA分析dll

    4.1 dllmain分析

    ​ 将dll文件拖入IDA,查看dllmain函数,首先是DisableThreadLibraryCalls禁用指定的DLL的DLL_THREAD_ATTACHDLL_THREAD_DETACH通知,这样可以减小某些程序的工作集大小。

    ​ 通过GetSystemDirectoryW获取系统目录, 与\MSGina拼接后获取正常的GinaDll , 然后通过LoadLibraryW加载获取dll句柄, 存入全局变量hLibModule, 然后dllmain函数执行结束

    image-20210421094451437

    根据前面exe的注册表操作可以知道,这是为了替换正常的GinalDll,

    4.2 dll导出函数

    查看dll导出函数,依次查看导出函数代码, 发现绝大多数导出函数都调用了10001000函数, 这个函数很明显用于导出函数的转发。

    image-20210421095103186

    DllRegisterDllUnregister也是很简单的函数, 对于注册表值的安装/卸载操作,通过查询百度相关文档信息, 我们知道WlxLoggedOutSAS是在windows注销时会调用的函数,接下来看看它想在注销时做什么。

    4.3 WlxLoggedOutSAS分析

    image-20210421100642564

    观察代码, 样本首先调用10001000进行正常功能的转发, 然后调用edi, 通过回溯寄存器(如何?), 我们知道了edi是正常的WlxLoggedOutSAS, 然后样本执行了10001570函数, 观察参数发现一个有趣的字符串UN %s DM %s PW %s OLD %s, 这种携带占位符的字符串常用于输出, 替换, 拼接等, 接下来我们就需要看看10001570处的函数

    4.4 10001570分析

    首先将传入的参数通过_vsnwprintf进行格式化, 然后打开文件msutil32.sys, 接着格式化时间, 然后调用fwprintf将数据写入流中, 通过寄存器回溯, 我们可以找到esi来源就是wfopen的返回值, 也就是代表文件msutil32.sys

    然后调用FormatMessageW转化一些数据, 观察参数大致能猜出来是系统调用时传递的数据. 最后关闭文件,结束程序。

    image-20210421100908023

    4.5 总结

    ​ 根据分析, 整个dll的作用就是劫持WlxLoggedOutSAS函数, 获取到函数参数后加入一些例如时间戳信息后写入文件msutil32.sys, 这也说明这个sys文件并不像它表现出的是个驱动文件, 而是一个简单的日志文件。

    ​ 由于GinaDll在新系统中已经不再使用, 因此想要复现需要XP或者更旧的系统, 这样在点击注销后, 样本会记录用户的账户密码, 也就是个最简单的间谍木马