一例lpk病毒的分析

概述

lpk病毒通过正常程序侧加载的方式运行,通过感染可移动存储介质、压缩包来传播。其中感染和运行如下图所示。

整个运行过程分为3个阶段。

第一阶段 lpk.dll

第一阶段的样本为lpk.dll,它通过路径劫持的方式被加载,这个样本基本信息如下,2010年的样本了,在xp时代的病毒了。

文件大小: 45.0 KB (46,080 字节)
MD5: 9d518882e451d2c343f6b17e0ef5fd0d
SHA1: e51575100d66c255b0715bb79c72de93461ee08d
SHA256: 0625ec687bf5137314f2ab3d01358da427ba27b6e7eeb5ede7061817ec502dbd
01a5b8e3dce9978c37207e944
Link date:    17:59 2010/6/8
MachineType:    32-bit
PE32
    编译器: Microsoft Visual C/C++(2008)[-]
    链接程序: Microsoft Linker(9.0)[DLL32]
    资源[1a94]: PE32
        编译器: EP:Microsoft Visual C/C++(6.0 (1720-9782))[EXE32]
        编译器: Microsoft Visual C/C++(6.0)[msvcrt]
        链接程序: Microsoft Linker(6.0*)[GUI32]

首先从从资源节RCData->101处取一个字符串Distribulfs,这是服务名。
若当前进程文件名不是hrlxxx.TMP这种格式,且不存在名为Distribulfs的互斥量,表示当前系统没有被感染过,没有运行病毒的实例,从资源节RCData->102中释放一个PE文件,保存为%temp%\hrl[xxxx].tmp,并运行。
若当前模块名不是lpk.dll,执行感染系统的操作(本阶段不会感染,第三阶段会运行,后面很细讲)。

最后它会加载系统原始的lpk.dll,导出其所有的导出函数,这样不会影响调用者的运行。

lpk.dll是Windows操作系统中的一个动态链接库文件,它的主要作用是提供对多语言支持的功能。
具体来说,lpk.dll文件包含了一些函数和资源,用于处理和显示多语言文本。它可以帮助应用程序在不同的语言环境下正确地显示和处理文字,包括字符集转换、文本渲染、输入法支持等。

第二阶段 %temp%\hrl[xxxx].tmp

第二阶段的样本是第一阶段释放出来的%temp%\hrl[xxxx].tmp文件。
这个样本的基本信息如下。

文件大小: 37.5 KB (38,400 字节)
MD5: 302f8fc20e175c7769ea8976a30dd436
SHA1: 19e9266874057e0e0b8823ce6b8a12d4c6ec97ed
SHA256: dc42fcc690f2063ede560e89148d3f03abdebadcae379bccf1a18e6d995865da
Link date:    17:51 2010/7/29
MachineType:    32-bit
PE32
    编译器: EP:Microsoft Visual C/C++(6.0 (1720-9782))[EXE32]
    编译器: Microsoft Visual C/C++(6.0)[msvcrt]
    链接程序: Microsoft Linker(6.0*)[GUI32]
    资源[7658]: PE32
        编译器: Microsoft Visual C/C++(2008)[-]
        链接程序: Microsoft Linker(9.0)[DLL32]

其资源节中也有一个PE,这是第三阶段的样本,后面会讲。
这个样本的执行过程很有意思,如下图所示,有3个阶段。
第一阶段:若当前系统中没有名Distribulfs为服务,将自身拷贝为C:\windows\system32\xxxxxx.exe,创建服务,服务名为Distribulfs,开机自启动,DisplayName和描述信息为Distribulhq Transaction Coordinator Service。启动这个服务,将自身移动为%temp%\SOFTWARE.LOG,重启后会删除。
第二阶段:启动一个傀儡进程svchost.exe,将自身代码注入这个进程。
第三阶段:进入svchost.exe进程,将这个服务主函数注册到服务管理器,并启动一个新的线程来处理来自SCM的控制请求。这个服务器的主函数就执行病毒的主要功能。

服务主函数

服务的主函数,从资源节RCData->33中释放了一个dll,保存为hra33.dll,将自身写入这个dll的资源节RCData->102,将服务名Distribulfsy写入到资源节RCData->101,然后加载这个dll,这其实是给这个dll传了两个参数。
然后解密了一个c2地址http://imddos.my03.com:6688/511135395.html,连接这个c2执行了一堆操作,由于这个c2目前已经失效了,这部分就不分析了。

第三阶段 hra33.dll

hra33.dll这个样本的基本信息如下,与第一阶段的样本的编译时间完全一样,只是没有资源节。

文件大小: 7.50 KB (7,680 字节)
MD5: 7147ff24579a477a1a34696926e573f1
SHA1: 9127ea8d813ecd5788b3f97777931ec79b7760e9
SHA256: fd08dcb016611316c849d48312ba6dc7d4de75d1a81c1d475a13bb5a1ba07267
Verified:    Unsigned
Link date:    17:59 2010/6/8
PE32
    编译器: Microsoft Visual C/C++(2008)[-]
    链接程序: Microsoft Linker(9.0)[DLL32]

