首页
社区
课程
招聘
[分享]记一次lpk劫持病毒分析
发表于: 2022-1-4 13:58 8718

[分享]记一次lpk劫持病毒分析

2022-1-4 13:58
8718

首先利用哈希工具查看样本的哈希值

image-20220101100344631

将样本上传至Virscan.org分析一下,查看报告

image-20220101104006253

image-20220101104745174

既然如此,我们就可以直接把它先脱壳再分析了:

image-20220101110422412

脱壳之后使用Resource Hacker查看病毒程序,发现再RC数据下有一个PE文件,那么它很有可能会释放文件或者要利用这个文件执行什么操作:

image-20220101134255511

将病毒程序拖入火绒剑监控其行为,看看它做了哪些事。

先过滤出行为监控:

image-20220101135232551

然后自我复制,接着把最开始执行的样本文件删除了,所以后面的操作都是最开始样本程序释放出的PE文件执行的。

image-20220101135538012

紧接着就是释放了hra32.dll文件在系统目录下,RCXDB94.tmp文件在根目录下,再就是释放了一堆lpk.dll文件再各个目录下。 而且这些lpk文件都是隐藏的。

与此同时,网络行为主要是TCP连接和发送数据包:

image-20220101140528507

而进程监控到的行为则是不断地创建进程,包括cmd.exe、find.exe、explorer.exe、rar.exe在命令行下完成一些操作,还有打开并写入设备,还有跨进程恢复线程以及退出进程。

image-20220101141312104

再来看看注册表操作:

image-20220101141449136

image-20220101141659962

文件操作则集齐了打开、创建、写入、修改、截断内容、设置属性一系列的操作:

image-20220101141828965

image-20220101141959826

image-20220101142040962

image-20220101142231277

首先把样本拖入IDA分析,在它断到了OEP处之后按空格切换到源码界面,再按F5查看伪代码有助于我们分析,这个程序的main函数就映入眼帘了:

image-20220101143600525

剩下几个函数需要点进去分析一波了。

这里先是载入了ADVAPI32.dll,这个模块,百度一下说明是跟注册表的操控和事件日志有关,果不其然接着就获得了注册表的句柄,啊然后下面有很多数值,尝试转化成ASCII看能不能解读一下:

image-20220101143812801

image-20220101143954660

将下面的数值全部转化成ASCII码之后发现就是一个注册表的键,将它保存在Source中:

SYSTEM\\CurrentControlSet\\Services\\

image-20220101144329735

image-20220101144848218

image-20220101150600015

先看看服务回调函数,这个服务有什么功能:

一进来便设置了服务和相关函数

image-20220101154553243

image-20220101154637214

image-20220101154720642

image-20220101154744004

这个函数的大致功能就是将文件中的资源读到内存中然后写入进文件:

image-20220101161400559

回到上层函数继续往下看:

image-20220101161535034

image-20220101163553232

image-20220101163615686

image-20220101163651414

回头总结一下这个函数:

image-20220101163758348

继续往下看:

image-20220103090222703

一进来就看到一堆用户名和密码的字符串,莫非是弱口令爆破?

image-20220103090821520

image-20220103091810273

image-20220103092335589

我们先确认一下传进来的几个参数

image-20220103092815069

image-20220103095158154

总结一下,这个函数就是复制文件并执行。

所以第一个线程的作用就是将自己复制并上传到局域网内的主机并执行。

image-20220103095554771

注意这个函数传入参数是一个字符串,所以这个函数就是获取当前本地时间

image-20220103095901561

接着看这个线程回调函数:

image-20220103100743207

StartAddress:

这是个非常长且复杂的函数

image-20220103153307996

image-20220103161524986

image-20220103161615191

image-20220103161712927

总结一下,这个函数将本机的信息发送除去,并下载文件然后执行cmd命令,然后关闭并删除Ghijkl Nopqrstu Wxy服务。这也是第二个线程回调函数的主要功能。

这个函数的功能和第一个回调差不多,都是将自身代码上传到局域网中并执行。

总结一下这一串函数的功能:

image-20220104084134493

将这里的函数识别出来的代码直接搬运到VS中,再修改一下参数类型微调一下就可以直接使用了:

image-20220104152638048

image-20220103165415929

image-20220103182441211

image-20220103182457790

image-20220103182516856

总结一下:这个函数就是拷贝自身到系统目录,创建并设置服务描述,启动服务最后删除自身。

分析到这里我们可以大致梳理一下逻辑:

首先初始化网络库,然后判断自身服务有没有启动,如果没有就创建并启动自身服务,然后删除自身,启用之后就执行了服务回调函数。那么这个服务干了什么事呢?它先遍历了资源,将hra.dll文件释放到系统目录下,将自身代码当成资源拷贝进hra.dll文件中,然后创建四个线程,一个用于局域网的传播,其它三个用于连接远程服务器,下载命令执行。

那么接下来我们就要看看这个hra.dll又是什么情况了。

分析之前,我们可以先利用ResourceHacker工具将资源从文件中提取出来,如图:

image-20220104085525322

然后就可以将它载入IDA开始分析了:

image-20220104085627584

先定位到DllEntryPoint,然后F5查看其伪代码,由于它是一个dll文件,应该是为主程序提供一些函数使用的,这里我们可以从导出表入手,查看其导出表:

image-20220104085923962

这些和系统自带的lpk文件很相似

image-20220104091745857

image-20220104091912595

image-20220104092137607

image-20220104095521358

image-20220104095539800

回到上册的dllmain中继续往下看,还有一个函数

image-20220104095918068

image-20220104100220608

跟进继续看第一次加载此模块有什么事件:

image-20220104100547296

image-20220104100502841

该病毒的主运行流程如图所示,当然在这些运行的时候还会创建一些线程去做别的事情,比如通过主机中的共享文件来向局域网传播病毒并远程运行。

还有远程接受命令的几个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需求如下:

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-1-4 15:27 被JokerMss编辑 ,原因: 增加内容分析
收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//