首页
社区
课程
招聘
[原创]第一次病毒分析:利用傀儡进程隐藏的文件加密勒索病毒
发表于: 2018-1-12 22:30 13038

[原创]第一次病毒分析:利用傀儡进程隐藏的文件加密勒索病毒

2018-1-12 22:30
13038

第一次分析望大佬们指点!

使用检测平台:

检测报告:
图片描述

通过上图可以看出,卡巴斯基报加壳木马,Avast报Rootkit,国产的基本上都过了,哎!不好意思截图啊

图片描述

图片描述
可以看到在User/Documetns下创建了一个文件并释放了pe文件

图片描述
遍历文件夹,加密文件并且在每个文件夹下创建勒索相关图文信息

图片描述

通过执行监控可以看到, 创建了一个新的可执行文件,并且调用cmd,打开notepad写入文字信息,仅通过调用cmd就可以视为病毒行为,普通程序根本不需要调用cmd命令行工具

图片描述
这里可以明显的看出,释放了pe文件,并完成文件的自我复制,隐藏文件等操作,顺带着设置注册表自启动

重启之后,使用pcHunter查看,发现
图片描述
设置了勒索图文为启动项,更改了注册表,本身已经删除了病毒本身的程序,无法打开任务管理器和注册表编辑器

##动态分析1:获取真正的病毒样本

图片描述

首先用PEID进行pe文件的扫描,从字面的信息可以看出病毒程序是用 vc6写的,区段信息有点少, 但是也算正常,不像是加壳的样子

图片描述
刚加载到OD,看样子都是挺正常的,一般vc6 的oep处都有一个

这里有一个sub ESP,0x68,好像是挺正常的,但是,进入第一个call 之后,就会发现,整个都不一样了!!!
图片描述
使用了无边无际的混淆执行令,并且夹杂着跳转指令,实在是不好分析.
换个思路:通过火绒剑可以看到,在User/Documents文件加下会释放一个exe文件,虽然调用了cmd,但是也有可能是释放了之后马上创建了线程,下API断点

首先下CreateProcessA和CreateProcessW这两个常用的API断点,F9运行起来

在W版断下来了
图片描述
可以看到参数就是创建的自己,以挂机的方式创建
那么就需要ResumeThread 来恢复线程
图片描述
通过Process Explorer这个软件也可以看出确实是创建了一个同名进程

通常来说,以挂起的方式创建进程,常见的都会进行一些写内存的操作
这里下WriteProcessMemory 看看是不是跟猜想的一样
图片描述
这里发现断下来了,但是写入的目标地址是0x400000,如果没有关闭随机基址的话这是程序的加载基址

使用010 Editor 打开发现,这个程序没有开随基址
图片描述
也即是说写入的目标地址,本应该是对方的已经占有的空间
因为我写过傀儡进程加密壳,种种特征都吻合,这个很有可能就是使用了ZwUnmapViewOfSection脱掉目标进程的内存,然后重新写入数据,指定oep的傀儡进程(附录附傀儡进程的执行流程和之前写的代码demo)
再去看这个WriteProcessMemory函数的Buffer地址
图片描述
可以看出,这就是一个正宗的PE文件格式,正好写过,那这就好说了,在ResumeThread之前附加到新创建的进程,dump下来,然后在分析dump之后的文件

这个时候OD附加不上去了, 使用x32dbg自带的插件Scylla 可以dump一个创建的进程
在ResumeThread之前,把新创建的进行dump下来
图片描述
dump下来之后发现不能运行
图片描述
使用LordPE对照写入内存时的buffer有什么不一样的
图片描述
发现oep不对,更改之后可正常拖进OD
顺便使用PEID扫一下
图片描述
至此真正的病毒样本提取出啦了

首先通过上述的行文分析,发现释放了一个pe文件,解密勒索信息和网站等字符串之后,使用CopyFile拷贝了一份新的文件到c:User\Documents下,并对此可执行文件创建了一个线程

通过动态跟踪发现了病毒读取了当前进程的权限

获取了当前进程的SID

随后对进程了进行提权,权限为:SeDebugPrivilege

在病毒一个新起的线程回调函数中,发现了病毒删除备份的操作

这里可以看到,病毒启动了用于卷影复制的服务vssadmin.exe 并设置命令行参数Delete Shadows /All /Quiet 删除电脑上的所有备份

通过跟踪病毒的另外一个线程,发现这个线程主要的作用就是;

遍历进程

查找执行的进程

一旦发现符合的进程,调用ExitProcess退出

图片描述
设置键FIX 值为d5 ab 7d 4f a4 e7 d0 15

发现加密的key值的最前面和最后面是由这两个key值构成的