第二阶段给它添加了两个资源,与第1阶段的样本完全一样了,就名称不同,执行的逻辑也不同,主要执行感染操作。
感染系统的过程比较简单,从C盘开始遍历,逐个感染每个驱动器。当驱动器有变动的话,会重新感染一遍。

下面讲一下感染的详细过程。

感染驱动器的过程

递归遍历所有的驱动器,找到exe文件,在exe文件目录下,将自己复制为lpk.dll并隐藏。

感染rar、zip文件的过程

找到后缀名为.rar和.zip的文件,将自己作为lpk.dll打包进压缩包。

为了方便理解,以C:\test.rar文件为例进行讲解,病毒依次执行下面5个步骤。

1.执行 `cmd /c C:\PROGRA~1\WinRAR\rar.exe vb "C:\test.rar" lpk.dll|find /i "lpk.dll"`
- `cmd /c`:运行命令提示符并执行后续命令。

- `C:\PROGRA~1\WinRAR\rar.exe vb`:运行 WinRAR 命令行界面并使用 vb 参数指定操作为验证存档。

- `"C:\test.rar"`:指定要验证的存档文件路径。

- `lpk.dll`:指定要验证的存档文件中的文件名。

- `|find /i "lpk.dll"`:将 WinRAR 验证结果通过管道传递给 find 命令,并查找包含 "lpk.dll" 的文本。 `/i` 参数表示不区分大小写查找。
若test.rar中没有lpk.dll开始感染操作。

2. 执行`"C:\PROGRA~1\WinRAR\rar.exe" x "C:\test.rar" *.exe "C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp\"`

   - `"C:\PROGRA~1\WinRAR\rar.exe"`:运行 WinRAR 命令行界面。
   - `x`:用于解压缩操作。
   - `"C:\test.rar"`:指定要解压缩的存档文件路径。
   - `*.exe`:指定要从存档中提取的文件的过滤条件,此处表示仅提取扩展名为 .exe 的文件。
   - `"C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp\"`:指定提取文件的目标文件夹路径。
将.rar文件解压到一个临时目录下,目录名为%temp%\IR[当前进程id].tmp\

3. 感染目录%temp%\IR[当前进程id].tmp\,与感染驱动器的方法一样。

4.执行 `"C:\PROGRA~1\WinRAR\rar.exe" a -r -ep1"C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp" "C:\test.rar" "C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp\lpk.dll"`

   - `"C:\PROGRA~1\WinRAR\rar.exe"`:运行 WinRAR 命令行界面。
   - `a`:用于创建存档操作。
   - `-r`:递归地包含子文件夹中的文件。
   - `-ep1`:在存档中包含文件的绝对路径,但不包含根文件夹。
   - `"C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp"`:指定要创建的存档文件路径和名称。
   - `"C:\test.rar"`:指定要添加文件到的存档文件路径。
   - `"C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp\lpk.dll"`:指定要添加到存档中的文件路径。
重新打包文件,将lpk.dll文件打包进行rar文件中。


5. 执行`cmd /c RD /s /q "C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp"`

   - `cmd /c`:运行命令提示符并执行后续命令。
   - `RD /s /q`:删除目录(文件夹)及其内容,`/s` 表示递归删除子目录和文件,`/q` 表示以安静模式执行删除操作(无需确认)。
   - `"C:\Users\ADMINI~1\AppData\Local\Temp\IRA7F8.tmp"`:指定要删除的目录路径。

   删除临时目录。

IOC

hash
9d518882e451d2c343f6b17e0ef5fd0d lpk.dll
302f8fc20e175c7769ea8976a30dd436 病毒母体
7147ff24579a477a1a34696926e573f1 hra33.dll


文件
%temp%\hrl[xxxx].tmp
%temp%\SOFTWARE.LOG
C:\windows\system32\xxxxxx.exe
C:\windows\system32\hra33.dll
非系统目录下的lpk.dll和压缩包内的lpk.dll

互斥量 Distribulfsy

服务
服务名 Distribulfs
描述 Distribulhq Transaction Coordinator Service

网络
http://imddos.my03.com:6688/511135395.html

总结

lpk病毒是利用侧加载的方式通过正常的程序来加载自己,其运行方式挺特别的,按照如下流程。
第一步 正常程序加载运行当前目录下的lpk.dll
第二步 lpk.dll 从资源节中释放并运行exe,向调用者导出系统lpk.dll的api
第三步 exe 感染系统,创建服务,并启动
第四步 注入傀儡进程svchost.exe
第五步 傀儡进程svchost.exe 释放并加载hra33.dll,请求c2,运行命令
第六步 hra33.dll感染系统所有盘符,在exe目录和压缩包中添加lpk.dll

lpk病毒目前应该有好多变种,本文的样本是其中之一,其它样本的感染和传播方式应该是相同的。

参考资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值