恶意代码分析_01上篇:载体代码分析

在这里插入图片描述

1.样本运行概图

在这里插入图片描述
恶意样本将"白加黑"免杀代码打包为iso镜像文件,镜像挂载后只显示一个快捷方式,快捷方式图标为WORD文档图标,快捷方式运行后会启动白文件OneDriveUpdate.exe,由于做了dll劫持,所以会加载运行恶意dll–version.dll,在恶意dll中解密OneDriveUpdate.update生成shellcode,后将解密shellcode做远线程注入到RuntimeBroker.exe进程,shellcode代码中释放自身硬编码的PE文件(dll)到内存,随后动态获取该dll的导出函数并运行,导出函数中做dll反射注入,将自身dll文件加载运行,解密得到C2地址,与控制端进行通信,开展恶意行为。

2.样本信息

2.1 样本指纹信息

名称: a7df3462a6dce565064cfe408557c4df
大小: 4839424 字节 (4726 KiB)
MD5: a7df3462a6dce565064cfe408557c4df
SHA1: 6b91bfc761fe958c8ac04dd403db284ccc3a530e
SHA256: 1fc7b0e1054d54ce8f1de0cc95976081c7a85c7926c03172a3ddaa672690042c

2.2 样本结构略图

在这里插入图片描述

3.恶意代码分析

此样本的分析为上下篇完成,此为上篇文章,主要记录恶意样本载体,下篇记录恶意样本的功能性代码分析。

3.1.快捷方式启动运行

此恶意样本所采用免杀技术为“白加黑+dll劫持”,OneDriveUpdater.exe就是带签名白文件,vresion.dll文件属于原始dll文件(等待被OneDriveUpdater.exe加载),version.dll文件为恶意dll。

1.白加黑免杀:白指出现在杀软的白名单中文件,黑是指恶意代码,利用杀软白名单特性,将黑白文件打包到一起进行投放,在一定程度上绕过杀软的查杀。
在这里插入图片描述

2.dll劫持:程序运行时在指定位置加载自身运行所需dll文件,那么使用恶意dll文件替换原始dll,原始程序运行就会加载恶意dll,同时为了保证程序正常运行,恶意dll需要实现或者做函数转发,让载体程序能正常访问到原始dll文件的函数,避免执行异常引起怀疑。

在这里插入图片描述

3.2 内存解密得到shellcode

在version.dll被加载到OneDriveUpdate.exe进程后,会执行插入的劫持部分代码,主要就是将OneDriveUpdate.Update文件读取到内存,通过于自身硬编码抑或得到解密数据,该数据为一段shellcode。

1.CreateFile->ReadFile 函数组合将文件读取到内存
在这里插入图片描述
2.内存解密OneDriveUpdater.exe文件

在这里插入图片描述

在这里插入图片描述

3.3 注入shellcode到RunTimeBroker.exe进程

使用底层函数调用实现远线程代码注入,将解密出来的shellcode注入到进程RunTimeBroker.exe中运行。与常规远程代码注入不同的是,此恶意代码实现的注入没有调用上层API函数实现,而是借助底层函数,一定程度上绕过杀软的主动防御。

1.获取注入的目标进程,通过函数WTSEnumerateProcessesA获取到所有进程列表,遍历进程列表通过名称找到目标进程RuntimeBroker.exe,获取到进程信息。

在这里插入图片描述

2.通过映射内存方式将解密的shellcode映射到目标进程的内存中,再创建远程线程执行shellcode。

在这里插入图片描述
查看RuntimeBroker.exe进程,存在映射内存,属性为可读可执行,存储的数据正是解密的shellcode
在这里插入图片描述

3.4 shellcode执行,加载PE文件到内存,执行导出函数

shellcode中会一次一次的将硬编码的dll文件push到内存,随后获取导出函数的运行地址,创建新线程运行该导出函数

1.push大量数据到栈空间,该数据为 文件大小+去头DLL文件

在这里插入图片描述

在这里插入图片描述

2.解析内存中dll文件,获取导出函数的AddressOfFunctions以及FIRSTSECTION地址。

在这里插入图片描述
3.通过公式获取到导出函数在文件中的函数地址FOA

在这里插入图片描述
4.计算得出导出函数在当前内存中的地址

在这里插入图片描述5.在函数地址获取之前,获取到ntdll的模块基址

在这里插入图片描述

6.基于ntdll基址进行导出函数表遍历,进行传入hash的对比,匹配到即找到目标地址,找到目标地址后,会进行函数安全性检测,也是在函数层面进行杀软的对抗。
在这里插入图片描述
7.函数安全性检测主要进行软件断点|HOOK与否|CRC三个维度的检测。每个后续执行的函数都要确保杀软没有进行监控。
在这里插入图片描述

8.根据PE文件的SizeOfImage申请对应大小的空间,将PE文件写入到申请的空间,再将PE头信息去除,防止杀软的内存扫描,最后调用函数 NtCreateThreadEx 创建新线程,新线程的回调函数就是dll文件的导出函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 反射加载dll文件

在dll文件的导出函数中,会模拟PE加载流程,将内存中的文件模式PE加载成为执行模式,也就是dll反射加载技术。

1.定位PE头,获取当前代码位置,回退0x3BF大小内寻找0x4550,也就是定位PE头

在这里插入图片描述

2.获取后续使用的函数,并且检测这些函数是否被杀软监控
在这里插入图片描述
3.调用函数ZwAllocVirtualMemory根据SizeOfImage申请对应大小的空间,之后先将PE文件头部拷贝到申请的内存中。

在这里插入图片描述
4.将区段从文件读取到内存中

在这里插入图片描述
5.导入表载入和修复

在这里插入图片描述
6.重定位表修复

在这里插入图片描述
7.初始化栈帧,调用OEP,开始运行恶意dll文件。

在这里插入图片描述

4. 小结

文章上篇记录恶意代码的载体行为,主要涉及文件运行流程和运行过程中如何防止杀软查杀,此相当于一个载体,将真正的恶意代码运载到目标机器,并确保恶意代码运行达到预期效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值