说明:
刚开始学习病毒分析的萌新,最近一段时间在面试病毒相关岗位,下面要分析的就是面试过程中的某个样本,整理成文,发表出来,供大家参考学习,一起进步!如果有什么分析的不正确的地方,欢迎各位大佬们指正!
0x0 样本信息
文件名:35a7db3cde6c0744dc2146f23f499df8ad527c93
大小:229 KB (234,496 字节)
CRC32:7E28EBC8
MD5:324B6AB5E45E2A106025BE8802D39511
SHA-1:35A7DB3CDE6C0744DC2146F23F499DF8AD527C93
分析环境:Windows10 专业版
分析工具:OD IDA 火绒剑 exeinfo Xvolkola
0x1 初步分析
0x1.1 文件加壳状态
拖入 exeinfo 查看有没有加壳:
发现是有壳的,是MPRESS。同时查看文件是否为PE文件,发现文件开始是MZ标志,且e_lfanew指向的也为PE标志,因此确定文件是PE文件。拖入OD发现pushad,说明确实加了壳:
于是使用Xvolkolak自动脱壳机开始脱壳:
脱壳完毕后生成一个.unp文件,拖入OD在入口点处,同时搜索字符串也显示正常,脱壳成功。
0x1.2 病毒行为分析
将未脱壳的源文件改为:1.exe,然后设置火绒剑进程过滤为1.exe,开始监控程序行为。
病毒首先打开并创建了一个Conhost.exe进程,接着在C:\Program File新建了Microsoft DN1文件
接着设置了注册表键为打开CMD,并且读取了用户的桌面、文档、音乐、视频、下载和onedrive文件夹中的desktop.ini文件
代码打开了sdclt.exe,可能想要通过sdclt.exe绕过UAC,且删除了上面创建的CMD键值。
接着进程1.exe结束,变成了MicrosoftEdgeCP.exe开始执行1.exe,执行了powershell.exe,在Windows\CurrentVersion\Explorer\下新建了一个键值ADDEJIWOQK,并设置了一个注册表项值inst。与此同时新建了images.exe文件,并启动自释放文件。设置images.exe为开机启动项。
MicrosoftEdgeCP.exe进程结束后,images.exe开始执行,分别执行了conhost.exe, powershell.exe和cmd.exe。
接着,程序一直在连接108.160.178和79.134.225.37两个ip:
至此,病毒大致行为分析完毕。
0x2 病毒代码分析
0x2.1 第一层分析
将脱壳后的程序拖入IDA:
进入函数,经过分析后发现第一个函数的功能为获取本机的security_cookie:
函数实现步骤如下:
通过函数计算出security_cookie,再将security_cookie放入[0x4E7EDC],将取反后的security_cookie放入[0x4E7ED8],特征码算法如下图所示:
接着开始分析sub_4014E0:
经过分析,找到关键函数:
跟进去后第四个函数功能为关闭CMD并分配内存:
接着利用OD进行分析:
第一个函数为关闭cmd,紧接着下一个函数就为分配内存空间写入。
进入函数后程序先获取当前进程句柄,然后调用VirtualAllocEx分配一块大小为0xC00000的内存,分配的内存首地址为:0x2550000
而接下的循环则是将0x4E4FFE中的数据按照地址从高到低的顺序进行单字节复制到新建的内存空间中,复制前先取反,再复制,且复制一个会跳过FF复制有效数据。
待复制的数据区:
解密后的内存空间:
复制的大小为:0x28000
经过分析,写入的为shellcode,于是dump下来,拖到IDA进行分析。
0x2.2 分析shellcode
导入IDA后先更改Imagebase为0Xb70000:
接着将0XB7053D之前的数据设置为代码段,开始进行shellcode分析。
经过分析,一直到0XB703A8之前shellcode将自己的PE文件复制到新建的内存中:
接着模拟了系统加载DLL时更新IAT表
然后使用VirtualProtect改变所有节的属性,然后调用调用FlushInstrutionCache
接着开始执行释放的dll:
创建了一个线程,线程函数地址为:0x3095CE2
开始分析线程函数:
首先调用了GetCommandLineA,获取命令行参数
使用GetStartupInfo取得在进程启动时被指定的STARTUPINFO 结构
用GetProcessHeap返回调用进程的默认堆句柄,用RtlAllocateHeap分配堆内存
获取模块句柄,最后关闭进程。线程函数结束
0x2.3 提取并分析dll
将dll文件dump下来,放到ida分析:
Dump下来后用LoadPE重建PE,然后更改Imagebase为:0x3150000:
搜索字符串后有如下关键语句:
查看windows用户列表:
SQL语句查询数据库中用户名和密码:
对数据库的一些操作:
使用CMD执行ping命令查看网络是否联通:
使用Powershell执行将自己所在路径在Defender中设置为白名单:
至此,基本分析完毕dll的主要功能。
最后调试images.exe发现功能和样本文件一致,于是得出结论,样本程序将自身复制一份放到了C:\ProgramData,并改名为image.exe。并且更改程序为开机自启,重启后自动运行images.exe。
0x3 总结
此次分析的恶意代码是木马程序,程序首先收集系统目录的注册表信息,如操作系统、用户目录下的配置文件等。接着通过sdclt.exe绕过UAC,在内存中将自身附带的dll文件释放在内存中,并且通过远程线程注入的方式将dll注入到样本中,并执行cmd的ping命令和Powershell的设置路径为白名单的命令,以及对数据库进行一系统操作。并且将文件的备份放在C:\ProgramData隐藏文件夹下。然后设置注册表项开机自启动image.exe程序,同时程序会通过ZwDeviceIoControlFile函数和108.160.169.178和79.134.225.37等恶意IP进行通信,将用户的私密信息窃取。