Phorpiex家族蠕虫病毒DeviceConfigManager.exe分析
前言
这个病毒采用了ShellCode、进程替换、虚拟机检测等手段对抗分析,主要行为有感染可移动磁盘和网络驱动器、替换剪切板中的加密货币地址和远程投放可执行文件等,尝试连接的远程主机有约271个,属于Phorpiex家族。
搜索相关线索,该样本经常更新,最早可追溯到2014年(火绒情报),而本次获得的样本约在2020年以后传播。
样本来源:求助,U盘病毒杀不掉
感染流程分析
根据帖子中内容得知,这些文件是从U盘中提取的,根目录下有两个文件,一个是快捷方式,另一个是vbs脚本文件。通常来说,vbs文件是隐藏的,下面来观察一下快捷方式:
指向了根目录下的vbs文件,vbs文件内容如下:
可以看到,该vbs文件首先关闭了根目录文件夹,随后打开了根目录下名为_
的文件夹(它通常是隐藏的),最后在主机上运行了位于_
文件夹中的DeviceConfigManager.exe
至此感染了接入U盘的主机。
模拟感染
这里使用Sandboxie来模拟主机和U盘的感染。
首先,插入U盘,并于沙盒中运行DeviceConfigManager.vbs,模拟插入U盘后打开快捷方式。
进程树
进程树如下:
可以观察到,DeviceConfigManager.exe启动了系统目录下的一个名为windrv.exe的文件,并结束了自身,此后一直都是windrv.exe在起作用。
文件列表
文件列表如下:
系统目录下“M-505060628465802658027468240850274052804608240850”中的windrv.exe与DeviceConfigManager.exe的校验值相同,可判断复制自身:
U盘感染后目录(未显示隐藏文件):
两个0KB文件可能是沙盒问题,在真机环境中不会出现。用户在感染后会双击根目录中唯一的快捷方式,随后会打开存储原文件的目录,同时也会运行恶意文件,使接入U盘的计算机感染。
病毒分析
第一步:ShellCode加载
该病毒采用的技术手段主要是ShellCode加载和进程替换,还有一些反静态分析和反沙箱手段,例如垃圾代码和延迟等:
随后是解密文件中加密的ShellCode,并将其加载到内存中,之后跳转到解密代码处:
第二步:进程替换
这段ShellCode主要执行了替换自身进程的操作:
通过PEB找到kernel32.dll,并通过它的导出表定位到所需函数地址:
进程替换,包括PE头的复制,各区段的复制:
导入函数加载:
完成以上步骤后,跳到主模块中的一个函数,而此时的主模块已经是被替换的了。
第三步:恶意软件主体
反虚拟机和防止多开:
is_vm函数通过查询驱动器名称检测虚拟机:
持久化
主体中的持久化操作,主要是将自身复制到M-505060628465802658027468240850274052804608240850
文件夹中名为windrv.exe
(具有系统和隐藏属性),该文件夹多数被创建在系统文件夹下,随后是添加了开机自启,修改了防火墙和WindowsDefender等。
尝试在%windir%、%userprofile%、%temp%任一目录创建文件夹M-505060628465802658027468240850274052804608240850
,并将自身复制到其中。按顺序逐个尝试,若有一个复制成功则停止下面的尝试:
设置只读、隐藏、系统属性:
开机自启:
修改防火墙策略:
关闭WindowsDefender:
以上操作完成后,恶意软件创建了三个线程:
它们分别用于感染新插入的可移动驱动器和网络驱动器,劫持剪切板中的虚拟货币地址,和连接远程服务器的远控。
感染驱动器
判断驱动器类型,可移动设备或网络驱动器才可感染,并且盘符不为a或b或c
部分变量:
DeviceConfigManager.vbs的写入,并设置只读、系统、隐藏的属性:
autorun.inf文件,试图利用Windows的自动播放来自动运行DeviceConfigManager.exe:
根目录下创建快捷方式:
这个a3是网络驱动器的标志,如果是网络驱动器,a3会设置为1。
创建存放驱动器中原文件的文件夹,并设置隐藏、系统、只读的属性:
判断驱动器中恶意程序的大小,如果和自己的不一致就将驱动器中的移除:
获取自身大小(InfectDrives函数中):
复制恶意程序到驱动器中:
完成以上操作后,开始遍历根目录文件
删除根目录下特定后缀名的文件:
删除的后缀名有:.lnk .vbs .bat .js .scr .com .jse .cmd .pif .jar .dll,同时排除了自身释放的一些文件的名称。
复制剩余文件和文件夹到下划线目录中,移除下划线目录和根目录都存在的文件或文件夹:
劫持剪切板
HijackClipboard函数实现了剪切板的检测,包括检测到特定特征的字符串就会将其内容替换为程序中的加密货币地址,相关判断如下:
替换如下:
最后实现对内容的替换:
货币地址:
连接远程服务器
该恶意程序内含约271个连接地址,端口皆为5050,循环连接直至连接成功:
部分连接地址:
该远控实现内容较为基础,多数为信息获取,最为重要的是,存在一个远程下载可执行文件并执行的函数。
远程自毁:
信息获取:
远程投放可执行文件
选定临时目录,文件名随机:
从接收到的连接获取文件,下载并执行:
以上是该恶意文件的主要行为。
后记:该样本时间的确定
该样本的编译时间戳显然是不可信的,但根据其中存在的域名可大致推断,该样本于2020年以后传播。
拓展:如何dump出进程替换后的程序?
以该程序为例,动态分析进程替换操作完全完成后,需要如下设置Scylla:
将其中的从磁盘中获取PE头的选项取消勾选,因为进程替换后的PE头是与原程序不一样的,如果使用这个磁盘中的PE头,区段等信息与内存中的不一致,会导致dump出来的文件异常,不能运行,对静态分析也会造成一定影响。
OEP填写第二步中最后即将跳转到的地址,随后正常dump及修复IAT即可。
恶意文件哈希
SHA256 |
---|
d03485b7195f0c422c26aab2c84de814f0f913ac45ec4872018e3c7760fb97a3 |
参考资料
SendKeys 语句 (VBA) | Microsoft Learn
WinNT.h (文件属性常量 - Win32 apps | Microsoft Learn