远程木马创建傀儡进程分析
@TOC
点击链接,下载本实验项目以及相关工具,提取码:8189
一、实验目的
该样本具有一定的免杀性,分析该样本都用了什么技术,能达到免杀效果,所以本次实验目的如下:
(1)分析该样本运行流程
(2)提取该样本的关键技术,研究免杀原理。
二、实验描述
分析样本,MD5是997CF4517EE348EA771FD05F489C07FE,分析该样本的运行流程,我们需要调试傀儡进程,修复dump出来的傀儡进程,手工脱UPX壳,修复导入表。
三、实验目标
-
先将样本放到火绒剑里运行一下,了解样本A大概执行流程
-
dump出的傀儡进程为B程序,修复后的傀儡进程为C程序
-
傀儡进程带有UPX壳,手工脱UPX壳,并修复导入表为D程序
-
分析修复后的傀儡有个加载资源的操作,该部分数据是PE格式,dump出来另存为E程序,发现是.net带有混淆的代码,需要反混淆操作
-
调试反混淆后的程序,分析发现其为远控木马,下载相应服务器端,研究该木马的功能。
四、实验环境
主机终端:win7 32位
资源:
Visual Studio 2013
010editor.exe
火绒剑.exe
OllyDbg.exe
样本
dnSpy.exe
de4dot.exe
pchunter.exe
NanoCore RAT Cracked.zip
五、实验原理
1、本样本逃过层层安全产品最终能落地到客户终端,由于其具有一定的免杀性,研究后发现关键技术是通过创建傀儡进程的形式实现启动恶意代码,也就是说恶意代码部分蜷缩在原程序中,通过创建傀儡进程的形式将恶意代码加载到内存中并运行。我们看下创建傀儡进程的方法:
(1) 通过CreateProcess以CREATE_SUSPENDED方式创建一个进程。
(2) GetThreadContext获取挂起进程CONTEXT。
(3) ZwUnmapViewOfSection卸载挂起进程内存空间数据;
(4) VirtualAlloc分配内存空间;
(5) WriteProcessMemory将恶意代码写入分配的内存;
(6) SetThreadContext设置挂起进程状态;
(7) ResumeThread唤醒进程运行
2、傀儡进程dump出来后需要进行修复,我们dump出来是程序拉伸后的状态,需要把文件偏移改为内存偏移
3、本程序涉及到UPX脱壳,手工脱壳后需要修改导入表,因为导入表在壳子里,我们把壳子脱掉了,导表表就没有了,需要将壳子程序的导入表赋值到脱壳后的程序中。
六、实验步骤
1. 火绒剑里运行一下,了解样本行为,发现该样本创建傀儡进程B
将样本托拽到火绒剑运行,排除掉一些不关心的动作,比如打开注册表,获取键值等操作。
发现两个问题,原程序创建了傀儡进程B,傀儡进程B将自己复制了一份命名为tcpmgr.exe并通过修改注册表启动项实现持久化。
2. Dump出傀儡进程B
关闭火绒剑,打开pchunter,点击“进程”,将所有grp-ps.exe进程停掉
用OD打开程序,Ctrl+G 输入ResumeThread,双击该API函数,F2下断,运行程序在唤醒进程前将程序断下来
在样本运行的时候会多次被断下,但只有一次断下来的情况是我们需要的。我们打开火绒剑,清空所有项,在OD中点击红色右箭头让程序运行起来。火绒剑和OD同时调试,找到ResumeThread唤醒傀儡进程的那次操作。
对照看火绒剑的日志,发现第六次断下就可以用pchunter工具dump傀儡进程了
打开Pchunter工具,dump出傀儡进程,如果pchunter工具没有目标进程,可以进行刷新
找到傀儡进程
点击傀儡进程,右键,依次选择“查看-查看进程内存”
选择具有可读可写可执行的模块,点击Dump,将傀儡进程B存放于桌面
3. 用lordPE工具打开傀儡进程B进行修复,修复后的程序为C
LordPE工具打开傀儡进程B,点击“区段”
修复前
分别选中需要修改的行,右键“编辑区段”
由于dump出来的是傀儡进程的在内存中的拉伸状态,我们需要将其文件偏移改为内存偏移,编辑后如下:
退出lordPE工具,将修复后的傀儡进程B重命名为C
4. 复后的傀儡进程C有UPX,手工脱UPX壳,存为程序D
用PEiD打开修复后的傀儡进程C,发现有UPX壳。
(2)接下来就是手脱UPX壳,手脱UPX壳的方法有很多,大家可以网上找下相关资料,本实验用的是ESP定律法(到此步可以关闭所有打开的工具了)
OD打开修复傀儡进程C,单步执行1次,在esp处右键“数据窗口跟随”
设置断点
让程序运行起来,断下来后,观察程序有个大的jmp,在jmp语句按回车健,跳转过去
找到入口后,用OD插件,将程序dump出来
脱壳,将入口地址填到“入口地址修正为”的地方,点击获取EIP为OEP,重建输入表的选项是默认的不用动,点击脱壳,存到桌面为D.exe
将其用火绒剑打开,修复后的程序可以正常运行,关闭掉所有工具,pchunter停掉进程
5. IDA结合OD对D程序进行分析,发现了D**.exe****有加载资源的操作,加载进的内容是一个PE格式数据**
IDA打开D.exe观察imports表,有个函数LoadResource比较敏感,双击该API函数名称
查看引用该API函数地地方,ctrl+x,双击第一条语句跳转过去
在IDA中进程代码分析,发现该程序有个加载资源的操作,他加载什么到内存了,记录地址“0x00440085”[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhi4rdhY-1628232006799)(file:///C:\Users\LIPENG~1\AppData\Local\Temp\ksohtml16580\wps25.jpg)]
图 25 IDA 分析代码
用OD打开D.exe程序,在“0x00440085”下断,让程序跑起来
程序断下来后,单步执行,eax记录了加载资源的地址,右键数据窗口跟随发现是一个PE格式的文件,我们需要对齐进行分析
6. 我们需要对上面PE格式数据进行分析,发现为远控木马客户端
该PE文件在D.exe源程序中,可以用010edit进行拷贝,Ctrl+G,起始地址为47058,那么我们拷贝多少呢?我们需要virtuallAlloc下断看看开辟空间大小。
先在virtualAlloc地方F2下断,让程序重新跑起来,待程序断下来后记录开辟空间大小为32A00
继续执行程序,直到在LoadResource处断下
此处单步执行,看资源地址为“0x00447058”
010editor打开D.exe程序,ctrl+shift+A,输入开始地址和大小
选择“edit-copy as-copy as hext text”,拷贝数据
新建一个16进制格式的文件
将上步复制的数据粘贴进去
将文件另存为E.exe
将E.exe用火绒剑打开,检查是可以正常运行的
7.分析E.exe程序功能
将该程序用PEid打开,使用C#编写
使用dnSpy调试E.exe程序,发现被混淆了,而且发现该程序为Nano Client客户端,是一个远控程序,找到对应版本的服务器端,为了便于后续测试。
使用de4dot工具进行反混淆。
dnSpy调试反混淆后的程序 E-cleaned.exe,先删除之前加载的程序
打开E-cleaned.exe
在IP地址和端口设置的函数地方下断点,大家可以对这个程序进行分析
8.根据程序行为修改服务端程序的ip和端口
用火绒剑检测到该程序有个外联191.101.22.13:4110,
修改本机地址为“191.101.22.13”,启动并设置服务器端的NanoCore,设置监听4110端口,发现客户端马上就上线了。修改本机IP
启动服务端,进行端口设置
查看客户端
研究该木马功能
程序大概的运行程序如下
1、该程序通过创建傀儡进程的方法进行了免杀
2、傀儡进程dump出来后需要进行修复
3、修复后的程序需要手动脱UPX壳
4、对脱壳后程序进行分析,发现具有加载资源的操作,该资源数据是PE格式
5、将这部分数据拷贝出来分析,发现其为远控木马的客户端,C#编写
6、调试该C#程序,先进行反混淆操作,简单分析该程序
7、修改本机地址为客户端外联的IP,下载远控木马服务器端,修改监听端口,客户端上线,发现该远控木马具有开关机等常规远控软件功能。
希望大家可以有所收货!!!
- 点赞
- 收藏
- 关注作者
评论(0)