这是一篇关于《恶意代码分析实战》书中样本Lab12-04的分析报告。
此样本分析起来较为复杂,尤其是反汇编代码分析。如有分析不当的地方,还请各位大佬指教。
分析环境:Windows XP操作系统
分析工具:
VMware虚拟机
PEID
IDA pro
PEview
火绒剑
一、静态分析:
1、查壳:
无壳
2、提串:
dll文件:ADUAPI32.dll、MSVCRT.dll、sfc_os.dll、psapi.dll、urlmon.dll
exe文件:winlogon.exe \system32\wupdmgr.exe \winup.exe
链接:http://www.practicalmalwareanalysis.com/updater.exe
字符串:%s%s BIN 101 %D @
这些字符串和后面的分析一定有关联,尤其是dll和exe名称字符串。
3、查看PE文件:
可以看出PE文件中隐藏有一个资源节,位置在BIN 0065 0409,推测运行之后运行可能释放出来。
4、查看导入表:
从导入表的导入函数特征得到如下信息:
FindResource、LoadResource、SizeofResource:资源节加密或压缩
CreateRemoteThread、OpenProcess:dll注入
OpenProcessToken、LookupPrivilegeValueA、AdjustTokenPrivileges:提权
到这里可以看出,这个样本的恶意行为可能较为复杂,所以先动态运行,直观的感受一下。
二、动态运行:
在虚拟机中双击运行样本
在火绒剑中监视进程,发现有恶意进程wupdmgr.exe、winup.exe的创建,并且发起了网络连接。
记得之前提取字符串时还有一个进程 winlogon.exe ,但是目前并没有看出明显的异常,先继续分析。
三、反汇编分析:
先从_main函数入手:
注意到字符串”psapi.dll”反复出现,这个dll文件用于获取windows进程状态。猜测后面可能和进程操作有关。
往下走,不断跳转之后到达loc_401474。
这一部分中,loc_401474、loc_4014CF、loc 401465构成一个循环结构,很明显,其最终目的是获取到进程ID,并存放到dwProcessId变量中。根据经验,后面很有可能就开始进程注入或是进程替换。
注意到loc_401474中有一个跳转地址loc_4014D1,跳转过去看看
这里以dwProcessId为参数,调用函数sub_401174,一定和进程操作有关,跳转进入该函数中。
发现在函数sub_401174中又调用函数sub_4010FC,并且以字符串SeDebugPrivilege为参数,根据经验,很有可能要进行提权操作。
猜测恶意样本将要改变之前获取到ID的进程的权限,我暂时还不知道这个倒霉的进程是什么,所以后文中我称这个受害进程为进程A。
进入函数 sub_4010FC 中。
果然,正如我之前的猜测,函数中进行了获取进程句柄、提权等操作。
这里又跳转到地址loc_401153,进入看看。
这里调用函数AdjustTokenPrivileges,对进程A进行了权限修改,从而方便后续对这个进程的恶意操作,往下看看这个恶意样本想如何操作这个进程。
到此,函数sub_4010FC结束,我们返回到函数sub_401174中继续分析。
继续向下,恶意代码跳转到loc_4011A1
注意到一个字符串sfc_os.dll,这是一个Windows系统文件的名称,用其作为参数调用函数LoadLibraryA,显然是要将这个dll文件加载到指定进程的地址空间中。
推测这个进程就是进程A。如果这个推论成立,那么恶意代码一定是要在进程A中注入 sfc_os.dll,那么这个恶意样本到此为止的真正目的就是进程注入。
果然,后面就进行了打开进程操作,被操作的进程就是进程A(使用了存放进程A的ID的变量dwProcessId作为参数)。
所以,综上,我们可以证实了前面的推论。
但是这个恶意样本并没有到此为止,我们继续往下分析。
后面跳转到地址loc_4011D8处,恶意代码调用函数CreateRemoteThread创建了一个远程线程,参数有进程A的句柄,还有一个变量lpStartAddress。这个变量向前回溯,发现它是 sfc_os.dll的序号2函数的指针。
sfc_os.dll是一个用于保护 Windows 系统文件的文件。通过查阅资料发现,恶意样本可以通过运行这个序号2函数禁用Windows文件保护机制。
所以,我发现,这个远程线程的真正目的就是为了禁用Windows的文件保护机制,至于为什么要禁用 Windows的文件保护机制还不知道,所以接着往下看。
到此,函数sub_401174结束,我们返回到地址loc_4014D1处继续分析。
接下来,恶意代码调用函数GetWindowsDirectoryA,以获取Windows目录”C:\windows\”,并且这里出现了字符串”\system32\wupdmgr.exe”,%s%s看起来是两个字符串输出的标准格式,后面还有_snprintf输出函数。因此这里一定是将这两个字符串拼接在一起,形成字符串“C:\windows\system32\wupdmgr.exe”,再标准输出到变量 ExistingFileName。
这里的wupdmgr.exe二进制文件是Windows的系统升级程序,用于Windows系统的更新升级。
调用函数GetTempPathA,获取为临时文件指定的路径,同样,与字符串”\winup.exe”拼接,存放在变量NewFileName中。
所以这一段代码主要目的是获取二进制文件 wupdmgr.exe 的路径,并且为winup.exe分配临时路径。
这里,函数MoveFileA将二进制文件 wupdmgr.exe 移动到临时文件目录中。
后面又调用函数sub_4011FC
这里函数 FindResource、LoadResource、SizeofResource 从资源节BIN的位置中提取出文件,证实了我之前猜测的资源节提取操作。提取出的文件取代wupdmgr.exe文件放入目录”C:\windows\system32\”中。
在这一部分,恶意代码完成了备份并取代二进制文件 wupdmgr.exe 的操作。
到此,我终于明白禁用文件保护机制的原因。正是由于禁用了windows文件保护机制,恶意样本才能完成这些关于二进制文件替换和备份的操作。
到此,我总结恶意样本行为如下:
恶意样本获取进程A的句柄,并且修改该进程的权限;
恶意样本创建远程线程,在进程A中注入sfc_os.dll(的序号2的函数),从而禁用了Windows的文件保护机制;
恶意样本在临时文件夹中备份了二进制文件wupdmgr.exe,并且在其源目录中用释放的资源节文件替换了该文件。
由于反汇编分析地址跳转的非常乱,所以这里整理了一下分析流程,仅供参考:
_main——>loc_401474——>loc_4014D1——>loc_4014E4——>函数sub_401174——>函数sub_4010FC——>loc_401153
函数sub_401174——>loc_4011A1——>loc_4011D8
loc_4014E4——>sub_4011FC
我发现了一个问题,就是之前提串中的exe文件名称只有winlogon.exe没出现过,联想到我们称受害进程为进程A,我猜测这个进程A就是进程 winlogon.exe,我想通过再次动态运行确定。
其次,为了知道提取出的资源节的内容(新的二进制文件wupdmgr.exe有哪些行为),我也需要再次动态运行恶意样本。
四、再次动态运行:
果然,在进程winlogon.exe中发现了sfc_os.dll,证明了进程A就是进程winlogon.exe。
将运行后新产生的二进制文件 wupdmgr.exe 拖入IDA中分析
很明显这个二进制文件是恶意的。
这个恶意二进制文件访问网址 “http://www.practicalmalwareanalysis.com/updater.exe” ,并下载文件updater.exe,这一定是恶意样本自己的更新文件,并通过调用WinExec函数运行,从而实现了特洛伊木马化二进制。
五、总结:
这个恶意样本的行为较为复杂。
首先, 恶意样本通过PID辨识出进程 winlogon.exe ,并获取该进程的句柄,修改该进程的权限。
然后,恶意样本通过创建远程线程,在进程 winlogon.exe 中注入sfc_os.dll文件,导入这个dll文件中序号为2的函数,从而禁用了Windows的文件保护机制,为后面恶意样本特洛伊木马化二进制文件 wupdmgr.exe 做准备(让Windows的文件保护机制不能够察觉)。
恶意样本在临时文件夹中备份了二进制文件wupdmgr.exe,从而在表面上看起来并不影响Windows的更新,并且在其源目录 C:\windows\system32\ 中用释放的资源节文件替换了该二进制文件。从而实现了最终目的——特洛伊木马化二进制文件 wupdmgr.exe 。
最后,通过运行恶意的 wupdmgr.exe 新文件连接网络,下载该恶意样本的更新程序。
该恶意样本包含了进程注入、提权、资源节的压缩和释放、特洛伊木马化二进制文件、网络连接这些技术,环环相扣,十分缜密的实现了自己的恶意行为。
由于是实验样本,所以最终连接网络之后下载的是恶意样本的更新文件,而如果下载的是一个恶意的勒索、窃取隐私、能够使系统崩溃等等的文件,后果将十分严重。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-9-3 10:51
被fickle编辑
,原因: 上传附件