通过上面的汇编可以看出,创建了一个自启的项,虽然自启动的是cmd,但是制定了cmd的参数,是/C START """C:\Users\15pb-win7\Documents\xxhprj.exe
还是去启动病毒文件

首先获取了几个系统特殊路径,然后使用GetLogicDrivers获取了文件驱动的名称

对驱动类型进行判断之后就进行了文件遍历
进行简单的判断,先读取文件的前0x80个字节,判断是否有值,如果有就申请空间,读取整个文件的内容,然后对以下格式的文件进行加密。
对于目录文件创建文本和勒索图文信息

当对文件加密完毕之后,调用了WNetOpenEnum进行网络枚举

对文件加密之后,调用ShellExcuteEx,打开桌面存有勒索信息的文本文档和图片

使用WireShark抓到的数据包如下
图片描述

服务器现在还在线!!!

傀儡进程是近年来常见的恶意代码隐藏自身的方法,主要的处理方法是在ResumeThread之前,dump出内存,对dump出的内存进行调试

通过virustotal扫描可以看出,恶意代码加混淆可以过掉国内大多数的杀毒软件

以挂起的方式创建一个进程,一般都是系统信任的进程,比如IE,也可以是自己;

GetThreadContext获取挂起进程CONTEXT,其中,EAX为进程入口点地址,EBX指向进程PEB;

ZwUnmapViewOfSection卸载挂起进程内存空间数据;

VirtualAlloc分配内存空间;

WriteProcessMemory将代码写入分配的内存;

SetThreadContext设置挂起进程状态;

ResumeThread唤醒进程运行。

把exe文件作为一个新的区段通过加壳器加到下面这个文件的最后一个区段
注:为了快点测试,被加壳的PE是LoadLibray拉伸好的

 
 
 
 
 
 
 
 
 
 
 
勒索病毒

大小: 327680 bytes
MD5: DBD5BEDE15DE51F6E5718B2CA470FC3F
CRC32: 1386DD7A
SHA1:863F5956863D793298D92610377B705F85FA42B5

样本地址:链接: https://pan.baidu.com/s/1brk4zYv 密码: v4cm

解压密码:cole.science
win7 x32 sp1
        virustotal
sub esp,0x58
00127844   75A151E6  /CALL 到 CreateProcessW 来自 shell32.75A151E0
00127848   00357D5C  |ModuleFileName = "C:\Windows\system32\cmd.exe"
0012784C   00354170  |CommandLine = ""C:\Windows\system32\cmd.exe" /c DEL C:\Users\15PB-W~1\Desktop\1_dump.exe >> NUL"
00127850   00000000  |pProcessSecurity = NULL
00127854   00000000  |pThreadSecurity = NULL
00127858   00000000  |InheritHandles = FALSE
0012785C   04080410  |CreationFlags = CREATE_NEW_CONSOLE|CREATE_UNICODE_ENVIRONMENT|CREATE_DEFAULT_ERROR_MODE|80000
00127860   00000000  |pEnvironment = NULL
00127864   0033EBA0  |CurrentDir = "C:\Users\15pb-win7\Desktop"
00127868   001278AC  |pStartupInfo = 001278AC
0012786C   003560A8  \pProcessInfo = 003560A8
00410780  |.  50            push eax                                                                ; /phToken = 0012FDB8
00410781  |.  6A 08         push 0x8                                                                ; |DesiredAccess = TOKEN_QUERY
00410783  |.  FF15 D4004200 call dword ptr ds:[<&KERNEL32.GetCurrentProcess>]                       ; |[GetCurrentProcess
00410789  |.  50            push eax                                                                ; |hProcess = 0012FDB8
0041078A  |.  FF15 10004200 call dword ptr ds:[<&ADVAPI32.OpenProcessToken>]                        ; \OpenProcessToken
00410790  |.  85C0          test eax,eax
00410792  |.  75 0B         jnz short dpwapa.0041079F
00410794  |.  FF15 90004200 call dword ptr ds:[<&KERNEL32.GetLastError>]                            ; [GetLastError
0041079A  |.  8945 FC       mov [local.1],eax
0041079D  |.  EB 75         jmp short dpwapa.00410814
0041079F  |>  8B55 F8       mov edx,[local.2]
004107A2  |.  8B3D 08004200 mov edi,dword ptr ds:[<&ADVAPI32.GetTokenInformation>]                  ;  advapi32.GetTokenInformation
004107A8  |.  53            push ebx
004107A9  |.  8D4D F4       lea ecx,[local.3]
004107AC  |.  51            push ecx                                                                ; /pRetLen = 043A62EB
004107AD  |.  56            push esi                                                                ; |BufSize = 770C0000 (1997275136.)
004107AE  |.  56            push esi                                                                ; |Buffer = kernel32.770C0000
004107AF  |.  6A 19         push 0x19                                                               ; |InfoClass = 25.
004107B1  |.  52            push edx                                                                ; |hToken = 071F947D
004107B2  |.  FFD7          call edi                                                                ; \GetTokenInformation
004107B4  |.  8B1D 90004200 mov ebx,dword ptr ds:[<&KERNEL32.GetLastError>]                         ;  kernel32.GetLastError
00410803  |.  6A 00         push 0x0                                                                ; /Subauthority = 0x0
00410805  |.  51            push ecx                                                                ; |pSID = 0065B4E8
00410806  |.  FF15 0C004200 call dword ptr ds:[<&ADVAPI32.GetSidSubAuthority>]                      ; \GetSidSubAuthority
0041080C  |.  8B10          mov edx,dword ptr ds:[eax]                                              ;  获取当前进程的运行权限
0041080E  |.  8B45 08       mov eax,[arg.1]                                                         ;  edx= 进程运行权限
00410811  |.  8910          mov dword ptr ds:[eax],edx                                              ;  这里保存的当前进程的运行权限

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-2-1 15:53 被admin编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (6)
雪    币: 1355
活跃值: (339)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
2
感谢楼主分享,期待更多好文章。
2018-1-13 20:40
0
雪    币: 5318
活跃值: (3714)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
3
楼主幸苦了
2019-1-31 11:23
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
毅力真强 
2019-2-11 08:57
0
雪    币: 217
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真厉害
2019-5-1 15:36
0
雪    币: 60
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
厉害
2020-7-27 14:42
0
雪    币: 1282
活跃值: (1342)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
太棒了 学到许多
2020-7-27 19:17
0
游客
登录 | 注册 方可回帖
返回
//