首页
社区
课程
招聘
[原创]某型勒索软件分析
发表于: 2020-10-30 16:17 6170

[原创]某型勒索软件分析

2020-10-30 16:17
6170

某型勒索软件分析(一):软件架构动态分析








(之前一直从事逆向工程工作,对二进制安全的了解不多,写的不好或者研究的不够深入希望各位大佬见谅。)



背景:样本来源、威胁未知;使用工具为ollydbg、idapro;



分析过程:



step1



静态架构分析,主要用于分析代码的逻辑结构,将样本同时载入idapro和ollydbg,跟入oep,进入功能主函数。

其功能主函数为sub_403060;

功能主函数地址004035C8处调用函数00401470,通过ldr获取kernel32.dll;

功能主函数地址004035D8处调用函数00401890,传入kernel32模块句柄,解析dll导出表,获取LoadLibraryA函数;

功能主函数地址0040363A调用函数00401890,传入kernel32模块句柄,解析dll导出表,GetCurrentProcess函数;

功能主函数地址0040369E调用函数00401890,传入kernel32模块句柄,解析dll导出表,VirtualAllocExNuma函数;

功能主函数地址004037AB调用函数0040F3D0;

函数0040F3D0通过之前获取的LoadLibraryA与GetCurrentProcess载入需要的函数,并以挂起的形式创建子进程,同时通过WriteProcessMemory将二进制数据写入创建的子进程(后期分析发现该步骤用于重组子进程PE,且LoadLibraryA与GetCurrentProcess获取的函数地址用于修复子进程导入表,该步骤参基于Windows加载dll时会将dll放入相同的内存镜像地址);

地址0040BB57通过GetThreadContext获取CONTEXT,并通过0040C082地址处SetThreadContext修改CONTEXT的eax为新的oep,此处可查询函数RtlUserThreadStart参数信息,其第一个参数eax为用户主线程的入口点,也就是oep;

ResumThread后启动子进程;



主函数详情:


获取线程上下文:

设置线程上下文

获取线程上下文(高亮处为线程上下文,eax为004127C7)

设置线程上下文(高亮处为线程上下文,eax为0040FBA0)







step2



通过step1,已经对该程序的功能架构和防护模式有了大体的了解:以主进程的作用更多的是做为一层壳,在通过WriteProcessMemory和SetThreadContext等操作重组了子进程之后就会退出,而具体的任务就会交给子进程。因此,我们只需要在子进程进行附加调试就可以了,在进行附加调试的时候,需要注意两个问题:

不要使用win10作为调试环境,否则样本的一些功能似乎无法正常实现;

附加调试应该选在ResumThread执行之前,但如果此时主进程处于调试状态,子进程无法调试,应该是子进程继承了调试属性,将主进程执行ResumThread的地址修改成int3就行了,此时子进程的名称为ntdll(step1提过主进程修改了子进程模块);


附加调试后,线程信息如下(eax为0040FBA0,验证step1的猜想):


单步执行,跟踪到程序在下图地址读取临时文件夹内容,并判断是否为“ended”,因为之前调试过,所以的电脑该文件内容为“ended”,如下图所示:



f9运行,程序界面启动,此时我们确定其为勒索病毒,如下图:







step3



此时我们删除临时文件夹中保存“ended”字节的文字,step2中,我们确定该“ended”标志用于判断文件是否已经被勒索病毒加密,并重新附加调试该程序。由于总所周知的原因,勒索病毒主要通过加解密文件勒索被控制计算机,因此这次我们只需要在文件读写API下断点即可。




其中如图所示的部门,猜测应该为白名单文件类型,病毒感染可执行文件的意义不大:


继续跟踪,我们发现程序有重新启动了一次子进程,如下图所示:




此时我们跟踪查看临时文件夹,发先文件写入了一串数字,猜测是控制过程或者是中间密钥,如下图所示:



继续附加调试子进程,此时程序开始进行文件读写操作,和我们之前猜测的类似,程序开始遍历驱动器和文件夹。


遍历驱动器:



遍历文件夹:




在加密文件之后,程序运行了一条shellcode删除卷影副本,如下图所示:






总结


由于动态调试主要用于分析程序的功能和架构,在step3中,我们已经定位到了算法的代码,后面的分析就留到dump镜像之后再做静态还原分析,由于时间的原因,我还没有做,后续抽时间更新。


文件链接如下:其中test_int.exe在NtResumeThread调用地址处下断点,使用该程序进行动态调试。


链接: https://pan.baidu.com/s/1PHhzBXjfLzTSTlkNkoXSgQ 提取码: jqyz 复制这段内容后打开百度网盘手机App,操作更方便哦






某型勒索软件分析(二):软件算法调试分析


(本来想到此打住的,没想到被版主催更了,那我索性就写完后面代码分析的过程吧。)




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-11-3 15:49 被zhuhelin1997编辑 ,原因: 主题编辑有误
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 26588
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
由于篇幅不长,建议第2节以跟帖形式发此帖,版主会跟据文章详细程度和质量来设精华优秀。
2020-11-2 10:23
0
游客
登录 | 注册 方可回帖
返回
//