- A+
前言
在应急响应的过程中,客户反馈深信服防火墙AF 报告客户服务器僵尸网络警告,服务器试图解析恶意域名msupdate.info。于是客户使用360,火绒剑等杀毒软件均没有发现异常现象。于是求助我,遂有此文章。
病毒virustotal.com的报告,可以看到很多国内厂商依然无法检出:
SHA256: c765ba5eedcd87b6f98eb503df640f5a8b077d3a30f02c6019feec1b5a553981
文件名: cspsvc.exe
0×00 day1
接到应急,远程登录一把梭,netstat -ano 查看异常外连,由于病毒发起的外连已经被深信服防火墙AF所拦截,重点关注SYN_SENT和TIME_OUT,经过排查。并未发现异常外连,于是通过process hacker 查看异常进程。然而也没有发现异常进程,也没有挖矿进程占用大量的cpu资源。于是排查一度陷入江局。
这时候束手无策的我只能上微软闭环工具sysmon 对系统进行监控。观察病毒的一举一动。
sysmon需要安装使用:
sysmon.exe-accepteula –i -n
0×01 day2 收获日
昨天种下一颗种子,今天就是收获日啦。
深信服防火墙AF依然在报僵尸网络,不过已经拒绝了:
查看sysmon日志,根据深信服下一代防火墙AF报僵尸网络的时间果然找到可疑的点。
可以看到服务拉起了一个可疑文件。
接着排查发现它拉起一个可疑powershell脚本,以服务的方式启动。
接着这个ps脚本执行。
这个脚本还利用注册表生成了一个用户名为adm:
至此,我们已经找出了挖矿程序。查看ps脚本就可以看到他的钱包地址:
0×02 分析
首先看cspsvc.exe文件:
cspsvc.exe 是启动程序用于加载ps脚本程序。
ps脚本是一个内容丰富的木马也是主要的程序:
可以看到脚本提供了丰富的命令行参数,我们之前看到的就是SCMStart。
接下来使用:
$argv0 = Get-Item $MyInvocation.MyCommand.Definition
获取了命令行参数执行相关操作:
程序获取了登录名,默认启动setup:
setup里面包含了编译了一个c#文件的功能:
由
$exeName = "$serviceName.exe"
$exeFullName = "$installDir\$exeName"
可知编译的文件就是我们发现的cspsvc.exe
接着就从C:\Windows \fonts\arial\config.xml或者C:\Windows\SoftwareDistribution\config.xml 读取配置文件,不存在就新建了一个fonts\arial\ 目录:
写入配置后并拷贝一份:
继续往下看发现了主要执行的Service:
发现执行了一处加密内容。
加密内容为一个新的powershell脚本。可以看到它新建了一个adm的用户。密码是从之前的配置文件中读取的密码:
从域名msupdate.info通过 网络下载矿机:
接着释放又释放了一个加密的ps脚本:
结合通过autoruns发现计划任务GpCheck.ps1计划任务,和下面的写操作可以发现该脚本写入位于system32\drivers\en-US\GpCheck.ps1 的该文件:
0×03 清理病毒
停止服务Cryptographic Service Providers
删除计划任务 GpCheck
删除C:\Windows\System32\drivers 目录下cspsvc.exe、 cspsvc.ps1、cspsvc.pdb 文件
删除 注册表项cspsvc
删除C:\Windows\SoftwareDistribution\config.xml
删除 adm用户
删除C:\Windows\Fonts\arial
删除 C:\Windows\Fonts\Logs
删除 C:\Windows\Fonts\temp
删除 C:Windows\system32\drivers\en-US\GpCheck.ps1
删除 C:Windows\system32\drivers\ WmiPrvSE.ps1
0×04 后记
此次由于防火墙的存在成功阻挡了恶意程序下载挖矿程序进行挖矿。并及时警报客户,使得客户业务没有受到影响。
对于此木马的分析只是浅显的分析了下,主要是想分享一下这种没有执行成功的挖矿病毒如何排查的经验。希望能够抛砖引玉。