某型勒索软件分析(一):软件架构动态分析
(之前一直从事逆向工程工作,对二进制安全的了解不多,写的不好或者研究的不够深入希望各位大佬见谅。)
背景:样本来源、威胁未知;使用工具为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,操作更方便哦
某型勒索软件分析(二):软件算法调试分析
(本来想到此打住的,没想到被版主催更了,那我索性就写完后面代码分析的过程吧。)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-11-3 15:49
被zhuhelin1997编辑
,原因: 主题编辑有误