-
-
[分享]记一次lpk劫持病毒分析
-
发表于: 2022-1-4 13:58 8718
-
首先利用哈希工具查看样本的哈希值
将样本上传至Virscan.org分析一下,查看报告
既然如此,我们就可以直接把它先脱壳再分析了:
脱壳之后使用Resource Hacker查看病毒程序,发现再RC数据下有一个PE文件,那么它很有可能会释放文件或者要利用这个文件执行什么操作:
将病毒程序拖入火绒剑监控其行为,看看它做了哪些事。
先过滤出行为监控:
然后自我复制,接着把最开始执行的样本文件删除了,所以后面的操作都是最开始样本程序释放出的PE文件执行的。
紧接着就是释放了hra32.dll文件在系统目录下,RCXDB94.tmp文件在根目录下,再就是释放了一堆lpk.dll文件再各个目录下。 而且这些lpk文件都是隐藏的。
与此同时,网络行为主要是TCP连接和发送数据包:
而进程监控到的行为则是不断地创建进程,包括cmd.exe、find.exe、explorer.exe、rar.exe在命令行下完成一些操作,还有打开并写入设备,还有跨进程恢复线程以及退出进程。
再来看看注册表操作:
文件操作则集齐了打开、创建、写入、修改、截断内容、设置属性一系列的操作:
首先把样本拖入IDA分析,在它断到了OEP处之后按空格切换到源码界面,再按F5查看伪代码有助于我们分析,这个程序的main函数就映入眼帘了:
剩下几个函数需要点进去分析一波了。
这里先是载入了ADVAPI32.dll,这个模块,百度一下说明是跟注册表的操控和事件日志有关,果不其然接着就获得了注册表的句柄,啊然后下面有很多数值,尝试转化成ASCII看能不能解读一下:
将下面的数值全部转化成ASCII码之后发现就是一个注册表的键,将它保存在Source
中:
SYSTEM\\CurrentControlSet\\Services\\
先看看服务回调函数,这个服务有什么功能:
一进来便设置了服务和相关函数
这个函数的大致功能就是将文件中的资源读到内存中然后写入进文件:
回到上层函数继续往下看:
回头总结一下这个函数:
继续往下看:
一进来就看到一堆用户名和密码的字符串,莫非是弱口令爆破?
我们先确认一下传进来的几个参数
总结一下,这个函数就是复制文件并执行。
所以第一个线程的作用就是将自己复制并上传到局域网内的主机并执行。
注意这个函数传入参数是一个字符串,所以这个函数就是获取当前本地时间
接着看这个线程回调函数:
StartAddress:
这是个非常长且复杂的函数
总结一下,这个函数将本机的信息发送除去,并下载文件然后执行cmd命令,然后关闭并删除Ghijkl Nopqrstu Wxy
服务。这也是第二个线程回调函数的主要功能。
这个函数的功能和第一个回调差不多,都是将自身代码上传到局域网中并执行。
总结一下这一串函数的功能:
将这里的函数识别出来的代码直接搬运到VS中,再修改一下参数类型微调一下就可以直接使用了:
总结一下:这个函数就是拷贝自身到系统目录,创建并设置服务描述,启动服务最后删除自身。
分析到这里我们可以大致梳理一下逻辑:
首先初始化网络库,然后判断自身服务有没有启动,如果没有就创建并启动自身服务,然后删除自身,启用之后就执行了服务回调函数。那么这个服务干了什么事呢?它先遍历了资源,将hra.dll文件释放到系统目录下,将自身代码当成资源拷贝进hra.dll文件中,然后创建四个线程,一个用于局域网的传播,其它三个用于连接远程服务器,下载命令执行。
那么接下来我们就要看看这个hra.dll又是什么情况了。
分析之前,我们可以先利用ResourceHacker工具将资源从文件中提取出来,如图:
然后就可以将它载入IDA开始分析了:
先定位到DllEntryPoint,然后F5查看其伪代码,由于它是一个dll文件,应该是为主程序提供一些函数使用的,这里我们可以从导出表入手,查看其导出表:
这些和系统自带的lpk文件很相似
回到上册的dllmain中继续往下看,还有一个函数
跟进继续看第一次加载此模块有什么事件:
该病毒的主运行流程如图所示,当然在这些运行的时候还会创建一些线程去做别的事情,比如通过主机中的共享文件来向局域网传播病毒并远程运行。
还有远程接受命令的几个switch…case…也可以总结一下:
根据Windows资源共享机制,操作系统加载程序首先从应用程序目录中加载模块。这一特性在注册表中也有体现:HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
,如果为1,搜索的顺序为:应用程序所在目录->系统目录(用GetSystemDirectory获取)->16位系统目录->Windows目录(用GetWindowsDirectory获取)->运行程序的当前目录->PATH环境变量,如果为0,搜索顺序为:应用程序所在目录->运行程序的当前目录->系统目录(用GetSystemDirectory获取)->16位系统目录->Windows目录(用GetWindowsDirectory获取)->PATH环境变量。Windows Server 2003默认值为1,Windows XP/2000默认值为0或者没有这个键值。但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的DLL。如果这个DLL和系统目录下的某个DLL同名,导出表也相同,功能就是加载系统目录下的那个DLL,并且将导出表转发到那个真实的DLL。这时DLL劫持就发生了。可以看出,构造一个符合上面要求的DLL,再将其放在可执行文件的目录即可轻松实现DLL劫持了。
通过编程来实现一个LPK.DLL文件,它与系统目录下的LPK.DLL导出表相同,并能加载系统目录下的LPK.DLL,并且能将导出表转发到真实的LPK.DLL。可以看出我们要实现的这个DLL需求如下:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [分享]CVE-2012-1889 暴雷漏洞分析与利用小记 22028
- [讨论][讨论]记录Wannacry病毒的分析 12819
- [分享]记一次lpk劫持病毒分析 8719
- [分享] 恶意代码分析之熊猫烧香 5950
- [分享]关于UEH异常处理的踩坑记录 7488